Campaigns

Outbound email campaigns with prospect tracking, email sequences, and performance analytics. A lightweight CRM for AI-powered outreach.

Overview

Campaigns let you run outbound email sequences with prospect tracking. Each campaign is a folder containing configuration, prospect list, email templates, and activity logs.

How It Works

  1. Create a campaign folder — Copy _example-campaign/ and rename it
  2. Add your prospects — Import or manually add to prospects.csv
  3. Customize sequences — Edit templates.json with your email copy
  4. Configure settings — Set limits, timing, persona in config.json
  5. Run with AI — "Send next batch for [campaign]" or "Check campaign status"

Folder Structure

~/.config/pontius/knowledge/campaigns/
├── README.md # Documentation
├── _example-campaign/ # Copy this to start
│ ├── config.json # Campaign settings
│ ├── prospects.csv # Target list
│ ├── templates.json # Email sequences
│ └── log.json # Activity log
└── your-campaign-name/ # Your actual campaigns
├── config.json
├── prospects.csv
├── templates.json
└── log.json

Campaign Configuration

{
"id": "q1-outreach",
"name": "Q1 Sales Outreach",
"description": "Enterprise prospects from SaaStr",
"status": "active",
"account_id": "work-uuid",
"persona": {
"name": "Stuart",
"role": "Founder",
"company": "Pontius",
"tone": "casual-professional",
"signature": "Best,\nStuart"
},
"settings": {
"daily_limit": 25,
"min_delay_hours": 24,
"send_window": { "start": "09:00", "end": "17:00", "timezone": "America/New_York" },
"followup_sequence": ["initial", "followup-1", "followup-2", "breakup"],
"stop_on_reply": true,
"pause_on_bounce": true
}
}

Status values: draft, active, paused, completed

Prospects CSV

email,name,company,role,status,last_contacted,last_response,sequence_position,notes,source
[email protected],Alex Chen,TechCorp,CTO,pending,,,0,Met at SaaStr,linkedin
[email protected],Jordan Lee,Startup.io,Founder,contacted,2026-01-05,,1,Interested in API,referral
[email protected],Sam Rivera,Acme Corp,VP Sales,replied,2026-01-06,2026-01-07,1,Asked for pricing,cold

Prospect Status Values

StatusMeaning
pendingNot yet contacted
contactedEmail sent, awaiting reply
repliedGot a response (handle manually)
interestedPositive response, in conversation
convertedGoal achieved (meeting booked, sale made)
not_interestedDeclined, do not contact further
unsubscribedOpted out explicitly
bouncedEmail failed to deliver

Email Sequences

{
"sequences": [
{
"id": "initial",
"name": "Initial Outreach",
"subject": "quick question about {company}",
"body": "Hi {name},\n\n{personalized_opener}\n\n{value_prop}\n\n{cta}\n\n{signature}",
"delay_days": 0
},
{
"id": "followup-1",
"name": "First Follow Up",
"subject": "Re: {original_subject}",
"body": "Hi {name},\n\nJust wanted to bump this...\n\n{signature}",
"delay_days": 3
},
{
"id": "breakup",
"name": "Breakup Email",
"subject": "closing the loop",
"body": "Hi {name},\n\nI haven't heard back, so I'll assume now isn't the right time...\n\n{signature}",
"delay_days": 14
}
]
}

Activity Log

{
"entries": [
{
"timestamp": "2026-01-05T10:30:00Z",
"prospect_email": "[email protected]",
"action": "sent",
"sequence_id": "initial",
"subject": "Quick question about TechCorp"
}
],
"stats": {
"total_sent": 45,
"total_replied": 12,
"total_converted": 3,
"reply_rate": 0.267,
"conversion_rate": 0.067
}
}

Writing Effective Outreach

Subject Lines

What works:

  • Short (3-7 words)
  • Personalized with company name or reference
  • Curiosity or relevance, not clickbait
  • Lowercase often outperforms Title Case

Examples:

  • quick question about {company}
  • {name} - saw your post on {topic}
  • idea for {company}'s {specific_thing}

Email Body Structure

  1. Hook (1 line) — Why you're reaching out, personalized
  2. Value (2-3 lines) — What's in it for them
  3. Credibility (1 line) — Why they should trust you
  4. CTA (1 line) — Single, clear ask

Keep it short: 50-125 words max. Mobile-friendly.

Follow-up Strategy

SequenceTimingPurpose
InitialDay 0Introduce, provide value
Follow-up 1Day 3-4Gentle bump, add new value
Follow-up 2Day 7-8Different angle or social proof
BreakupDay 14Final attempt, permission to close loop
Breakup Emails
The breakup email often gets the highest response rate. It signals you won't keep following up, which prompts action.

Benchmarks

MetricPoorAverageGoodExcellent
Reply rate<2%2-5%5-10%>10%
Positive reply rate<1%1-3%3-5%>5%
Conversion rate<0.5%0.5-2%2-5%>5%

Sending Limits

Deliverability
Space out your sends or risk email deliverability issues. Sudden spikes trigger spam filters.
Account AgeDaily LimitSpacing
New (<30 days)10-15/day5-10 min between
Established (1-3 months)20-30/day3-5 min between
Mature (3+ months)40-50/day1-3 min between

AI Workflow

During blitz sessions, tell the AI:

  • "Send next batch for q1-outreach"
  • "Check campaign status"
  • "Show prospects who replied"
  • "Pause the campaign"

The AI will check daily limits, send windows, personalize emails, and update logs.

File Location

~/.config/pontius/knowledge/campaigns/