Import OKRs from a spreadsheet
Last updated: September 4, 2026
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.
Import from chat
- Open chat and attach the
.csv,.xlsxor.xlsfile (paperclip, or drag it into the message box). - 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".
- 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.
- 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.
- 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.
- Connect Key Results to live data with auto-updates.
- Check the check-in rhythm 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.