Skip to main content
Load the roster, rooms, clients, songs, and gigs you already keep in spreadsheets. Map columns once, commit, then open those records and keep working. This is the start-here path for operators. For the shared JSON shape behind imports and partner feeds, see Universal Event Format. To clone a Soundcheck org back into import, see Export a workspace. For contracts and call sheets (not spreadsheets), see AI file ingestion. For a recurring CRM webhook, see n8n CRM sync.
Import wizard empty-state dropzone, then map columns, preview, and commit

Drop a spreadsheet, map columns, preview counts, then commit

Re-importing the same file is safe. Rows matched by natural key (or external ID, when the target supports it) update in place instead of duplicating. Staffing already on a gig (draft, open, or filled job offers) is skipped when the title, position, day, seats, and call window all match. Expired or cancelled offers leave openings a later import can still fill. Zero new rows on a second pass is your confidence check.

Before you import

  1. Be an organization owner or admin on the org you are loading. Settings → Connected apps → Import & export shows for owners and admins when imports are enabled for your workspace.
  2. Select that organization in the web app. Imports always write into the active org.
  3. Confirm imports are available. If you do not see Import & export under Settings → Connected apps, ask your contact to enable it.
  4. Download the target template from the wizard when you need a known-good column set (especially for Leads). Prefer the in-app template over guessing headers from an old CRM export.
If you only have a handful of gigs, create them under Gigs → Create gig instead of running a full import.

Where to go

In the web app, open Settings → Connected apps → Import & export. Empty-state Imports is drop-first: drop files on the empty state, then review detected targets. Do not lead with an older pick-target-first wizard. There is no Organized / Processing / Queued UI.
Older links to /imports still work; they redirect into Settings → Connected apps → Import & export.
From there you can:
  • Upload a file: .xlsx, .csv, .tsv, or .txt (up to 25 MiB)
  • Paste CSV, semicolon-separated, or TSV text (up to 8 MiB)
  • Drop several files at once for a season-style queue (the importer orders them: crew and rooms before gigs)
  • Drop paperwork such as PDFs, Word or PowerPoint files, and photos in the same drop. Imports does not write records from paperwork; those files are set aside while the spreadsheets import.
  • Drop a .zip of those files. Each zip can be up to 256 MiB, and the zips in one drop can add up to 50 files and 256 MiB unzipped between them. It is unzipped in the browser, and files Imports can’t read, such as JSON or nested zips, are left out with a notice. Zips from Google Drive or Dropbox are not supported yet; download and drop them instead.
There is no Google Sheets connector. Export from Sheets (or your CRM) to CSV/XLSX, then upload or paste. Workbooks with more than one sheet show a sheet picker after upload; switching sheets starts a new job from the same file. Each job allows up to 50,000 rows.

What to import, in order

Drop files first. The Imports page reviews each file’s target from the filename and headers, then you confirm and continue into map / review / commit. A single file whose name and headers agree on the type skips that confirmation and opens the mapping page directly. Import foundational lists first, then gigs: Optional extras (any time after the lists they depend on): An Events file can also list each gig’s gear (item name, quantity, and notes) in Gear item columns. When several crew rows share one gig, set row grouping to group_by_external_id on the Events mapping step so those rows collapse into one event with multiple members.

Coming from another system

There is no native Planning Center, Back On Stage, Master Tour (Eventric), Stagera, or LASSO / Shoflo connector. Export a CSV from that product (or reuse the Google Sheet you already used to load it), then import through Settings → Connected apps → Import & export using the order below. There are no in-product Coming-from cards. Full migration checklist and mapping traps: Coming from another system.

Planning Center (churches / house of worship)

There is no Planning Center connector. Export CSVs from Planning Center, then import through Settings → Connected apps → Import & export. There is no plan / order-of-service CSV from Planning Center. Build Setlists and Events (services as gigs) from the lists and schedules you already keep, or enter them after Crew and Songs are in. Import order: Crew (Services People) → Songs → Setlists → Events. Practice shape: docs/sample-imports/customers/house-of-worship/ in the repo (volunteer team, worship songs, service schedule).

Back On Stage (bands, bookings, members, setlists)

