> For the complete documentation index, see [llms.txt](https://help.rinsebase.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.rinsebase.com/switching-from-competitors.md).

# Switching from Competitors

Bring your clients, properties, past cleans and crew over from your old software with a CSV file. This article covers exporting from each tool, what Rinsebase does with the file, what doesn't transfer, and what to set up in your first week.

## Before you start

* Imports live in **Settings → Import**. Only the account owner can open Settings.
* Signup has its own shorter import step for clients. See [Importing during signup](#importing-during-signup).
* Upload a **CSV file**. If your old software gives you an Excel workbook, open it and save it as CSV first.
* Recommended order: **Clients & Properties** first, then **Crew / Team**. Properties and past cleans are matched to clients, so the clients need to be in Rinsebase first.

## Step 1: Export from your old software

Rinsebase shows these export paths when you pick a source. If your old tool has moved a menu since, look for its customer or client export.

| Source          | Where to export                                                                                         |
| --------------- | ------------------------------------------------------------------------------------------------------- |
| Taskbird        | Settings → Export Data → Customers → Download CSV                                                       |
| Jobber          | Reports → Client List → Export → CSV                                                                    |
| HouseCallPro    | Customers → Export → CSV                                                                                |
| ZenMaid         | Reports → Customer Export → Download                                                                    |
| Launch27        | Customers → Export Customers → CSV                                                                      |
| BookingKoala    | Clients → Export → Download CSV                                                                         |
| ServiceFusion   | Customers → Export to CSV                                                                               |
| CleanGuru       | Clients → Export Client List → CSV                                                                      |
| QuickBooks      | Online: Reports → Contact List → Export to CSV. Desktop: Customer Center → Excel → Export Customer List |
| Google Contacts | contacts.google.com → Export → Google CSV                                                               |
| Excel / CSV     | Any spreadsheet with a header row of column names                                                       |

## Step 2: Import the file

1. Go to **Settings → Import**.
2. Under **Step 1 — What do you want to import?**, choose **Clients & Properties** or **Crew / Team**. To bring in only one kind of record, open **Need to import separately? (clients only, properties, or job history)** and choose **Clients only**, **Properties** or **Job history**.
3. Under **Step 2 — Where is your data coming from?**, pick your old software. The export path for that source appears below the list.
4. Under **Step 3 — Upload your file**, click **📂 Click to upload CSV file**. Rinsebase shows how many rows it found.
5. Check **Map your columns**. Each Rinsebase field has a dropdown of your file's column headers. Fields marked \* are required. Set anything you don't want to **— skip —**.
6. Read the **Smart detection** box, if one appears, and the **Preview (first 3 rows)**.
7. Click the **Import** button at the bottom. Its label shows how many rows will be imported.

### What each import type brings in

| Import type              | What it creates                                               | Required column   |
| ------------------------ | ------------------------------------------------------------- | ----------------- |
| **Clients & Properties** | Clients, their properties, and past cleans, all from one file | Full name         |
| **Crew / Team**          | Crew members with role and pay rates                          | Full name         |
| **Clients only**         | Clients: name, email, phone, notes, source                    | Full name         |
| **Properties**           | Properties added to clients who are already in Rinsebase      | Street address    |
| **Job history**          | Past cleans for clients who are already in Rinsebase          | Date / start time |

**Clients & Properties** can map: Full name, Email, Phone, Address, Property / listing name, City, State, ZIP, Bedrooms, Bathrooms, Sqft, Notes, Lockbox / door code, Arrival instructions, Crew notes, Laundry bag / linens, Service type, Last clean date, Amount / price and Client type.

If your export lists short-term rentals by listing name and has no street address, map the listing name to **Property / listing name**. Rinsebase creates the property under that name, and you add the street address afterward.

## How Rinsebase reads your file

* **Column matching.** Rinsebase fills in each dropdown by looking for common header names, such as "Customer" or "Client" for the name, "Mobile" or "Cell" for the phone, and "Door code" or "Gate code" for the lockbox. Check each match before you import.
* **Report title rows.** Some exports start with a few title lines before the column headers (QuickBooks reports do). Rinsebase skips them and tells you how many it skipped.
* **Notes that span several lines.** A cell with line breaks, commas or quotes stays in one field. It doesn't turn into extra rows.
* **Split names.** When you import **Clients only** from a file with separate first-name and last-name columns and no single name column, Rinsebase combines them and says so in **Smart detection**. If **Full name** ends up mapped to a first-name-only column, add a combined name column to your spreadsheet and upload it again.
* **Full addresses in one cell.** When the whole address (street, city, state, ZIP) sits in one column, Rinsebase tries to split it and shows "Full address detected … will be split automatically". If you don't see that message and your **Address** column holds the whole address, split it into separate columns in your spreadsheet first. Otherwise the whole address lands on the street line.
* **Clean-up.** Ten-digit phone numbers are formatted the same way. States and provinces (US and Canada) and ZIP or postal codes are kept only when they're valid. Anything else is left blank rather than saved wrong. Emails that aren't valid addresses are dropped.
* **Mapping mistakes.** If one column is mapped to several fields, you'll see **Same column mapped to multiple fields**. When two of name, email, phone and the address parts share a column, the import is blocked until you fix the mapping.

## Duplicates and re-running an import

Many exports from job and booking tools have **one row per job**, not one row per client. Rinsebase handles this:

* Rows for the same client are merged into one client. Rinsebase matches rows by email first, then phone, then name. The result says how many duplicate rows were merged.
* Clients already in Rinsebase are matched the same way and reused. They are not created again. A name only counts as a match when exactly one client in your account has that name.
* In **Clients & Properties**, each distinct property becomes a property on that client. A property is its street address and its name together, so units at one address (for example "King" and "Queen" at 180 Willow Way) stay separate properties. Properties that already exist are reused.

**Is it safe to run again?** Running **Clients & Properties** or **Clients only** again won't duplicate clients or properties. Some records do get added again:

* **Past cleans are added again on every run.** Before you re-import a **Clients & Properties** file that has dates, set **Last clean date** to **— skip —**.
* The separate **Properties** import doesn't check for properties you already have.
* Crew rows without an email are added again. Crew rows with an email are skipped when that email is already on your team.

## Client types

Rinsebase has four client types: **Residential**, **STR / Airbnb**, **Commercial** and **Property Manager**.

* **Clients & Properties** uses your **Client type** column if you map one. Values that mention STR, Airbnb, VRBO, vacation or short-term become **STR / Airbnb**, and "commercial" and "residential" map to those types. Without that column, a client with more than one property comes in as **STR / Airbnb** and everyone else as **Residential**.
* **Clients only** imports everyone as **Residential**.
* No import sets **Property Manager**. Change those clients by hand on the **Clients** page.

## Job history

Past cleans come in as **completed** jobs:

* Each row with a readable date becomes one clean. Rows with no date or an unreadable date are skipped. Month/day dates such as 03/04/2026 are read as March 4.
* Rows are matched to clients by email, phone or name. Rows that don't match a client are skipped.
* In **Clients & Properties**, the clean is attached to the property on that row. In **Job history**, it goes on the client's first property.
* **Job history** keeps a **Status** column when it says Completed, Cancelled or Scheduled. Every other status comes in as completed. It uses your **End time** column, and cleans without one are set to two hours.
* The amount becomes the clean's price. **Clients & Properties** also saves the service type in the job's internal notes.
* Imported cleans don't create invoices, don't notify your clients, and have no crew assigned.

Use this import for history only. Set up upcoming and repeating cleans on the schedule.

## Crew import

**Crew / Team** can map Full name, Email, Phone, Role, Pay type, Hourly rate, Per job rate and Notes.

| Role column contains    | Imported as  |
| ----------------------- | ------------ |
| "lead"                  | Lead cleaner |
| "manager"               | Manager      |
| "dispatch"              | Dispatcher   |
| "train"                 | Trainee      |
| anything else, or blank | Cleaner      |

Pay type is read as hourly ("hour"), per job ("job" or "flat") or mixed ("mix"). Anything else is set to hourly.

**Importing crew does not send invitations.** Nobody gets an email, and nobody can log in to the crew app until you invite them:

1. Go to **Team** in the sidebar. Imported crew show **Not invited**.
2. Click **✉ Send invite** on each person.

Login needs an email address. If any imported rows have no email, the result screen warns you. On the **Team** page those people show **No email — can't log in**. Click **+ Add email to invite**, add their email, then send the invite. Until then they can't see any clean you assign them.

## Importing during signup

The signup wizard's **Import data** step (**Import your existing clients**) offers Taskbird, Jobber, HouseCallPro, ZenMaid, Google Contacts, Excel / CSV and **Start fresh**. You can also click **Skip for now →**.

* It imports **clients only**: name, email and phone. Duplicate rows are merged the same way. The **Review your import** step shows the list before you click **✓ Import … clients →**.
* Mapping address columns there doesn't create properties. After signup, run **Clients & Properties** in **Settings → Import** with the same file. It matches the clients you already have and adds their properties.

## Import from Google Calendar

If your schedule lives in Google Calendar, use **Import from Google Calendar** at the top of **Settings → Import**:

1. In Google Calendar, open **Settings and sharing** for your calendar, scroll to **Integrate calendar**, and copy the **Public URL in iCal format**.
2. Paste it and click **Fetch calendar**.
3. Rinsebase reads your event titles and lists one row per client with an address, frequency, event count and confidence. Low-confidence rows start unchecked. Edit names and addresses, then click **Import … clients**.

For each client, this creates the client, a property, and one clean from the first event it found. It doesn't set up a repeating series, and it has no client emails. Clients whose address wasn't found get the street "(address needed)". Fix these on the **Clients** page.

## After the import: what to check

The result screen shows **Import complete!** with counts, or **Nothing was imported**, which usually means a required or client-matching column wasn't mapped. Amber warnings flag the problems worth fixing now:

* **Clients with no property.** These clients have no calendar and no client portal. Map an Address column, or **Property / listing name**, and run the import again.
* **Crew with no email.** See [Crew import](#crew-import).

Use **Import more from same source** to upload the next file, or **Import another file** to start over. Then open **Clients** and check:

* The number of clients matches your old system, with no one listed twice.
* Each client has the right type, especially **Property Manager**, which you set by hand.
* Properties have a full street, city, state and ZIP, and their lockbox codes and arrival instructions came across.

## What doesn't import

* **Invoices, balances and payments.** Collect open balances in your old system, or create invoices in Rinsebase.
* **Photos.** Before/after photos and property photos stay in your old software.
* **Recurring schedules and upcoming cleans.** Rebuild repeating cleans in Rinsebase. Imported history doesn't repeat.
* **Checklists, service prices and pricing rules.** Set these up per property and in **Settings → Services**.
* **Calendar connections.** Reconnect each client's booking calendar in Rinsebase.
* **Crew assignments, time records and pay history.**
* **Invitations.** Imports don't email crew or clients.

## Your first week after switching

1. **Connect booking calendars** for your STR and property-manager clients so their cleans schedule themselves (Growth plan and up). See [STR & Airbnb Sync](/str-and-airbnb-sync.md).
2. **Invite your crew** from **Team** and check that everyone has an email. See [Crew Management](/crew-management.md).
3. **Finish each property**: default crew, checklist, access notes. See [Clients and Properties](/clients-and-properties.md).
4. **Rebuild repeating cleans** for your residential and commercial clients. See [How to Set Up Recurring Cleans](/how-to-set-up-recurring-cleans.md).
5. **Set up billing**: connect Stripe in **Settings → Billing** and set prices in **Settings → Services**. See [Billing and Payments](/billing-and-payments.md).
6. **Invite clients to their portal.** See [Client and Property Manager Portals](/client-and-property-manager-portals.md).
7. Keep your old software open until your first week of cleans and invoices has gone through Rinsebase.

## Related

* [Getting Started](/getting-started.md)
* [STR & Airbnb Sync](/str-and-airbnb-sync.md)
* [Crew Management](/crew-management.md)
* [Clients and Properties](/clients-and-properties.md)
