Skip to content
Content Ops · Multi-Model

RankWriter

SEO listicle factory on n8n — a form kicks off research, a Slack send-and-wait gate keeps a human in the loop, then Claude, o3-mini, and Gemini draft every section of a 'Best Tools' article and PUT it into the CMS.

    n8nSlack APIAnthropic ClaudeOpenAI o3-miniGoogle GeminiSanity GROQ

The Problem

Ranking articles like 'Best AI Marketing Tools' are an SEO workhorse, but producing them is brutal: researching dozens of tools, keeping prose quality consistent across sections, updating pricing blurbs as tools change — all repeated for every category, every refresh cycle.

The Solution

A form-driven content assembly line. A category slug pulls live tool data from Sanity via GROQ; RankWriter composes a Deep Research prompt and hands it to a human through Slack's send-and-wait — real research gates every article before drafting starts. The report then feeds specialised LLM chains: Claude 3.5 Sonnet writes the introduction in a top-tier SaaS-blog voice, o3-mini handles the meta description, Gemini 2.5 Pro drafts ranking criteria, and per-tool sections run map-style in parallel before aggregation. Autofixing structured parsers repair JSON quirks mid-flow, and the finished bestTools payload PUTs directly into the CMS admin API.

How the workflow runs

  1. 01 · Brief

    Content team submits category, audience, and optional tool slugs through an n8n form.

  2. 02 · Gather

    Live category metadata and its tool catalogue arrive from the product API and a Sanity GROQ query.

  3. 03 · Research

    A Deep Research prompt plus tools JSON file post to Slack; the flow pauses until a human returns with findings.

  4. 04 · Draft

    Section-specialised chains run across Claude, o3-mini, and Gemini; tool sections fan out in parallel and aggregate.

  5. 05 · Guard

    Autofixing output parsers repair malformed LLM JSON so one bad response can't kill a run.

  6. 06 · Publish

    The assembled payload — ids, best-for phrases, standout features, pricing — PUTs straight into the CMS.

AI layer

Model-per-section strategy
Prose quality from Claude, cheap precision from o3-mini, long-context reasoning from Gemini — matched to each section's needs.
Structured outputs everywhere
Every chain parses to schema with autofix fallbacks — article data stays machine-usable end to end.
Prompt-as-artifact
The Deep Research prompt is generated, filed to Slack, and versioned by the workflow itself.

Automation layer

Human gate where it counts
Slack send-and-wait pauses the run for real research — automating drafting without automating shallowness.
Map-reduce section scaling
Tool count changes fan out automatically — a 5-tool listicle and a 50-tool listicle use the same graph.
Form-driven operations
Non-technical teammates launch runs without touching the workflow canvas.
Direct CMS integration
Finished content lands publish-ready via API — no copy-paste handoffs.

Technical challenges

  • Pure LLM listicles read as generic filler because models lack current, specific knowledge of each tool.

    A mandatory human research stage injects fresh findings between the brief and any drafting.

  • Long structured outputs from multiple models regularly break JSON parsing mid-pipeline.

    Autofixing output parsers wrap every structured chain, repairing common LLM formatting faults automatically.

  • One model is never best at everything — cheap meta descriptions waste strong models; weak models mangle long-form intro prose.

    Per-section model routing: Claude for voice-critical prose, o3-mini for short precision, Gemini for analytical criteria.

Outcome

  • Category slug to CMS-ready 'Best Tools' article in one supervised run.
  • Every article grounded in human-conducted research, drafted in consistent section-specific voices.
  • Content team operates the whole pipeline from a form and a Slack thread.

Lessons learned

  • Automate the assembly line, not the judgment — research stays human while drafting scales across models.
  • Different sections deserve different models; uniform model choice is either wasteful or underpowered.
  • Autofixing parsers turn flaky LLM JSON from a pipeline-killer into a non-event.