Back On Stage has no native export and no public API. Leaving BOS usually means reusing the Google Sheet templates you (or they) used to load the product. Download or copy those sheets (File → Make a Copy), then import through Settings → Connected apps → Import & export. Template URLs on docs.google.com may require a Google account (not public). Full Coming-from detail: Coming from Back On Stage. Verified Leader / Members headers (htmlview): Import order: Crew → Songs → Events. Academy/help path (not live BOS product UI): Import bookings, Build and share smart setlists. The BOS expense CSV is payouts history, not the gig calendar. Do not treat it as your Events file.

Master Tour / Eventric (touring)

There is no Master Tour connector. Export from Eventric, then import through Settings → Connected apps → Import & export. Map the tour-details CSV as Events, plus Venues and Clients (promoters). Import Crew from the Export Personnel CSV when you have it; use the personnel PDF only as a fallback to rebuild a Crew sheet by hand. Practice shape: docs/sample-imports/customers/touring-artist/ in the repo (tour personnel, routing, setlist). Full Coming-from detail: Coming from Master Tour / Eventric.

Stagera (AV / production)

There is no Stagera connector. Prefer UI CSV / XLSX (Crew, Jobs, warehouse inventory template). OpenAPI dumps are a customer export aid, not a Soundcheck connector. Full detail: Coming from Stagera.

LASSO / Shoflo (labor + rundowns)

There is no LASSO / Shoflo connector. LASSO ops CSVs have no fixed public column dictionary (use customer headers, Zapier, or swagger). Shoflo: rundown Export → CSV (Default Rundown headers documented on the Coming-from page). Full detail: Coming from LASSO / Shoflo. ShowOps / Umbrella stay BYO until a dump exists.

Wizard steps

1

Parse

Upload or paste. The wizard detects the format, normalizes headers, and samples rows for mapping. While a commit is in flight, the job is locked. Re-parses wait until commit finishes.
2

Map

Mapping is required before review. Each Soundcheck field is one row with the column it reads and two sample values. The wizard proposes column → field mappings (heuristic match, or optional AI mapping with PII scrubbed before any model call). Required fields that still need a column stay at the top, and Continue to Review stays off until each one has a column or a default. Open Options to change the import type, save the mapping for the next file with the same columns, or, for Events with one gig across several crew rows, set Row grouping = group_by_external_id. On Inventory, Venues, and Clients, a column you leave unmapped is saved with each record as extra data. On Crew, Events, Leads, Songs, and Setlists, it is not imported, and the Review step lists it. Crew columns are not kept because every crew member can see the roster.
3

Review

Dry-run before anything is written. The left panel lists Errors, Warnings, and Creates: every row whose action is create, plus the venues, clients, or positions those rows name that do not exist yet. The table shows every row with its action: create, update, duplicate, error, or skipped. You can search, filter, change the visible columns, edit a row, and uncheck rows you do not want. Notes such as “crew without email or phone” do not block the gig itself. The invitation is simply skipped. Commit writes the checked rows.
4

Results

Shows what was written. Each row gets an outcome you can audit (IMPORTED, UPDATED, DUPLICATE, FAILED, and related statuses). Imported gigs keep the status from your file. A row with no status, or one Soundcheck doesn’t recognise, imports as Active, unlike gigs you create in the app, which start as drafts.

When a row is bad

One bad row doesn’t block the whole file.
  • Valid rows commit even when other rows fail validation. Commit stays available as long as at least one row can be written.
  • Rows the review flagged as errors are skipped, and the job still finishes as committed. The Results step shows how many rows were imported, skipped, and failed.
  • The job finishes as PARTIAL only when a row the review accepted could not be written during the import. A PARTIAL job cannot be imported again; its written rows stay as they are.
  • You can download an error CSV with the original cells plus a reason, fix those rows, and upload it as a new import with just the corrections.

Possible duplicates

Two systems often name one show differently: “Harbor Night” in one export, “Harbor Night Live” in another. Soundcheck does not guess. When a row has no exact match and your org already has a gig on the same date at the same venue under a different title, the review flags the row as a possible duplicate and lists those gigs.
  • Merge the row into one of the listed gigs when it is the same show. The gig keeps its title, and the row’s other details update it the way an exact match would. A merge does not link the row’s external ID to the gig, so importing the same file again asks about that row again.
  • Create a new gig when it is a different show, such as a matinee and an evening show in the same room.
  • A row you leave unanswered is skipped. The rest of the file still imports, and the job still finishes as committed.
