If you’ve spent any time in marketing automation circles, you’ve heard n8n mentioned more and more. It’s an open-source workflow automation tool — a bit like Zapier or Make, but with more flexibility and without the per-operation pricing that bites you once you scale. At Choco Media, n8n marketing automation is now baked into how we run almost every client deliverable that touches data, content, or reporting. This post is a transparent look at the five workflows we actually rely on — what each one does, what’s at the core of it, and what we’ve learned from running them in production.
We’re not writing this as a feature review or a theoretical guide. These are the automations we’ve built, broken, fixed, and continue to maintain. If you’re evaluating whether n8n is worth your time — or trying to figure out what to build first — this should give you a realistic picture of the effort and the payoff.
This post pairs well with our broader thinking on where to start with AI automation for marketing teams — but here we’re going one level deeper into the specific builds.
Why We Moved to n8n for Marketing Automation
We tried Zapier first, like most people. It worked fine for simple three-step workflows: form submission triggers email, new client in CRM triggers Slack message. But as workflows grew in complexity — especially anything involving AI steps, looping over lists, or handling API responses with variable structures — Zapier’s visual model started feeling like a constraint rather than a feature.
Make (formerly Integromat) was better for complex routing. But we kept running into pricing cliffs as operation counts grew, and the debugging experience for longer chains was frustrating.
n8n fit because:
- Self-hosted option means no per-operation pricing at scale
- The HTTP Request node handles almost any API without a dedicated integration
- Code nodes (JavaScript or Python) let us do things no low-code tool allows cleanly
- The workflow JSON is version-controllable — we keep ours in a private repo
The tradeoff is that n8n requires more setup and more debugging comfort than Zapier. If you need a five-minute solution, Zapier wins. If you need something that runs 200 times a day for the next two years without surprising invoices, n8n is worth the initial investment.
Workflow 1: Weekly Content Brief Generator
This is the workflow we use most often, and the one that delivers the clearest time saving.
What it does
Every Monday at 07:00, it pulls the next five unchecked rows from our content queue (a structured Google Sheet), enriches each topic with a keyword data fetch, calls the OpenAI API to generate a structured content brief, and deposits the briefs as draft documents in a shared Notion database — one per topic, pre-formatted with target keyword, audience, outline, and three reference URLs sourced via a search API call.
- Trigger: Schedule (Monday 07:00 Helsinki time)
- Google Sheets node → reads 5 rows from queue tab
- HTTP Request → DataForSEO or similar for SERP data on each keyword
- OpenAI node → brief generation prompt with keyword + SERP context injected
- Notion node → creates database page per brief
- Slack node → posts summary to #content-pipeline channel
The core prompt
The brief prompt is about 600 tokens. The key elements: role instruction (content strategist for a B2B marketing agency), topic and keyword injected as variables, SERP titles injected as context, output format in JSON so the Notion node can map fields directly. We specify word count range, primary audience, three content goals, and explicitly ask for a “what the reader does differently after reading” statement — the one thing most briefs skip that makes a real difference to output quality.
“If the brief doesn’t specify what the reader should be able to do after reading, the writer — human or AI — will default to explaining things rather than equipping the reader. That one field changes the entire orientation of the content.”
We ran this manually for three months before automating it. The automated version produces briefs we can take straight to a writer about 70% of the time. The other 30% need a human pass, usually because the SERP data was thin or the topic angle was too abstract for the prompt to interpret well.
Workflow 2: Client Reporting Pipeline
Monthly reports used to take between three and five hours per client — pulling data from Meta Ads Manager, Google Analytics, Search Console, and the CRM, formatting it into a consistent structure, writing the narrative commentary. We’ve reduced that to about 30 minutes of human review time.
What it does
On the 28th of each month at 14:00, the workflow loops over a list of active client accounts, fetches metric data from each platform via API, computes period-over-period changes, passes the structured data to an OpenAI prompt that writes the narrative commentary section, assembles everything into a Google Slides template via the Slides API, and sends a Slack message to the account manager with a review link.
- Trigger: Schedule (28th of month)
- Google Sheets → reads active client list with platform credentials
- HTTP Request nodes → Meta Graph API, GA4 Data API, Search Console API per client
- Code node (JavaScript) → normalises metrics into a standard schema
- OpenAI node → generates commentary for each metric block
- Google Slides API → populates template placeholders
- Slack node → review notification per account manager
What the AI does and doesn’t write
The AI writes the descriptive sections: what happened to each metric, how it compares to the prior period, what likely caused the change based on campaign events we log in a notes field. It does not write recommendations — those come from the account manager during the 30-minute review. In client work we’ve found that AI-generated recommendations tend to sound plausible but generic. The metrics narrative is factual enough that the AI handles it well; the “so what do we do about it” requires context the model doesn’t have.
Workflow 3: Lead Intake and Qualification Router
When a prospect fills in our contact form, we used to spend time manually reading the submission, deciding whether it was worth a call, and drafting an initial response. That process now takes us about two minutes of review instead of fifteen.
What it does
The workflow triggers on a new form submission via webhook, passes the submission text to an OpenAI prompt that scores the lead across four dimensions (budget signal, service fit, urgency, red flags), routes the lead to one of three Notion boards based on the score, drafts a personalised response email into a Gmail draft, and sends the account owner a Slack message with the score breakdown and draft link.
- Trigger: Webhook (contact form POST)
- OpenAI node → structured scoring prompt, output as JSON
- Switch node → routes based on score to Hot / Warm / Not a fit boards
- Notion node → creates lead card with full context
- Gmail node → creates draft reply (not sent automatically)
- Slack node → notifies account owner with score summary
The scoring prompt
The prompt asks the model to evaluate four signals, score each 1-3, and return JSON with scores and a one-sentence note per dimension. Budget signal looks for concrete numbers or recognised budget brackets. Service fit looks for keywords matching our core services. Urgency reads for language indicating timeline pressure. Red flags looks for signals we’ve learned correlate with difficult engagements — vague scope, unrealistic timelines, competitive tendering language.
The draft reply is where we see the most variance. We don’t send it without reading it, but about 80% of drafts need only minor edits before sending. The model is good at personalising the opening based on the submission and matching our tone when the system prompt is well-specified.
Our AI automation service builds similar lead-routing systems for clients — the approach scales to higher-volume inboxes with a few additions.
Workflow 4: Social Content Approval Loop
Social media content used to live in a spreadsheet that got emailed back and forth. The approval loop — draft, review, revise, approve, schedule — regularly took four or five working days because the handoffs happened over email and things got buried.
What it does
The workflow manages the approval loop from draft to scheduled without any email involved. When a content creator marks a Notion row as “ready for review”, a webhook fires, the workflow posts the content to a dedicated Slack channel with inline approve/reject buttons, captures the reviewer’s response, either marks it approved and sends to the scheduling queue or routes it back to the creator with the reviewer’s comment, and logs the decision to the Notion row.
- Trigger: Notion webhook (status change to “ready for review”)
- Slack node → posts content with Block Kit approve/reject buttons
- Wait node → pauses until Slack interaction received
- Switch node → approved → schedule queue; rejected → notifies creator with comment
- Notion node → updates status and logs reviewer decision
Why the Wait node matters
The Wait node is the piece that most people miss when they try to build approval loops in n8n. Without it, the workflow completes immediately after sending the Slack message and you have no way to resume it when the button is clicked. With it, n8n pauses the execution and resumes when the webhook from the Slack interaction arrives. The workflow can wait up to 24 hours before timing out, at which point it sends a reminder. This is the native n8n feature that makes interactive human-in-the-loop workflows possible — and it’s genuinely not possible in Zapier without significant workarounds.
Workflow 5: Competitor Monitor and Weekly Digest
We track a shortlist of competitors and relevant industry sources — new content they publish, pricing page changes, job postings that signal strategic shifts. Doing this manually takes more time than it’s worth. Doing it poorly wastes time on noise. This workflow hits a useful middle ground.
What it does
Every Friday at 08:00, the workflow fetches RSS feeds from competitor blogs, runs a search API call for each competitor’s domain to find pages indexed in the past 7 days, checks a shortlist of competitor pricing and services pages for meaningful content changes using a diffing approach, passes all signals to an OpenAI prompt that writes a brief digest, and posts the digest to a private Slack channel.
- Trigger: Schedule (Friday 08:00)
- RSS Feed nodes → competitor blog feeds
- HTTP Request → search API for recently indexed competitor pages
- Code node → diff comparison for watched pages (stores last-seen hash in a Google Sheet)
- OpenAI node → digest prompt with all signals combined
- Slack node → posts to #competitor-watch channel
The diffing approach
For page change detection, the workflow fetches the raw HTML of watched URLs, strips tags to extract visible text, hashes the result, and compares it against the hash stored from the previous run. If the hash has changed by more than a threshold — we use a simple character-count delta to filter out trivial changes like timestamps — it flags the page for the digest. It’s not perfect, but it catches meaningful updates like pricing changes and new service descriptions reliably. In client work we’ve found this approach is good enough for most competitive monitoring needs without the cost of a dedicated tool like Visualping.
What We’ve Learned Running These in Production
A few things we’d tell ourselves if we were starting this build today:
- Error handling is half the work. Every workflow needs an error branch that sends a Slack alert rather than silently failing. We learned this the hard way when a reporting workflow failed mid-run and we didn’t notice for two weeks.
- Version control the workflow JSON from day one. n8n lets you export workflows as JSON. We keep ours in a private repo with a commit message per change. When something breaks after a modification, you can diff back to what was working.
- OpenAI prompts need their own documentation. We keep a Notion page per workflow that documents the prompt, the reasoning behind key choices, and the output format. Prompts drift if multiple people edit them without context.
- Self-hosted n8n needs maintenance. Updates, backups, and the occasional restart. If you don’t have someone technical on the team, the cloud version of n8n is worth the cost — it removes the operational overhead.
- Start with the workflow that saves the most human time per run. For us that was the reporting pipeline. The ROI on automation is uneven — a few workflows do most of the work. Build those first and resist the urge to automate everything at once.
What These Workflows Don’t Replace
None of these automations run completely without human involvement. The briefing workflow produces drafts a human reviews. The reporting pipeline produces a narrative a human edits. The lead router produces a draft reply a human approves. The approval loop requires a human to press the button. The competitor digest is read, not acted on automatically.
That’s intentional. The goal isn’t to remove humans from the loop — it’s to remove the mechanical parts of each task so human time goes to judgement rather than formatting, fetching, and filing. In our experience, automations that try to eliminate the human entirely tend to produce lower quality outputs and create more problems than they solve.
If you’re thinking about building similar workflows for your team and want to talk through what makes sense for your setup, we’re available for a conversation.