Admin Guide · Setup
Imports and exports
Data Management moves your tenant's configuration and records as files, in and out, with results reported row by row. Scroll through the three tabs and what each one hands you.
- Tabs
- Choose
- Export
- Import
- Users
Scroll
Data Management, from the Administration page, is a single surface for three jobs: taking a copy of what you have configured, loading a prepared dataset, and bringing a list of people in from a spreadsheet.
The import file
Section titled “The import file”A transfer file is one JSON object with up to seven top-level sections, processed in this order:
customLists: the value lists fields and filters reference.itemTypes: record types and their field definitions.dashboards: dashboard definitions.items: an object keyed by item type slug, each value a list of item rows.workflows: workflow templates with their step definitions.workflowsAttached: running workflow instances, with their steps and linked items.itemRelationships: the links between items.
Order matters because later sections reference earlier ones: a custom list has to
exist before anything reads its values, an item type has to exist before its items
can import, and items have to exist before a relationship can join two of them.
You do not need every section in every file. A file can be an items update
alone, as long as the types and lists it depends on are already in the tenant.
{ "customLists": [ { "category": "issue-priority", "value": "high", "label": "High" } ], "itemTypes": [ { "slug": "issue", "name": "Issue", "fields": [{ "fieldKey": "priority", "label": "Priority", "fieldType": "SELECT" }] } ], "dashboards": [], "items": { "issue": [ { "title": "Example issue", "status": "OPEN", "fields": { "priority": "high" } } ] }}This example is illustrative rather than exhaustive: every section supports more settings than shown. See Item types and fields for the full set.
Running an import safely
Section titled “Running an import safely”- Start with a small test file, a handful of rows across the sections you are changing, not the full dataset.
- Use the slugs and field keys already configured. They are the join keys, and a typo creates a second thing rather than updating the first.
- Provide required fields on every row. A missing required field fails that row.
- Use stored values, not display labels, for
SELECTandMULTISELECTfields. See Custom lists. - Read the results, fix what failed, and re-run the corrected file.
Requests are size limited. Split a very large dataset into several files rather than sending one enormous request: by section, by item type, or by batch of rows, whichever divides your data most naturally.
Reading the results
Section titled “Reading the results”| Reported | Where |
|---|---|
| Created and updated counts | Every section. |
| Per-row errors with failure details | Every section. |
| Dangling relations | Additionally for itemTypes: a RELATION or RELATIONS field pointing at a type that is in neither the file nor the tenant. |
| Created and replaced counts | For dashboards, instead of created and updated. |
When not to use this
Section titled “When not to use this”Bulk export is built for configuration and modest data volumes, not large-scale analysis. To pull a lot of item data out for reporting, use query_data’s large-result export, which writes CSV or JSONL from a GraphQL query. That also lets you shape exactly which fields and which records come out, rather than exporting an item type wholesale.
