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
    CampaignStatusSentDeliveredBounce %Reply %LI Accept %InterestedSentiment
    q4 foundersactive5014892.4%10.6%43.1%857%
    webinar inviteactive3123042.6%9.2%42.8%563%
    demo requestsactive1861812.7%10.5%35.2%375%
    product leaderspausedn/an/an/an/an/an/an/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
    StageVolume% of Sent
    Unique Leads Contacted485100%
    Emails Sent489100.8%
    Delivered489100.8%
    Bounced122.5%
    Total Replies5210.7%
    OOO Auto-Replies142.9%
    Manual Replies387.8%
    LinkedIn Connects218n/a
    LinkedIn Accepts9443.1%
    LinkedIn Messages112n/a
    LinkedIn Replies1816.1%
    Interested Leads81.6%
    Not Interested61.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
    CampaignPositiveInterestedNeutralNegativeNot Int.InvalidTotalPositivity
    q4 founders3522411757%
    webinar invite231120963%
    demo requests120010475%

    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.

    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 pull first to sync the latest events
    • • Check that campaign names follow the workspace | campaign-name convention
    • • 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

    Need help?

    Still stuck? Reach out and we'll help troubleshoot.

    Contact Support

    Related Resources

    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.