lemlist_push_rows
Create lemlist leads FROM DATASTORE ROWS — the bulk way; nothing personal goes through this call.
Name the rows (row_ids, or a filter); oto reads them, creates one lead per
row in the campaign, and writes back id_column (the lead id) and
status_column (pushed | duplicate | failed) on each row. The answer is
counts plus errors: [{row_id, code}] — never a value read from a row.
By filter, only rows whose status_column is empty are taken: call again
with the same filter until remaining is 0. A row already treated is not
picked again — name it in row_ids to retry it. A row with id_column
already set is skipped (already_pushed); one reserved by another run is
skipped (row_locked) before anything is sent. dry_run reads and checks
the mapping, sends nothing. Like lemlist_create_lead, this sends no email: a
lead waits for review until lemlist_launch_lead.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"datastore": "<datastore>",
"campaign_id": "<campaign_id>",
"field_mapping": "<field_mapping>"
},
"name": "lemlist_push_rows"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| _org | No | Org (id) de CET APPEL. `oto_list_orgs()`. | |
| _group | No | Équipe (id) de CET APPEL, sous son org parente. | |
| filter | No | data_rows filter grammar; `{}` = every row not yet treated. | |
| _run_id | No | OBLIGATOIRE à chaque appel dès `run_start` ou `data_claim_next` : sans lui, l'écriture sur une ligne réservée est refusée. Hérité seulement si le serveur tient un run actif — n'y compte pas. | |
| dry_run | No | read and check only — no lemlist call, nothing written. | |
| row_ids | No | the rows to push (at most 50). Exclusive with `filter`. | |
| _project | No | Projet (id) de CET APPEL — jeton PRIMAIRE. `oto_project(op='list')`. | |
| _instance | No | Instance de connecteur PRÉCISE (un credential exact). `oto_instance(op='list')`. | |
| datastore | Yes | the table, by name or number. | |
| id_column | No | where the lemlist lead id is written back. | lemlist_lead_id |
| batch_size | No | rows per call with `filter` (1-50). | |
| campaign_id | Yes | lemlist campaign id WITH its `cam_` prefix. | |
| deduplicate | No | skip a lead whose email is already in another campaign. | |
| field_mapping | Yes | {lead field: column}. Lead fields are those of lemlist_create_lead (email, first_name, last_name, company_name, job_title, linkedin_url, phone, company_domain, icebreaker, timezone, contact_owner); any other key becomes a custom variable. A row needs an email, a linkedin_url or a phone. | |
| status_column | No | where pushed | duplicate | failed is written back; the code of a duplicate or a failure goes in its `comment` layer. | lemlist_status |