CSV Import
CSV import adds many contacts at once from a spreadsheet, such as a lead list from an event or an export from another CRM. It can also create each contact's company, place them in a pipeline, and add a deal, an event and a follow-up task. If your leads come from a marketing tool such as GoHighLevel, an inbound integration can bring them in automatically instead.
Two ways to import
The Contacts page has two import buttons:
- Import CSV — Uploads a file that is already in the Booked55 format described below. No AI is involved and it uses no AI credits.
- Import with AI — Opens the AI assistant, which converts a spreadsheet in any layout into this format with you before anything is imported. It uses your organization's AI credits.
Importing with the Import CSV button
- 1
Open Contacts
In the sidebar, go to Prospect Hub → Contacts.
- 2
Click "Import CSV"
The Upload Contacts CSV window opens. Its Format section lists the columns in the order the file must use. Click "What goes in each column" for details, or "Download sample CSV" for a file with the right header and one example row.
- 3
Choose who the contacts belong to
Under "Assign contacts to:", keep Current User (Me) or pick a teammate. Everything the file creates is assigned to that person.
- 4
Add your file
Drop the .csv file on the window, or click to browse for it.
- 5
Click "Upload CSV"
Booked55 checks the whole file first. If anything is wrong, nothing is imported and the window lists what to fix, row by row. If the file passes, the import runs and the window shows a summary.
The summary shows Total Rows, Successful, Companies Created, Contacts Created, Contacts Skipped and Failed. Close the window to see the new contacts in the list.
The file format
A standard comma-separated file with a header row, one contact per row. The column names must match exactly (they are not case-sensitive).
Required columns
The first seven columns must be these, in this order. The columns must be present, but only contact_fullname needs a value in every row; leave the other cells blank when you have nothing for them.
company_name,company_address,company_website,contact_fullname,contact_email,contact_phone,contact_title| Column | What goes in it |
|---|---|
company_name | The company the contact works at. Matched by name to an existing company assigned to the same person, otherwise created. |
company_address | Street address of the company. |
company_website | Website, including https://. |
contact_fullname | First and last name together. Required in every row. |
contact_email | Must be a valid email address if filled in. |
contact_phone | Include the country code if you have it. |
contact_title | Job title. |
Optional columns
Add any of these after the required columns, in any order. A column that isn't part of the format is ignored, with a warning.
| Group | Columns |
|---|---|
| Contact | contact_tags (separate tags with semicolons), contact_source (saved as a “Source: …” tag), contact_is_client (true or false), contact_client_date, contact_notes (saved to Relationship Goal), contact_linkedin, contact_facebook |
| Company | company_city, company_state, company_country, company_zip, company_industry (semicolons), company_employees (a number or a range such as 50-200), company_revenue, company_phone, company_email, company_notes |
| Pipeline | pipeline_name and stage_name (or pipeline_id and stage_id), pipeline_value, pipeline_notes |
| Deal | deal_value, deal_date, deal_description, client_type (a Product/Service Type, matched by name) |
| Event | event_name (created if it doesn't exist), event_date, event_location |
| Task | task_description, task_type (call, email, follow_up, meeting, visit, lunch or dinner), task_date |
| Contact preferences | do_not_call, do_not_text, do_not_email (yes, true or 1 to set the flag). See Do Not Call, Text or Email. |
An example with two optional columns:
company_name,company_address,company_website,contact_fullname,contact_email,contact_phone,contact_title,contact_tags,pipeline_name,stage_name
Acme Corp,"123 Main St, Suite 4",https://acme.com,Jane Doe,[email protected],+1 512 555 0142,Head of Operations,VIP;Enterprise,Sales,Qualified
,,,John Smith,[email protected],,Consultant,,,Formatting rules
- Dates — YYYY-MM-DD.
task_datemay also be a date and time. - Money — Numbers only. Currency symbols and thousands separators are removed.
- Commas inside a value — Wrap the value in double quotes:
"123 Main St, Suite 4". Write a quote inside a quoted value twice. - Pipelines —
pipeline_nameandstage_namego together and must match a pipeline and one of its stages that already exist (not case-sensitive). - Deals — A deal is created only when
deal_valueis above 0. - Tasks — A task is created only when
task_descriptionhas a value. With notask_date, it is due 7 days after the import, moved to the next working day (see Holidays). - Empty cells are fine. Values such as N/A, none or - are best left blank.
Validation before import
Every import checks the whole file before it writes anything. Errors stop the import: a missing or out-of-order required column, a row with no contact_fullname, an invalid email address or date, a pipeline or stage that doesn't exist, or a row with more values than there are columns (usually an unquoted comma). Warnings don't stop it; they tell you what will be ignored, such as a client_type that doesn't match, or a deal with no value. The same problem in many rows is listed once, with the number of rows.
Limits and permissions
- Size — At most 5,000 data rows and 5 MB per file. Split bigger files and import them one at a time.
- Permissions — Importing needs permission to create contacts. A file that also creates companies, pipeline cards, deals, events or tasks needs permission to create those too. If your role is missing one, nothing is imported and the window says which; remove those columns, or ask an owner or manager to import the file.
- Assigning to a teammate — If data isolation limits you to your own contacts, you can only import into your own book. See Data Isolation.
A row whose contact_email is on your organization's do-not-email list is still imported, but the contact is created already unsubscribed from marketing email. Importing a list again never re-subscribes anyone.
Importing from Claude or ChatGPT
If you have connected Claude or ChatGPT through the Booked55 MCP server, you can hand it a spreadsheet and ask it to import the contacts. It uses three tools:
get_contact_import_format— reads this format, so the AI converts your file to match it with its own tools. Booked55 does no conversion and spends no AI credits.validate_contacts_csv— runs the same validation as above without importing anything. The AI fixes the problems and validates again.import_contacts_csv— imports the validated file once, after it shows you the row count and any warnings and you say to go ahead.
All three need the connection to include contact write access; see Authentication & Scopes.
A file over the size limit is split into smaller files, each with the same header row, and the AI validates all of them, checks with you once, then imports them one at a time. It never drops rows to make a file fit, and it won't send you to the Import CSV button with the whole file, because that button has the same limit. If a file within the limit is still too large for the AI to send, it gives it back to you as a file to upload with the Import CSV button.
After importing
- Assign contacts to a pipeline using Pipeline Assignment.
- Link them to an event if they came from a conference lead list.
- Launch an email campaign to introduce yourself to the new contacts.
Ready to get started?
Create your free Booked55 account and start managing your sales pipeline in minutes.