Citably.

Notebook ·  Ed. 01  ·  June 2, 2026

10 Southeast US B2B SaaS sites, audited.
Half are invisible to ChatGPT.

We ran the same five-pass GEO audit Citably ships to clients across ten of the most recognizable Southeast US B2B SaaS brands. Calendly, SalesLoft, OneTrust, Pendo, Bandwidth, Rithum, nCino, FullStory, Florence Healthcare, and Mailchimp. No NDAs were signed. No one paid for this. The findings come from static HTML we could fetch with a single curl from a single IP. This is exactly what most AI crawlers see.

The sample

Ten brands.
One audit shape.

SiteHQCategory
CalendlyAtlanta GAScheduling
SalesLoftAtlanta GASales engagement
OneTrustAtlanta GAPrivacy GRC
PendoRaleigh NCProduct analytics
BandwidthRaleigh NCComms API
RithumMorrisville NCE-commerce
nCinoWilmington NCFintech
FullStoryAtlanta GASession analytics
Florence HealthcareAtlanta GAClinical research
MailchimpAtlanta GAMarketing email

Method · Static HTML fetch, no JS execution · CitablyAuditBot/1.0 · Single residential IP

Finding 01

5 / 10

still ship without an llms.txt.

Calendly, OneTrust, nCino, FullStory, and Mailchimp all ship a working, standards-conforming llms.txt at /llms.txt. The format is simple: a markdown heading with the brand name, a one-line description, then a structured fact-pack.

SalesLoft, Pendo, Bandwidth, Rithum, and Florence Healthcare ship nothing. Most return a generic 404.

Perplexity and ChatGPT now look for llms.txt first. The five sites without one are absent from that initial lookup. They’re still findable through the regular crawl, but they lose the canonical brand-fact channel that the engines were trained to consult.

“Half the Southeast field already ships one. The value isn’t having an llms.txt; it’s having a good one.”

Finding 02

4 / 10

ship two schema types or fewer on the homepage.

nCino ships zero JSON-LD blocks. SalesLoft ships two blocks but the JSON fails to parse: same effective story. Mailchimp ships one block containing a single WebPage type. FullStory ships two types: Organization and PostalAddress.

The minimum entity graph for B2B SaaS is six types: Organization, Service, FAQPage, BreadcrumbList, Person, SoftwareApplication. Four of these ten sites ship two or fewer. AI engines treat them as strings, not entities.

Florence Healthcare and OneTrust are the standouts in the set, with 11 and 10 distinct types respectively. Both Atlanta-based. Both serve heavily-regulated industries. Both ship the kind of structured-data discipline that makes AI engines treat them as canonical.

“Schema is the entity graph. Without it, you’re a string.”

Finding 03

0 / 10

explicitly welcome AI crawlers. 0 of 10 block them either.

Nobody in the Southeast set explicitly names GPTBot, ClaudeBot, PerplexityBot, or Google-Extended in robots.txt with an Allow rule. Nobody blocks them either.

Default-allow is technically fine. The engines have permission to crawl. But default-allow signals nothing to procurement teams who are starting to ask whether vendors are AI-friendly. And Cloudflare Bot Fight Mode quietly overrides robots.txt anyway. We’ve seen ClaudeBot get 403’d from sites with permissive robots.txt because the edge ruleset didn’t know about it.

The fix is ten lines of robots.txt and a Cloudflare allowlist. Citably ships them on day one of every Sprint.

“The gap isn’t access. It’s signaling.”

The standouts

Florence and OneTrust.
Both Atlanta.

Florence Healthcare ships 11 distinct @types in its homepage schema. Organization, ImageObject, BreadcrumbList, ListItem, PostalAddress, ContactPoint, EntryPoint, Place, ReadAction, SearchAction, PropertyValueSpecification. Atlanta-based clinical-research SaaS for sponsors and CROs.

OneTrust ships 10 @types. Corporation, ContactPoint, ImageObject, ItemList, BreadcrumbList, ListItem, PostalAddress, WebPage, WebSite, ProfilePage. Atlanta-based privacy and GRC platform.

Two Atlanta companies, both serving heavily-regulated industries, both with discipline around structured data. If you sell B2B SaaS in the Southeast and want to know what “good” looks like in your category right now: pick one of these and look at what they ship. Neither invented any of it. They just shipped all of it.

If your site was in this benchmark

Here’s what we’d ship
in a 14-day Sprint.

  1. 01Ship an llms.txt. Hand-written, not generated. Brand fact-pack at the top, FAQ extract at the bottom.
  2. 02Add Organization JSON-LD with an @id anchor and sameAs to LinkedIn, Crunchbase, GitHub, X. Bonus: ProfessionalService dual-type if you sell services.
  3. 03Add Service JSON-LD for each pricing tier.
  4. 04Add FAQPage JSON-LD to your existing FAQ. No new content needed: just markup the visible accordion.
  5. 05Add BreadcrumbList site-wide. AI engines use it to map your hierarchy.
  6. 06Explicitly Allow GPTBot, ChatGPT-User, OAI-SearchBot, ClaudeBot, PerplexityBot, Perplexity-User, Google-Extended in robots.txt. Default-allow works for the engines but doesn’t signal welcome to compliance teams or Cloudflare.
  7. 07If you’re on Cloudflare with Bot Fight Mode on: add the 14 AI crawler User-Agents to the allowlist. We see 403s on ClaudeBot even with permissive robots.txt.
  8. 08Pre-rendered or server-rendered schema only. JS-rendered JSON-LD is invisible to most AI crawlers.

Want yours audited?

Free citability check.
24-hour turnaround.

Same methodology as the audits we sell, scoped to 3 findings. Use it to decide whether to go deeper.

Filed by Jake Pereira · Founder, Citably · June 2, 2026 · Atlanta GA · ET

Methodology, raw findings, and reproduction notes live at /sample-report. The next benchmark will widen the sample to 25 Southeast US SaaS sites and add a six-month delta.