← Back to Blog
AIAutomationContentStrategySEO

AI Content Pipeline: Keyword to Published, Costed

The six stages, the tool at each one, what a single article costs in tokens at list prices, and the hours that do not disappear no matter what you automate.

SPSantosh Paudel· September 6, 2026· 9 min read
Table of contents

The chain is six stages, and the tools split cleanly by stage: keyword research (the Search Console API, free; Ahrefs from 29 dollars a month), brief (a model reading SERP and competitor extracts), draft (Claude, GPT, or a self-hosted Llama), edit (a human, with a model doing a first fact-check pass), publish (the WordPress REST API, or whatever your CMS exposes), and report (the Search Console API again). At published API rates the model spend is cents per article. The subscriptions and the human hours are the actual bill. Here is every line of it.

The six stages and what runs each one

StageWhat it has to produceTool optionsWhat I run
Keyword researchA query with real impressions and headroomSearch Console API, Ahrefs, Semrush, Keyword PlannerSearch Console API + a 40-line Python script
BriefTarget query, angle, H2 skeleton, sources to citeModel over a SERP scrape; Ahrefs content gapClaude with web search, output pinned to a template
Draft1,200-1,900 words against the briefClaude, GPT, Gemini, Llama via GroqClaude Sonnet for the first pass
EditEvery claim sourced, every number labelled, voice fixedHuman. A model can flag, not clearMe, with a model doing a claims-only pass first
PublishA row in the CMS, plus schema, sitemap, internal linksWordPress REST API, Contentful, Sanity, a Supabase insertSupabase insert behind an approval queue
ReportImpressions and position for that URL, 28 days laterSearch Console API, Looker StudioSearch Console API, same script as stage one

The stages that automate well are the ones with a checkable output: expanding a seed keyword, drafting from a fixed brief, generating schema. The stage that does not automate is choosing what to write. Every time I let a model pick topics it produced competent posts about queries nobody searched. That decision needs the search data and a view of the business, and being wrong there is the expensive kind of wrong. More on the shape of the whole thing in what a content system actually is.

The publish step is the least interesting one

I do not run WordPress. This site is Next.js on Vercel with Supabase behind it, so publishing is a database insert. If you are on WordPress the equivalent is a POST to /wp-json/wp/v2/posts with an application password and "status": "draft".

Keep it on draft. An automated pipeline with publish rights has no natural stopping point, and the failure mode is not one bad post — it is forty bad posts found a week later, each one indexed. I wrote up the pattern I use instead in why my agents get an approval queue, not write access.

What one article costs in tokens

Worked example, stated as assumptions: one 1,500-word article, roughly 1.33 tokens per word, one pass per stage, no revisions. Prices are the published Claude API rates as of September 2026 — Sonnet 5 at 2 dollars in and 10 dollars out per million tokens, Opus 5 at 5 and 25 (Claude pricing).

StageInput tokensOutput tokensSonnet 5Opus 5
Keyword expansion and clustering8,0002,000$0.036$0.090
Brief from SERP extracts12,0003,000$0.054$0.135
Draft6,0004,000$0.052$0.130
Model fact-check pass12,0004,000$0.064$0.160
Title, meta, schema, internal links6,0001,000$0.022$0.055
Per article44,00014,000$0.228$0.570

Twenty-three cents on Sonnet. Fifty-seven on Opus. That is the number people quote when they tell you AI content is free, and within the assumptions above it is correct.

The revision multiplier is where it stops being cents

The table assumes one pass. In practice the draft and fact-check rows run three times before I keep anything, which triples the two most expensive lines. On Opus that takes the article from $0.57 to about $1.15. Still cheap. Still not the bill.

If you want the draft row cheaper, the lever is model choice per stage, not per pipeline — expansion and metadata are fine on a small model, editing is not. I went through that tradeoff for a different workload in picking between Groq, DeepSeek and Llama.

What the stack costs per month

List prices, checked September 2026, linked so you can check them yourself.

Line itemPriceNote
Google Search Console and its API$0Both the keyword source and the reporting source
Ahrefs Starter / Lite$29 / $129 per month (pricing)Starter is enough to see competitor headroom
Semrush, entry SEO plan$117.33 per month billed annually (pricing)An alternative to Ahrefs, not an addition
Model APIusage-based, see the table aboveRoughly $1 per finished article at three revisions on Opus
WordPress host, or Vercel Hobby plus the Supabase free tiervaries / $0My stack is the second one
Orchestration (cron plus a few hundred lines)$0Vercel Cron on the free tier runs mine

