> ## Documentation Index
> Fetch the complete documentation index at: https://docs.soundchecklive.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Importing your season

> Bring a whole book of business into Soundcheck — spreadsheets through the import wizard, paperwork through AI file ingestion, and recurring feeds through sync.

You're moving to Soundcheck with a season already on the books — thirty gigs in a spreadsheet, a folder of signed contracts, a CRM you're leaving behind. Don't re-type any of it. This recipe covers the three intake paths and when to use each.

## Pick your path

| Your data looks like…                       | Use                                                  | Why                                                                 |
| ------------------------------------------- | ---------------------------------------------------- | ------------------------------------------------------------------- |
| A spreadsheet or CSV export                 | [Operator data importer](/features/imports/overview) | Bulk, structured, idempotent — up to 50,000 rows a job              |
| Contracts, call sheets, riders, emails      | [AI file ingestion](/features/ai/file-ingestion)     | CheckAI extracts the records; you review before anything is written |
| A live system that keeps producing bookings | [n8n CRM sync](/crm/integrations/n8n-crm-sync)       | Recurring webhook feed instead of one-off loads                     |

All three land in the same normalized data via the [Universal Event Format](/features/imports/universal-event-format), so mixing paths is safe — a gig imported from a spreadsheet and one extracted from a contract behave identically afterward.

## The spreadsheet season

<Steps>
  <Step title="Shape the export">
    One row per gig (or per crew member per gig — see grouping below) with columns for name, date, venue, customer, and crew contacts. If your old system has stable IDs, keep the ID column: mapped external IDs make re-imports update in place instead of duplicating.
  </Step>

  <Step title="Parse">
    Go to **Imports**, upload the file (`.xlsx`/`.csv`, up to 25 MiB) or paste CSV/TSV. Soundcheck normalizes the headers and samples the rows.
  </Step>

  <Step title="Map">
    Review the proposed column → field mappings and adjust. Several crew rows for the same gig? Set **row grouping** so they collapse into one event with multiple members. Save the mapping as a template if you'll import this shape again.
  </Step>

  <Step title="Preview — the dry run">
    The preview shows exact create-vs-update counts for events, venues, customers, and invitations, plus row-level errors (missing dates, crew without an email or phone). Nothing is written yet. The numbers you see here are exactly what commit will do.
  </Step>

  <Step title="Commit">
    Write the records. Every row gets an outcome — imported, updated, duplicate, or failed — so you can audit the run. Re-running the same file later produces updates, not duplicates.
  </Step>
</Steps>

<Tip>
  Import venues-and-customers-heavy data early. Once your venue directory is populated, every future gig at those rooms auto-fills its logistics, and the season you just imported can be grouped into [tours](/features/gigs/tours) for per-run financial roll-ups.
</Tip>

## The paperwork pile

For the gigs that exist only as documents — a signed contract, a forwarded email thread, a call sheet PDF — use [AI file ingestion](/features/ai/file-ingestion):

1. Create (or open) the gig and drop the files on it — a batch can hold several documents.
2. CheckAI reads each file and proposes structured records: schedule items, crew with fees, ledger items, leads, and event fields.
3. Review the proposals — each row is marked **new** or a **match** against data you already have, so re-ingesting an updated contract won't fork your roster.
4. Optionally **merge** across files (two documents about the same show get deduplicated, conflicts flagged).
5. Commit what you selected. Nothing is written until you approve the plain-language summary.

This pairs naturally with the spreadsheet path: import the season's skeleton from the export, then drop each gig's contract on it to fill in schedules, fees, and money.

## Common pitfalls

<AccordionGroup>
  <Accordion title="Crew rows were skipped during commit">
    An invitation needs a way to reach the person — each crew row must have an email or a phone number. Rows without either are skipped, and the Preview counts reflect that before you commit.
  </Accordion>

  <Accordion title="I imported the same file twice and worried about duplicates">
    The importer is idempotent: rows matched by external ID or natural key (like title + date for events) update in place. Re-importing a corrected file is the intended fix loop, not a hazard.
  </Accordion>

  <Accordion title="I can't see the Imports page">
    The importer requires the CRM manager capability. Owners always have it; admins can be granted it through [roles & permissions](/organization/roles-permissions).
  </Accordion>

  <Accordion title="My spreadsheet has gigs, but the fees are only in the contracts">
    Use both paths: import the gigs from the spreadsheet first, then drop each contract onto its gig and let ingestion propose the ledger items and crew fees.
  </Accordion>

  <Accordion title="Past seasons — should I import those too?">
    If you want history and reporting, yes — imported past gigs can be marked **Completed**/**Settled** so your books reflect them. If you only care about what's ahead, importing just the upcoming season keeps things lighter.
  </Accordion>
</AccordionGroup>

## Related

<CardGroup cols={2}>
  <Card title="Operator data imports" icon="file-import" href="/features/imports/overview">
    The four-step wizard in full detail.
  </Card>

  <Card title="AI file ingestion" icon="wand-magic-sparkles" href="/features/ai/file-ingestion">
    Extract records from contracts and call sheets.
  </Card>

  <Card title="Universal Event Format" icon="code" href="/features/imports/universal-event-format">
    The shared schema behind every intake path.
  </Card>

  <Card title="n8n CRM sync" icon="plug" href="/crm/integrations/n8n-crm-sync">
    Recurring sync for sources with a webhook.
  </Card>
</CardGroup>
