The 5-tool problem

Building an outbound campaign manually looks like this:

  1. Apollo or LinkedIn Sales Nav to build the list
  2. Hunter or Prospeo to find emails
  3. ZeroBounce or NeverBounce to verify
  4. ChatGPT or Claude to write personalized lines
  5. Instantly or Lemlist to send

Each tool has its own login, billing model, and export format. A 200-contact campaign takes 2-3 hours of tab-switching.

How to build a campaign in one prompt

Step 1: Describe your ICP

Tell Claude Code

Find 50 VPs of Engineering at Series B US SaaS companies with 100-500 employees. Enrich via waterfall for verified emails. Generate a personalized first line for each. Push to my Instantly campaign 'Eng Leaders Q2'. Start with 5 as a pilot.

Claude Code reads the Deepline campaign builder skill and searches the live Play catalog. If no prebuilt fits, it creates an owned Play:

deepline plays search "company contacts" --json
deepline plays describe prebuilt/company-to-contact --json
deepline plays describe prebuilt/name-and-domain-to-email-waterfall --json
# Claude Code authors eng-leaders-campaign.play.ts from the inspected contract.
deepline plays check eng-leaders-campaign.play.ts
head -n 6 icp-search.csv > pilot.csv
deepline plays run --file eng-leaders-campaign.play.ts --csv pilot.csv --watch

Step 2: Review the pilot

Deepline runs 5 contacts first. You see:

  • Each contact with verified email
  • The personalized first line
  • Credits used
Tell Claude Code
Looks good. Run the full list and push to Instantly.

Step 3: Scale to full list

Claude Code reruns the same checked Play on the full input. Provider calls, scoring, and the idempotent sequencer write stay inside the Play so the run has durable receipts:

deepline plays check eng-leaders-campaign.play.ts
deepline plays run --file eng-leaders-campaign.play.ts --csv icp-search.csv --watch

Results land in your sequencer ready to send.

What happens under the hood

StageWhat Deepline does
List buildingApollo search filtered to your ICP criteria
Email enrichmentWaterfall across 10+ providers, cheapest first
VerificationLeadMagic or IPQualityScore validation
PersonalizationClaude writes a one-sentence opener per contact
Sequencer pushInstantly, Smartlead, or Lemlist API import

Cost breakdown

Campaign sizeCreditsManaged mode cost
50 contacts30-40~$0.30-0.40
200 contacts120-150~$1.20-1.50
500 contacts300-400~$3-4

Personalization adds ~1 credit per contact. Sequencer push is BYOK; managed mode meters provider calls.

Who uses this

  • GTM engineers building repeatable outbound systems
  • Founders running founder-led sales
  • Agencies spinning up campaigns across multiple clients

Deploy as a weekly workflow

Once the one-off works:

Tell Claude Code
Deploy this as a workflow that runs every Monday at 8am.

Claude Code adds the cron binding to the Play's definePlay options:

{
  cron: { schedule: '0 8 * * 1', timezone: 'America/New_York' },
}

It checks the source, publishes it, and verifies the live contract:

deepline plays check eng-leaders-campaign.play.ts
deepline plays publish eng-leaders-campaign.play.ts
deepline plays describe eng-leaders-campaign --json
deepline plays versions --name eng-leaders-campaign --json

Fresh leads, fresh personalization, every week. Run history in the dashboard.

Common questions

1Can I customize the personalization prompt?+

Yes. Add instructions: 'Reference their company's recent funding round if available. Keep it under 15 words.'

2What sequencers are supported?+

Instantly, Smartlead, Lemlist, HeyReach. More coming.

3What if my ICP is more specific?+

Add filters: 'Must be hiring engineers. Must use Snowflake or dbt.'

Campaign builder flow: ICP to list to enrichment to personalization to sequencer