Skip to content

Import from a file

You can add leads in bulk from the dashboard without writing code: upload a CSV file or paste a JSON list. An import goes through the same path as POST /leads/batch, so duplicates are merged exactly as they are for the API.

  1. Go to Leads in the dashboard.
  2. Click Import, next to Filter and Export above the leads table.
  3. Choose JSON or CSV, add your leads, then click Import.

Owners and editors can import. A viewer’s import is refused with Viewer role cannot modify data (see Team Access).

The dialog shows your limit: Max N leads per import.

Plan Leads per import
Free 100
Pro 500
Scale 500

To import more, split your file and import each part. Every new lead counts toward your plan’s lead limit; a lead merged into an existing one does not.

Click the upload area and pick a .csv file. The dialog reads it in your browser and shows how many valid leads it found (N valid leads ready to import) before anything is sent.

  • The first row is the header. Column names are case-insensitive and surrounding spaces are ignored.
  • Columns are separated by commas. Wrap a value in double quotes to include a comma or a line break, and write a quote inside a quoted value as "".
  • Blank lines are skipped. Columns not listed below are ignored.
  • If the file has more valid leads than your limit (rows missing name or source are not counted), the Import button stays disabled.

name and source are required. A row without both is skipped.

Column Notes
name, source Required
email, phone, website, description, category
address, city, state, postal_code, country
latitude, longitude, rating, review_count Numbers. An empty, 0 or non-numeric value is left out.
source_id Your own identifier, used to merge duplicates
logo_url
tags Separated by |, for example vip|q3-campaign
name,source,email,city,tags
Acme Corp,trade-show,[email protected],Lyon,vip|q3-campaign
"Beta, Ltd",referral,,Paris,

Custom attributes, SIREN and do not contact cannot be set from a CSV file. Use JSON for them.

A file with a title column is read as a Google Maps scraper export. Each row needs a title, which becomes the lead’s name, and source is set to google_maps.

Export column Lead field
title name
input_id source_id
descriptions description
phone, website, category same name
thumbnail logo_url
review_rating, review_count rating, review_count
latitude, longitude same name
complete_address address, city, postal_code, state, country, with address, city, postal_code, state and country columns as fallback
emails email: the first address of a comma- or semicolon-separated list

Paste a JSON array of leads, or a single lead object, into the text area. Each lead uses the same fields as Create Lead, so JSON can also carry tags, custom attributes, siren and do_not_contact. Give each lead a name and a source.

[
{ "name": "Acme Corp", "source": "google", "email": "[email protected]" },
{
"name": "Beta Ltd",
"source": "referral",
"tags": ["partner"],
"attributes": [{ "name": "segment", "type": "text", "value": "enterprise" }]
}
]

Each lead is checked against your existing leads, as with the API (email, SIREN, source_id, then phone plus a similar name). When it matches, the existing lead is updated instead of a new one being created:

  • Non-empty incoming values overwrite existing ones, except the name, the status and the map coordinates (latitude, longitude), which a merge never changes; fields you leave out are unchanged.
  • Tags are added to the existing tags, never replaced.
  • Custom attributes merge by name.
  • Locked fields are never written.
  • An import never lifts do not contact. A lead marked "do_not_contact": true in JSON gets the opposition added.

The full rules are in Deduplication.

When the import finishes, the dialog closes, the leads table reloads and a message shows Imported X/Y leads. X counts new and merged leads. The message is red when at least one lead failed; the others are saved. The dashboard does not list which rows failed or why. To see per-lead results, send the same leads to POST /leads/batch, which returns an errors entry for each failed lead.

A lead can fail when your plan’s lead limit is reached, or when its data is refused, for example an invalid SIREN.

Scoring rules run on every imported lead, and your webhooks receive leads.created for new leads and leads.updated for merged ones.

Message Cause
No valid rows found The CSV has no row with name and source, or no title for a Google Maps export.
Max N leads per import The JSON list is longer than your plan’s limit. Nothing is imported.
Import error Nothing is imported. The details give the reason: the JSON is not valid, a website or logo_url is not an absolute http(s) URL, the import is larger than 10 MB, or you are a viewer.