Sequencer Event Poller
Pricing
from $6.80 / 1,000 event rows
Sequencer Event Poller
Read replies, bounces, unsubscribes, meetings booked, interest changes, and LinkedIn replies from Instantly, Smartlead, HeyReach, and lemlist on your own API keys. One flat row per event for a time window, only new events on scheduled runs. Read only: it never sends or edits.
Pricing
from $6.80 / 1,000 event rows
Rating
0.0
(0)
Developer
Mamba Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 hours ago
Last modified
Categories
Share
Read the replies, bounces, unsubscribes, meetings booked, interest changes, and LinkedIn replies from your Instantly, Smartlead, HeyReach, and lemlist accounts in one place. Add your own API key for one or more of them, pick a time window, and get one flat row per event: who, which campaign, what happened, when, and the reply text where the vendor returns it. Schedule it daily with Only new events on and each run returns only what changed since the last one. Rows export to CSV or drop into a Clay table, a CRM import, or a reply routing step.
The actor only reads your account. It never creates, edits, pauses, or sends anything in a sequencer, and it never creates a campaign.
Features
- Four sequencers, one row layout. Instantly, Smartlead, HeyReach, and lemlist events land in the same columns, so one table holds every reply across tools.
- Your own API key. Each vendor is read on the key you supply, from your own account. Keys are used for the run only, never stored, and never written to a row or a log.
- Only new events. On a schedule, an event an earlier run returned is skipped and not charged.
- A run summary row, always. One free row per run with counts per vendor and event type and the status of each vendor (ok, partial, error, or skipped), so a refused key or a page limit is visible, not silent.
- Read only by construction. One function sends every request, and it refuses any call that is not a read. The only POST calls are the two search endpoints Instantly and HeyReach expose as POST to list records. The
request_login the run'sRUN_SUMMARYrecord lists the method, endpoint, and status of every call, so you can check it yourself. - Cost guards. Max pages per query, max events per run, and a max charge per run.
Which vendor reports which event
| Event type | Instantly | Smartlead | HeyReach | lemlist |
|---|---|---|---|---|
reply (email) | yes, received emails in the primary inbox | yes, campaign statistics | yes | |
linkedin_reply | yes, inbox conversations whose last message is from the lead | yes | ||
bounce | yes, bounced leads | yes | yes | |
unsubscribe | yes, unsubscribed leads | yes | yes | |
meeting_booked | yes, lead interest status | yes | ||
interested | yes | yes | ||
not_interested | yes | yes | ||
out_of_office | yes | yes | ||
connection_accepted | yes | |||
open | yes | yes | ||
click | yes | yes |
Instantly reports bounces and unsubscribes as a lead status, not as a dated event, so a bounce's time is the lead's last send and an unsubscribe's time is when the lead record last changed. HeyReach is read for LinkedIn replies only. A blank cell means the vendor's public API gives no read for that event, and the actor does not guess one.
Input
| Field | Type | Default | What it does |
|---|---|---|---|
instantly_api_key | string, secret | Your Instantly API v2 key with a read scope. Instantly API access needs a paid Instantly plan | |
smartlead_api_key | string, secret | Your Smartlead API key | |
heyreach_api_key | string, secret | Your HeyReach API key | |
lemlist_api_key | string, secret | Your lemlist API key | |
since_hours | integer | 24 | Look back this many hours, at most 2160 (90 days) |
since, until | string | Optional exact window in UTC, for example 2026-10-20T00:00:00Z | |
event_types | array | reply, linkedin_reply, bounce, unsubscribe, meeting_booked, interested, connection_accepted | Which events to return |
only_new | boolean | true | Skip events an earlier run returned (free) |
state_key | string | Name for the only new events memory | |
instantly_campaign_ids, smartlead_campaign_ids, heyreach_campaign_ids, lemlist_campaign_ids | array | Read only these campaigns. Empty: every campaign the key can see (Smartlead drafts are skipped) | |
max_pages_per_query | integer | 20 | Pages of 100 records per vendor query |
max_events | integer | 5000 | Event rows per run, oldest first |
max_charge_usd | string | Stop before a charge that would pass this amount |
With no key at all, the run returns one free run summary row with row_status skipped and a note saying no key was given.
Output
One row per event, plus one run summary row per run. Every row has the same columns.
| Field | Type | Example |
|---|---|---|
row_type | string | event or run_summary |
event_id | string | lemlist:reply:act_1 |
vendor | string | lemlist |
event_type | string | reply |
vendor_event_type | string | emailsReplied |
channel | string | email |
occurred_at | string | 2026-10-20T18:00:00.000Z |
lead_email, lead_first_name, lead_last_name, lead_company, lead_linkedin_url | string | lucia@example.com |
campaign_id, campaign_name | string | cam_1, EU founders |
sender_account | string | the sending mailbox or LinkedIn account, when returned |
subject | string | email subject, when returned |
message_excerpt | string | first 500 characters of the reply, when returned |
sequence_step | integer | 2 |
vendor_record_id | string | the vendor's own record id |
is_new | boolean | true with Only new events on |
window_start, window_end | string | the window read |
vendors_checked, vendors_skipped, event_count, new_event_count, counts_json, vendor_status_json | run summary only | counts and per vendor status |
row_status | string | ok, no_change, skipped, partial, or error |
error_reason | string | why a summary is not ok |
billable_events_json | string | {"event-row":1}, or {} for a free row |
checked_at | string | when the row was written |
Pricing
Pay per event. You pay for event rows and the run start. The run summary row is free, already delivered events are free, and a run with no key charges only the start.
| Event | Free plan | Bronze | Silver | Gold |
|---|---|---|---|---|
event-row, one sequencer event | $0.008 | $0.0076 | $0.0072 | $0.0068 |
apify-actor-start, once per run (one per GB of memory; the default 128 MB is one) | $0.001 | $0.001 | $0.001 | $0.001 |
Per 1,000 event rows: $8.00 on the free plan, $6.80 on Gold.
Free plan cap: 1.50 USD of evaluation a month, about 188 event rows. Any paid Apify plan removes the cap, and it resets on the 1st. The run stops before a charge that passes your maximum charge per run in Apify or your max_charge_usd.
Mamba Labs pays the platform costs of your run. The vendor API calls run on your own API key and your own vendor account, under that vendor's plan and rate limits. This actor adds no charge from any vendor.
Usage examples
Apify Console or API. Add your keys, set Look back to 24 hours, and schedule the actor daily. Read the dataset with GET https://api.apify.com/v2/datasets/{datasetId}/items.
{"lemlist_api_key": "YOUR_LEMLIST_API_KEY","smartlead_api_key": "YOUR_SMARTLEAD_API_KEY","since_hours": 24,"event_types": ["reply", "linkedin_reply", "bounce", "meeting_booked"],"only_new": true}
Clay. Run the actor from a Clay HTTP column or the Apify integration and map the flat columns. Every input accepts strings.
MCP. The Mamba Labs MCP server @mambalabsdev/mcp-sequencer-event-poller exposes the tool poll_sequencer_events to Claude and other MCP clients. Vendor keys come from the server environment.
Error handling
| Case | What you get |
|---|---|
| No key given | One free summary row, row_status skipped |
| A key is refused (HTTP 401 or 403) | That vendor reads error in vendor_status_json; the other vendors still run |
| The vendor rate limits the run (HTTP 429) | The request waits and retries up to 3 times |
| A query reaches Max pages per query | The summary row reads partial and names the query |
| No new events | One free summary row, row_status no_change |
| The only new events store cannot be opened | Every event in the window is returned, and the summary note says so |
Limitations
- The actor reads each vendor's public API as documented on 2026-10-21. A vendor that changes a field name can leave a column empty until the actor is updated.
- Instantly allows about 20 API requests a minute, so the actor waits about 3 seconds between Instantly requests. A large Instantly backfill takes minutes.
- Smartlead reply text, meeting, and interest events are not in its statistics endpoint, so Smartlead rows carry no message text and no meeting or interest events.
- HeyReach connection acceptances are not readable through its public API list endpoints, so they are not returned. lemlist reports them.
- Instantly bounce times are the lead's last send, and unsubscribe times are the lead record's last change; neither is a vendor event time.
- Live runs need your own vendor keys. The actor's tests use saved responses built from each vendor's public API documentation.
Mamba Labs actor suite
MCP servers for the suite are published under the npm scope @mambalabsdev.
Built by Mamba Labs.