Reporting & Admin
Bulk Upload
Import CSV data with column mapping for customers, leads, inventory, and more.
6 min readBulk Upload
Overview
Bulk upload imports CSV data into ServiceFlow with column mapping—customers, leads, inventory, price book, jobs, estimates, invoices, and other supported entities depending on your enabled import types.
How to access
Settings → Bulk Upload (
/settings/bulk-upload)Visible when Bulk Upload integration is enabled under Settings → Integrations.
What you can do today
- Enable integration under Integrations → Bulk Upload.
- Upload CSV files per import type exposed in UI (including Leads).
- Map CSV columns to ServiceFlow fields.
- Preview and validate rows before commit.
- Optionally match existing customers or leads to update instead of duplicate.
- Review import results and error rows.
Prerequisites
- Admin access.
- Bulk Upload enabled:
settings.integrations['bulk-upload'].isEnabled === true. - Clean CSV with headers; UTF-8 encoding recommended.
- Backup or test on staging before large production imports.
Step-by-step
Enable bulk upload (admin)
- Settings → Integrations → Bulk Upload.
- Enable → Save.
- Confirm Settings → Bulk Upload appears in settings menu.
Import leads from CSV
- Settings → Bulk Upload → select Leads.
- Upload a CSV with at least an email column (required).
- Map columns (common headers auto-suggest).
- Optional: enable Match existing leads before import (email, then phone).
- Optional: add a foreign-key rule to map assignedToEmail → assignedTo (user lookup).
- Preview → fix validation errors → Execute.
- Verify rows on Leads (
/leads).
Recommended leads CSV columns
| CSV column | Maps to | Required | Notes |
|---|---|---|---|
firstName | firstName | No | |
lastName | lastName | No | |
email | Yes | Used for optional upsert match | |
phone | phone | No | |
company | company | No | |
address, city, state, zipCode | address fields | No | |
message | message | No | Initial inquiry |
notes | notes | No | Internal notes |
source | source | No | web, phone, email, referral, social (default web) |
leadSource | leadSource | No | Campaign label, e.g. Google Ads |
status | status | No | new, contacted, qualified, converted, lost |
priority | priority | No | low, medium, high, urgent |
estimatedValue | estimatedValue | No | Decimal |
followUpDate | followUpDate | No | ISO date |
tags | tags | No | JSON array or comma-separated |
assignedToEmail | assignedTo | No | Resolve via Users FK rule |
websiteUrl | websiteUrl | No | Business website (CSV column website auto-maps here) |
serviceArea | serviceArea | No | Service area / market |
googleStarRating, googleReviewCount | rating fields | No | Google review metadata |
sourceUrl, gclid | sourceUrl, gclid | No | Lead capture page / ads click ID |
Example:
firstName,lastName,email,phone,leadSource,status,priority,notes
Jane,Smith,jane@example.com,(555) 123-4567,Google Ads,new,high,Callback Friday
Import other entities
- Choose import type (Customers, Price Book, etc.).
- Upload CSV → map columns → validate preview → execute.
- Spot-check records in the target module.
After import
- Spot-check records in target module (Customers, Leads, Price Book, etc.).
- Use Import Archive if merging legacy system exports.
Current limitations
- Config-gated — menu hidden until integration enabled.
- Not all entities support bulk upload—check in-app type list.
- Lead import does not auto-create customers or nurturing tasks.
- Updates vs inserts rules vary by import type—use match toggles for customers/leads.
- No real-time sync from external systems—one-time batch imports.
Roadmap
- Scheduled SFTP import jobs.
- Duplicate merge wizard post-import.
- Import templates downloadable per entity.