n8n Weekly Reporting Workflow
Replace the Monday-morning reporting scramble with a 6am n8n workflow. Slack summary + PDF, sent before standup.
Why this exists
Manual Monday-morning reporting is one of the highest-cost low-value activities on most marketing teams. 4 to 6 hours per week per RevOps person, repeating forever. n8n plus the platform APIs eliminates it entirely. Setup is 2 hours. Ongoing maintenance is zero. The team gets back roughly 240 hours per year, the equivalent of one full month of senior IC time.
Manual reporting is one of the highest-cost low-value activities on most marketing teams. n8n + the platform APIs eliminate it entirely. This is the structure Xpand sets up for clients in week one of an AI Automation engagement. Setup is 2 hours. Maintenance is 0.
What the workflow does (high level)
-
✓
Runs every Monday at 6am in your local timezone via cron trigger
-
✓
Pulls last-7-day data from Meta Ads, Google Ads, GA4, HubSpot, and LinkedIn Ads
-
✓
Computes week-over-week deltas for spend, impressions, leads, MQLs, and SQLs
-
✓
Formats a Slack message with the headline metrics and the 2 biggest wins / drops
-
✓
Renders a PDF with full breakdown and emails to the marketing team and exec stakeholders
Workflow structure
-
1
Trigger: Cron node, schedule = 0 6 * * 1 (every Monday 6am)
-
2
Fetch: 5 parallel HTTP request nodes pulling last 7 days from each platform's API
Meta Marketing API, Google Ads Reporting API, GA4 Data API, HubSpot Reports API, LinkedIn Marketing Solutions.
-
3
Transform: Function node that normalizes each platform's data into a common schema {channel, spend, impressions, clicks, leads, mqls, sqls}
-
4
Compute: Compare last 7 days vs previous 7 days, compute deltas as percentages
-
5
Format Slack: AI node (GPT-4 or Claude) generates a 4-line summary of headline numbers + 2 biggest movers
-
6
Send Slack: Slack node posts to your reporting channel
-
7
Generate PDF: HTML-to-PDF node renders a templated report with charts and tables
-
8
Email PDF: Email node sends to a distribution list with the PDF attached
Slack summary prompt
You are a marketing performance analyst. Given the following weekly metrics, write a 4-line Slack summary.
Data:
{{aggregated_metrics_json}}
Format:
Line 1: Headline. total spend, total leads, week-over-week change
Line 2: Best performer. channel + metric
Line 3: Biggest concern. channel + metric + why
Line 4: One specific action recommendation for this week
Rules:
- No filler ('it's worth noting', 'overall').
- Use specific numbers, not 'increased significantly.'
- Active voice.
- Maximum 60 words total.
Setup checklist
-
✓
Self-host n8n on Render, Railway, or your own VPS (recommended) OR use n8n Cloud
-
✓
Add API credentials for Meta, Google, GA4, HubSpot, LinkedIn in n8n credentials manager
-
✓
Create a #marketing-reports Slack channel and add an n8n bot integration
-
✓
Build an HTML email template with chart.js charts and tables (use a Loops or Mailgun template)
-
✓
Test by manually triggering the workflow, verify Slack and email output
-
✓
Schedule the cron, monitor for the first 4 weeks
Most teams save 240+ hours per year by automating Monday reporting. The setup pays back in week 2.
Common pitfalls
-
✓
Meta API rate limits. batch requests, do not loop
The Meta Marketing API caps at 200 calls per hour per app. Use batch endpoints.
-
✓
GA4 quota errors. request only the dimensions you display
Free tier is 200K rows per day per property. Aggregating at the channel level keeps you well under.
-
✓
Time zone mismatches between platforms
Force everything to UTC in the transform step. Display in local time only at the Slack/PDF layer.
-
✓
Currency mixing. Meta reports in account currency, GA4 in property currency
Normalize to a single currency in the transform step using a daily FX feed (exchangerate-api.com).
How to use it well
Self-host n8n on a cheap VPS (Hetzner, Vultr, around $5 per month) rather than n8n Cloud past 5,000 monthly tasks. The cost difference compounds. Test the workflow against historical data before scheduling the cron. Add a dead-letter Slack notification so failures alert the team rather than silently breaking on Tuesday morning.
What good looks like
Live Monday 6am Slack summary from a real client running this workflow.
📊 Weekly performance summary. Apr 22 to 28
💰 Spend: $48,200 (-3% w/w)
🎯 Leads: 187 (+12% w/w)
📈 MQL→SQL: 41% (vs 38% prior week)
💼 Meetings booked: 42 (+8 w/w)
🟢 Best mover: LinkedIn Ads, CPL down 18% on the new founder-story creative
🔴 Watch: Meta lookalike at $145 CPL vs $89 account avg, kill or rework
👉 Recommended this week: 3x budget on the founder-story angle, kill the 1% LL audience.
Full PDF report: https://reports.client.com/2026-04-w17.pdf
FAQ
Why n8n and not Zapier?
n8n is open source, self-hostable, and has no per-task pricing. A weekly reporting workflow that runs 4 platform fetches per week would cost 200-400 USD/month on Zapier at scale. n8n self-hosted is free past the cost of a 5 USD/month VPS.
Can I run this without n8n?
Yes. Make.com, Pipedream, or a custom Node.js script all work. n8n is preferred for the visual workflow editor and the easy debugging on individual nodes. The pattern (cron → parallel fetches → transform → format → notify) is the same regardless of tool.
What does the AI summary cost per run?
Under 0.05 USD per run on Claude Sonnet 4.6 or GPT-4o. The summary input is typically 800-1,200 tokens of metrics, output is 200-400 tokens. Annualized cost is under 5 USD for weekly reporting.
How do I extend this to client-facing reports?
Two options. Option A: White-label the PDF template per client and email separately. Option B: Add a Notion page builder node that pushes the same data into a client-facing Notion dashboard. Xpand uses Option B for ongoing clients because it keeps the report editable and commentable.