Weekday Apollo prospect verify and Instantly campaign load

Every weekday morning, fresh Apollo prospects get email-verified and only the deliverable ones go into your Instantly cold outreach campaign.

Agentic Task
ApolloNeverBounceInstantlySlack BotSalesLead EnrichmentData SyncNotifications & Alerts

Build me a weekday-morning agent workflow on a cron trigger (Monday through Friday at 8am Eastern, schedule and timezone configurable) that takes my freshly built Apollo prospect list, verifies it with NeverBounce, and only pushes the deliverable contacts into an Instantly cold outreach campaign so I stop burning sender reputation on dead inboxes.

Before doing anything else, call NeverBounce's Get Account Info to check the credit balance. If the free-plus-paid balance is under a configurable threshold (default 500 credits), bail out, do not kick off a verification job, and post a Slack heads-up to my sales ops channel saying the run was skipped because of low credits. Use slackbot's Send a Message for every Slack post in this workflow.

Next, call Apollo's Search Contacts to pull every contact added or updated in the last 24 hours that matches a configurable filter on stage, label, or owner. Page through results until you have the full batch. If zero contacts come back, short-circuit: do not create a NeverBounce job, do not touch Instantly, and post a single tidy 'nothing new today' line to the Slack channel so I know the workflow ran clean.

If there are contacts to process, hand the batch of emails to NeverBounce via Create Bulk Verification Job with auto_parse and auto_start both enabled. Then poll Get Bulk Job Status with exponential backoff (start around 5 seconds, cap around 60 seconds, with a sensible overall timeout) until job_status reports complete. If the job lands in under_review, surface that in the Slack summary at the end rather than hanging forever.

Once the job is complete, page through Retrieve Bulk Job Results and bucket the contacts by result code: valid, invalid, catchall, disposable, unknown. Keep every contact marked valid. Treat catchall as opt-in via a config flag (default off); if the flag is on, include catchall in the kept set. Drop invalid, disposable, and unknown.

Take the kept contacts and push them into a specified Instantly campaign using Add Leads in Bulk (chunk into batches of up to 1000, with skip_if_in_workspace and skip_if_in_campaign deduplication on, and the global blocklist check on). Map the Apollo email as the lead's email (the primary identifier), plus first name, last name, company name, and title across to Instantly.

Finish with a Slack summary to the sales ops channel showing: total contacts pulled from Apollo, the NeverBounce result breakdown (valid, invalid, catchall, disposable, unknown), how many leads were added to the Instantly campaign, and how many were held back along with the reason. Keep it tidy enough to scan in five seconds.

Configurable inputs I should be able to edit without rebuilding the workflow: the cron schedule and timezone; the Apollo filter (stage value, label name, or owner ID, plus the lookback window); the credit balance threshold; the include_catchall flag; the Instantly campaign ID; and the Slack channel ID for the summary and the low-credit warning.

Additional information

What does this prompt do?
  • Pulls contacts added or updated in your Apollo list over the last 24 hours, every weekday morning.
  • Bulk-verifies every email with NeverBounce and keeps only the addresses that are safe to send to.
  • Loads the clean list into your chosen Instantly campaign and drops dead, disposable, and risky addresses on the floor.
  • Posts a Slack summary so sales ops can see what was pulled, what was kept, and what was held back.
What do I need to use this?
  • An Apollo account (the API key under Settings, Integrations, Apollo API).
  • A NeverBounce account with enough credits to verify a typical daily batch.
  • An Instantly account on the Growth plan or higher (API v2 key with leads:create and campaigns:read).
  • A Slack workspace and the channel you want the daily summary posted to.
  • The Apollo filter you want to pull on (stage, label, or owner) and the Instantly campaign you want clean leads loaded into.
How can I customize it?
  • Change the schedule. Run it later in the morning, only on certain days, or in your local timezone instead of Eastern.
  • Tweak the Apollo filter so it pulls by stage, by list label, or by contact owner, and adjust the lookback window.
  • Decide whether to include catchall addresses. Off by default to protect sender reputation, but you can flip it on if you want more volume.
  • Swap the Instantly campaign, the Slack channel, and the credit balance threshold that triggers the low-credits warning.

Frequently asked questions

What happens on a day when Apollo has no new prospects?
The workflow short-circuits. It does not create a NeverBounce job, it does not touch Instantly, and it posts a single quiet line to Slack so you know it ran and there was nothing to process.
Will catchall addresses get loaded into my Instantly campaign?
No, not by default. Catchalls are domains that accept all mail, so deliverability is uncertain and sending to them can hurt your sender reputation. There is an opt-in flag you can flip on if you want to include them.
What if my NeverBounce credits run out?
The workflow checks your NeverBounce credit balance before it kicks off the job. If you are below the threshold you set, it skips the run entirely and pings your Slack channel so you can top up before tomorrow.
Can I change which Instantly campaign the clean leads go into?
Yes. The Instantly campaign is a configurable input. You can also change it later by editing the workflow without rebuilding anything.
Will this work with my Slack channel if our workspace is on Enterprise Grid?
Yes. The Slack summary posts as a bot, so it works in regular workspaces and in Enterprise Grid orgs. Make sure the bot is added to the sales ops channel before the first run.

Stop torching sender reputation on dead inboxes.

Connect Apollo, NeverBounce, Instantly, and Slack once, and Geni runs the cleanup every weekday morning.