An exact match is a row with the same external ID as a gig, or with the same title and date. Exact matches update that gig without asking. Only a venue your org already has can match, and a gig scheduled for deletion is never listed. Rows in the same file are not compared with each other. Each answer covers the gigs you saw. If another gig lands on that date and venue before you commit, the row asks again, and the commit skips it until you answer. When row grouping turns several rows into one gig, the review asks about that gig once. Your answer covers every row of the gig. Over the API, a spreadsheet import sends the answers as duplicate_answers on preview and again on commit. A commit must send the answers its preview ran with, or it is refused with 409. An import file (UEF) import sends duplicate_answers in its one request. An unanswered possible duplicate returns 400 listing each unanswered row with the event_id and title of every gig it could be, so the caller can answer without another lookup. Each possible_duplicates entry lists the source rows of its gig in row_indexes. An answer on one of those rows answers the whole gig. If two rows of one gig carry different answers, the gig stays unanswered.

Dates in your file

Date columns accept these layouts:
  • Year first: 2026-07-11, 2026/07/11, 2026.07.11.
  • Dotted day first: 11.07.2026, 11.07.26.
  • Slashes or dashes: 7/11/2026, 07-11-26, 11/07/2026 (see the day-first rule below).
  • Month names in English, full or three letters, any case, with an optional weekday: July 11, 2026, 11 Jul 2026, 11-Jul-2026, 11-Jul-26, Jul-11-2026, 11/Jul/2026, Sat, 11 Jul 2026.
  • Excel date cells in any display format. The day comes from the cell’s value, not from how it is shown.
A date and time cell keeps the day as written. Time columns also accept 12-hour clocks (9:00 PM) and two-digit years as Excel writes them (7/11/26 21:30). Two-digit years use Excel’s pivot: 00 to 29 are 2000 to 2029, and 30 to 99 are 1930 to 1999. A workbook clock keeps its seconds when the cell’s number format shows them: hh:mm:ss, h:mm:ss AM/PM, [h]:mm:ss, or a date-time format with :ss. A time cell in one of those formats reads as 21:30:15, and a date-time cell reads as 2026-07-11T21:30:15. A format that shows only minutes reads as 21:30, and a date-time cell in one reads as 2026-07-11T21:30. Day first or month first. A slash or dash date such as 06/07/2026 can be read either way. Soundcheck reads every date in each column together, and each column has its own order. A cell is read in the order of the column it comes from, so a second column mapped to the same field cannot flip the first: a fallback column holding 25/07/2026 leaves a 06/07/2026 in the primary column as June 7. Every uploaded row of a column counts toward that column’s order, including a row you uncheck, so unchecking a row never changes another row’s date:
  • A cell whose first number is over 12 (25/07/2026) makes the column day first.
  • A cell whose second number is over 12 (07/25/2026) makes the column month first.
  • A column that shows neither reads these dates month first, so a lone 06/07/2026 is June 7.
  • A column that shows both is refused for its ambiguous cells (06/07/2026). The preview names the conflict. Cells that are clear on their own still import.
  • Only a cell that is a real date in the order it implies counts toward that order. 31/02/2026, 99/07/2026 and 15/13/2026 imply day first but are not real dates in that order, and 06/31/2026 implies month first but is not a real date in that order, so none of them can flip the column. Each is reported on its own field.
  • A date column mapped with a parse_date or parse_datetime hint (set by AI mapping or the API) first reads each value as that exact layout, so parse_date(YYYYMMDD) and parse_datetime(YYYYMMDD) read 20260711 as July 11 and parse_date(MM-DD-YYYY) reads 07-11-2026 as July 11. A shift call column with a parse_datetime hint that names a clock reads a call in that layout too: parse_datetime(YYYYMMDDHHmm) reads 202607112130 as 21:30 on that day, and a value that states only a day keeps the call on that day with no call time. Two-digit years in a hint follow the same pivot. A value that is not in that layout reads by the general rules in the hinted order, and a value that fits neither is an error on its field.
Excel serial numbers count as dates only from 1960-01-01 to 2099-12-31. A bare 2026 or 12 in a date column is an error, not a date. A value Soundcheck cannot read with certainty is reported on its field in the preview instead of being guessed. Lead and ledger dates in an ingested file are read by the same rules.

