Bulk import¶
Pro feature
Bulk Import is available on the Pro and Enterprise plans. Compare plans to see which features are included.
When you are getting started with FSM Navigator™ — or onboarding a large client list — adding customers one at a time is tedious. Bulk Import lets you upload a CSV file with your customer records and create them all in a single batch, complete with contact details and service locations.
How it works¶
The import process follows four steps:
FSM Navigator validates every row before creating any records. You get a chance to review errors and fix problems before anything is saved, so there is no risk of importing bad data.
Step 1 — Download the CSV template¶
- Open the Customers page from the sidebar menu.
- Click Bulk Import.
- Click Download Template to get a pre-formatted CSV file with the correct column headers.
Always use the template
The template ensures your columns are in the right order and named correctly. Manually created spreadsheets with extra or renamed columns will fail validation.
Step 2 — Fill in your customer data¶
Open the downloaded template in any spreadsheet application (Excel, Google Sheets, LibreOffice Calc) and add one row per customer.
Required columns¶
Every column is required. Rows with missing fields will be flagged during validation.
| Column | Description | Example |
|---|---|---|
| customer_name | Customer or company name | Acme HVAC Services |
| contact_phone | Phone number (any common format) | (555) 123-4567 |
| contact_email | Email address | [email protected] |
| location_name | Label for the service address | Main Office |
| street | Street address | 742 Evergreen Terrace |
| city | City name | Springfield |
| state | Two-letter state code | IL |
| zip | Five- or nine-digit ZIP code | 62704 |
| default_sla_hours | The default response window for jobs created for this customer, in whole hours from 1 to 168 (up to one week). | 24 |
Optional columns¶
| Column | Description | Example |
|---|---|---|
| is_sublocation | YES to attach this row as an additional service location to a customer already listed earlier in the CSV (or one that already exists in your account). Defaults to NO when blank. | YES |
About default_sla_hours:
- It must be a whole number —
24works,48.5does not. - A trailing
.0is fine. Spreadsheets often turn a number column into24.0, and the importer reads that as24. Leading zeros are fine too, so024imports as24. 0is not valid — the smallest accepted value is1.- You can leave the cell blank. The customer is then created with your account's default response window, which is 24 hours unless you have set your own. Every customer still ends up with a default SLA, so jobs raised for them always inherit a due date.
- The column itself still has to be present in the file — it is only the individual cell that may be empty.
- Rows marked
is_sublocation: YESattach a location to a customer that already exists, so they never create a customer and this cell is ignored on them entirely.
When a row is marked is_sublocation: YES:
- The customer_name column must exactly match a customer in the file above this row, or an existing customer in your account. Matching is not case sensitive.
- The row creates an additional service location for that customer — it does not create a new customer.
- contact_phone and contact_email are ignored on sublocation rows (locations don't have their own contact details).
- The address columns (location_name, street, city, state, zip) are still required.
Use sublocations for multi-site customers
A property-management company with five buildings, a school district with twelve campuses, or a restaurant chain with multiple storefronts — list the customer once on the first row, then add one sublocation row per additional address.
Sample CSV data¶
customer_name,contact_phone,contact_email,location_name,street,city,state,zip,is_sublocation
Acme HVAC Services,(555) 123-4567,[email protected],Main Office,742 Evergreen Terrace,Springfield,IL,62704,NO
Acme HVAC Services,,,Warehouse,100 Industrial Blvd,Shelbyville,IL,62565,YES
Bright Plumbing LLC,(555) 987-6543,[email protected],Headquarters,200 Maple Street,Shelbyville,IL,62565,NO
Downtown Dental,(555) 222-3333,[email protected],Clinic,300 Oak Avenue,Capital City,IL,62701,
Row 2 attaches a second location ("Warehouse") to the Acme HVAC Services customer created in row 1. Row 4's blank is_sublocation is treated as NO.
File requirements
- Format: CSV (comma-separated values) — not
.xlsxor.ods - Encoding: UTF-8 (default for most modern applications)
- Header row: The first row must contain the column names exactly as shown above
- No blank rows: Remove empty rows before uploading
Step 3 — Upload and validate¶
- Return to the Bulk Import page.
- Click Upload CSV and select your file.
- FSM Navigator scans every row and reports validation results.
Validation checks¶
The validator checks each row for:
| Check | What it catches |
|---|---|
| Required fields | Missing customer name, address, or contact details |
| Email format | Invalid email addresses |
| Phone format | Unrecognizable phone numbers |
| State code | Invalid two-letter state abbreviations |
| ZIP code | Malformed ZIP codes |
| Duplicate contact details | A phone number or email address that is already taken — either by a customer in your account or by another row further up the same file. The message names the customer holding it, so you know which record to look at. Removed customers still hold their phone and email, so a match can point at a customer you deactivated; restore that customer, or use a different contact detail. |
| Sublocation parent | For is_sublocation: YES rows, the parent customer must be found exactly once. The validator flags two cases: parent not found (no customer with that name exists in the file above or in your account) and ambiguous parent (more than one customer in your account shares that name — rename one before importing). |
| is_sublocation value | Only YES, NO, Y, N, TRUE, FALSE, 1, 0, or blank are accepted. Anything else is flagged. |
| Default SLA hours | Two separate messages, so you can tell which rule you missed. "Default SLA must be a whole number of hours (1-168)" means the cell isn't a whole number at all (48.5, 24., 2 days). "Default SLA must be between 1 and 168 hours" means it is a whole number but sits outside the range (0, 500). |
If errors are found, you will see a summary showing which rows have problems and what needs to be fixed. You can:
- Fix the CSV — correct the flagged rows in your spreadsheet and re-upload.
- Skip bad rows — proceed with only the valid rows (invalid rows are ignored).
No surprises
Nothing is created until you explicitly click Process Import after reviewing the validation results. You always have a chance to review before committing.
Step 4 — Process the import¶
Once validation passes (or you have chosen to skip invalid rows):
- Click Process Import.
- FSM Navigator creates customer records and their associated service locations.
- Each address is automatically geocoded for map display and intelligent dispatch.
- A summary shows how many customers were created and whether any rows were skipped.
Imported customers appear immediately in your customer list and are ready for job creation.
Daily import limits¶
To ensure system stability, imports are subject to daily limits based on your plan:
| Plan | Daily Customer Limit |
|---|---|
| Pro | 50 customers per day |
| Enterprise | Unlimited |
Limit resets daily
The daily counter resets at midnight UTC. If you have more than 50 customers to import on the Pro plan, split your CSV into batches and upload across multiple days — or upgrade to Enterprise for unlimited imports.
Tips for a smooth import¶
- Clean your data first — Remove duplicate rows, fix typos, and standardize formatting before uploading.
- Use consistent naming — Decide on a naming convention (e.g.,
Acme HVACvs.ACME HVAC Inc.) before importing. - Check your state codes — Use standard two-letter codes (
IL,CA,NY) — not full state names. - Verify email addresses — Invalid emails will fail validation. Double-check addresses for typos.
- Start with a small batch — If this is your first import, try 5–10 rows first to confirm the process works before uploading your full list.
Frequently asked questions¶
Can I import customers with multiple locations?
Yes. List the customer once on the first row (with is_sublocation blank or NO), then add one row per additional location with is_sublocation: YES and the same customer_name. The extra rows create service locations attached to the original customer — they don't create duplicate customers. See the Optional columns section above for an example.
Can I export my customers and edit them in a spreadsheet?
Yes. Export CSV on the Customers page writes a file in exactly this format, including the is_sublocation column, with one row per service location — a customer with three sites exports as three rows (the first NO, the rest YES), and a customer with no location exports as a single row with the address cells left blank. That means the exported file can be edited and uploaded here without losing any sites. Customers added before the default SLA became a standard field export with your account's default response window filled in for them, so an exported file always re-imports cleanly.
One limit to know about: importing always creates records, it never updates existing ones. Re-uploading rows for customers you already have will be flagged as duplicate phone numbers or email addresses and skipped, so edit the customer in the app when you want to change an existing record.
What happens if a customer already exists?
The validator flags any row whose phone number or email address is already in use and names the customer holding it. Those rows are skipped; you can proceed with the rest of the file or fix them and re-upload. Existing customers are never overwritten. If the match points at a customer you removed, restore that customer instead of re-importing — a removed customer keeps its phone number and email address.
Can I undo a bulk import?
There is no automatic undo. If you need to remove imported records, deactivate them individually from the Customers page. See Managing Customers for details.
What file formats are supported?
Only CSV files are supported. If your data is in Excel (.xlsx), export it as CSV first using File → Save As → CSV (UTF-8).
What's next¶
- Managing Customers — Edit and organize your imported customer records.
- Customer Locations — Add more service addresses to your customers after import.
- Customer Portal — Give imported customers self-service access to their jobs and invoices.
- Create a Job — Start scheduling work for your newly imported customers.