Technical Reports

AI Ingestion Case Studies

These whitepapers provide a deep-dive analysis of codebase barriers and metadata gaps within B2B SaaS frameworks.

Case Study 1

Checkly Inc. - Schema Gaps on Comparison Pages

This is an independent technical check, not commissioned by Checkly. Findings below come from live fetches of Checkly's public pages, run 2026-08-24 -- not from live prompting of ChatGPT, Perplexity, Gemini, or Claude, which is part of the paid engagement.

1. Executive Summary & Context

Checkly provides synthetic monitoring for developer teams. In a technical, comparison-heavy market, buyers search for things like "Checkly vs UptimeRobot" or "Datadog alternatives." Checkly maintains dedicated pages for exactly this kind of query -- /datadog-alternative/, /new-relic-alternative/, and similar -- which is good practice. The gap found is narrower and more specific than "the site is invisible."

2. Live Fetch Results

Fetched each URL directly with a standard HTTP client (no JS execution), the same way a static crawler would see it:

GET https://checklyhq.com/ -> 200, 25,687 chars visible text, 1 JSON-LD block
GET https://checklyhq.com/pricing/ -> 200, 25,270 chars visible text, JSON-LD present
GET https://checklyhq.com/datadog-alternative/ -> 200, 12,498 chars visible text, 0 JSON-LD blocks
GET https://checklyhq.com/robots.txt -> allows all user-agents, including GPTBot and PerplexityBot

In plain terms: the homepage and pricing page are solid -- real static content, real schema, no crawler blocks. The comparison/alternative pages carry real content too (this is not a client-side-rendering problem), but they ship without any structured data at all.

3. What a Fix Looks Like

Extend the schema pattern already used on the homepage to the comparison pages, with fields specific to what each page is actually comparing:

<!-- Illustrative pattern -- exact fields would be built from Checkly's
     real pricing/feature data during a paid engagement, not guessed. -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "SoftwareApplication",
  "name": "Checkly",
  "applicationCategory": "DeveloperApplication",
  "review": {
    "@type": "Review",
    "itemReviewed": { "@type": "SoftwareApplication", "name": "Datadog" }
  }
}
</script>

4. Entity Disambiguation

Searched Wikidata directly for a "Checkly" entity: none exists today. A sameAs link needs something real to point to -- creating a Wikidata item is a prerequisite here, not just a schema field to fill in.

Case Study 2

Spellbook Inc. - Pricing Fully Gated, No Schema Found

This is an independent technical check, not commissioned by Spellbook. Findings below come from live fetches of Spellbook's public pages, run 2026-08-24 -- not from live prompting of ChatGPT, Perplexity, Gemini, or Claude, which is part of the paid engagement.

1. Executive Summary & Context

Spellbook uses AI to review and draft legal contracts. Lawyers evaluating it will ask things like "how much does Spellbook cost?" -- and the honest answer, confirmed by reading the page itself, is that no public number exists.

2. Live Fetch Results

Fetched spellbook.legal's homepage and pricing page directly, no JS execution:

GET https://spellbook.legal/ -> 200, 6,375 chars visible text, 0 JSON-LD blocks
GET https://spellbook.legal/pricing -> 200, 6,412 chars visible text, 0 JSON-LD blocks
GET https://spellbook.legal/robots.txt -> allows all user-agents, no AI-crawler blocks

The pricing page's own text, quoted directly: "Custom pricing for modern legal teams... Our pricing is structured around the number of team members on your license. To learn more... and get personalized pricing, book a demo." No dollar figures appear in the raw HTML anywhere on either page -- this is a real, confirmed gap, not an estimate, and it's a business decision (fully custom pricing) as much as a technical one.

3. Entity Disambiguation

Searched Wikidata directly for a "Spellbook" legal-AI entity: none exists today. There's no existing profile to link to yet -- creating one would be a prerequisite for any sameAs disambiguation strategy.

4. What a Fix Looks Like

Neither page has any JSON-LD today, so the first move is a baseline Organization node -- independent of the pricing-disclosure question entirely:

<!-- Illustrative pattern -- Spellbook has no schema today, on either
     page checked. -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "Spellbook",
  "url": "https://spellbook.legal",
  "description": "AI contract drafting and review for legal teams"
}
</script>

A separate, non-technical question worth flagging: whether to publish an indicative "starting at" price range for AI engines to cite, even while keeping exact custom pricing behind a demo request for human visitors.