Money, currency and numbers in your file

Fee, performance fee, shift fee, replacement cost and daily rate cells accept:
  • Plain numbers: 1200, 1200.50, -450 or (450) for a negative.
  • Grouping with a comma, dot, space, no-break space, thin space or apostrophe: 1,200.50, 1.200,50, 1 200,50, 1'200.50, 1.250.000.
  • A decimal comma after one or two digits: 450,50 is 450.50. A comma before exactly three digits is grouping: 1,250 is 1250. A comma or dot before four or more digits is refused, because 1,2000 could mean 1.2 or 12000.
  • A dot before exactly three digits in a money cell is refused, because 1.200 could mean 1.2 or 1200. Write 1200 or 1.2.
  • A currency sign or code before or after the amount: $1,200.50, €1.200,50, 450,50 EUR, GBP 300, US$450. The signs read as € EUR, £ GBP, ¥ JPY and ₹ INR. A bare $ sets no currency. A three-letter code must be an ISO 4217 code, so SEK 450 and 450 eur work. Any other word next to an amount, such as Net 500, Fee 500, 500 max or XYZ 450, is a preview error on that cell.
  • One amount per cell. A range such as $500-600 or 500 to 600 is refused, and so is other text after a money amount.
The currency column takes an ISO 4217 code in any case (USD, eur, Eur), the same list that fee cells use, or euro, euros, pound, pounds, US dollar, US dollars or US$. A three-letter word that is not an ISO 4217 code is refused, so NET, MAX and XYZ are preview errors on that cell, as are € and Dollars. A row has one currency. If the currency column is filled, it sets the gig’s currency. If it is empty, the first money cell on that row with a sign or code sets it. A money cell on the row in a different currency is refused. Rows that merge into one gig (group by external ID) must agree too. A later row in another currency has each of its money values refused: the gig fee, each member’s performance fee and each shift fee is a preview error on its own field, and the rest of that row still merges. A later row with a different gig fee in the same currency is a preview error on that row, and the first row’s fee stays. Inventory costs and rates are stored in USD, so a euro or pound cell there is a preview error. Pasted text has no currency column, so a euro or pound amount in pasted text is refused as well; a spreadsheet upload or a currency column carries the currency. Counts such as capacity, quantity, tempo and song order must be whole numbers. 2.5 is an error, not 2. None may be negative, so -1 is an error too. A count or a song duration above 2,147,483,647 is an error, because that is the largest whole number Soundcheck stores. In each case the cell is left out and the rest of the row imports. Capacity also accepts words after the number (1,200 max). Shift seats and gear quantities must be whole numbers above zero: 0, 2.5 and two are preview errors. Coordinates take a decimal point or a decimal comma (40,7128). A comma before exactly three digits is a decimal comma here, not grouping: 40,712 is 40.712 and 1,250 is 1.25. Coordinates are never grouped, so the other reading would turn 0,150 into 150. Latitude must be between -90 and 90, and longitude between -180 and 180.

Delimiters, encodings and text files

Uploaded and pasted text is read from the file itself:
  • Delimiter. Fields are separated by a comma, a semicolon or a tab. Soundcheck looks at the first ten non-blank lines and counts each delimiter outside quotes. A tab wins when every sampled line has the same non-zero number of tabs, so a tab table whose header holds Venue, City stays split on tabs. Otherwise the semicolon or comma that splits every line into the same non-zero number of fields wins; if both do, the one with more fields wins, and on a tie semicolon wins. In a semicolon file, 500,50 stays one value. A file sent with a TSV content type (text/tab-separated-values) is always tab-separated.
  • Encoding. UTF-8 is read as UTF-8, with or without a byte order mark. UTF-16 with a byte order mark is read in the byte order the mark gives, big or little endian. UTF-16 without a mark is read as little-endian when every second byte is zero, which covers plain text saved as “Unicode text”. Any other file that is not valid UTF-8 is read as Windows-1252, which is how Excel saves CSV on Windows, so Café stays Café.
  • Refused. A UTF-16 file with no byte order mark that contains a character above U+00FF (Greek, Cyrillic, Japanese), a UTF-16 file with a stray byte at the end, and a file with NUL bytes that is not text each fail with an error. Save the file as UTF-8 CSV or .xlsx and upload it again. A legacy .xls workbook fails with “save as .xlsx or .csv”.
  • XLSX. A file is read as a workbook only when its bytes are a zip archive. A CSV sent with a spreadsheet content type, such as application/vnd.ms-excel, is read as CSV.
  • Leading whitespace. Pasted and uploaded text keeps its leading tabs and spaces. Only trailing whitespace and blank lines at the end are dropped. A header cell left blank is named column_ followed by its position. So a tab-separated paste whose first column has no header, with Name and Role after it and a row that starts with a blank cell, reads Alice under Name and DJ under Role.

