Run email and LinkedIn as one sequence.
Lemlist is an outreach sequencer, and one of the 54 tools hyreflow connects to Claude, ChatGPT and other AI assistants. Through hyreflow, an AI agent can run 20 actions: 9 that look something up and 11 that create or change records. Lemlist runs on your own Lemlist account: hyreflow charges no credits for it, and Lemlist bills you as before.
Lemlist (lemlist.com) is an outreach sequencer. lemlist sends across both channels, so a candidate who ignored the email gets a LinkedIn touch inside the same campaign. Your agent loads the leads and reports on who engaged. Nothing starts sending until you say so.
lemlist is activation. It takes a validated list and turns it into conversations.
With hyreflow connected, you ask for the outcome in plain language and the assistant runs Lemlist for you. For example:
You connect hyreflow once over MCP, and Lemlist comes with it, next to the other 53 tools. You do not need to run a separate Lemlist MCP server.
In Claude, ChatGPT or any other MCP client, add a custom connector named hyreflow with the server URL https://recruit.hyreflow.ai/api/v2/mcp. The MCP setup guide on hyreflow.ai has the exact steps for each app.
A browser window opens. Sign in, choose the workspace the assistant may act on, and approve. The connection is live.
Lemlist runs on your own Lemlist account. Connect it on the Integrations page in hyreflow, and hyreflow charges no credits for its calls.
Tell Claude or ChatGPT what you want done with Lemlist in plain language. The assistant picks the Lemlist action that fits and runs it through hyreflow.
Using Cursor, Claude Code or another client? Every one is covered in the MCP setup guide.
In a hyreflow run, Lemlist is most often paired with Enrichley, HeyReach, Recruiterflow and Prospeo.
clean addresses before a multichannel sequence starts
more LinkedIn volume than lemlist alone will carry
replies belong on the record, not in an inbox
the enrichment that fills the sequence
Other outreach sequencers hyreflow connects: EmailBison, HeyReach, Instantly, Reply.io, SendKit and SmartLead. They run through the same connector, so you can switch, or combine them in one run, without new setup.
Through hyreflow, an AI agent can run 20 Lemlist actions: 9 that look something up and 11 that create or change records. Lemlist runs on your own Lemlist account: hyreflow charges no credits for it, and Lemlist bills you as before.
| Lemlist action | What it does | Cost through hyreflow |
|---|---|---|
| Enrich lead | Looks something up | no hyreflow credits |
| Add conditional step | Creates or changes a record | no hyreflow credits |
| Add lead to campaign | Creates or changes a record | no hyreflow credits |
| Add lead variables | Creates or changes a record | no hyreflow credits |
| Add sequence step | Creates or changes a record | no hyreflow credits |
| Create campaign | Creates or changes a record | no hyreflow credits |
| Start campaign | Creates or changes a record | no hyreflow credits |
| Delete sequence step | Creates or changes a record | no hyreflow credits |
| Pause campaign | Creates or changes a record | no hyreflow credits |
| Remove lead from campaign | Creates or changes a record | no hyreflow credits |
| Lemlist action | What it does | Cost through hyreflow |
|---|---|---|
| Update sequence step | Creates or changes a record | no hyreflow credits |
| Upsert contact | Creates or changes a record | no hyreflow credits |
| Get activities | Looks something up | no hyreflow credits |
| Get campaign | Looks something up | no hyreflow credits |
| Get campaign leads | Looks something up | no hyreflow credits |
| Get campaign sequences | Looks something up | no hyreflow credits |
| Get campaign stats | Looks something up | no hyreflow credits |
| Get campaigns | Looks something up | no hyreflow credits |
| Get contacts | Looks something up | no hyreflow credits |
| Get team | Looks something up | no hyreflow credits |
One credit is priced on the pricing page. The full price list for every tool is in the pricing tables.
28 hyreflow skills call Lemlist as part of the run. A skill is a whole pipeline your agent already knows, end to end.
use whenyou have years of placements in your database and no habit of asking those people who else is good
use whenan industry event has published its speakers and the people on stage look like the hire your client wants
use whenyou have a live role and want a shortlist you would actually send to the client, not a raw export
use whenyou placed someone a while ago and the three, six or twelve month point is coming up, which is when a short note to the candidate and the client does the most good
use whenyou have an excellent candidate on the bench and no live role to put them into
use whenhiring managers in your market announce roles in a LinkedIn post before, or instead of, a job ad
hyreflow ships a written playbook for Lemlist, and the agent loads it before the first call. Auth, rate limits, what each call costs, which actions need your approval, and the mistakes worth avoiding. It is the difference between an agent that knows the tool and one that guesses at it.
Read the Lemlist docs →HOW in lib/lemlist.py. Endpoint set cached at reference/docs/lemlist/raw/llms.txt.
https://api.lemlist.com/api · Auth: HTTP Basic — API key as the password, empty username (client sets auth=('', key)). Env LEMLIST_API_KEY; never hardcode. get_team() = safe read-only pilot..md + llms.txt, 2026-06-01). QUIRK: version=v2 query param required on get_campaigns (defaulted) and other v2 reads. Add-lead is POST /api/campaigns/{id}/leads/ with email in the body (not the path). Rate limit 20 req/2s. Full index: reference/docs/lemlist/raw/endpoints.md; endpoints not covered by a listed method (companies, inbox, schedules, etc.) aren't available yet.start_campaign begins sending; add_lead_to_campaign enrolls a lead into active sending — approval-gate (pilot, confirm, then batch).Campaigns: get_campaigns, get_campaign, get_campaign_stats, start_campaign, pause_campaign. Leads: add_lead_to_campaign, remove_lead_from_campaign. Contacts: get_contacts, upsert_contact. Plus get_activities, enrich_lead, get_team. The callable surface below has the full list, including campaign/sequence creation.
Activation layer (multichannel). Enriched+validated leads → add to campaign → review → start. get_activities feeds reply/interest tracking back to the ATS.
Field-shape note: these are vendor-native operational notes. The client returns the raw vendor JSON and uses the method names in this file — read field shapes accordingly (no normalized-wrapper /
result.data.prefix).
Flow: create/list campaign -> add sequence steps -> add contacts in small batches (10-25) -> review in the Lemlist UI (web_url returned on create/update) -> monitor activities/inbox.
email, linkedinInvite, linkedinSend, linkedinVisit, manual, phone, api, whatsappMessage, conditional, sendToAnotherCampaign.172800 ("seconds") triggers a > 1500 days API error.all, contacted, interested, notInterested, emailsBounced, paused, emailsSent, emailsOpened, emailsReplied.emailsSent, emailsOpened, emailsClicked, emailsReplied, emailsBounced, emailsUnsubscribed.send_email requires send_user_id, send_user_email, send_user_mailbox_id - list the inbox first to discover them.linkedin_url within a batch are rejected; cross-batch dupes can 409.Call via the CLI: hyreflow tools execute lemlist <method> --payload '{...}' (preview with --dry-run; hyreflow tools get lemlist <method> returns the live contract + cost). Base: https://api.lemlist.com/api. Only the methods listed below are callable.
add_conditional_step(sequence_id: str, condition_key: str, *, delay_type: str = 'within', delay: int | None = None, index: int | None = None) -> Any — POST /api/sequences/{sequenceId}/steps with type='conditional' — adds a branch point and RETURNS conditions: [{sequenceId, label, key, delayType, delay}, {sequenceId, fallback:true}] — i.e. an accepted-branch sequenceId AND a fallback (not-met) sequenceId. Add follow-up steps into those branch sequence ids via add_sequence_step(branch_seq_id, ...). condition_key e.g.add_lead_to_campaign(campaign_id: str, *, email: str | None = None, linkedin_url: str | None = None, payload: dict | None = None, variables: dict | None = None, **query) -> Any — POST /api/campaigns/{campaignId}/leads/ — add a SINGLE lead (CONFIRMED). This is a single-lead call with top-level fields — there is NO contacts:[…] array shape (that 400s). email is OPTIONAL — a LinkedIn-only lead works with just linkedin_url (verified live 2026-06-02). Provide at least one of email / linkedin_url. Standard fields go in payload: firstName, lastName, companyName, jobTitle, phone, companyDomain, icebreaker, timezone, contactOwner, picture.add_lead_variables(lead_id: str, variables: dict) -> Any — POST /api/leads/{leadId}/variables?{{name}} renders in the sequence. Custom field names + values are passed as QUERY params, NOT a JSON body (CONFIRMED from developer.lemlist.com). ⚠️ CREATE-only: a name that collides with a lemlist default var (email, firstName, lastName, picture, phone, linkedinUrl, companyName, companyDomain, icebreaker) OR an already-set custom var ERRORS — pass only NEW custom keys. Needs the leadId (the _id from add_lead_to_campaign's response). variables: {name: value, …}. Returns {ok: true}.add_sequence_step(sequence_id: str, type: str = 'email', *, subject: str | None = None, message: str | None = None, delay: int | None = None, index: int | None = None, **fields) -> Any — POST /api/sequences/{sequenceId}/steps — add a step. type ∈ email|manual|phone|api| linkedinVisit|linkedinInvite|linkedinSend|linkedinVoiceNote|conditional|whatsappMessage|sms|… Email step: subject (≤400), message (HTML body), delay (days, 0–1500; default 0 first/1 after), index (position, -1=end). No sender required. Extra fields (altMessage, url, method, conditionKey, images, videos…) via **fields. CONFIRMED live.create_campaign(name: str, *, timezone: str | None = None, auto_review: bool | None = None, auto_review_conditions: list[str] | None = None) -> Any — POST /api/campaigns — create a campaign; returns state: running, NOT draft, so pause it before building the sequence.delete_sequence_step(sequence_id: str, step_id: str) -> Any — DELETE /api/sequences/{sequenceId}/steps/{stepId} — remove a step. CONFIRMED live 2026-06-02 (note: needs the sequenceId in the path — /sequences/steps/{id} returns 405).enrich_lead(payload: dict) -> Any — POST /enrich — enrich a lead (see api-reference/endpoints/enrich).get_activities(**params) -> Any — GET /activities — outreach activity events (opens, replies, etc.).get_campaign(campaign_id: str) -> Anyget_campaign_leads(campaign_id: str, *, state: str | None = None, limit: int | None = None, **params) -> Any — GET /api/campaigns/{campaignId}/leads/ — read the leads currently in a campaign (synchronous; the practical counterpart to the async CSV export). Returns an array of lead objects with their fields, INCLUDING any custom merge variables set via add_lead_variables — so it's how you VERIFY variables persisted. Query: state (scanned|contacted|interested|notInterested|paused|…), limit (default 100, max 500). Sorted newest-first; no cursor paging. CONFIRMED from developer.lemlist.com.get_campaign_sequences(campaign_id: str) -> Any — GET /api/campaigns/{id}/sequences — the campaign's sequence(s) (each has _id = sequenceId).get_campaign_stats(campaign_id: str, *, start_date: str, end_date: str, **params) -> Any — GET /api/campaigns/{campaignId}/stats — campaign performance over a date window.get_campaigns(*, version: str = 'v2', **params) -> Any — GET /api/campaigns — list campaigns. version=v2 is REQUIRED (defaulted here); supports offset/limit (max 100)/page, sortBy=createdAt, sortOrder, status, createdBy.get_contacts(**params) -> Anyget_team() -> Any — GET /team — team info (safe read-only pilot).pause_campaign(campaign_id: str) -> Anyremove_lead_from_campaign(campaign_id: str, email: str) -> Anystart_campaign(campaign_id: str) -> Any — POST /campaigns/{id}/start — starts sending (outreach!). Approval-gate.update_sequence_step(sequence_id: str, step_id: str, **fields) -> Any — PATCH /api/sequences/{sequenceId}/steps/{stepId} — update a step (subject, message, delay, …).upsert_contact(payload: dict) -> Any — Create/update a contact (see api-reference/endpoints/contacts/upsert-contact).Yes. hyreflow is a connector for Claude, ChatGPT and other AI assistants. Once hyreflow is connected, you ask for the outcome in plain language and the assistant calls Lemlist for you. hyreflow exposes 20 Lemlist actions this way.
Yes. Lemlist runs on your own Lemlist account. You connect it to hyreflow once, hyreflow charges no credits for the calls, and Lemlist bills you as before.
Lemlist runs on your own Lemlist account: hyreflow charges no credits for it, and Lemlist bills you as before.
Add the hyreflow MCP server to your assistant and sign in. hyreflow calls the Lemlist API directly and exposes its actions as tools the assistant can run, so there is no separate Lemlist server to install.
Connect hyreflow to Claude or ChatGPT and ask for the outcome. It reads the playbook above before it makes a single call.