Reddit in AI citations: why threads get cited
Reddit threads appear often in the sources of AI answers to recommendation and comparison prompts. How often, on which engine and in which market depends on your category, and a fixed prompt set run through the API measures it directly. Below: why threads get cited, the measurement, and how to act on the result.
What counts as a Reddit citation
A Reddit citation is a reddit.com URL among the sources an AI answer used: a Reddit URL in result.sources[] and, on engines with inline chips, in result.citationPills[].
A Reddit mention is different: the answer’s prose says “users on Reddit recommend…” without linking a thread. That shows up only in result.text, and it is weaker evidence of retrieval. Keep the two apart, as the mentions vs citations post explains for brands.
Why threads end up in answers
Grounded AI answers are built in two steps: the engine runs web searches, then the model writes the answer and cites pages from what came back. The full mechanics are in how AI engines choose citations. Three properties of discussion threads suit that process.
- They are retrieved for experience queries. Engines rewrite a prompt into several searches, the query fan-out. Prompts such as “best CRM for a five-person agency” tend to produce searches phrased like a person asking for experience, which is the kind of query forum threads answer. ChatGPT’s
result.searchQueries(withinclude.searchQueries) comes back empty on the answers served today, so the citedsources[]are the evidence to measure. - They contain quotable first-person claims. “We moved from X to Y and onboarding got shorter” is a specific, attributable statement. A model building an answer from retrieved text has to support its claims with something, and threads supply many small claims per page.
- They compare options critically. A thread lists the drawbacks of several products side by side, content a vendor page rarely publishes about itself.
Google has also made forum content more prominent. In February 2024 Google announced an expanded partnership giving it access to Reddit’s Data API, and said it is working to make Reddit content easier to reach across its products (Google blog, checked 2026-09-17). Google Search Central documents DiscussionForumPosting structured data as the way forum sites help Google identify first-hand discussion content for its discussions and forums search feature (Search Central, checked 2026-09-17). On the results page this surfaces as the “What people are saying” module, returned as result.peopleAreSaying[] on POST /v1/monitor/google.
None of this proves Reddit dominates your category. In some categories review sites, YouTube, publishers or documentation absorb the citations instead. So measure it for your prompts.
Measure Reddit’s share for your prompts
Step 1: fix the prompt set
Use 30 or more prompts from your real buyer questions, grouped by intent (category, comparison, problem, branded). Designing a prompt set covers sourcing and clustering. Keep the wording fixed: a changed prompt is a different sample.
Step 2: choose engines and markets
Pick the engines your buyers use and the country values you sell in. Reddit’s share can differ by market, and an English-language thread may not be retrieved for a prompt in another language (see multilingual AI answers). Add Google Search for the same queries so you can compare what classic search ranks with what the AI engines cite.
Step 3: submit the runs as a batch
Per run, as tasks at the Starter tier: ChatGPT $0.0006, Gemini $0.0006, from the billing docs. Thirty prompts on both in one market is 30 × $0.0012 = $0.036. Every new account gets 100 free requests on any engine, enough for 50 prompts on both.
import os, datetime, requests
API = "https://api.answerline.dev"
HEADERS = {"Authorization": f"Bearer {os.environ['ANSWERLINE_API_KEY']}"}
PROMPTS = ["best crm for a small agency", "hubspot vs pipedrive for startups"] # your fixed set
DAY = datetime.date.today().isoformat()
tasks = [
{
"taskType": t,
"payload": {"prompt": p, "country": "US"},
"idempotencyKey": f"reddit-share-{t}-{i}-US-{DAY}",
"webhook": {"url": "https://example.com/hooks/answerline"},
}
for i, p in enumerate(PROMPTS)
for t in ("CHATGPT", "GEMINI")
]
resp = requests.post(f"{API}/v1/async/task/batch", json=tasks, headers=HEADERS, timeout=60)
resp.raise_for_status()
body = resp.json()
print(body["summary"])
for item in body["results"]:
if not item["success"]:
print(tasks[item["index"]]["idempotencyKey"], item["error"]["code"])
A batch takes up to 500 tasks. The idempotency key is derived from engine, prompt, market and day, so resubmitting after a timeout cannot run a task twice (idempotency keys explained). Each webhook delivery carries the same JSON as GET /v1/async/task/{taskId}; the answer is in response.result. Verify the signature before storing it (verifying webhook signatures).
Step 4: classify sources and compute the shares
from collections import Counter
from urllib.parse import urlparse
def host(url: str) -> str:
h = (urlparse(url).hostname or "").lower()
return h[4:] if h.startswith("www.") else h
def is_reddit(url: str) -> bool:
h = host(url)
return h == "reddit.com" or h.endswith(".reddit.com") or h == "redd.it"
def reddit_report(results: list[dict]) -> dict:
"""results: result objects from one engine for one market and run."""
answers_with_sources = answers_citing_reddit = reddit_sources = all_sources = 0
threads, domains = Counter(), Counter()
for r in results:
urls = [s["url"] for s in r.get("sources", []) if s.get("url")]
if not urls:
continue
answers_with_sources += 1
all_sources += len(urls)
hits = [u for u in urls if is_reddit(u)]
reddit_sources += len(hits)
answers_citing_reddit += bool(hits)
threads.update(set(hits))
domains.update({host(u) for u in urls})
return {
"reddit_answer_rate": answers_citing_reddit / max(answers_with_sources, 1),
"reddit_source_share": reddit_sources / max(all_sources, 1),
"top_threads": threads.most_common(10),
"top_domains": domains.most_common(15),
}
Two numbers answer two questions:
- Reddit answer rate is the share of sourced answers that cite at least one Reddit URL. It tells you how often a reader of the answer could land on a thread.
- Reddit source share is Reddit URLs divided by all source URLs. It tells you how much of the cited evidence comes from Reddit compared with every other domain.
top_domains puts Reddit in context. If a review site or a competitor’s blog appears in more answers than Reddit does, that is the more urgent finding.
For Google Search results, apply the same is_reddit test to result.organicResults[].link and note whether result.peopleAreSaying is present (the field is omitted when the module is absent). If a thread ranks in the organic results for a prompt’s query and the same thread is cited by ChatGPT or Gemini for that prompt, retrieval is the likely path, and ranking content of your own for that query is the lever.
Step 5: read it by cluster, engine and over time
Split both numbers by intent cluster. One hypothesis worth testing is that comparison and “best for” prompts cite threads more than problem or branded prompts do; your data will show whether that holds for your category. Split by engine too: each engine has its own retrieval, so one engine’s share says nothing about another’s.
Then repeat the run on a schedule. A single run is one sample of a variable answer (why one check is an anecdote); compare rates across several runs, and report how many answers each rate is based on (sampling vs census).
Worked example
The numbers below are invented to show the arithmetic. Suppose a 30-prompt set on one engine returns 28 answers with sources, 150 source URLs in total, and 11 answers cite at least one thread, with 17 Reddit URLs overall.
- Reddit answer rate: 11 / 28 = 39%.
- Reddit source share: 17 / 150 = 11%.
Reddit is in many answers but is a small part of each one’s evidence. Now suppose top_threads shows three threads account for 12 of the 17 URLs. Then three specific threads matter, not Reddit in general.
What to do once you have the number
If a few threads carry the citations
Read them. They tell you which claims the engine is quoting about your category and whether you are in them. If your product is missing or described inaccurately, the fix usually starts on your own site: publish the specific answer to the question the thread asks. If you do participate in the thread, do it as a named, disclosed representative, answer the question asked, and follow the subreddit’s rules on self-promotion. Moderators remove undisclosed promotion, readers call it out, and the thread the engine cites ends up worse for you.
If Reddit’s share is high but spread thin
Many threads, each cited once, means no single conversation to join. Compete for retrieval instead: read the cited threads to see which questions they answer, then publish pages that answer them with the specifics threads offer anecdotally, such as measured setup times, limits, prices and named trade-offs. A page that states verifiable facts plainly is easier to quote than a thread that argues about them. Structured data for AI visibility covers making those facts machine-readable.
If Reddit’s share is low
Do not build a Reddit program. Look at top_domains: the domains that do get cited are the ones to study, pitch or compete with. Competitor AI answer monitoring shows how to track them.
Pitfalls
- Counting mentions as citations. “Redditors say” in
textis not a retrieved thread. Count URLs. - Missing hosts.
old.reddit.com,np.reddit.comandredd.itshort links are all Reddit; match on hostname, not a substring of the URL. - Double-counting chips.
citationPills[]has one entry per (chip, source) pair, so the same URL can appear in several pills. Usesources[]for shares; use pills to see where in the prose a thread supports a claim. Pill ids are 0-based on ChatGPT and 1-based on the other engines. - Mixing engines or markets. A blended “AI” share hides the engine that matters to you.
- One run. Report the number of runs and answers behind every rate.
- ChatGPT answers without search. ChatGPT decides on its own whether to search, and an answer with no sources showed no search. Compute Reddit’s citation share over answers with sources and report the share without.
Start with the quickstart, or see the AI visibility tracking use case for the full monitoring setup.
Questions
Do AI engines cite Reddit more than other sites?
It depends on the category, the market and the engine, so measure it for your own prompts rather than relying on a borrowed percentage. Count the Reddit URLs in sources[] across a fixed prompt set and compare that share with review sites, publishers and vendor domains.
How do I detect a Reddit citation in an API response?
Parse the hostname of each result.sources[].url and treat reddit.com, any subdomain of reddit.com and redd.it as Reddit. For ChatGPT and Gemini, result.citationPills[].domain gives the host of each inline citation directly.
Why would Reddit threads be cited so often?
Grounded answers cite pages that their web searches retrieve, and discussion threads are retrieved for experience-style queries such as best X for Y or X vs Y. Threads also contain first-person claims and side-by-side comparisons that are easy to quote. Whether that holds for your category is something the source data for your prompts will show.
Should I post on Reddit to get cited in AI answers?
Only as a genuine, disclosed participant where a community's rules allow it. Undisclosed promotion breaks community rules, gets removed, and damages the brand the thread is about; publishing the specific evidence on your own site is the durable route.
How much does it cost to measure Reddit's citation share?
One run of a prompt costs $0.0006 on ChatGPT and $0.0006 on Gemini at the Starter tier. A 30-prompt set on both in one market is $0.036 per run. Every new account gets 100 free requests on any engine, enough for 50 prompts on both.