import_contacts
Bulk import leads, upserting by email, with suppression respected.
›Import these 400 leads from my CSV, skip anything without a valid work email, and tell me what was rejected.
What it does
Takes an array of leads and upserts them by email address, so re-importing an updated list refreshes existing records instead of duplicating them. Invalid addresses come back in the response rather than silently disappearing.
The important behaviour is what it refuses to do: a lead who unsubscribed or hard-bounced is never resurrected by a subsequent import. This is the failure mode that generates complaints — someone opts out, the list gets re-uploaded next quarter, and they get emailed again. The suppression check sits in the import path so it cannot be skipped.
Because your assistant can construct the array, this pairs well with pointing it at a CSV or a CRM export and asking it to clean and import in one step. Ask it to drop free-mail addresses and rows missing a company while it works, and the cleaning happens before the data lands rather than as a follow-up chore.
Parameters
| Name | Type | Notes |
|---|---|---|
| contacts * | array | |
| tags | array | Applied to every contact in this batch |
* required · Maps to POST /api/contacts
What comes back
Imported count and the list of invalid addresses.
The thing people get wrong
Import does not enroll. Leads sit in the database until `enroll_contacts` puts them into a campaign — importing alone never sends anything.
Use it with
More contacts tools
See all 147 tools and the connection string on the MCP server page.