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

# Load customers, cars, and plans during onboarding

> Download the example sheets, import in the right order, and use email addresses to link cars, recurring plans, and additional contacts to the right customer.

Use this guide when you are moving your facility onto Car Storage Software and want to bring everything over at once: customers, the cars they store, the plans they pay for, and the extra people on each account.

The short version: **the customer's email address is the key that ties everything together.** Import customers first, then put the same email on every car and plan row.

## The example sheets

Each import comes with an example sheet that shows the exact columns the app understands. Download them, paste in your own data, and keep the header row.

<CardGroup cols={2}>
  <Card title="Customers" icon="users" href="https://www.carstoragesoftware.com/templates/example-customers.csv">
    Names, emails, phones, address, tags, CRM stage, and member-since date.
  </Card>

  <Card title="Cars" icon="car" href="https://www.carstoragesoftware.com/templates/example-cars.csv">
    Year, make, model, VIN, plate, declared value, parking spot, and **Customer Email**.
  </Card>

  <Card title="Recurring plans" icon="rotate" href="https://www.carstoragesoftware.com/templates/example-recurring-billing.csv">
    **Customer Email**, amount, billing interval, start date, tax, and commitment.
  </Card>

  <Card title="Historical events" icon="clock-rotate-left" href="https://www.carstoragesoftware.com/templates/example-events.csv">
    Past intakes and services from your old system (Import Data page only).
  </Card>
</CardGroup>

You can also download each one from inside the app. On the **Customers** and **Cars** steps of the setup wizard, click **Download example template**. On the **Recurring plans** step, click **Download example sheet**.

<Tip>
  **Try it with demo data first**

  On the Customers step, **Import demo customers** loads John Smith and Jane Doe from the example sheet. On the Cars step, **Import demo cars** loads a Porsche 911 and a Ford Mustang. It's a safe way to see how linking works before you upload your real list. Delete the demo records when you're done.
</Tip>

## Import in this order

