Client asked how the campaign is doing. You opened four dashboards.
One report across Smartlead, Instantly, HeyReach, and every sequencer you run. Google Sheets or agent chat. Reply rates, funnels, and sentiment in one place.
Ask your agent for a campaign report. You get a three-sheet Google Workbook: Campaign Overview, Campaign Funnels, and Lead Sentiment. Or get the same data as structured JSON in your chat. No dashboard login, no CSV exports, no manual pivot tables. The data comes from your local SQLite database, the same one that powers your daily pipeline view.
- Multi-sheet Google Workbook with formatting and frozen headers
- Every campaign metric in one place: email, LinkedIn, sentiment
- Share with clients or team members by email or public link
- Agent can return the same data as JSON without creating a Sheet
- Refresh existing sheets to keep reports current
What you can do
- Say "export campaign stats for northstar-agency" and get a shared Google Sheet back
- Preview the data in your chat before deciding to create a Sheet
- Set custom time windows: last 7 days, 30 days, or all time
- Update a shared workbook with latest data without losing the URL
How it works
Tell your agent what you need. No commands to memorize.
Export to Google Sheets
Ask your agent for a campaign stats sheet. You get a shared workbook emailed to you or accessible via an unlisted link.
What to say to your agent
Use the Outreach Magic skill. I need a campaign stats Google Sheet for my workspace [WORKSPACE_SLUG] covering the last 14 days. Use the local SQLite database to query campaign performance data. Create a multi-sheet workbook with: 1. Campaign Overview: one row per campaign with send volume, bounce rate, reply rate, LinkedIn activity, sentiment counts, and last activity date 2. Campaign Funnels: for each active campaign, show the conversion funnel from sent through delivered, replied, and interested 3. Lead Sentiment Summary: a pivot table showing how leads break down by sentiment (positive, interested, neutral, negative, not_interested, invalid) Use the campaign-stats template to generate the payload. If I didn't specify a share email, ask me who should get access. Do not invent metrics. Query my local database only.
What happens: The agent queries your local database, builds a 3-sheet workbook, creates a new Google Sheet through Outreach Magic's API, and shares it with you. Takes a few seconds.
What the sheet looks like
The workbook has three tabs. Here's what you'll see in each one:
Sheet 1: Campaign Overview
| Campaign | Status | Sent | Delivered | Bounce % | Reply % | LI Accept % | Interested | Sentiment |
|---|---|---|---|---|---|---|---|---|
| q4 founders | active | 501 | 489 | 2.4% | 10.6% | 43.1% | 8 | 57% |
| webinar invite | active | 312 | 304 | 2.6% | 9.2% | 42.8% | 5 | 63% |
| demo requests | active | 186 | 181 | 2.7% | 10.5% | 35.2% | 3 | 75% |
| product leaders | paused | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
Each row is a campaign. Active campaigns are green, paused are amber. Sort by any column to find your best and worst performers.
Sheet 2: Campaign Funnels
| q4 founders funnel | ||
|---|---|---|
| Stage | Volume | % of Sent |
| Unique Leads Contacted | 485 | 100% |
| Emails Sent | 489 | 100.8% |
| Delivered | 489 | 100.8% |
| Bounced | 12 | 2.5% |
| Total Replies | 52 | 10.7% |
| OOO Auto-Replies | 14 | 2.9% |
| Manual Replies | 38 | 7.8% |
| LinkedIn Connects | 218 | n/a |
| LinkedIn Accepts | 94 | 43.1% |
| LinkedIn Messages | 112 | n/a |
| LinkedIn Replies | 18 | 16.1% |
| Interested Leads | 8 | 1.6% |
| Not Interested | 6 | 1.2% |
One funnel section per active campaign. Email stages, OOO vs manual replies, LinkedIn connects through replies, and interested/not interested counts.
Sheet 3: Lead Sentiment
| Campaign | Positive | Interested | Neutral | Negative | Not Int. | Invalid | Total | Positivity |
|---|---|---|---|---|---|---|---|---|
| q4 founders | 3 | 5 | 2 | 2 | 4 | 1 | 17 | 57% |
| webinar invite | 2 | 3 | 1 | 1 | 2 | 0 | 9 | 63% |
| demo requests | 1 | 2 | 0 | 0 | 1 | 0 | 4 | 75% |
Sentiment distribution across campaigns. Campaigns with no sentiment data show "No sentiment data in this period."
Query Directly (No Google Sheet Needed)
Don't want a Sheet? Ask your agent for the same data as a table or structured report. It reads the same local database and formats the results in your chat.
What to say to your agent
Use the Outreach Magic skill. Pull campaign performance data for workspace [WORKSPACE_SLUG] over the last 14 days from my local SQLite database. Show me: - Which campaigns are active, paused, or exhausted - Send volume, bounce rate, and reply rate per campaign - LinkedIn connect and accept rates - How many leads converted to interested vs not interested - The top 2 campaigns by reply rate and the bottom 2 Format as a clean table I can paste into a report. Use the campaign-stats query preset.
query campaign-stats as a built-in command, so it can return structured data without creating a Sheet.Agent prompts for campaign analysis
Copy these into your AI agent. Replace placeholder text in brackets with your actual workspace slug or campaign name.
Break down by job title, industry, company size
Which audience segments perform best. Useful for refining targeting and deciding which campaigns to double down on.
Use the Outreach Magic skill. For workspace [WORKSPACE_SLUG], analyze campaign performance broken down by lead attributes. I want to know which job titles, industries, and company sizes perform best. Use the local SQLite database. Join reply and sentiment data to lead attributes. Show me: - Reply rate by industry (top 5) - Reply rate by job title seniority (e.g., manager, director, VP, C-level) - Reply rate by company headcount band (1-10, 11-50, 51-200, 201+) - Which segments have zero replies (so I can kill or rework them) Do not invent metrics. Use only data from my local database.
Client-ready campaign report
Generate a report you can paste into an email or slide deck. Good for agency owners showing results to clients.
Use the Outreach Magic skill. Pull campaign performance data for workspace [WORKSPACE_SLUG] over the last 30 days. Format this as a client-ready summary. Use the campaign-stats query preset or equivalent local data. Include a table with: - Campaign name, status, emails sent, reply rate, bounce rate - LinkedIn connect rate and acceptance rate (if applicable) - Number of interested leads and sentiment positivity rate Then add: - The top-performing campaign by reply rate and why - Any campaigns that need attention (high bounce, zero replies) - A one-paragraph summary I can paste into an email to my client Use only data from my local database. Do not invent metrics.
More prompts available on the Agent Prompts page.
What happens when you export
Agent reads local SQLite
Same data that powers your pipeline view. No cloud sync needed.
Multi-Sheet Workbook Created
Three sheets: Campaign Overview, Campaign Funnels, Lead Sentiment. Formatted with frozen headers, color coding, and percentage formatting.
Sheet is Shared With You
The workbook is shared with the email you specify. Or use an unlisted link so anyone with the URL can access it.
Refresh Existing Sheets
Running the export again with the same sheet ID overwrites the data while keeping the URL and sharing settings intact.
Time windows and filters
Default: Last 14 days
The most common window for weekly and biweekly reporting. Shows recent campaign activity without too much noise.
Custom windows
You can specify any window: 7d (last week), 30d (monthly report), 90d (quarterly review), or all (everything in the database).
Status detection
Campaigns with sends in the window are active. Campaigns with sends outside the window are paused. Campaigns with no sends ever are exhausted. This works even for campaigns that only do LinkedIn outreach with zero emails.
Troubleshooting
Export creates an empty sheet
- • Make sure your workspace has campaigns with events in your local database
- • Run
pipeline.py pullfirst to sync the latest events - • Check that campaign names follow the
workspace | campaign-nameconvention - • Try a longer time window like 30d or all
Sheet is not shared
- • Provide a --share-email or use --anyone-with-link
- • The default share email is your org owner email (check with
pipeline.py whoami --json) - • Google Drive permissions can fail for some email domains. Try a Gmail address.
No sentiment data shown
- • Sentiment data comes from lead status tags applied in your sequencer
- • If you haven't tagged any leads with positive/negative/neutral status, no sentiment will appear
- • The sheet still creates. It will show "No sentiment data in this period".
- • Some platforms don't send sentiment metadata. Check your platform's webhook docs
Related Resources
- Agent Prompts & Workflows
More copy-paste prompts for daily digest, bounce analysis, and multi-client snapshots
- Getting Started Guide
Install the skill, connect platforms, and run your first query
- Database Schema Reference
Understand the events, campaigns, and leads tables that power campaign stats
- Calendly Integration
Track booked meetings as campaign events in your pipeline
Ready to see your campaign health?
Ask your agent for a campaign report. If you haven't installed the skill yet, start with the getting started guide.