Skip to main content
POST
Search & Connect Contacts in the CRM
Searches your connected CRM for each contact and links it to the CRM record found — the Search & connect action of the Contacts page. No CRM record is ever created: use POST /contacts/crm/create for that. Each contact it links then syncs its mapped fields with that CRM record, which can update it. Target the contacts with idsOrEmails (lemlist ids or email addresses) or with listId for a whole contact list, static or dynamic: 10,000 contacts at most either way.

Asynchronous: read the outcome later

The call queues the work and answers at once with what was queued, not with what the CRM returned. Each contact’s outcome lands on its crmSync block shortly after:
  • GET /contacts?idsOrEmails=... returns each contact with its crmSync block (searching, crmRecordId, notFoundAt, errors), 100 contacts per call.
  • GET /contacts?listId=...&crmSyncStatus= lists the contacts of a list by state: searching while the search runs, then synced (linked), or not_found (no CRM record matched). Without listId, the filter reads every contact of the team: do not poll it.

What the counts mean

  • alreadyLinked: already linked to a CRM record, synced with it again instead of searched.
  • toSearch: searched in the CRM, then linked or flagged not_found.
  • notSearchable: nothing the CRM can be searched with (no email address or LinkedIn URL), left untouched.
  • alreadyInProgress: a CRM search was already queued for them, not queued twice.
  • notFound: the references sent that match no contact of your team.

Authorizations

Authorization
string
header
required

Basic authentication header of the form Basic <encoded-value>, where <encoded-value> is the base64-encoded string username:password.

Body

application/json
idsOrEmails
string[]

lemlist contact ids (ctc_xxx) or email addresses, 10,000 at most. Send either idsOrEmails or listId.

Required array length: 1 - 10000 elements
Example:
listId
string

A contact list id (clt_xxx): acts on every contact of the list, static or dynamic, 10,000 at most. Use it instead of idsOrEmails.

Example:

"clt_Ab12Cd34Ef56Gh78I"

Response

Queued — not done yet. The counts say what was queued; each record's outcome lands on its crmSync block shortly after.

success
boolean
required
data
object
required