Citation_needed: turns out “trust me bro” was never a credible source
TL;DRArticle in, 10 internal and 10 external links out. No endless manual research, and human-in-the-loop in the right place.
Stack
Full list of features
- Topic extraction
- Per-topic SERP
- Topic-balanced rank
- Internal (sitemap)
- External links
- Domain Rating
- Org. traffic
- Referring domains
- Link-health check
- SERP overview
- Free regen
- DR-floor filter
- Run history
- Demo mode
- BYO-key
- CSV export
- Copy URLs
- Paste / .docx / Doc
- Win 95 / 98 / XP / 7
- Color schemes
- Cost meter
- Haiku + Sonnet
Reinventing the wheel, one guest post at a time
While I always relished in the competitive aspect of link building, I couldn’t help but feel like it became a crapshoot in recent years. Sure, content generation became easier and more accessible, but that wasn’t the main culprit. I felt like I wasn’t doing enough, and that I needed to observe my entire workflow from a different perspective.
So, I asked myself - in a bare-bones structure, what makes a guest posting campaign a success? After some pondering, it was clear everything revolved around:
- How good is the article
- How efficient am I at generating quality articles at scale
- Do I stand out when compared to the competitors
At first glance, the situation wasn’t as grim as I initially thought. However, I wasn’t able to put my finger on how exactly to stand out and close the quality loop.
Why not cover all bases?
Then it hit me - I’m an editor, so I just have to think about what I like to see when I receive guest post drafts:
Immediately, a weird pattern emerged - 4 of the top 5 are all related to research. To make things even more interesting, the list also coincided with the most time-consuming tasks related to guest posting. So, what does this tell us?
I know what it takes to automate production; hence, now I needed to automate these finishing touches. While I’ve used the Automotive Newsroom and similar projects to establish a content generation blueprint for as little as $0.05/blog, this was a different beast altogether.
Why? Well, I’ll let you in on a dirty little secret - manual link sourcing is only ever as good as the researcher on the day. There’s no system prompt, LLM or secret technique that can replace human judgement. But who ever mentioned replacing it?
Why not just automate the boring stuff (shoutout to Al Sweigart!) and let humans judge what an LLM isn’t capable of yet? And that’s exactly how Citation_needed was born.
Five nets beat one big trawl
I wanted the core trick to be almost stupidly simple once you see it. So, I first deconstructed what an article is - just topics and subtopics, and each subtopic fishes a totally different patch of the search results.
Take this Reuters article about the England v Ghana football match at the 2026 FIFA World Cup as an example.
At first glance, the main topic is “2026 FIFA World Cup,” so if you were writing it yourself, you’d be instinctively inclined to Google it to get sources, right? Of course.
But when you read the whole thing, a web of subtopics emerges, as seen here:
What happens here is that, instead of one greedy mega-query that lets Google clump the same ten overlapping pages at the top, I pull five topics out of the piece and run a search for each. That way, I’ve roughly quintupled my shots at a genuinely good link, drawing from five different pools instead of bailing the same bucket five times.
Teach a man how to source links, and he’ll guest post forever
Then the engine goes to work. I lean on SERP API for the actual, current state of the search results, not some stale licensed index, and cross-run it against Ahrefs, which scores every candidate on Domain Rating, organic traffic and referring domains. Haiku 4.5 does the cheap heavy lifting (reading the article and pulling the topics), and Sonnet 4.6 makes the call that actually matters (ranking the candidates).
Once I got the costs, the task distribution and the approach right, I was able to automate a rare combo - links that are good for SEO and good for the poor human who has to read the page.
The lesson the duplicates taught me
This didn’t arrive fully formed. My early tests handed me ten links all orbiting the exact same topic, which is a cannibalization buffet and a spam signal that would have Google erase your website from existence. That’s why I equipped the system prompt with some hard rules:
- Homepages
- Product pages
- Anything spammy
- Anything below a desired Domain Rating (DR) threshold
- Duplicates of a topic already covered
- Giant parent-topic articles that are too close to the piece to actually help it
- Stat aggregators
That last one is the kind of thing you only learn by getting burned. A link should add a new angle, not stand next to your article flexing about how it covers the same ground.
And the single hardest thing in the whole build was knowing when to stop tuning the prompt. I had two entire testing sessions where I overcorrected so aggressively the thing couldn’t clear a 40% hit rate. Death by a thousand “oh, just one exception.” The moment I eased off and got it consistently past 90%, I knew I’d found the floor I could build reliability on. Restraint, it turns out, is a feature.
How I saved money: Don’t like a link? Throw it back, it’s free
I know, I know. You were at the cusp of asking: What if Citation_needed spits out something I don’t like? Do I have to spend more API credits?
Well, it’s your lucky day: every pick comes out of a cache of around a hundred vetted candidates, so rejecting a link costs nothing. Don’t fancy one? The tool just quietly hands you the next best from the pool.
Swap a link ten times if you’re feeling picky - no extra calls, no extra tokens, no surprise on the bill. Here’s a breakdown of the costs per run, per tool used and at different rates of use:
| Cost source | 1 article | 10 | 100 | 1,000 |
|---|---|---|---|---|
| SerpAPI5 searches @ $0.025 | $0.125 | $1.25 | $12.50 | $125 |
| Haiku 4.5topic extraction | ~$0.003 | ~$0.03 | ~$0.30 | ~$3 |
| Sonnet 4.6ranks 2 pools | ~$0.044 | ~$0.44 | ~$4.40 | ~$44 |
| Totalper article | ~$0.17 | ~$1.72 | ~$17.20 | ~$172 |
If your link building budget still looks like a car payment, it doesn’t have to.
LET'S TALK →Now, it’s time to address the retro elephant in the room.
Why does a link tool cosplay as Windows 98?
Yes, the whole thing lives inside a switchable retro Windows desktop - 95, 98, XP and 7. And no, that’s not me being quirky for the sake of it (okay, maybe a LITTLE bit, you got me). Part of it is pure homage to the operating systems that sparked my curiosity as a kid and got me where I am today.
But the bigger half is my own take on accessibility: familiarity. We all carry the same muscle memory for these iconic, slightly clunky old UIs. You already know how a window, a tab and a Start menu behave, so there’s nothing new to learn.
Let me put it like this: building RB.RUN was like building a futuristic supercar, while Citation_needed was building a Civic from parts you found during a 10-minute stroll through a scrapyard. Different purposes, different methods, but the same amount of fun.
I’ll admit my first instinct was to pile on more chrome and more cleverness. Then I remembered Microsoft engineers were fighting the exact same fight I was and figured I should just make the damn thing usable.
I thought about the Windows 7 task manager, and those honest little progress bars that crawled across the screen when something was copying.
Those dumb-simple, perfectly clear visual signals were exactly what I needed to show a list of topics ticking by. And that was it. Anything more would’ve been me getting in my own way.
Link building is an art, not a steroid cycle
I could’ve finished the tool much earlier, but I wanted to develop a feature that would automatically insert the links into the text. No matter how much I tried, I wasn’t able to solve:
- How to make the links seem natural
- How to make the main link blend in
- How to weave the links in random, organic patterns
- How to de-prioritize/drop links after a second automatic pass
And the thing is - I’m a human-in-the-loop guy down to my bones, and I’ve learned to spot when “human in the loop” is really just a euphemism for dumping the grunt work back on a person. This isn’t one of those times.
By grounding everything in sources of truth and showing the logic behind every pick, the person is freed up to focus on the part that’s genuinely an art: dropping the links in well.
Because force-cramming a dozen links into an article isn’t link building - it’s an SEO growth hormone injection, and it defeats the entire reason links exist.
A link is supposed to be a helpful resource, not a juiced-up ranking signal flexing in the mirror. It’s a citation, and every claim worth making deserves a good one.
And if your content deserves better citations too, you know where to find me.
LET'S TALK →