A working pipeline at ten articles a month, on Ahrefs Starter with Opus and three revisions, lands around $40. The tooling is not what makes content expensive.

The hours that do not disappear

This is the part the pipeline diagrams leave out.

StageWhat the model genuinely doesWhat stays on you
Keyword researchExpands seeds, clusters, spots four posts targeting one queryDeciding which query deserves a page at all
BriefPulls the SERP, drafts an outlineKnowing which claim you can actually defend
DraftThe whole thing, competentlyNothing, honestly. This stage really is solved
EditFlags unsourced numbers, tightens sentencesVerifying every source. A model cannot clear its own citation
PublishFormats, generates schema, suggests internal linksChecking the links resolve, and pressing the button
ReportPulls the numbersDeciding what they mean and killing what failed

Fact-checking is the hour that never goes away, and it scales with output instead of shrinking. Worked example, again as an assumption: value your time at 50 dollars an hour and allow two hours per article for topic choice, source verification and the final read. That is $100 of labour against roughly $1 of tokens — a hundred to one. Any plan that treats token spend as the cost of the pipeline is off by two orders of magnitude.

The reporting stage, with a script you can run

Stage one and stage six are the same query against the same API, which is the only elegant thing about this pipeline. Export the Pages report from Search Console as CSV and run this. It ranks pages by how much a rewrite could plausibly win: impressions already earned, times the headroom above the page, times how badly the snippet converts. Pages in the top three score zero, because there is little left to win. Pages past position 20 score zero too, because those need a different page, not a better one.

#!/usr/bin/env python3
"""Rank Search Console pages by rescue priority.

Usage: python rescue_priority.py [gsc-pages-export.csv]
With no file argument it runs the built-in sample and self-checks.
Expects the column names Search Console uses in its Pages export:
"Top pages", "Clicks", "Impressions", "CTR", "Position".
"""
import csv
import sys

HEALTHY_CTR = 5.0  # assumption: 5% is a decent CTR for a page in positions 4-20


def num(value):
    """GSC exports CTR as 0.48% and impressions with thousands separators."""
    return float(str(value).replace("%", "").replace(",", "").strip() or 0)


def score(impressions, position, ctr_pct):
    """Impressions earned x headroom above the page x how badly it converts."""
    if position <= 3 or position > 20:
        return 0.0
    headroom = (position - 3) / position
    waste = max(0.0, 1 - ctr_pct / HEALTHY_CTR)
    return impressions * headroom * waste


def rank(rows):
    scored = [
        (score(num(r["Impressions"]), num(r["Position"]), num(r["CTR"])), r["Top pages"])
        for r in rows
    ]
    return sorted(scored, key=lambda t: -t[0])


SAMPLE = [
    {"Top pages": "/blog/ai-content-pipeline-keyword-to-published",
     "Clicks": "0", "Impressions": "310", "CTR": "0.00%", "Position": "5.8"},
    {"Top pages": "/blog/what-is-a-content-system",
     "Clicks": "6", "Impressions": "74", "CTR": "8.11%", "Position": "9.2"},
    {"Top pages": "/blog/some-generic-industry-post",
     "Clicks": "0", "Impressions": "1200", "CTR": "0.00%", "Position": "62.4"},
    {"Top pages": "/blog/already-winning",
     "Clicks": "40", "Impressions": "900", "CTR": "4.44%", "Position": "2.8"},
]


def main(argv):
    if len(argv) > 1:
        with open(argv[1], newline="", encoding="utf-8-sig") as fh:
            rows = list(csv.DictReader(fh))
    else:
        rows = SAMPLE
        assert rank(rows)[0][1].endswith("ai-content-pipeline-keyword-to-published")
        assert score(900, 2.8, 4.44) == 0.0    # already ranking: leave it alone
        assert score(1200, 62.4, 0.0) == 0.0   # position 62: a rewrite will not save it
        print("self-check passed\n")
    for value, page in rank(rows):
        if value > 0:
            print(f"{value:9.1f}  {page}")


if __name__ == "__main__":
    main(sys.argv)

Run it with no arguments and it prints self-check passed and one surviving row. The two zero-scored rows are the useful part: a page at position 2.8 and a page at position 62 both get filtered, for opposite reasons. Which metrics I watch and which I ignore is in the five SEO metrics that matter.

What I got wrong

