/tenants/import),
titled Data Import System. Every import endpoint requires ADMIN_TENANT.

How the page works
The page is a numbered list, not a wizard: each entry is one import type. No column-mapping screen, no options dialog, no dry run. The file you upload is the instruction.1
Download the example CSV
The download icon on each step gives you a file with the exact column headers
that step reads.
2
Choose CSV
.csv and .txt, up to 50 MB. Comma, semicolon and tab are detected
automatically, and a UTF-8 byte order mark is stripped. A larger file is refused
on the spot with “File is larger than the 50 MB import limit”; split it and run
the parts one after another.3
Start Import
Validation and processing run in the background, in batches, so a large file
keeps going after you close the tab.
4
Watch the progress
A live percentage, refreshed every three seconds, with running counts of
successful, failed and skipped rows. The counts move one batch at a time
rather than one row at a time, so a file small enough to fit in a single
batch stays at 0% until it finishes.
5
Read the errors
Expand the row in Import History for per-row failures: row number, message
and raw row data. The first 20 are listed, with the total count underneath.
Orgo does not email you when an import finishes. Keep the page open, or come back
to the history table.
What you can import
Run the steps in the order below: each one can reference records the earlier ones created. Steps whose module is switched off do not appear at all.
The
*_legacy_id columns are the glue: your old system’s identifiers, stored on
the Orgo record, are how a later file says which event an attendance belongs to.
Keep them stable across all your files. Where a step accepts several column shapes,
give it legacy ids if you have them, or human columns like event_name and
event_datetime, and Orgo creates or links the event, product, price tier and
attendee for you.
Companies and Company Members check their required columns row by row rather than
upfront, so a file with the wrong headers starts, then fails every row.
Creating versus modifying
The first sixteen steps only create: a row matching an existing record counts as skipped and the record is left alone. Users match onuser_legacy_id first,
then on email. Contacts whose email belongs to an existing member are skipped by
design.
The last two steps, under the Modify existing records heading, update in place:
- Modify Users matches on
email, thenuser_legacy_id, thenphone_number, in that order. Modify Contacts matches onemail, thenphone. - An empty cell leaves that field unchanged. Only columns you fill in are written.
- A row that matches nothing falls back to creating a contact, provided it carries at least an email or a name.
- Usernames, passwords, permissions and API tokens can never be written by an import.
Custom fields
Any column that is not a recognised system column for that step becomes a profile custom field. If none with that name exists, Orgo creates one (text, visible on the profile) and stores the value, so custom fields need not exist before the import. A column namedcustom_field_123 writes to the existing custom field with that id
instead, which is useful when two of your fields share a label.
Rolling back
Every completed import has a Rollback button in Import History, until you use it once. For the create steps, rollback deletes the records that import made, in reverse dependency order, so nothing is left pointing at a missing parent. For Modify Users and Modify Contacts, Orgo stored a before-image of every row it touched: rollback replays those values, including custom fields, then deletes any contacts the fallback created. The whole rollback is one transaction, so it either completes or changes nothing.
Troubleshooting
The import failed immediately with zero rows processed
The import failed immediately with zero rows processed
Header validation. The message lists the columns the step needs and the ones
it found: check for a title row above the headers and for renamed headers,
then upload the corrected file.
Most rows came back as skipped
Most rows came back as skipped
Skipped means the record already exists, the expected result when you re-run
the same file. To update those records instead, use Modify Users or
Modify Contacts.
The import sits at 0% and stays on Processing
The import sits at 0% and stays on Processing
Progress is written when a batch finishes, so a minute or two at 0% is normal
on a file that fits in one batch. The slow case is a Local Centers, Units or
Users file whose town column names places Orgo has not seen before: each new
name is looked up against an external place-name service one row at a time.
Leave it running and reload the history table. If it is still Processing
after fifteen minutes with no counts, the batch did not finish and nothing was
written: split the file into smaller parts and run them one after another.
A column ended up as a custom field instead of the real profile field
A column ended up as a custom field instead of the real profile field
The header did not match a system column for that step. Built-in names are
snake_case (
first_name, phone_number, birth_date, town_residence), not
camel case. Compare against the example CSV, roll the import back, fix the
header, run it again.Can I import into a specific list?
Can I import into a specific list?
Yes, but not from this page. Open the list and use the CSV import inside it.
See Lists & Segments.
Related
- Adding Members - the other three ways people get an account
- Users & Profiles - what the imported members look like afterwards
- Merging Duplicates - cleaning up records an import doubled
- Custom Fields - the fields an import can create
- Lists & Segments - importing members straight into a list
- Contacts - the difference between a contact and a member