<Steps>
  <Step title="Customers">
    Customers come first because everything else links to them.

    Wizard step: [Setup Guide > Customers](https://www.carstoragesoftware.com/dashboard/onboarding/v2/customers)
  </Step>

  <Step title="Cars">
    Each car row links to its owner by the customer's email (or an external ID or owner name; see below).

    Wizard step: [Setup Guide > Cars](https://www.carstoragesoftware.com/dashboard/onboarding/v2/cars)
  </Step>

  <Step title="Recurring plans">
    Each plan links to its customer by email. Connect billing and create a recurring product first.

    Wizard step: [Setup Guide > Recurring plans](https://www.carstoragesoftware.com/dashboard/onboarding/v2/recurring)
  </Step>

  <Step title="Additional contacts, history, and photos (optional)">
    Spouses, assistants, bookkeepers, old service history, and photo archives are imported from the [Import Data](https://www.carstoragesoftware.com/dashboard/import) page.
  </Step>
</Steps>

<Warning>
  **Order matters**

  If you import cars or plans before their customers exist, the car rows come in with no owner, and the plan rows are blocked with **No customer with this email.**
</Warning>

## How email links everything

One customer, John Smith, appears in all three sheets with the **same email**:

| Row | Email column | Result |
| - | - | - |
| Customers sheet | `john.smith@example.com` | Creates John Smith |
| Cars sheet, row 1 | `john.smith@example.com` | Porsche 911 links to John |
| Cars sheet, row 2 | `john.smith@example.com` | Ford Mustang links to John |
| Recurring plans sheet | `john.smith@example.com` | \$250 monthly plan bills John |

Rules to know:

* **Use the main customer email.** Cars and plans match against the email on the customer record itself, not against an additional contact's email.
* **Capital letters don't matter.** `John.Smith@Example.com` matches `john.smith@example.com`. Extra spaces are trimmed.
* **One customer, many cars.** Repeat the same email on every car that person stores.
* **Spelling has to match exactly.** A typo like `jon.smith@` won't match. The car imports with no owner, or the plan row is blocked.

### Other ways to link cars to owners

If your old system doesn't have emails for everyone, the **Cars** step can also link by:

| Column | How it links |
| - | - |
| **Customer Email** | Matches an existing customer's email. Checked first. |
| **External Customer ID** | Matches the ID from your old system. To use it, include an **External Customer ID** column when you import customers. |
| **Composite External ID** | An old-system ID that combines the customer and car numbers, such as `0003.001`. |
| **Owner Name** (or **Owner first name** + **Owner last name**) | Matches a customer by exact first and last name. **If no one matches, a new customer is created** with that name. |

If you map more than one, the app tries them in this order: email, then external customer ID, then owner name. A row that has no email match falls back to the next one.

When you link by owner name or include a **Parking Spot** column, you'll see a **Review owner & space matches** screen before anything is imported. Exact matches are filled in for you. Check any suggested (fuzzy) matches, change them, or choose **Skip — leave unlinked**.

## Import customers

<Steps>
  <Step title="Upload your customer sheet">
    On [Setup Guide > Customers](https://www.carstoragesoftware.com/dashboard/onboarding/v2/customers), drop your file on **Drop your spreadsheet here, or click to browse**. CSV, XLSX, and XLS all work.
  </Step>

  <Step title="Check the preview">
    The **Preview your import** screen is a dry run. Nothing is saved yet. Rows with no name show **missing a name** and are skipped.
  </Step>

  <Step title="Choose how to match existing customers">
    Under **Match existing customers by**, choose **Email** (the default) or **External customer ID**.

    **Why this matters:** If a row matches a customer who's already in the app, that customer is updated instead of duplicated. That makes it safe to import the same sheet twice.
  </Step>

  <Step title="Map the leftover columns">
    Under **Column mapping**, any column the app couldn't place automatically is listed. Choose where each one goes, or create a custom field for it. Columns that already matched are under **Matched columns**.
  </Step>

  <Step title="Review and import">
    Click **Review & import**. The **Confirm customer import** window shows how many customers are **new** and how many will **update** existing records, with each change shown as old value → new value. Confirm to save.
  </Step>
</Steps>

<Note>
  **Every customer needs an email to link cars and plans by email**

  The app can import a customer with only a name. But without an email on the customer record, car and plan rows can't find them by email. Use External Customer ID or owner name for those customers instead.
</Note>

## Import cars

<Steps>
  <Step title="Upload your car sheet">
    On [Setup Guide > Cars](https://www.carstoragesoftware.com/dashboard/onboarding/v2/cars), drop your file on the upload area.
  </Step>

  <Step title="Check the Customer link column">
    The **Vehicle preview** has a **Customer link** column. It shows which value each row will link by, such as the email. Rows marked **Empty in spreadsheet** will import with no owner.
  </Step>

  <Step title="Review owner and space matches (if shown)">
    If you mapped owner names or parking spots, check the **Review owner & space matches** screen. Use the filter to show only rows marked **Needs decision**.
  </Step>

  <Step title="Import">
    Click **Import** (for example, **Import 48 cars**). If a match review is needed, the button says **Review matches for 48 cars** first.

    **Expected result:** Each car shows up under **Customer's Cars** on its owner's record.
  </Step>
</Steps>

<Tip>
  **A car came in with no owner**

  Open the car and link it by hand. See [View and edit vehicle details](/docs/cars/view-and-edit-vehicle-details). For many cars, fix the emails in your sheet and import just those rows again.
</Tip>

## Import recurring plans

Recurring plans link to customers the same way, by **Customer Email**. Each row needs an amount, a billing interval, and a start date **after today**. You also choose whether to ask each customer for a payment method or charge a card already on file.

Full walkthrough: [Import recurring billing plans](/docs/payments/import-recurring-billing-plans).

## Import additional contacts

Additional contacts are the spouses, assistants, bookkeepers, and vehicle managers who belong **under** a customer's account. They aren't separate customers. (See [Manage additional contacts](/docs/contacts/manage-additional-contacts).)

You import them on the same row as their main customer, using the **Customers** tab of the [Import Data](https://www.carstoragesoftware.com/dashboard/import) page. The setup wizard's Customers step doesn't import additional contacts.

<Steps>
  <Step title="Add contact columns to your customer sheet">
    For each extra person, add columns to the main customer's row. For example:

    | First Name | Last Name | Email | Contact 1 Name | Contact 1 Email | Contact 1 Phone |
    | - | - | - | - | - | - |
    | John | Smith | [john.smith@example.com](mailto:john.smith@example.com) | Mary Smith | [mary.smith@example.com](mailto:mary.smith@example.com) | (555) 222-1111 |

    For a second extra person, add **Contact 2 Name**, **Contact 2 Email**, and so on.
  </Step>

  <Step title="Map each contact">
    On [Import Data](https://www.carstoragesoftware.com/dashboard/import), stay on the **Customers** tab and upload the sheet. Under **Additional Contacts (optional)**, click **Add Contact** once for each extra person. Then choose that person's name, email, and phone columns.
  </Step>

  <Step title="Review and import">
    The preview shows how many additional contacts will be created. Confirm the import.
  </Step>

  <Step title="Turn on messages and portal access">
    Imported contacts start with **all messages turned off** and **no portal access**, so nobody gets an unexpected email.

    Open each customer, go to the **Contacts** section, and click the pencil icon to choose which messages this person receives (for example, **Invoices & Billing** for a bookkeeper). Turn on **Can access customer portal** if they should sign in with their own email.
  </Step>
</Steps>

<Warning>
  **Additional contacts are only added to new customers**

  Contacts on a row are created when that row creates a **new** customer. If the customer is already in the app, add the extra person by hand from the customer's **Contacts** section.
</Warning>

<Note>
  **An additional contact's email doesn't link cars or plans**

  Always use the **main** customer's email in the Customer Email column of your car and plan sheets. If a spouse's email is in that column, the row won't find the account.
</Note>

## Check your work

After you import, spot-check a few records:

* Open [All Contacts](https://www.carstoragesoftware.com/dashboard/contacts/all), search for a customer, and confirm their name, email, and phone.
* On that customer, confirm their cars appear under **Customer's Cars** and any extra people appear under **Contacts**.
* Open [Recurring billing](https://www.carstoragesoftware.com/dashboard/payments/recurring) and confirm plans show the right amount and start date.

## Related guides

* [Complete the onboarding wizard](/docs/basics/complete-the-onboarding-wizard)
* [Import customers, cars, events, and photos](/docs/contacts/import-customers-and-cars) (the Import Data page)
* [Import vehicles from a spreadsheet](/docs/cars/import-vehicles-from-a-spreadsheet)
* [Import recurring billing plans](/docs/payments/import-recurring-billing-plans)
* [Manage additional contacts](/docs/contacts/manage-additional-contacts)


## Related topics

- [Complete the onboarding wizard](/docs/basics/complete-the-onboarding-wizard.md)
- [Import customers, cars, events, and photos](/docs/contacts/import-customers-and-cars.md)
- [Import recurring billing plans](/docs/payments/import-recurring-billing-plans.md)
- [Configure customer onboarding](/docs/settings/configure-customer-onboarding.md)
- [Let customers add their own cars](/docs/facility-web-pages/let-customers-add-their-own-cars.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.