An AI knowledge base experiment Calgary Stampede Edition
We built a complete, AI optimized knowledge base for one ten-day event, put it behind logs we controlled, and measured how AI actually consumed it. Three modes emerged, plus a wide gap between being read and being cited.
What we built
If you assemble a genuinely comprehensive, structured knowledge base about one real-world subject, and publish it where AI systems can reach it, how quickly do they start using it, and what do they do with it once they have? We picked the Calgary Stampede: a ten-day event with hundreds of moving parts and no single machine-readable source of truth.
How we measured it
The whole site sat behind our own S3 + CloudFront, so every request an AI system made landed in a log we controlled. The discipline that makes the numbers trustworthy: we verified every bot against its operator's published IP ranges or reverse-DNS before believing its User-Agent. UA strings are trivially forged, and more than half the "AI bot" traffic by UA turned out to be impostors. Separately, we ran a controlled citation test (18 prompts across ChatGPT, Gemini, Perplexity, and Copilot) to check whether the reading turned into being cited.
AI began consuming the knowledge base within hours of launch, in three distinct modes (training, indexing, and live retrieval), and read it far more than it credited it in citations. The rest of this post breaks down each mode from the verified logs across the full event.
The consumption funnel
Every request an AI system made falls into one of four descending tiers, and the drop-off between them is steep: an enormous top (bulk extraction), a narrowing middle (indexing, then live answering), and a near-flat bottom (a human actually arriving from the answer).
Training: the bulk extractors
The largest slice of AI traffic wasn't there to answer anyone. It was there to learn from. Training crawlers ingest content wholesale to feed model weights, with no path back to the site. On our logs they were the biggest consumers by volume, and their behavior is consistent: broad, systematic, sitemap-driven, and hungry for our machine-readable .md twins.
| Crawler | Operator | Requests | Signature |
|---|---|---|---|
| ClaudeBot behavioral | Anthropic | ~3,328 | one stable block (216.73.216/22), full-catalogue sweep |
| Amazonbot verified | Amazon | ~2,831 | 431 IPs, PTR *.crawl.amazonbot.amazon |
| GPTBot verified | OpenAI | 2,821 | 1,465 .md twins pulled |
| CCBot | Common Crawl | 46 | feeds many open models |
| Bytespider | ByteDance | 23 | light |
The tell that our format worked: GPTBot pulled the .md version of 1,465 pages. We publish a plain-Markdown twin of every page specifically for machine consumers, and the training crawlers went straight for it.
Indexing: building the answer index
The second tier is the one that can pay off. These crawlers build the search indexes that answer engines draw from, so being indexed here is the precondition for ever being cited. All four major indexers found a nine-day-old domain fast.
| Crawler | Feeds | Genuine | IPs | Verified via |
|---|---|---|---|---|
| Googlebot | Google / AI Overviews / Gemini | ~1,893 | 68 | *.googlebot.com |
| Applebot | Siri / Apple Intelligence | ~1,752 | 1,186 | *.applebot.apple.com |
| OAI-SearchBot | ChatGPT search answers | 1,478 | 39 | OpenAI IP ranges |
| Bingbot | Copilot / ChatGPT / Perplexity | ~102 | 71 | *.search.msn.com |
Two things stood out. First, Applebot surged, from ~30 requests early to ~1,750 genuine across 1,186 IPs by event's end, so Apple's answer layer is crawling new content aggressively. Second, Bing barely showed up (~102) despite an IndexNow ping submitting all 1,521 URLs on day one. Since Bing feeds Copilot and part of Perplexity, its near-absence lines up with what we later saw: those engines never surfaced us. If you're not in the index, you can't appear in the answer.
Live retrieval: AI answering real people, in real time
This is the mode that becomes an answer a person actually reads. Live retrieval is when someone asks an assistant a question and the assistant fetches a specific page then and there to compose its reply. OpenAI does this with a distinct agent, ChatGPT-User, from its own Azure egress ranges, so we can verify it against OpenAI's published IPs. It's fully measurable in the logs. It just doesn't show up anywhere a business normally looks.
Each major assistant ships its own published user-agent for this, so live retrieval is measurable per assistant, not just in aggregate. Over the full event, one showed up in force and the rest barely registered:
Perplexity-User showed 22 raw hits, but all came from a single datacenter IP that was simultaneously spoofing Claude and Google agents, so genuine Perplexity retrieval was zero. Google's Gemini has no separate user-triggered fetcher, so live Gemini answers leave no distinct footprint. Today, live AI retrieval to a small business's site is almost entirely ChatGPT.Over the full ten days the arc is clean: a pre-event trickle, a sharp ramp when the gates opened, a peak on July 4, a high plateau through mid-event, then a steady decline through the back half and a fall-off once the Stampede closed.
Over the window: 2,499 verified fetches, 94% returning 200, across 493 distinct pages. Not the homepage on repeat, but a wide, deep slice of the catalogue. The content mix points to decision-stage demand, not browsing:
The most-fetched pages read like a transcript of what people asked their assistant during the Stampede:
| Page fetched to answer a live question | Fetches |
|---|---|
/events/2026-07-12/yungblud/ | 87 |
/events/…/world-cup-watch-parties/ | 86 |
/breakfasts/…/calgary-stampede-family-day-breakfast/ | 61 |
/day/2026-07-11/ (whole-day schedule) | 59 |
/artists/bailey-zimmerman/ | 41 |
/events/2026-07-11/high-dive-show/ | 39 |
/concerts/2026-07-04/sean-paul/ | 27 |
"Where's a family-day pancake breakfast?" "When's Yungblud on?" "Is Bailey Zimmerman playing?" "What's happening July 11?" These are people mid-decision, and the assistant reached for our specific page to answer. One behavioral detail: live retrieval fetched the HTML, never the .md twin. The answer layer reads the human page; only the training and indexing crawlers took the machine format.
Humans, referrals, and the zero-click reality
So did any actual people show up directly on the site? Yes, mostly through Google, and a thin trickle through AI.
| Referral source (a real browser arriving) | Arrivals | What it means |
|---|---|---|
| google.com / .ca | 2,108 | real browsers from Google (IP-audited: ~1 datacenter in the top 90 IPs) |
| bing.com | ~20 | marginal (Bing barely indexed us) |
utm_source=chatgpt.com | 21 | ChatGPT citation clicks (verified residential/mobile) |
| perplexity / others | ~2 | negligible |
We stress-tested this, because a Referer header is client-controlled and easy to forge; a scraper can stamp google.com on every request to look organic. So we classified the source IPs of the 1,399 Google-referring addresses. Re-auditing the highest-volume ones found just one datacenter address; the rest were residential (Shaw and Telus, Calgary/Alberta ISPs, the exact local audience) or no-PTR mobile/IPv6 clients. Real people, not forged referers. One caveat we can't resolve: a google.com referer can't tell a plain search click from an AI-Overview click, since Google reports them identically. Set that 2,108 against the other number, though: 21.
ChatGPT fetched our pages 2,499 times to answer people. 21 of those people clicked through. The AI answered from our content over 99% of the time without sending anyone to the site.
This is the zero-click pattern. For a publisher whose model is ad impressions, it's a real problem. But for a business (a breakfast host, a venue, a festival) the answer itself is the outcome: when ChatGPT tells someone "the family-day breakfast is July 5, free, 8–10am," that person got value. There's no click to count, and referral analytics register nothing. The ChatGPT-User fetch on a specific decision page is the closest measurable proxy for that visit, and it lives in the server logs.
Read constantly, cited never
Reading is not citing, so we tested citing directly. Mid-event, alongside the logs, we ran a controlled citation test: 18 prompts across the exact topics we cover, on ChatGPT, Gemini, Perplexity, and Copilot, for 72 answers in total, checking whether any cited the knowledge base.
The engines weren't idle. ChatGPT cited an average of 17.8 sources per answer, Gemini 11.6, Perplexity 10.0. They browsed hard for every one of these questions. They just never picked us. On competitive head queries like "who's playing the Coca-Cola Stage" or "free pancake breakfast," a nine-day-old domain loses the citation race to the official site, Daily Hive, and Visit Calgary every time. Authority is the gate, and we haven't earned it yet.
And yet the server logs prove ChatGPT fetched us 2,499 times and that 21 real people clicked a ChatGPT citation to our pages. Both are true. The reconciliation is the lesson:
- Citation tools test queries in a specific environment, where many variables like model version, location, and device can influence answers. Every answer and its sources can vary.
- Server logs capture the real long tail: thousands of specific, oddly-phrased, in-the-moment questions where the assistant occasionally reaches for the one page that actually has the answer (yours), and once in a while cites it.
What we'd take away
- Machine-readable, fresh, and structured is what gets used. AI didn't reach for a homepage or a marketing page. It reached for one-entity-per-page facts, and it reached for the current ones. GPTBot pulled the plain-Markdown twin of 1,465 pages; live retrieval hit 493 distinct pages, and the most-fetched were the specific, dated, up-to-the-day ones (a named breakfast on July 5, the July 11 schedule, an artist playing that night). The lesson is blunt: a model can only use what it can parse, and it prefers what's true right now. Structure makes you readable, freshness makes you worth reading, and the two together are what put a page into an answer.
- The answer is the product, even when the click never comes. Over the event, ChatGPT fetched our pages 2,499 times to answer real people and sent 21 of them to the site. That's roughly 99% zero-click. Measured the old way, by referral traffic, you'd conclude AI did almost nothing for us. Measured honestly, AI delivered our information to hundreds of people who never had to visit. For a publisher selling ad impressions that's a threat. For a business, it's the goal: when an assistant tells someone your breakfast is free from 8 to 10am on Saturday, that person shows up, and it doesn't matter that they never loaded your page. The unit of value has moved from the visit to the answer. The catch is that the answer is invisible to every analytics tool built around the click, so you have to measure the fetch, not the referral. On top of that, 2,108 real people arrived from Google, and at this point we can't tell whether that was AI Overviews or traditional search results.
- Knowledge starts getting used almost immediately. This domain was nine days old. Within hours of launch it was being crawled; within days every major system (OpenAI, Google, Apple, Amazon, Anthropic) was ingesting it; and live retrieval stepped up the moment the gates opened and tracked real demand across all ten days. None of that required age, backlinks, or authority. What it required was being present, parseable, and current when the questions started. The sequence is consistent: retrieval comes fast, citation comes later. Being read is the first thing that happens once you publish good structured data, and it happens long before you've "earned" anything in the traditional SEO sense. If you wait for authority before you publish, you miss the window where AI was already willing to read you.
Frequently asked questions
Which AI assistants fetch pages live, and can you tell them apart?
Not always. Some assistants use a distinct, published user-agent for live fetches, which makes them measurable and verifiable by IP; others don't, so their activity blends into ordinary traffic. In this experiment OpenAI's ChatGPT-User was the only one that showed up in volume (2,499 verified fetches). Anthropic's Claude-User appeared just 3 times, genuine Perplexity-User was zero, and Google's Gemini has no separate live-retrieval agent at all, so its answers leave no distinct footprint. Today, identifiable live AI retrieval to a small site is almost entirely ChatGPT.
Is AI traffic visible in Google Analytics?
Mostly no. The part that matters, the assistant reading your pages to build an answer, is invisible to GA: those fetchers don't run JavaScript, so they never fire analytics. GA only catches the small trickle of people who click a citation afterward (about 1% here), and even then a Google referer can't tell an AI Overview click from a plain search click. The reliable record is your server logs, where each bot is verified by IP, because more than half of "AI bot" traffic by user-agent is spoofed.
What is the zero-click pattern, and is it bad for my business?
It means the assistant answers from your content without sending anyone to your site. ChatGPT fetched our pages 2,499 times and sent 21 clicks, roughly 99% zero-click. For an ad-supported publisher that's a threat. For a business, the answer is the outcome: when an assistant gives someone your hours, price, or availability, that customer shows up whether or not they visited the page.
Does AI cite or recommend brand-new websites?
Reading comes first; citation is authority-gated and slower. In a controlled test, 0 of 72 answers cited our nine-day-old domain on competitive questions, even though the logs show it was read thousands of times. New domains earn retrieval fast and citations later, so a citation checker's zero doesn't mean AI is ignoring you.
How do I make my business easier for AI to understand and use?
Give assistants clean, current facts they can parse, and publish them where AI already looks. In this experiment the structured, up-to-date pages got used; the marketing prose and the homepage got ignored. That's what Courtyard does for small businesses: we build and maintain a live, machine-readable knowledge base for your business, kept current, so ChatGPT, Gemini, Perplexity, and Claude understand what you offer and represent it accurately. Not an SEO trick or a ranking guarantee, just making sure AI has the answers it needs about your business.
Courtyard builds this kind of live, machine-readable knowledge base for small businesses, so AI assistants understand and recommend them accurately. See how AI visibility works, or read the State of AI Visibility 2026.