How to bulk-import contacts and automatically assign each one to the right rep — in three steps.
The Team CRM import lets any team member upload a single CSV. Each row maps to one contact. The assigned_to column routes each contact to a specific rep by their login email address. Contacts without a valid assignment default to the person who uploaded the file.
The import runs in the background. You'll see a live progress bar, then a results summary showing how many contacts were imported, skipped, or flagged.
assigned_to column before exporting to CSV.
Your file must be a standard comma-separated CSV with a header row as the first line. UTF-8 encoding is required (the default in Google Sheets, Excel "Save as CSV", and most export tools).
| Column name | What it does | Required? |
|---|---|---|
| first_name | Contact's first name | Required* |
| last_name | Contact's last name | Required* |
| assigned_to | Rep's login email — routes this contact to that team member | Key field |
| Contact's email address (also used for duplicate detection) | Optional | |
| phone | Contact's phone number — any format accepted | Optional |
| company | Company or organization name | Optional |
| title | Job title or role | Optional |
| pipeline_stage | Where in the pipeline this contact starts: prospect, new, contacted, qualified, proposal, won, lost. Defaults to prospect. |
Optional |
| notes | Free-text notes attached to the contact record | Optional |
* At least one of first_name or last_name must have a value — rows missing both are skipped and counted in "Rows skipped."
Yellow headers — row 1 is always the header | Pink — required name fields | Green — the assignment column | Grey — optional fields
firstname, first, rep, owner, organization, mobile, stage, comments, and more. You can also manually map any column in Step 2 of the import wizard.
The assigned_to column is the key to a clean team import. Each value must be the rep's login email address — the email they use to sign in to the CRM.
[email protected] will.[email protected] and [email protected] are treated identically.assigned_to goes to the person who uploaded the file.assigned_to column before exportingassigned_to won't fail the import — the contact just lands in your queue instead of the rep's. Check the error log after every import.
Open your contacts spreadsheet (Excel, Google Sheets, or Numbers). Rename your column headers to match the supported names above. Add an assigned_to column and fill in each rep's login email. Export or "Save as" → CSV (UTF-8).
In the Team CRM sidebar, click Import. Or go to /team-crm/import directly. Any team member can run imports; Team Leaders usually handle the team-wide ones.
Drag your CSV onto the upload zone or click to browse. The importer reads your header row and shows a column count. Click Continue.
The importer auto-matches known column names (look for the ✓ Auto-matched label). Review each mapping. Make sure assigned_to is mapped to Assigned To (email). Click Review Import.
Confirm the row count and that the assigned-to column is mapped. Click Start Import. The progress bar runs in real time — do not close the tab until it finishes.
After the import completes, you'll see three numbers: Imported (success), Duplicates skipped (email already in team CRM), and Rows skipped (missing name). Read any notices in the error log — especially for assigned_to mismatches. Then click View Contacts.
| Result | What it means | Action needed? |
|---|---|---|
| Imported | Contact created and assigned successfully | None — check Contacts |
| Duplicates skipped | A contact with that email already exists in the team CRM | None — existing record is preserved |
| Rows skipped | Row had no first_name or last_name value | Fix those rows in your CSV and re-import |
| Notice in error log | assigned_to email not found in team — contact assigned to uploader instead |
Reassign from Contacts list, or re-import with the corrected email |
The assigned_to email in your CSV didn't match any active team member. Check the error log on the results screen for the exact rows. You can bulk-reassign from the Contacts list, or fix the CSV and re-import (duplicates will be skipped automatically).
Your CSV column might be named differently. In Step 2, find the dropdown for that column and select Assigned To (email) manually. Common aliases the importer auto-detects: assigned, rep, owner.
Most likely cause: the first_name and last_name columns weren't mapped. Go back to Step 2 and confirm both are matched. If your spreadsheet uses a single "Name" column, split it into two columns first.
Yes — any team member can run an import. Contacts with blank or invalid assigned_to values are assigned to the uploader. The assigned_to column is most useful when a Team Leader runs a bulk import for the whole team at once.
Any contact with a matching email address is skipped as a duplicate. Contacts with no email (or a different email) would be imported again. To be safe, only import each file once.
There's no hard cap, but imports over ~2,000 rows may take a minute or two. Keep the tab open until the progress bar completes.
That's fine. In Step 2, set those columns to (skip this column) and the importer ignores them.
Go to the import page, upload your CSV, and your team's contacts will be ready in minutes.
Open Import Page →Market intel · CRM · Reviews · BuzzDeals · and more