Sequencer Lead Push Instantly Smartlead Clay Outbound avatar

Sequencer Lead Push Instantly Smartlead Clay Outbound

Pricing

from $8.50 / 1,000 lead pushed to sequencers

Go to Apify Store
Sequencer Lead Push Instantly Smartlead Clay Outbound

Sequencer Lead Push Instantly Smartlead Clay Outbound

Pushes Clay-enriched leads into an Instantly or Smartlead campaign. Maps Clay column names to sequencer fields, gates on ICP score, deduplicates against the campaign, and batches the push. Dry run returns the exact payload without sending. Instantly API v2 and Smartlead API v1.

Pricing

from $8.50 / 1,000 lead pushed to sequencers

Rating

0.0

(0)

Developer

Mamba Labs

Mamba Labs

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 hours ago

Last modified

Share

Instantly and Smartlead Lead Push

Push Clay-enriched leads straight into an Instantly or Smartlead campaign. ICP score gating and deduplication are built in.

Give it a list of lead rows, or the dataset ID of an upstream Apify run. It maps your Clay column names to the sequencer's field names, drops anything below your ICP score threshold, drops anything already in the campaign, and pushes the rest in batches.

Read this first, it might save you money

The real alternative to this actor is Clay's own sequencer push, which is built into Clay and costs nothing extra if you are on an eligible plan. If you have that, use it. It is native, it has a UI, and it is free to you.

This actor is for the people that one does not cover:

  • Clay users on a plan tier that does not include the native Instantly or Smartlead integration, where the choice is a plan upgrade or a per-lead cost
  • Apify-native pipelines with no Clay subscription at all, where leads are enriched by Apify actors and need to reach a sequencer
  • Agencies running many client campaigns that want an API-triggered push step instead of a manual CSV import

This actor does not beat Clay's integration. It reaches the cases Clay's integration does not.

Supported sequencers

SequencerAPINotes
Instantlyv2Needs a v2 API key. Keys from v1 do not work: Instantly deprecated v1 on January 19, 2026.
Smartleadv1Current. Smartlead has no v2.

The campaign has to exist already. This actor adds leads to a campaign, it does not create one.

How it works

  1. Read. Takes either leads (an array of rows) or dataset_id (an Apify dataset from an upstream run). If you supply both, leads wins and the run says so.
  2. Validate. Checks the sequencer name, the API key and the campaign ID. Rows with no usable email are counted and dropped here, not silently.
  3. ICP gate. Drops rows whose icp_score is below min_icp_score. Rows with no score at all are kept, because unscored is not the same as low.
  4. Deduplicate. Reads the campaign's existing leads and drops any email already there. Repeats inside your own input are dropped too.
  5. Map. Renames your Clay columns to the sequencer's field names. Anything not mapped and not named in custom_variables is dropped.
  6. Push. Sends in batches, 500 per call for Instantly and 400 per call for Smartlead, with a pause between batches to stay inside each vendor's rate limit.

Input

FieldTypeRequiredNotes
sequencerstringyesinstantly or smartlead
api_keystringyesYour v2 Instantly key or your Smartlead key. Not needed for a dry run with deduplication off, which makes no calls at all.
campaign_idstringyesThe target campaign. Instantly IDs are UUIDs, Smartlead IDs are numeric.
leadsarrayone ofLead rows. Each needs an email at minimum.
dataset_idstringone ofAn Apify dataset ID from an upstream run. Used only when leads is empty.
min_icp_scoreintegernoDrop leads scoring below this. Default 0, which pushes everything.
deduplicatebooleannoCheck the campaign before pushing. Default true.
field_mappingobjectnoOverride the default map. Keys are your Clay column names, values are sequencer field names.
custom_variablesarraynoExtra Clay column names to pass through under their own name.
dry_runbooleannoPreview without sending. Default false.

Default field mapping

Clay columnInstantlySmartlead
emailemailemail
first_namefirst_namefirst_name
last_namelast_namelast_name
company_namecompany_namecompany_name
company_domainwebsitecompany_url
linkedin_person_urlcustom_variables.linkedin_urllinkedin_profile
personalization_linepersonalizationcustom_fields.personalization
icp_tiercustom_variables.icp_tiercustom_fields.icp_tier
icp_scorecustom_variables.icp_scorecustom_fields.icp_score

Anything not in this table and not in custom_variables is dropped.

The two sequencers do not accept the same field names, which is why the columns differ. Instantly has a native personalization field and no LinkedIn field; Smartlead has a native linkedin_profile field and no personalization field. Each one's leftovers go into that vendor's custom bucket.

Overriding the mapping

field_mapping merges over the defaults. Add a column, point a column somewhere else, or set a value to an empty string to drop it.

{
"field_mapping": {
"job": "job_title",
"company_domain": "",
"icp_tier": "tier"
}
}

You do not have to know which target names are native. If you name a field the sequencer does not have, it is sent as a custom variable instead of breaking the request. This matters on Instantly, where one unrecognized top-level key rejects the entire batch.

custom_variables

field_mapping renames columns. custom_variables passes them through under the name they already have.

{ "custom_variables": ["headcount", "funding_stage", "tech_stack"] }

