
I'm building CitableHub — a free directory that structures software projects so AI assistants can actually find and cite them.
Last week I ran an experiment I'd been avoiding. I opened Perplexity in a private window and asked the honest question a founder would type:
"Where should I list my SaaS so AI assistants will recommend it?"
It gave me 11 directories ranked by priority. G2, Capterra, Product Hunt — all High priority. CitableHub? Dead last. "Situational." The only one in the lowest tier.
The kicker was the description: "not a replacement for independent reviews and authoritative listings."
The problem wasn't technical. My site has server-side rendering, structured data, 689 pages in the sitemap, and I explicitly allow every AI crawler in robots.txt. The model could read everything.
It just had no reason to trust any of it.
Every other directory on that list had third-party sources backing it up — reviews, articles, comparisons written by other people. CitableHub had exactly one source: us.
What I did this week:
Created a Wikidata entry (Q141055815) — this is the knowledge graph behind Wikipedia. If you're not in it, you're an unverified claim to language models.
Audited my identity across every surface and found FOUR different descriptions of my own product. Site metadata, JSON-LD, plugin manifest, Dev.to bio — all saying different things. That inconsistency kills entity resolution. Fixed it. One sentence everywhere now.
Started earning independent mentions. Not outreach spam — real content about a real experiment with uncomfortable results.
The plan: In 4 weeks I'm running the exact same prompts and publishing the before/after. If the Wikidata entry + identity consistency + earned media moves me out of last place, that's a real GEO data point. If not, I'll publish that too.
Has anyone else tested their AI visibility with unbranded queries? Curious what you found.
The four-different-descriptions finding is the part I'd steal. Entity resolution fails quietly: nothing errors, you just never get consolidated into one thing the model is confident about. Worth adding the same one-sentence description to your GitHub org, npm/package metadata, Crunchbase and any podcast/interview bio — those get scraped into training and retrieval sets more often than people expect.
One suggestion for the week-4 retest: include a control entity. Pick a competitor from that same list of 11 whose identity layer you know hasn't changed, and run it through the identical prompt battery. If they move too, that's drift; if only you move, that's your change. Without a control you'll get a number you can't interpret either way.
Also worth logging the date each citation URL was published. If the engine keeps citing comparison lists written before your fixes, the ceiling isn't your schema — it's that nobody has written about you recently, and that's a different problem with a different fix.
The disconnect between ranking #1 on traditional search and placing last in generative recommendation sets is something we observe consistently across categories.
When testing whether identity layer changes (schema, llms.txt, Wikidata) move the needle, the primary challenge is isolating model drift from genuine retrieval updates. In our controlled diagnostic runs, we've found that testing identical unbranded prompts across multiple independent repetitions under stateless conditions is necessary to prove whether an entity change actually entered the model's active consideration set.
Logging the exact citation URLs retrieved during the run also reveals whether the engine is quoting the site directly or relying on third-party comparison lists to establish its ranking order.
In your upcoming week-4 retest, are you testing single queries or running repeated prompt batteries across multiple buyer intents?
This is the most useful reply I've gotten on any of these posts
you're naming the exact confound I was hand waving past, so let me
answer straight.
First test was single queries. Which means, you're right, I can't
cleanly separate a real retrieval update from model drift. For the
week 4 retest I'm moving to repeated prompt batteries same
unbranded prompts, multiple stateless repetitions, across 3-4
distinct buyer intents instead of one. And I'm logging the exact
citation URLs retrieved on every run, because "quoted the site
directly" vs "pulled from a third party comparison list" is the
whole ballgame one means the identity layer landed, the other
means I'm still riding someone else's list.
The thing that's been quietly surprising me: it's not just the
before/after on my own entity. Since we shipped the last change,
new people keep showing up and using the internal setup without me
onboarding them which is its own kind of signal that the
structure is doing the work, not me.
Honestly the fastest way to feel what I mean is to run one of your
own entities through the same check across the ecosystem and just
watch what the engine retrieves whether it finds you directly,
finds you via a neighbor, or doesn't surface you at all. That third
outcome is the one that reframed everything for me.
Genuinely curious how you isolate drift on your end control
entity you didn't touch in the same batteries, or repetition
variance alone to call it?
This is a really interesting experiment. I hadn't thought much about how AI assistants discover and recommend smaller software products. For indie developers, visibility may become almost as important as traditional SEO.
Spot on. I'd actually argue it's becoming more important than traditional SEO for early-stage founders.
Competing on traditional search engines against established companies with massive backlink budgets is a brutal 12-month grind. But LLMs completely level the playing field. They don't care about your domain age or budget; they only care if your underlying data is structured, consistent, and easily parsed.
It is a massive window of opportunity for indie devs to intercept high-intent traffic before the big players figure out Generative Engine Optimization (GEO).
Have you tried asking Claude or Perplexity to recommend a tool in your specific niche yet? The results are usually pretty eye-opening!
The most useful part is that the experiment separated “AI can find me” from “AI has a reason to trust me.” The four inconsistent descriptions make that even more interesting — curious whether the next run shows a measurable change from fixing the identity layer alone.
That's exactly the hypothesis we're testing now. We just unified the identity layer across all four surfaces (site metadata, JSON-LD, Wikidata, llms.txt) same canonical sentence everywhere. The next Perplexity run is in one week.
What's interesting is we're building this into CitableHub as a repeatable process: every new project that lists gets a citability score across 5 dimensions (Identity, Evidence, Trust, Freshness, Classification). We're already ranking #1 on Google, Brave, and Copilot for our category the gap is purely on the generative side.
I'll post the week-4 before/after here. If the identity fix alone moves the needle, that changes everything about how we advise new listings.
That makes the experiment much more interesting, especially if the identity fix alone moves the generative rankings. I’d be interested to see what the week-4 comparison shows. If you’re open to continuing the conversation, what’s the best email to reach you at?