The 5-tool problem
Building an outbound campaign manually looks like this:
- Apollo or LinkedIn Sales Nav to build the list
- Hunter or Prospeo to find emails
- ZeroBounce or NeverBounce to verify
- ChatGPT or Claude to write personalized lines
- 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
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
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
| Stage | What Deepline does |
|---|---|
| List building | Apollo search filtered to your ICP criteria |
| Email enrichment | Waterfall across 10+ providers, cheapest first |
| Verification | LeadMagic or IPQualityScore validation |
| Personalization | Claude writes a one-sentence opener per contact |
| Sequencer push | Instantly, Smartlead, or Lemlist API import |
Cost breakdown
| Campaign size | Credits | Managed mode cost |
|---|---|---|
| 50 contacts | 30-40 | ~$0.30-0.40 |
| 200 contacts | 120-150 | ~$1.20-1.50 |
| 500 contacts | 300-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:
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.'