Those three columns land in custom_variables on Instantly and custom_fields on Smartlead, ready to use as merge tags in your sequence copy. Values that are not text or numbers are converted to JSON text, because neither vendor accepts nested objects in a custom field.

dry_run

dry_run: true runs every step, including the deduplication read, then publishes the exact request batches it would have sent and stops. No lead is created, and nothing is billed.

Use it to check a mapping before spending anything, especially the first time you point the actor at a new campaign. The published payload is the real one, so what you see is what a live run would send. Your API key is never included in it.

A dry run with deduplicate: false makes no calls at all and needs no API key, so you can try the actor before you have credentials to hand.

Output

One row per run.

FieldTypeDescription
total_leads_receivedintegerRows read from the input
leads_invalidintegerRows dropped for having no usable email
leads_below_min_scoreintegerRows dropped by the ICP gate
leads_deduplicatedintegerRows dropped as duplicates
leads_eligibleintegerRows that passed every gate and were sent, or on a dry run would have been
leads_pushedintegerLeads the sequencer confirmed it created. This is the number billed.
leads_skipped_by_sequencerintegerSent, accepted as a request, but not created by the vendor. Usually a blocklist or duplicate rule. Not billed.
leads_failedintegerLeads in a batch the sequencer rejected. Not billed.
failed_emailsarrayOne {email, error} per failure, carrying the vendor's own message
dry_run_payloadarrayOn a dry run, the exact batches that would have been sent
vendor_api_versionstringWhich vendor API the run used
dedupe_completebooleanFalse when the existing-lead lookup stopped early, so the check was partial
run_datestringISO 8601 timestamp
sequencerstringEchoed from the input
campaign_idstringEchoed from the input
dry_runbooleanWhether this run wrote anything
is_summary_rowbooleanTrue when the run could not process leads, for example a validation failure
noticestringAnything the run needs to tell you that is not a count

The counts always add up, in both directions:

total_leads_received = leads_invalid + leads_below_min_score + leads_deduplicated + leads_eligible
leads_eligible = leads_pushed + leads_skipped_by_sequencer + leads_failed

If a lead does not arrive in your campaign, one of those counters says why. Nothing disappears quietly.

Sample input

{
"sequencer": "instantly",
"api_key": "your-instantly-v2-key",
"campaign_id": "019fdec7-6915-70ab-be87-8bdc0bb78acf",
"min_icp_score": 70,
"deduplicate": true,
"dry_run": false,
"custom_variables": ["headcount"],
"leads": [
{
"email": "jane.doe@example.com",
"first_name": "Jane",
"last_name": "Doe",
"company_name": "Example Inc",
"company_domain": "example.com",
"linkedin_person_url": "https://www.linkedin.com/in/example",
"personalization_line": "Saw you are hiring two SDRs this quarter.",
"icp_tier": "A",
"icp_score": 88,
"headcount": 250
}
]
}

Full pipeline

This actor is built to sit at the end of a chain. Each step passes its dataset ID to the next.

  1. GTM Hiring Signal Scraper finds companies hiring for go-to-market roles
  2. GTM Tech Stack Signal Scraper reads what they run
  3. ICP Fit Scorer turns those signals into an icp_score and an icp_tier
  4. This actor gates on that score and pushes what survives into your campaign

Set dataset_id to the ICP Fit Scorer's output and min_icp_score to your threshold, and the whole chain runs without a CSV.

Pricing

Pay per event. You are charged for one thing: a lead the sequencer confirms it created.

PlanPer lead pushed
Free$0.0100
Bronze$0.0095
Silver$0.0090
Gold$0.0085

Free, in every case:

  • Leads dropped by the ICP gate
  • Leads dropped by deduplication
  • Leads with no usable email
  • Leads the sequencer rejected or skipped
  • Every lead in a dry run

A 500-lead campaign costs $4.75 on Bronze. If half your list fails the ICP gate, it costs $2.38, because the gated half was never charged.

The Apify actor start fee of $0.00005 applies per run, as it does to every actor on the platform.

Known limitations

  • The campaign must already exist. This actor adds leads to a campaign. It does not create campaigns or write sequence copy.
  • Instantly needs a v2 key. A v1 key returns an authentication error. v1 was deprecated on January 19, 2026 and v2 keys are generated separately.
  • Smartlead deduplication walks the campaign. Smartlead's lead list has no email filter, so checking a large campaign means paging through it. The walk stops at 20,000 leads and sets dedupe_complete to false when it does. Instantly is not affected: its API filters by email directly.
  • Vendor-side skips are visible but not itemized. Both sequencers report how many leads they skipped for their own blocklist and duplicate rules, but neither says which ones. The count lands in leads_skipped_by_sequencer.
  • No proxy configuration. These are authenticated API calls to two vendors, not scraping, so there is nothing to rotate.
  • ICP Fit Scorer produces the icp_score and icp_tier this actor gates on
  • GTM Hiring Signal Scraper and GTM Tech Stack Signal Scraper produce the signals that feed the scorer
  • Domain Deliverability Checker checks your sending domains before you point a campaign at them

Built by Mamba Labs.