> ## 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.

# Import recurring billing plans

> Bulk-load monthly or yearly storage plans from a spreadsheet, link each one to a customer by email, and choose whether to ask for a payment method or charge a card on file.

Use this guide when you are moving to Car Storage Software and already have customers on monthly, quarterly, or yearly storage plans. Instead of setting up each plan by hand, you upload one spreadsheet and the app creates all of them at once.

The import lives in the setup wizard, on the **Recurring plans** step: [Setup Guide > Recurring plans](https://www.carstoragesoftware.com/dashboard/onboarding/v2/recurring).

## What you will accomplish

* Upload one sheet with an amount, billing interval, and future start date for each customer.
* Link each plan to the right customer using their **email address**.
* Choose, row by row, whether the app **asks the customer how they want to pay** or **charges a card already on file**.
* Preview everything, including duplicates and errors, before any plan is created.

**Expected outcome:** Each imported plan appears on [Recurring billing](https://www.carstoragesoftware.com/dashboard/payments/recurring) and starts billing on the start date in your sheet.

## Before you start

<Steps>
  <Step title="Import your customers first">
    Plans link to customers **by email**. Every email in your plan sheet must already belong to a customer in the app. If it doesn't, that row is blocked.

    Finish the **Customers** step of the setup wizard, or see [Load customers, cars, and plans during onboarding](/docs/basics/import-customers-cars-and-plans-during-onboarding).
  </Step>

  <Step title="Connect billing">
    Finish the **Billing** step (Stripe) so the app can send payment requests and charge cards. See [Connect payment processing](/docs/settings/connect-payment-processing).
  </Step>

  <Step title="Create a recurring product">
    The import attaches every plan to one **recurring** product, such as "Monthly indoor storage". Create it in [Payments > Products](https://www.carstoragesoftware.com/dashboard/payments/products) if you don't have one yet. See [Manage products and services](/docs/payments/manage-products-and-services).

    **Why this matters:** If you have no active recurring product, the step shows a message asking you to create one, and the upload area stays hidden.
  </Step>

  <Step title="(Optional) Set up tax rates">
    If you charge tax on storage, add your tax rates first so the import can match them by name or percentage.
  </Step>
</Steps>

<Tip>
  **Different products for different plan types**

  You pick one product per upload. If you sell several plan types, such as indoor and outdoor storage, split your sheet into one file per product and run the import once for each.
</Tip>

## Get the example sheet

Download the example sheet and use it as your starting point:

<Card title="example-recurring-billing.csv" icon="file-csv" href="https://www.carstoragesoftware.com/templates/example-recurring-billing.csv">
  Two sample rows showing every column the import understands.
</Card>

You can also click **Download example sheet** on the Recurring plans step.

### Columns

| Column | Required | What to put in it |
| - | - | - |
| **Customer Email** | Yes | The main email on the customer record. Not case-sensitive. |
| **Amount** | Yes | The price for one unit per billing period, in dollars. For example `250` or `$250.00`. |
| **Billing Interval** | Yes | `monthly`, `yearly`, `weekly`, `daily`, `quarterly`, `semi-annual`, or `every 3 months`. Also accepted: `month`, `annual`, `3 months`, `6 mo`. |
| **Start Date** | Yes | The day the plan starts. **Must be after today.** Use `YYYY-MM-DD`, such as `2026-11-01`. |
| **Quantity** | No | Number of units, such as `2` for two spaces. Defaults to `1`. The plan total is Amount × Quantity. |
| **First Billing Date** | No | Use this when the first charge falls on a different day than the start date. Must be in the future and on or after the start date. |
| **Rate Anniversary** | No | The yearly date you review this customer's rate. It repeats every year from this date. |
| **Commitment Months** | No | Minimum term, such as `12`. The plan keeps running after the commitment ends. |
| **Tax Rate** | No | The name of one of your tax rates, such as `LA County`, or a percentage, such as `7`, `7%`, or `0.07`. |
| **Promo Code** | No | A promo code to apply. Letters, numbers, and hyphens only. |

<Note>
  **Your column names don't have to match exactly**

  The import recognizes common names automatically. For example, **Email**, **Price**, **Rate**, **Frequency**, **Period**, **Qty**, **Coupon**, and **Anchor date** all map without help. Any column it can't place, you match by hand.
</Note>

## Import your plans

<Steps>
  <Step title="Open the Recurring plans step">
    Go to [Setup Guide > Recurring plans](https://www.carstoragesoftware.com/dashboard/onboarding/v2/recurring).

    **Expected result:** You see a page titled **Recurring billing** with **Product** and **Default tax rate (optional)** pickers.
  </Step>

  <Step title="Choose the product">
    Under **Product**, choose the recurring product these plans belong to. If you only have one, it's already selected.
  </Step>

  <Step title="Choose a default tax rate (optional)">
    Under **Default tax rate (optional)**, choose a rate to use for rows that don't set one in the **Tax Rate** column. Leave it on **None** if storage isn't taxed.
  </Step>

  <Step title="Upload your sheet">
    Drop your CSV or Excel file on the upload area, or click it to browse.

    **Expected result:** A message confirms how many rows loaded, and a grid of column pickers appears. Required fields have an asterisk (\*).
  </Step>

  <Step title="Check the column mapping">
    Each picker shows which spreadsheet column feeds that field. Fix any that are wrong. Choose **—** for fields you don't use.

    **Customer email**, **Amount**, **Billing interval**, and **Start date** must all be mapped before you can preview.
  </Step>

  <Step title="Click Preview import">
    Click **Preview import**. Nothing is created yet.

    **Expected result:** A summary row of badges, such as **12 rows · 11 included · 9 ask · 2 charge · 1 duplicate**, and a table with one line per plan.
  </Step>
</Steps>

## Review the preview

Each row in the preview table shows:

* **Include:** a checkbox. Unchecked rows are not imported.
* **Customer:** the email from your sheet, with a **Duplicate** badge if that customer already has an active plan on this product.
* **Plan:** amount × quantity and the interval, plus any commitment and promo code.
* **Start:** the start date, plus the first billing date (**Bill**) and rate anniversary (**Anniv**) if you set them.
* **Collection:** how the first payment will be collected (see below).
* **Est.:** the estimated amount per billing period, including tax.
* **Notes:** errors in red, and warnings in gray.

### Blocked rows

Rows with a red error can't be imported, and their checkbox is turned off. Common errors:

| Error | How to fix it |
| - | - |
| **No customer with this email.** | Check for typos, or add the customer first. The email must match the **main** email on the customer record. |
| **Start date must be in the future.** | Change the start date to tomorrow or later. |
| **First billing date must be on or after start date.** | Move the first billing date, or leave it blank. |
| **Billing interval is required.** | Use one of the interval words listed in the Columns table. |
| **Invalid promo code format** | Use only letters, numbers, and hyphens. |

Fix the sheet, upload it again, and click **Preview import**.

### Duplicates

If a customer already has an active plan on the same product, the row gets a **Duplicate** badge and is **unchecked by default**. This protects you from billing someone twice. Check the box only if the customer really should have a second plan, such as a second car in a second space.

## Choose Ask or Charge

The **Collection** column controls how each customer starts paying.

* **Ask for payment method** (the default): the customer gets an email asking them to choose how to pay, by card or bank account. Nothing is charged until they choose.
* **Charge** followed by the saved card or bank account: the plan bills the payment method already saved on that customer's account. You can only pick this when the customer has a card or bank account on file.

To switch every eligible row at once, click **Ask all with PM** or **Charge all with PM**. "PM" means a payment method on file.

<Tip>
  **When to charge directly**

  Charging a saved card is fastest, but use it only when the customer agreed to keep paying that way. When in doubt, choose **Ask**. The customer confirms how they pay, and nothing is charged by surprise.
</Tip>

## Import the plans

<Steps>
  <Step title="Click Import selected rows">
    Only checked rows without errors are imported.

    **Expected result:** A green message says, for example, **Imported 11 plans**. If some rows failed, it shows how many.
  </Step>

  <Step title="Continue the setup wizard">
    Click **Continue** to move on to the **Team** step. Or click **Skip for now** if you'd rather import plans later.
  </Step>
</Steps>

## What happens next

* Customers set to **Ask** receive an email asking how they want to pay.
* Each plan starts billing on its own start date (or first billing date, if you set one).
* Plans appear on [Recurring billing](https://www.carstoragesoftware.com/dashboard/payments/recurring) and on each customer's billing section. See [Manage recurring billing](/docs/payments/manage-recurring-billing) to edit, pause, or cancel one.
* To attach a plan to a specific car, see [Link recurring billing to a vehicle](/docs/cars/link-recurring-billing-to-a-vehicle).

## Troubleshooting

<Warning>
  **The step says to create a recurring product**

  You don't have an active recurring product yet. Open [Payments > Products](https://www.carstoragesoftware.com/dashboard/payments/products), create a recurring product, then come back and refresh the page. Statement-style products don't appear in this list.
</Warning>

<Warning>
  **Every row says "No customer with this email."**

  Your customers aren't in the app yet, or the **Customer email** picker points at the wrong column. Import customers first, then check the mapping.
</Warning>

<Tip>
  **The Charge option isn't available for a customer**

  That customer has no saved card or bank account. The row uses **Ask**, and the customer adds a payment method from the email.
</Tip>

<Note>
  **Dates are being misread**

  Use `YYYY-MM-DD`, such as `2026-11-01`. It's the one format that can't be mistaken for a different day.
</Note>


## Related topics

- [Manage recurring billing](/docs/payments/manage-recurring-billing.md)
- [Load customers, cars, and plans during onboarding](/docs/basics/import-customers-cars-and-plans-during-onboarding.md)
- [Complete the onboarding wizard](/docs/basics/complete-the-onboarding-wizard.md)
- [Import vehicles from a spreadsheet](/docs/cars/import-vehicles-from-a-spreadsheet.md)
- [Import vehicles and photos from a spreadsheet](/docs/cars/import-vehicles-and-photos.md)


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