WORKFLOW TEARDOWN
Outbound Reporting Engine
A form kicks off a 46-node n8n pipeline that pulls campaign data from Instantly or HeyReach, has an LLM write the client report, and delivers it as a Google Doc in Slack.
- Scale
- 46 nodes
- Context
- Built as internal tooling for FullFunnel, a Boston-based GTM agency
// stage.on.canvas
// stage.it.does
An account manager fills a short form: which platform, which campaign, what date range. That is the whole interface. Everything after the submit button is automation.
The workflow branches by platform. The Instantly branch pulls campaigns, analytics, sending accounts, and leads; the HeyReach branch pulls campaign stats, inbox activity, and LinkedIn sender accounts. A code node merges the raw responses into one structured payload: reply and bounce rates, audience breakdown by title and location, sender-account health, and the sequence steps as actually configured.
A Gemini 2.5 Pro agent turns that payload into a nine-section client report: executive summary, performance scorecard, campaign configuration, sequence review, audience breakdown, sender infrastructure, insights, recommended actions, appendix. The system prompt runs about 2,000 words and encodes the report format and KPI benchmarks, so every report reads the same no matter who requested it.
The finished report lands as a Google Doc, optionally as a Gamma presentation (wait-and-retry loops handle Gamma’s async generation), and the link posts to Slack. If the requested campaign does not exist, a per-platform error path posts a Slack alert instead of producing an empty report.
// stage.engineering.decision
A fallback model wired in from day one
Chose: Duplicate LLM nodes: Gemini 2.5 Pro primary, OpenRouter fallback
Over: One model and a retry loop
Client reporting cannot skip a cycle because one provider has an outage or retires a model. The fallback path runs the same 2,000-word prompt against OpenRouter, so the report still ships. Retries fix transient errors; they do nothing for a deprecated model.
// stage.results
- One form submission replaces the manual reporting cycle: data pull, analysis, narrative, formatting, delivery.
- Reports follow one fixed nine-section structure, so clients get comparable reporting period over period regardless of platform.
- Campaign-not-found errors alert in Slack on a dedicated path per platform; the failure mode is a message, never a wrong report.