The sync:outreach --target instantly path is the first real downstream sync in this repository. It supports dry runs by default and real writes only when you explicitly opt in.
Required configuration
| Variable or option | Purpose |
|---|---|
INSTANTLY_API_KEY |
API key used for campaign lookup and lead creation |
INSTANTLY_CAMPAIGN_ID or --campaign-id |
target campaign |
SALESPROMPTER_INSTANTLY_BASE_URL |
override the default Instantly API base URL |
Default base URL:
https://api.instantly.ai/api/v2
Dry run versus apply
Dry run is the default:
node ./dist/cli.js sync:outreach --target instantly --in ./data/scored.json --campaign-id "$INSTANTLY_CAMPAIGN_ID"
Real write:
node ./dist/cli.js sync:outreach --target instantly --in ./data/scored.json --campaign-id "$INSTANTLY_CAMPAIGN_ID" --apply
Dedupe behavior
Unless you pass --allow-duplicates, the CLI:
- lists the current campaign leads from Instantly
- builds a set of existing emails
- skips any scored lead whose email is already present
Use --allow-duplicates only when you intentionally want to bypass that protection.
Payload mapping
For each scored lead, the CLI sends:
- contact email
- split first and last name
- company name
- campaign id
- a rich
custom_variablesobject containing Salesprompter fields
Current custom_variables include:
salesprompter_domainsalesprompter_titlesalesprompter_industrysalesprompter_regionsalesprompter_employee_countsalesprompter_sourcesalesprompter_scoresalesprompter_gradesalesprompter_buying_stagesalesprompter_crm_fitsalesprompter_outreach_fitsalesprompter_signalssalesprompter_tech_stacksalesprompter_rationale
Typical output
The sync result reports:
- target
- number of synced leads
- number of skipped leads, when dedupe is active
- whether the run was dry run or applied
- provider name
- campaign id