export_workspace, preview_import_file, import_file; confirmation-gated). Public MCP does not include those tools. You can still use Settings → Data & knowledge → Import & export for both the download and the restore. See Connect your AI (MCP).
The zip is only what import can recreate. Ledger, files, branding, forms, and integration secrets stay out.
Organization owners and admins with imports enabled see Settings → Data & knowledge → Import &
export. Click Download workspace there to get the zip. The same page restores it.
What is in the zip
The file is namedsoundcheck-workspace-<org>-<date>.zip.
CSV catalogs, in load order: Crew → Clients → Inventory → Venues → Songs → Setlists → Events → Leads. Clients, inventory, and venues are the same dependency tier.
The JSON document also carries what the CSVs can’t: projects, each gig’s project and affiliated projects (
project_ref, affiliated_project_refs), multi-day gigs’ end_date, each day’s phases and notes, each day’s run of show (cue names, local start and end times in the gig’s timezone, notes and the act performing; every day of a gig up to a year long is listed, with an empty run of show when it has no cues, so importing the file again clears cues removed since; a longer gig lists only the days that have phases, notes or cues), the acts themselves, and each gig’s shifts. A shift carries its title, position, seats, fee, fee type and currency, call window, notes and external id. When one call window cannot describe the shift (days with a gap between them, hours across several days, or a day with its own seats or rate), it also lists days, each with its date, call times, seats and rate, and a restore creates exactly those days. A shift created in Soundcheck is exported with the external id soundcheck:crew_offer:<id>, so restoring the file into the same workspace, or restoring it again, skips the shifts already there instead of adding copies. Its seats count the crew already on it, so the open seats come back as they were. Crew placed on a shift are invited in its position, and crew who accepted the shift’s crew offer in the app come back on it too. A fully staffed shift comes back as its crew, and its fee, call window and notes come back only while the shift still has open seats. Crew who declined or are on standby, and cancelled invitations, are not exported. Restored shifts come back as drafts, so they are not open to crew until you publish them from the gig’s staffing board. Gigs point at their venue and client by venue_ref / client_ref instead of repeating them. Each gig carries a ref (its external id, or the Soundcheck UUID when it has none), and a lead converted into a gig names that gig with event_ref, so a restore links the lead back to its gig. Each day’s run of show is written in clock order, counting days_later, so a day whose cues were reordered in Soundcheck restores whole. Crew with no position come back on a shift named Crew with no position, and are invited with none.
The manifest’s egress section identifies this as the workspace catalog-subset profile. It is not a complete operational backup: gear lists, ledger items, metadata, and provenance are excluded, and run-of-show cues carry only their name, times, notes and act (songs, attachments, durations and other cue fields stay behind). CSV flattens the catalog fields into catalog columns. Round-trip support applies only to supported fields and the identity rules below.
Identity uses an existing spreadsheet external_id when the writer already stored one. Otherwise the Soundcheck UUID is used. Inventory, venues, clients, events, and leads keep that identity in the UEF JSON. Inventory CSV also has an External ID column so drop-first restore rematches the same way. Songs rematch on title + artist. Crew rematch on email. Inactive crew rows are omitted so restore cannot reactivate them. Clerk memberships are not recreated from the dump. Import writes unclaimed roster rows and sends Clerk organization invitations for those emails. An exported Owner whose email is new to the destination is added as an unclaimed Admin and invited with Clerk org:admin, and the import warns that an Owner is imported as Admin. Only an Owner can invite an Admin, though. When the importer is an Admin, Finance, Gig Coordinator or Member, that Owner row is skipped instead: nothing is written and no invitation is sent, and the import warns that the Owner could not be invited as Admin because only an Owner can invite an Admin. The rest of the workspace still restores. An exported Admin is different: an importer who is not an Owner cannot assign that role, so the row is refused, and a refused row rejects the whole restore. Only an Owner can restore a workspace that has Admin members. If that email already belongs to a member of the destination, that member keeps their current role: a claimed member is left alone, and an unclaimed roster row keeps its role and is invited with that role. An unclaimed Owner row is the exception, because nobody can be invited as Owner: when the importer may not assign that role, it is left unchanged, with no invitation and no error. So do not restore into a real org if you do not want that person as an admin.
Money is exported only for a caller who can view finances (finance.view: Owner, Admin and Finance, or anyone with the finance access grant). Those callers get each member position’s day rate and default day rate, and each shift’s fee and fee type. Any other caller, such as a Gig Coordinator or a Member, gets the same dump without the day rates and the shift fees: no day_rate or default_day_rate in the JSON or in csv/members.csv, and no shift fee. A shift keeps its fee_type, because that is not money. The manifest’s egress.excluded_financial_data lists position_day_rate, position_default_day_rate and shift_fee as withheld for that export, so the dump says what it left out. A position’s default day rate fills in on restore where the destination’s position has none. A rate already set there is kept, so a restore never overwrites a negotiated rate. Lead budget, inventory replacement cost and daily rate, and crew performance fees stay out of the dump for every caller.
Export returns 413 when any catalog would exceed 50,000 rows or the uncompressed zip is larger than about 25 MiB. CSV cells that look like spreadsheet formulas are prefixed so Excel and Sheets treat them as text.
Reimport into a new org creates clean identities. A second pass upserts (0 new rows). Same-org reimport still matches natural keys when no spreadsheet identity exists.
Restore the CSVs (drop-first)
Settings → Data & knowledge → Import & export accepts spreadsheets, paperwork, and zips of them. It reads the eightcsv/*.csv files from the workspace zip and leaves manifest.json and uef/workspace.json out.
- Open Settings → Data & knowledge → Import & export.
- Drop the workspace
.zip(or the eightcsv/*.csvfiles:members.csv,venues.csv,customers.csv,inventory.csv,songs.csv,setlists.csv,events.csv,leads.csv). - Confirm the drop-first target review.
- Map, preview, and commit.
Restore the UEF document
On Settings → Data & knowledge → Import & export, use Import UEF document. Pickuef/workspace.json, or the workspace zip (Soundcheck reads uef/workspace.json from it). That calls POST /api/v1/organizations/:orgId/imports/uef with the document and commits it in one pass, skipping the spreadsheet mapper. A UEF 1.0 file from an older export is rejected; export again to get a 2.0 document. Bodies over about 25 MiB return 413.
What does not come back
These exist on the source org and are not in the zip, or the writer cannot recreate them:- Ledger, payouts, Stripe/Cleo, bank details, and catalog money fields (lead budget, inventory replacement cost and daily rate, crew performance fees), plus position day rates and shift fees for a caller who cannot view finances
- File blobs, contracts, call sheets
- Forms, onboarding, branding, notification history
- Integration tokens, Clerk secrets, webhook secrets
- Ledger items proposed by ingestion
- Event↔setlist links, inventory assignments, gear lists
- Run-of-show sections, and each cue’s songs, attachments and fields beyond name, times, notes and act
- Shift status. A restored shift is a draft whatever its status was, and open or filled shifts must be published again
- Invitation accepted-versus-pending state. Event-member import still creates invitation rows and a Clerk org invite; linking the invitation to an existing user happens when they join.
Related
Import your data
Drop-first wizard for CSVs and paperwork
Universal Event Format
JSON shape, including
source.type: "EXPORT"