I ran this pipeline for a quarter and shipped a lot of posts. My own Search Console numbers for the 85 days to 3 September 2026: 22 clicks from 4,553 impressions, a 0.48% CTR, across about 390 indexed URLs. Russia produced 1,320 impressions and zero clicks. The United States produced 970 impressions at an average position of 38.8 and also zero clicks. Nepal produced 8 clicks from 74 impressions — a 10.8% CTR at position 9.2.

The split by topic is sharper than the split by country. Posts about building things — Claude Code, Supabase, Vercel — sit at positions 2.8 to 15.5. Posts titled some variant of "[industry] content marketing" sit at 46 to 81. Same author, same domain, same quarter, same pipeline. The pipeline was not the variable. Topic choice was, and that is the one stage I had automated.

The other thing that changed under me is where the click goes. Pew Research Center tracked 68,879 Google searches from about 900 US adults in March 2025 and found that when an AI summary appeared, users clicked a search result on 8% of visits, against 15% when no summary appeared; only 1% clicked a source inside the summary (Pew Research Center, July 2025). Those summaries showed on about 18% of searches then. By July 2026, Similarweb put AI Overviews on roughly 43% of queries and Semrush on roughly 48% (Search Engine Roundtable, July 2026).

So the report stage has to change too. Ranking is no longer the same thing as being read. Semrush analysed 230,000 prompts and over 100 million citations across ChatGPT, Google AI Mode and Perplexity between July and October 2025 and found Reddit the leading cited source across platforms — with ChatGPT alone swinging from citing Reddit in close to 60% of responses in early August to about 10% by mid-September (Semrush, 2025). A pipeline optimising for a blue link is optimising for a shrinking surface, and one tuned to a single engine is tuned to a number that moved 50 points in six weeks. Structure — direct answers, real tables, named sources — is what gets lifted into an answer, which is why writing for skimmers stopped being a style preference.

FAQ

What tools automate an AI content pipeline from keyword research to WordPress publishing and reporting?

Search Console API or Ahrefs for research, a model with web search for the brief, Claude or GPT for the draft, a human for the edit, the WordPress REST API (/wp-json/wp/v2/posts) for publishing, and the Search Console API again for reporting. Orchestrate with cron and a few hundred lines. No single product does all six well.

How much does it cost to generate one article with AI?

At published Claude API rates in September 2026, a 1,500-word article costs about $0.23 on Sonnet 5 or $0.57 on Opus 5 for a single pass, and roughly $1 with three revision rounds. The per-stage token assumptions behind those figures are in the table above.

Can you fully automate publishing to WordPress?

Technically yes — the REST API accepts a POST with an application password. I do not, and I would advise against it. Publish to draft and approve by hand. One unreviewed batch going live and getting indexed costs far more than the minutes you save.

Is AI-generated content still worth publishing in 2026?

Only where you can source it. The posts on this domain that rank are the ones with a build log, a table, or arithmetic in them; the generic ones sit at positions 46 to 81. Volume was never the constraint. Defensible specificity was.

Want a content pipeline that reports on results rather than output? I will map your six stages, cost them at real rates, and tell you which ones to leave manual. See my services or get in touch.

Free resource

Get the AI Automation Playbook

The real architecture behind a 6-agent AI content team — what it saves, what it gets wrong, and the propose-then-approve pattern that makes it safe to trust.

No spam. Unsubscribe anytime.

Browse all free guides →

Run this on your own numbers

Content ROI & Payback Calculator — free, no signup, runs in your browser.

Open the calculator →

Want to implement this with guidance?

Santosh helps founders turn insights like this into real systems.

AI Content Systems

External Resources

Further Reading & Tools

Related Posts

01
12 min
SEOAutomation
TodayTechnical

llms.txt in Next.js: What Reads It and What Does Not

Google has not endorsed llms.txt and Ahrefs found 97% of them get zero requests. Here is why I ship one anyway, the two dead links my hand-written file was recommending, and the route handler that replaces it.

Read article
02
11 min
SocialMediaContentStrategy
TodayCase Study

8 Reels, 41,423 Views, $0 Spend: The Build Log

Eight reels for a B2B automation services company did 41,423 views and 18,732 reach in five days with no ad spend. Here is the full per-reel distribution, the audience data, and everything the numbers do not prove.

Read article
03
12 min
AIMarketingMarketingAnalytics
TodayAI & Marketing

NotebookLM Invented a Chart From Ad Panel Data

I fed six Meta Ads Manager screenshots from an agency account to Google NotebookLM. It returned a twelve-slide deck whose headline claim is a unit error and whose most persuasive chart was drawn from data I never supplied. Here is the audit, and the checklist that came out of it.

Read article