> ## Documentation Index
> Fetch the complete documentation index at: https://docs.getkato.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Bring your data into Kato

> Start with a small, clean set of data and choose a route that fits your workspace.

export const DocImage = ({src, alt, caption, kind = "workspace", thumbnail = false, natural = false}) => {
  const paths = {
    objects: "m12 3 9 4.5v9L12 21l-9-4.5v-9L12 3Z M3 7.5l9 4.5 9-4.5 M12 12v9",
    attributes: "M4 5h16 M4 12h16 M4 19h16 M8 3v4 M16 10v4 M10 17v4",
    records: "M5 3h14v18H5z M8 7h8 M8 11h8 M8 15h5",
    relationships: "M8 8H4v8h4 M16 8h4v8h-4 M8 12h8 M10 10l-2 2 2 2 M14 10l2 2-2 2",
    views: "M3 4h18v16H3z M3 9h18 M9 9v11 M15 9v11",
    importing: "M12 3v12 M8 11l4 4 4-4 M4 16v5h16v-5",
    workspace: "M4 4h16v16H4z M4 9h16 M9 9v11",
    navigation: "m5 5 14 5-6 3-3 6-5-14Z",
    team: "M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2 M16 4a4 4 0 0 1 0 8 M22 21v-2a4 4 0 0 0-3-3.87 M13 7a4 4 0 1 1-8 0 4 4 0 0 1 8 0Z",
    tasks: "M9 6h11 M9 12h11 M9 18h11 M3 6l1 1 2-2 M3 12l1 1 2-2 M3 18l1 1 2-2",
    meetings: "M4 5h16v15H4z M4 10h16 M8 3v4 M16 3v4 M8 14h3 M8 17h6",
    ai: "m12 3 2.5 6.5L21 12l-6.5 2.5L12 21l-2.5-6.5L3 12l6.5-2.5L12 3Z",
    automation: "M9 3h6v6H9z M3 16h6v5H3z M15 16h6v5h-6z M12 9v4 M6 16v-3h12v3"
  };
  return <figure className={["kato-visual", thumbnail ? "kato-visual--thumbnail" : ""].filter(Boolean).join(" ")}>
    {src ? <div className={["kato-visual-frame", natural ? "kato-visual-frame--natural" : ""].filter(Boolean).join(" ")}>
        {thumbnail ? <img src={src} alt={alt || ""} loading="lazy" decoding="async" /> : <a className="kato-visual-fullsize" href={src} target="_blank" rel="noreferrer" aria-label={`Open full-size image: ${alt || caption || "Kato guide"}`}>
            <img src={src} alt={alt || ""} loading="lazy" decoding="async" />
          </a>}
      </div> : <div className="kato-visual-frame kato-placeholder" role={thumbnail ? undefined : "img"} aria-label={thumbnail ? undefined : `Image placeholder: ${alt || caption || "Kato workspace"}`} aria-hidden={thumbnail ? "true" : undefined}>
        <span className="kato-orbit kato-orbit--outer" />
        <span className="kato-orbit kato-orbit--inner" />
        <span className="kato-visual-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.4" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true"><path d={paths[kind] || paths.workspace} /></svg></span>
        {!thumbnail && <span className="kato-placeholder-label">Image placeholder</span>}
      </div>}
    {caption && !thumbnail && <figcaption>{caption}{src && <span className="kato-visual-hint">Select the image to view it full size.</span>}</figcaption>}
  </figure>;
};

Moving information into Kato starts with a decision: what does your team need to
work on here? Choose a useful starting set, such as active clients or current
projects, and give it a clear home before adding more.

<DocImage kind="importing" alt="Data being brought into a Kato object" caption="Start with the data your team will use today." />

## Choose how to add data

| Route                  | Good for                                       | Where to begin                                                            |
| ---------------------- | ---------------------------------------------- | ------------------------------------------------------------------------- |
| Create records by hand | A few clients, projects, or other items        | Open an object and choose **New** followed by its record name.            |
| Import Timely projects | Projects from a connected Timely account       | Open Projects, then **Import / Export → Import from Timely**.             |
| Use the API            | A custom migration or repeatable external sync | Follow the [objects and records API](/api-reference/objects-and-records). |

<Note>
  Kato does not currently offer a general CSV upload flow. If your source is a
  spreadsheet, use it to prepare the data for manual entry or an API migration.
  The **Import / Export** menu includes CSV export of the current view.
</Note>

## Prepare a small sample

1. Choose the destination [object](/documentation/data/objects).
2. Match each source column to a Kato [attribute](/documentation/data/attributes).
3. Check names, dates, select options, and required values for consistency.
4. Identify records that already exist so you can avoid adding them twice.
5. Try a handful of records and check their values before continuing.

For example, an active-project spreadsheet might contain a project name, status,
and target date. Decide which attributes hold those details before moving the rows.

## Example: map a spreadsheet before moving it

Suppose the source has these columns. Build or inspect the destination attributes
before entering records or asking a developer to migrate them.

| Source column | Kato destination                         | Preparation                                                                |
| ------------- | ---------------------------------------- | -------------------------------------------------------------------------- |
| Project       | A writable name/text attribute           | Use a recognizable name and check for existing projects.                   |
| Stage         | A Select attribute                       | Normalize values such as “In flight” and “Active” into agreed choices.     |
| Deadline      | A Date attribute                         | Resolve ambiguous dates such as 04/05 before moving them.                  |
| Client        | A relationship to a client record        | Identify the corresponding client record; a text name alone is not a link. |
| Source ID     | Your migration's stable identity mapping | Keep the same mapping when updating the item again.                        |

Use a sample that includes a normal row, one missing an optional value, and one
with an existing client. These reveal different problems than testing three
perfect, unrelated rows.

## Check the sample before the full transfer

Open each sample record and compare it with the source. Check the status option,
date, client link, and any required fields. Then view it through the same table
or board the team will use. A successful API response alone does not prove that
the resulting structure is useful to readers.

For a repeated API sync, run the same sample twice using the intended stable-ID
strategy. Confirm it updates the intended records instead of creating a second
set. Keep a record of source IDs and Kato IDs so failures can be investigated.

If rows fail, separate formatting problems from access or schema problems.
Correct a value that does not match the field's type; inspect permissions or
field definitions when the destination itself is unavailable. Avoid retrying a
whole batch blindly when only a few records need correction.

## Import from Timely

The Timely import option appears for the Projects object when Timely is connected.
The dialog lists projects and marks those already imported. Review the selection,
choose the projects to bring over, and select **Import**. Associated clients are
created and linked as part of this flow.

Read the results after the import. If any projects report an error, inspect those
results before retrying. Open a created project to confirm that its details and
client link match what you expected.

## Plan an API migration

Have the person building the migration inspect your workspace's object and field
definitions first. Use a stable record ID for repeated updates, and test how missing
or invalid values are handled. The [record sync recipe](/recipes/sync-client-records)
explains the approach.

## Continue learning

<Card title="How your data fits together" icon="database" href="/documentation/data/how-data-connects">
  Understand the structure behind the records you add.
</Card>


## Related topics

- [Recipes](/recipes/overview.md)
- [Start with Kato](/introduction.md)
- [Introduction](/documentation/introduction.md)
- [Raycast](/integrations/raycast.md)
- [Changelog](/changelog.md)
