Local AI Automation
Content Strategy

Audit Before You Brainstorm: AI Content Gap Analysis

"Give me new blog ideas" can't see what you've already written. Audit your last 40 titles instead — themes, percentages, and the gaps you keep skipping.

Piyabhum Sornpaisarn5 min read
Share
Pixel art analyst robot with magnifying glass auditing a shelf wall of overstuffed paper bundles beside empty dusty slots, Ollama llama logo on a rolling cart

Pull up your last thirty posts and read the titles in one sitting. Somewhere around title twelve, an uncomfortable pattern appears: you've written about the same three ideas six different ways. Not because they're the most valuable topics — because they're the ones your brain reaches for on a Tuesday.

That's a content blind spot, and every creator has one. The problem is you can't see the shape of your own library from inside it. You're focused on today's post; the overall mix is invisible.

The fix is an audit, not a brainstorm. Instead of asking AI for "new content ideas" (which gives you generic listicles you've effectively already written), you hand it your actual history — 30 or 40 titles — and make it count: group everything into themes, calculate coverage percentages, and show you what you ignore. Run that audit locally and your unpublished strategy stays on your machine. This post walks the whole pipeline.

Direct answer

Find content gaps by using AI as an auditor, not a generator. Paste 20–40 of your past titles or summaries in one batch and have the model group them into themes, calculate what percentage of your output each theme occupies, and list adjacent topics with zero coverage. The batch matters: with your full history in context, the model cross-analyzes patterns instead of reacting to the last thing it read — and the coverage percentages reveal where you over-index and where your audience is being under-served.

Generation vs Analysis: Why the Obvious Prompt Fails

Most creators hit the same wall: "give me new blog ideas" returns interchangeable suggestions — 10 habits, 5 mistakes, a beginner's guide — because generation has no knowledge of what you've already made. It optimizes for average-popular, and you've already written the average.

Generation promptAnalysis prompt
Input"My blog is about productivity"Your last 40 actual titles
Model's jobGuess what a productivity blog coversCount what yours actually covers
OutputGeneric ideas you've effectively writtenThemes, percentages, and named gaps
Follow-up valueNone — rerun gives new randomnessA roadmap aligned to your real library

The information arrow points the wrong way in the first case. Your history is the most valuable input you own, and generation-mode prompts never see it.

Step 1: Feed the Raw Corpus

Export your titles — CMS export, spreadsheet column, or a quick list. Titles alone work; titles plus one-line summaries work better. The one rule: batch them, 20–40 at once.

Why batching matters: with the whole corpus in context, the model must consider your content as a system. Feed posts one at a time and it reacts to each item in isolation — you get commentary, not analysis.

Below are my last 36 post titles, one per line, in order.
Treat them as one dataset. Do not suggest ideas yet.
1. <title>
2. <title>
...

The "do not suggest ideas yet" line is doing real work. Jumping to suggestions is the model's favorite escape; forbid it in step one.

Step 2: Map the Themes — By What They Are, Not What You Call Them

Next, make it classify what you actually write:

Group these 36 titles into the themes they actually cover
(not my category labels). For each theme report:
- theme name in plain words
- number of posts and percentage of total
- the 2 most representative titles
Then list any sub-topic that appears exactly once.

This is where the surprises live. You might believe you write about "productivity," and the audit shows 60% of your output is actually about one specific to-do app. Your self-image says balanced; the percentages say monoculture. The singletons list matters too — topics you touched once and quietly abandoned, often the exact pieces readers responded to.

Step 3: Name the Gaps

Now, and only now, bring in suggestions — constrained by what's missing:

Given this theme map, identify 5 genuine gaps:
adjacent topics my audience likely needs but that have
zero or single coverage. For each gap:
- why it fits my existing themes (not a random new niche)
- what search/question it answers
- which existing posts it could link to
Reject ideas that duplicate >20% coverage themes.

The constraint "adjacent, not random" keeps results inside your authority. A gap is only an opportunity if it's a natural extension of what readers already come to you for.

Step 4: Quantify and Track the Mix

Turn the audit into a small record you can re-run quarterly:

{
  "audit_date": "2026-08-25",
  "corpus_size": 36,
  "themes": [
    {"name": "workflow automation", "posts": 14, "pct": 39},
    {"name": "tool reviews", "posts": 11, "pct": 31},
    {"name": "client stories", "posts": 6, "pct": 17},
    {"name": "pricing / offers", "posts": 3, "pct": 8},
    {"name": "security / privacy", "posts": 2, "pct": 6}
  ],
  "flag": "security/privacy under 10% despite audience questions"
}

Two audits a side-by-side comparison make drift visible: if a theme grew from 20% to 45% of output, that's not a strategy — that's a rut forming in real time.

Running the Audit Locally

Your full title list is a strategic document — and the audit needs all of it in one request. That's a good case for a local model:

ollama pull llama3.1
ollama run llama3.1 "Group these 36 titles into themes with counts
and percentages, list single-coverage sub-topics, then propose 5
adjacent gap topics. TITLES: $(cat titles.txt)"

Nothing sensitive uploads, there's no length anxiety, and you can rerun the audit every quarter for free. Mid-size local models handle classification and counting well — this is a comprehension task, not a creative one. For the gap-suggestion step, a larger model (local or otherwise) adds polish, but the theme map itself is reliable on modest hardware.

Turning Gaps Into a Calendar

The audit produces a map; the calendar needs judgment. A simple rule set:

  • Every over-indexed theme (>30%) goes on a publish diet — not zero, but no new series
  • Every gap gets two pieces scheduled within the next month, or it wasn't a real gap
  • Each gap piece links to at least one strong existing post — internal links teach both readers and search engines how the topics connect
next_month:
  reduce: workflow-automation  # 39% -> cap at 2 posts
  fill:
    - topic: local model privacy basics
      link_to: [why-i-run-ai-locally]
    - topic: pricing automation work
      link_to: [fixed-price-offers]

Frequently Asked Questions

Should I paste titles one at a time or all at once?

All at once. Batching is what forces cross-analysis across your whole history — one at a time produces item-by-item commentary and no pattern detection. Twenty to forty titles in a single message is the sweet spot.

Is a free or local model good enough for this?

For the theme mapping and percentages, yes — classification and counting are comprehension tasks that mid-size models handle well. Use a larger model only for the final gap-suggestion pass if you want more creative adjacent ideas.

What exactly counts as a content gap?

Any topic your audience demonstrably needs — questions they ask, adjacent problems they hit next — that has zero or single coverage in your library. If it's covered at 30%+ it isn't a gap; if it's random to your niche it isn't an opportunity.

How often should I re-run the audit?

Quarterly is plenty. More often and the mix barely changes; less and ruts have time to calcify. Keep each audit's JSON so consecutive runs show drift, not just snapshots.

Wrap-Up

The narrowness of a content library creeps in one comfortable post at a time, and no amount of fresh idea-generation fixes it — generation can't see what you've already made. Audit instead: batch your titles, map the themes with counts and percentages, name the adjacent gaps, and schedule two pieces into each one. Run it locally so the full strategy stays yours. The blind spot isn't a character flaw; it's just data you hadn't counted yet.

Newsletter

Get the next guide in your inbox

New articles plus the workflow files from each guide — and instant access to the free download library.

No spam. Unsubscribe anytime.

Related posts