Leads

A HubSpot-style export with only name / email / date / company is not enough for leads here. Required fields include:
  • Event type
  • Location
  • Deal stage
(plus the usual contact and date fields the mapper marks required) If required columns are missing, use the mapping step to:
  • Set a default for a required Soft field when every row should share a value
  • Choose Don’t import / ignore for columns you intentionally skip
  • Download the lead template CSV from the wizard and reshape your file
Re-importing the same email + event date updates a uniquely matching lead. When the import specifies a gig, it prefers a lead on that gig, then a unique lead not yet linked to a gig; it never moves a lead from another gig. Without a gig, it prefers a unique unlinked lead, then a unique organization-wide match. Ambiguous matches create a new lead instead of overwriting an arbitrary existing one.
Leads are on every plan. Access depends on role (owner, admin, or gig coordinator), not your subscription tier. See Lead tracking.

After commit: start running

Imports are only useful if you leave the wizard and run the business. After a successful commit:

Events → gigs

Open Gigs (/gigs). Your imported shows appear in the list. Open a gig to see team, venue, client, and dates: the same page you’d see on a hand-created gig. Continue with Creating gigs and Team building for day-to-day changes.

Crew → invitations

Imported crew become pending organization members. The import does not send invitations: open the roster from the Results step (View pending members) and invite people when you are ready. They accept in the app (web or mobile). Claimed emails are left alone on re-import. See Staff and Invitations. Crew (MEMBER) import requires email in the spreadsheet wizard today. Phone-only roster rows fail. On an Events import, nested invitations may still note “crew without email or phone” without blocking the gig itself.

Venues and clients

Imported rooms and customers are available when you create or edit gigs, and when a later Events import matches names. Manage them under Venues and Clients.

Songs and setlists → Show Prep

Imported songs land in the song library; setlists attach to your catalog. Use them from Song library and Setlists / Show Prep on the gig. Spreadsheet Songs mapping has no live CCLI column today.

Leads → pipeline

Open Leads to work stages and convert bookings. See Lead tracking and Converting leads.

Confidence check: re-import the same file

Upload the same spreadsheet again. The Review step should show 0 new rows and only updates (or unchanged). That proves natural keys held. Safe to re-send a corrected export later without forking your data.

Sample files (in the repo)

These live under docs/sample-imports/ in the repository. Filenames below are repo paths, not necessarily the download names shown in the in-app template buttons. Import org lists first (Crew → Venues → Clients → Songs → Setlists), then events. Several of the primitive samples include intentional bad rows so you can practice the error path.

Every invite needs a way to reach someone

An invitation needs a way to reach the person: at least one of email or phone. Missing both does not block writing the gig; the invitation is skipped and the Review step calls that out as a warning. Standalone Crew import still requires email on each roster row.

Export this organization

Owners and admins with imports enabled can click Download workspace on Settings → Connected apps → Import & export to get the eight catalogs. The zip has one import file (UEF 2.0) plus wizard-ready CSVs. Restore the CSVs by dropping the zip on the same page; it reads csv/*.csv and leaves the JSON out. To commit the JSON instead, use Import a Soundcheck file on the same page. See Export a workspace.

Export a workspace

Soundcheck → Soundcheck zip: import file JSON plus drop-first CSVs

Coming from another system

Planning Center, Back On Stage, Master Tour, Stagera, or LASSO: export CSV, then Settings → Data & knowledge → Imports

Importing your season

Spreadsheet + paperwork + sync recipe for a full book of business

Documents

Organization documents

Universal Event Format

Schema reference for partner feeds. Not required for spreadsheet operators

AI file ingestion

Extract records from contracts and call sheets