Home / Articles / Blog

How We Write 100+ SEO Blogs a Day for Under $10 (Without Getting Hit by Google's Scaled Content Penalty)
SEOAIContent PipelineClaudeCRM

How We Write 100+ SEO Blogs a Day for Under $10 (Without Getting Hit by Google's Scaled Content Penalty)

How a CRM-table AI content pipeline publishes 100+ researched SEO blogs a day for under $10 without tripping Google's scaled content penalty.

Shrey Vijayvargiya

We build 100+ SEO blogs a day for under $10 in API costs. Not templated pages with a city name swapped in — full, researched, internally linked articles that go through a human before they publish. The system isn't a prompt. It's a table.

Every founder who's tried to scale content with AI hits the same wall: either the writing is fast but generic, or it's good but you're bottlenecked at 2-5 posts a session because your AI tool hit a rate limit. We ran into both walls building content for ihatereading.in and our client work at Karyam, and the fix wasn't a better prompt — it was restructuring the whole pipeline around a CRM table instead of a chat session.

Why Claude Alone Can't Do This at Scale

Claude Skills are genuinely good at writing in a specific voice once you've given them the right context. The problem is throughput. Ask a Claude session for 5 blogs in a row and you'll usually hit a 429 rate-limit error before you're done — Anthropic's API enforces requests-per-minute, input-tokens-per-minute, and output-tokens-per-minute ceilings per organization, and a fresh account starts at the lowest tier regardless of how much you're willing to spend that day.

The deeper issue is context, not throughput. Claude doesn't know your company by default — every session starts blank. You either re-inject your brand voice, internal links, and positioning into every single prompt, or you bake it once into a Claude Skill and hope it holds across a long batch. Either way, you're paying a context tax on every request, and that tax compounds fast once you're trying to publish daily instead of weekly.

So we stopped treating Claude (or any single model) as the whole pipeline and started treating it as one interchangeable step inside a bigger system — one that can call OpenRouter, swap models, and run outside a chat session's rate limits entirely.

Why "Just Automate It" Doesn't Work Anymore Either

The other failure mode is the classic programmatic SEO trap: spin up a template, swap in a keyword, publish a thousand near-identical pages, and hope volume wins. That approach is dead, and Google has been explicit about why.

Google's scaled content abuse policy has applied since 2024, and it's method-agnostic — it doesn't care whether a page was written by a template, a human, or an AI model, only whether it was made primarily to rank rather than to help someone. The enforcement got sharp in 2026: sites running mass near-duplicate pages saw traffic losses in the 50-90% range within weeks of the March 2026 core update, and industry analysis puts the threshold for a sitewide demotion at roughly 30% of a site's URLs being flagged as low-value.

The pages that survived the crackdown share one trait: each one answers a distinct query with real information, not a variable swapped into a shared template. That's the actual design constraint behind everything below — not "how do we generate more," but "how do we make every row genuinely different before generation even starts."

The Pipeline: Research → CRM → Write → Optimize → Publish

Here's the flow: AI Research → CRM (a table of blogs) → AI Writing Agent → SEO Optimizer (agent + human review) → Published blog.

The key shift is that nothing gets written from a blank prompt. Every blog starts as a fully-researched row in a table, and the row already contains everything the writing step needs before a single word of the article exists.

  • Research the internet first, not the keyword. We pull topic ideas from Reddit threads, competitor blogs, and our own back-catalog using a self-hosted scraping API (scrapefast — Firecrawl or Exa work the same way if you don't want to self-host). This is the same mechanism behind our Reddit trend scraper, just pointed at blog ideas instead of trend alerts.
  • Every row gets tagged with a content type before it gets written. We sort ideas into six hooks — Glossary, Explainer, Comparison, Topic, News, or FAQ — because a comparison page and a glossary entry need completely different structures to actually answer their query, and generating them off the same template is exactly the pattern Google's scaled content policy targets.
  • Each row carries a hook, title, description, and internal links attached before writing starts. This is the part that replaces prompt engineering. Instead of describing your brand voice to Claude every time, the row itself tells the writing agent what angle to take and what to link to.
  • One AI Writing Agent turns each row into a full blog. We run a Claude Skill as the system prompt through OpenRouter, inside a HonoJS API, so the same skill logic executes against every row in the table without touching a chat interface's rate limits at all.
  • An SEO Optimizer step — agent plus human — checks the draft before it goes live. This is the step most automated pipelines skip, and it's the single biggest reason scaled AI content gets penalized. A hybrid workflow where AI handles volume and a human handles the judgment call is now the standard structure recommended across the programmatic SEO field for exactly this reason.

The CRM dashboard that holds all of this — the table, the row statuses, the publish queue — was itself built from a single prompt via saascrm.site's prompt library. The scraping and writing APIs run on Fly.io; the dashboard app deploys on Vercel.

Why This Avoids the Penalty That Killed Old Programmatic SEO

The reason this holds up where template-swap pSEO fails comes down to one design decision: the research step happens before the table exists, not after. A classic programmatic SEO site starts with a template and asks "what variables can we swap in." This system starts with what's actually being asked on Reddit, in competitor content, and in your own gaps — and only then decides which of the six hooks fits that specific piece of information.

That ordering matters because Google's own guidance draws the line at whether a page answers a distinct question or just wears a different city name. A Comparison row and a Glossary row pulling from the same research aren't the same page reskinned — they're structurally different answers to different intents, which is the actual bar for surviving a scaled-content review, not the volume of pages published per day.

This is also where AEO comes in. AI Overviews and chat answer engines now eat a huge share of clicks on definition-style queries specifically — the exact query type a Glossary hook targets — so pages need to be structured to earn a citation, not just a ranking, or the traffic never shows up in the first place.

Real-World Validation

We didn't build this in a vacuum — a client asked for it directly. He'd read our earlier Reddit trend scraper case study and wanted the same mechanism pointed at his own platform's content gap.

What we hand him now is a CRM dashboard delivering 50 fully researched blog ideas every month — sourced from Reddit, competitors, and his own site's existing content — each one already tagged with a hook, a description, and internal link targets before anyone writes a word. The process has saved him over $1,000/month and dozens of hours he used to spend on content research alone, on top of the writing time it replaced.

If You Want to Build Something Like This

A few things worth knowing before you try to replicate this yourself:

  • Don't skip the human step. Every credible analysis of the 2026 crackdown points to the same failure pattern — AI volume with no editorial review. The optimizer stage needs a human sign-off, not just an AI quality score.
  • Structure the research before you touch a writing prompt. If you're deciding hooks and internal links after the draft exists, you're already doing template-swap pSEO with extra steps.
  • Treat the LLM as a replaceable step, not the pipeline. Running the writing step through OpenRouter (or any multi-model gateway) instead of a single chat session sidesteps the per-organization rate limits that make Claude Skills alone impractical past a handful of posts a day.
  • Bake context into the skill, not the prompt. A Claude Skill (or equivalent system prompt) that already knows your brand voice, tone, and internal linking rules removes the need to re-explain your company on every row.
  • Track hook type per row. Glossary, Explainer, Comparison, Topic, News, and FAQ each need a different shape — deciding this upfront is what keeps 100 blogs a day from becoming 100 near-duplicate pages.

Where This Goes Next

We're calling this system RunBlog, and we're dogfooding it as one of iHateReading's own daily lead-magnet pipelines going forward. If you're a solo founder or a small agency drowning in "what should we even write about," this is the system built for exactly that problem — check the monthly digest for how we're using it in practice, and DMs are open if you want a version of this CRM running for your own brand.

Explore topics

More in

Weekly letter

Subscribe to iHateReading

Our once-a-week newsletter on programming, jobs, AI, and building products online.

Our once a week newsletter on Programming, Jobs, AI, and Business