> For the complete documentation index, see [llms.txt](https://help.rhythms.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.rhythms.ai/goals-and-okrs/creating-goals/import-okrs-from-a-spreadsheet.md).

# Import OKRs from a spreadsheet

To load many OKRs at once, attach a CSV or Excel file to a chat message and ask Rhythms to import it. Rhythms validates the whole file first, shows you one summary of what will be created and what needs fixing, and imports everything in a single step once you confirm. Imported goals land in a new view named "Imported ‹date›: ‹description›". Use this for migrating from another tool, starting a cycle from a planning spreadsheet, or onboarding a team with a prepared structure.

## Prepare the file

Use the column layout below, one row per goal. Files with different headers usually still work because Rhythms reads them with AI, but matching the template avoids questions.

| Column                  | Required | What to put in it                                                                                                                                 |
| ----------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| **ID**                  | Yes      | Any unique value within the file (1, 2, 3 or obj\_1, kr\_1). Used by Parent ID.                                                                   |
| **Type**                | Yes      | `Objective`, `Key Result` or `Initiative`.                                                                                                        |
| **Title**               | Yes      | The goal title.                                                                                                                                   |
| **Owners**              | No       | Email addresses, comma-separated. Must be existing workspace members unless you have permission to invite users.                                  |
| **Teams**               | No       | Team names, comma-separated.                                                                                                                      |
| **Description**         | No       | Optional context.                                                                                                                                 |
| **Parent ID**           | No       | The **ID** of the parent row. Leave blank for top-level Objectives.                                                                               |
| **Time Period**         | Yes      | The exact name of a time period in your workspace, for example `Q3 2026`. If the column is missing, name the period in your chat message.         |
| **Metric**              | No       | For Key Results. Leave blank and Rhythms infers name, unit, start, target and type from the title; or write it out ("Churn rate, stay below 5%"). |
| **Contribution Weight** | No       | Optional weight toward the parent's progress.                                                                                                     |
| **Labels**              | No       | Label names, comma-separated.                                                                                                                     |

Key Results always get a metric. When a title has a number ("Achieve 95% satisfaction from 75%") Rhythms builds a Reach to metric from it; "Keep churn below 5%" becomes Stay below; a title with no number becomes a 0 to 100 percent progress metric. See [Metric types for Key Results](/goals-and-okrs/creating-goals/metric-types-for-key-results.md).

## Import from chat

1. Open chat and attach the `.csv`, `.xlsx` or `.xls` file (paperclip, or drag it into the message box).
2. Say what you want: "Import these OKRs", "Import this spreadsheet for Q3; the hierarchy is in the Parent ID column", or "Import these as drafts".
3. Rhythms reads the file, matches owners, teams and time periods against your workspace, and validates everything without creating anything. This can take a few minutes for large files.
4. You get one summary: counts by type, the teams, period and owners involved, and any issues (unknown owners, teams you cannot create, duplicate titles). Quick replies such as **Proceed with Import**, **Assign all to me**, **Skip invalid OKRs** or **Cancel** let you resolve them; you can also ask for changes ("put all of these under the Growth team"). Each change is re-validated before you confirm.
5. Confirm. Rhythms creates the goals and tells you when the import is complete, with a link to the new view.

## What happens during the import

* Entities are created in dependency order: users, teams, time periods, then OKRs with their parent links, owners, teams and metrics.
* Existing users (by email), teams and time periods (by name) are matched, not duplicated.
* The import runs as one transaction. If a row fails validation during the real import, nothing is created and you get the error list; there are no partial imports.
* Rows whose title matches an existing goal of the same type are flagged as potential duplicates in the summary, but are still created if you proceed. The importer never updates existing goals.
* Large files are processed in batches internally; a 250-row file (50 Objectives, 100 Key Results, 100 Initiatives) imports in one go but takes longer than a small one.

## Drafts or published

By default imported goals are published and visible according to their visibility setting. Say "import as drafts" to create them with Draft status instead; drafts are visible only to their creator, owners and owning teams until published. Publish them one by one from the goal's **⋯** menu (**Publish**, or **Request Approval** when the approval workflow is on), or ask chat to publish the whole imported set.

## After the import

* Open the "Imported …" view to review the hierarchy, owners and metrics; see [Using Views](/goals-and-okrs/monitoring-and-reports/create-and-share-okr-views.md).
* Connect Key Results to live data with [auto-updates](/connectivity/connectors/set-up-automatic-updates-from-a-connector.md).
* Check the [check-in rhythm](/workspace-settings-and-administration/customize-rhythms-settings/set-a-workspace-check-in-rhythm.md) the goals inherited.

## Frequently asked questions

**Is there a maximum number of rows?** There is no fixed limit. Files of a few hundred rows are routinely imported; the larger the file, the longer validation takes because Rhythms works out a metric for every Key Result.

**Can I import a multi-level hierarchy?** Yes. Point each row's **Parent ID** at the ID of its parent row; Objectives under Objectives, Key Results under Objectives and Initiatives under either all work, subject to your OKR model.

**What if an owner is not in the workspace?** The summary lists them. Correct the email, reply **Assign all to me** and reassign later, or invite the people first if you have permission.

**Can I update existing goals from a spreadsheet?** No. The importer only creates. Edit existing goals in the app or ask chat to update them.

**I am migrating from Viva Goals.** Rhythms Admins have a dedicated Viva Goals import under **Settings › OKRs › Import Data** that reads the Viva export directly, including users and check-in history; use that rather than converting the export to this template.

## Related articles

* [Create OKRs and initiatives](/goals-and-okrs/creating-goals/create-okrs-and-initiatives.md)
* [Draft OKRs with AI](/goals-and-okrs/creating-goals/draft-okrs-with-ai.md)
* [Metric types for Key Results](/goals-and-okrs/creating-goals/metric-types-for-key-results.md)
* [Using Time Periods to Align OKR Cycles](/workspace-settings-and-administration/customize-rhythms-settings/set-up-time-periods.md)
* [Exporting OKR Data from Rhythms](/goals-and-okrs/monitoring-and-reports/export-okrs-to-csv-word-or-powerpoint.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://help.rhythms.ai/goals-and-okrs/creating-goals/import-okrs-from-a-spreadsheet.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `build a script that syncs our docs to a CMS` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
