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 |
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 |
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 |
| Duplicates | Customers that already exist in your account (matched by email) |
| 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. |
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.
What happens if a customer already exists?
The validator flags duplicates matched by email address. You can choose to skip those rows or proceed — existing customers are not overwritten.
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.