Listen to this article

Loading the Elevenlabs Text to Speech AudioNative Player...

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. 1

    Open Contacts

    In the sidebar, go to Prospect Hub → Contacts.

  2. 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. 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. 4

    Add your file

    Drop the .csv file on the window, or click to browse for it.

  5. 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
ColumnWhat goes in it
company_nameThe company the contact works at. Matched by name to an existing company assigned to the same person, otherwise created.
company_addressStreet address of the company.
company_websiteWebsite, including https://.
contact_fullnameFirst and last name together. Required in every row.
contact_emailMust be a valid email address if filled in.
contact_phoneInclude the country code if you have it.
contact_titleJob 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.

GroupColumns
Contactcontact_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
Companycompany_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
Pipelinepipeline_name and stage_name (or pipeline_id and stage_id), pipeline_value, pipeline_notes
Dealdeal_value, deal_date, deal_description, client_type (a Product/Service Type, matched by name)
Eventevent_name (created if it doesn't exist), event_date, event_location
Tasktask_description, task_type (call, email, follow_up, meeting, visit, lunch or dinner), task_date
Contact preferencesdo_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_date may 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_name and stage_name go 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_value is above 0.
  • Tasks — A task is created only when task_description has a value. With no task_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:

  1. 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.
  2. validate_contacts_csv — runs the same validation as above without importing anything. The AI fixes the problems and validates again.
  3. 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

Ready to get started?

Create your free Booked55 account and start managing your sales pipeline in minutes.