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
- Create a campaign folder — Copy
_example-campaign/and rename it - Add your prospects — Import or manually add to
prospects.csv - Customize sequences — Edit
templates.jsonwith your email copy - Configure settings — Set limits, timing, persona in
config.json - 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.jsonCampaign 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,coldProspect Status Values
| Status | Meaning |
|---|---|
pending | Not yet contacted |
contacted | Email sent, awaiting reply |
replied | Got a response (handle manually) |
interested | Positive response, in conversation |
converted | Goal achieved (meeting booked, sale made) |
not_interested | Declined, do not contact further |
unsubscribed | Opted out explicitly |
bounced | Email 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
- Hook (1 line) — Why you're reaching out, personalized
- Value (2-3 lines) — What's in it for them
- Credibility (1 line) — Why they should trust you
- CTA (1 line) — Single, clear ask
Keep it short: 50-125 words max. Mobile-friendly.
Follow-up Strategy
| Sequence | Timing | Purpose |
|---|---|---|
| Initial | Day 0 | Introduce, provide value |
| Follow-up 1 | Day 3-4 | Gentle bump, add new value |
| Follow-up 2 | Day 7-8 | Different angle or social proof |
| Breakup | Day 14 | Final 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
| Metric | Poor | Average | Good | Excellent |
|---|---|---|---|---|
| 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 Age | Daily Limit | Spacing |
|---|---|---|
| New (<30 days) | 10-15/day | 5-10 min between |
| Established (1-3 months) | 20-30/day | 3-5 min between |
| Mature (3+ months) | 40-50/day | 1-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/