{
  "run_id": "www-fiftystork-com-20261007111151",
  "url": "https://www.fiftystork.com",
  "brand_name": "Data and systems consulting · Fifty Stork",
  "date": "2026-10-07",
  "generated_at": "2026-10-07T11:11:51",
  "business_type": "E-commerce",
  "geo_score": 42,
  "rating": "At Risk",
  "tier": "poor",
  "scores": {
    "ai_citability": 29,
    "brand_authority": 25,
    "content_eeat": 38,
    "technical": 61,
    "schema": 76,
    "platform_optimization": 50
  },
  "platforms": {
    "ChatGPT": 50,
    "Perplexity": 45,
    "Google AI Overviews": 52,
    "Gemini": 53,
    "Bing Copilot": 51
  },
  "executive_summary": "Data and systems consulting · Fifty Stork scores 42/100 for GEO readiness, which places the site in the AT RISK tier. The audit analyzed 25 representative pages and found the biggest opportunities in crawler access, structured data, and quote-friendly content. The fastest path to improvement is to remove access blockers, publish stronger machine-readable entity signals, and turn key commercial pages into clear answer destinations.",
  "findings": [
    {
      "severity": "high",
      "title": "Content is not yet quote-friendly for AI systems",
      "description": "The sampled pages skew toward low citability, which usually means the copy is too vague, too thin, or too contextual for an answer engine to safely extract.",
      "recommendation": "Rewrite priority pages using clear answer blocks, factual statements, and self-contained paragraphs in the 100-200 word range.",
      "impact": "Raises the odds that AI tools will quote your pages directly instead of paraphrasing competitors.",
      "pages": [
        "https://www.fiftystork.com/products/#stadra",
        "https://www.fiftystork.com/contact/",
        "https://www.fiftystork.com/practice/predictive-models/",
        "https://www.fiftystork.com/practice/funnel-design/",
        "https://www.fiftystork.com/practice/event-model/"
      ]
    },
    {
      "severity": "medium",
      "title": "AI readiness kit is not deployed",
      "description": "Only 2 of 15 AI readiness files were found at the web root. A complete kit (llms.txt, ai.txt, ai-entities.json, rag-index.json, and companions) gives AI systems a full machine-readable map of the site.",
      "recommendation": "Deploy the complete AI readiness file set to the web root. See https://ai.silverbackmarketing.com/ for a reference deployment.",
      "impact": "A complete kit adds a +20 point bonus to the GEO score and gives every major AI platform a direct reading path into the site."
    },
    {
      "severity": "medium",
      "title": "Authority and trust signals are weak",
      "description": "The site does not yet show a strong enough mix of authoritativeness, company context, and proof elements across the pages sampled.",
      "recommendation": "Strengthen About, Team, Contact, and proof sections with credentials, client evidence, years in business, and external references.",
      "impact": "Builds trust signals that both users and AI systems rely on when choosing what to cite."
    },
    {
      "severity": "medium",
      "title": "Missing the schema types expected for a E-commerce site",
      "description": "The site was classified as E-commerce, but none of the schema types AI systems expect for this category (Product, Offer, AggregateRating) were found on the sampled pages.",
      "recommendation": "Add Product markup to the most relevant pages, then extend to the remaining types where content supports them.",
      "impact": "Category-matched schema helps AI platforms classify the business and select it for category-specific answers."
    },
    {
      "severity": "medium",
      "title": "Off-site entity presence is thin",
      "description": "The brand appears to have limited discoverable entity reinforcement outside the website itself, especially on sources AI systems commonly cross-check.",
      "recommendation": "Prioritize LinkedIn, YouTube, review platforms, and a clean sameAs graph; pursue Wikidata or Wikipedia when the brand is notable enough.",
      "impact": "Makes the brand easier for AI systems to recognize, disambiguate, and trust."
    }
  ],
  "quick_wins": [
    {
      "action": "Rewrite priority pages using clear answer blocks, factual statements, and self-contained paragraphs in the 100-200 word range.",
      "impact": "Raises the odds that AI tools will quote your pages directly instead of paraphrasing competitors."
    }
  ],
  "medium_term": [
    {
      "action": "Deploy the complete AI readiness file set to the web root. See https://ai.silverbackmarketing.com/ for a reference deployment.",
      "impact": "A complete kit adds a +20 point bonus to the GEO score and gives every major AI platform a direct reading path into the site."
    },
    {
      "action": "Strengthen About, Team, Contact, and proof sections with credentials, client evidence, years in business, and external references.",
      "impact": "Builds trust signals that both users and AI systems rely on when choosing what to cite."
    },
    {
      "action": "Add Product markup to the most relevant pages, then extend to the remaining types where content supports them.",
      "impact": "Category-matched schema helps AI platforms classify the business and select it for category-specific answers."
    },
    {
      "action": "Prioritize LinkedIn, YouTube, review platforms, and a clean sameAs graph; pursue Wikidata or Wikipedia when the brand is notable enough.",
      "impact": "Makes the brand easier for AI systems to recognize, disambiguate, and trust."
    }
  ],
  "strategic": [
    {
      "action": "Deploy the complete AI readiness file set to the web root. See https://ai.silverbackmarketing.com/ for a reference deployment.",
      "impact": "A complete kit adds a +20 point bonus to the GEO score and gives every major AI platform a direct reading path into the site."
    },
    {
      "action": "Strengthen About, Team, Contact, and proof sections with credentials, client evidence, years in business, and external references.",
      "impact": "Builds trust signals that both users and AI systems rely on when choosing what to cite."
    },
    {
      "action": "Add Product markup to the most relevant pages, then extend to the remaining types where content supports them.",
      "impact": "Category-matched schema helps AI platforms classify the business and select it for category-specific answers."
    },
    {
      "action": "Prioritize LinkedIn, YouTube, review platforms, and a clean sameAs graph; pursue Wikidata or Wikipedia when the brand is notable enough.",
      "impact": "Makes the brand easier for AI systems to recognize, disambiguate, and trust."
    }
  ],
  "crawler_access": {
    "GPTBot": {
      "platform": "ChatGPT",
      "status": "ALLOWED (200)",
      "recommendation": "Keep access open"
    },
    "ClaudeBot": {
      "platform": "Claude",
      "status": "ALLOWED (200)",
      "recommendation": "Keep access open"
    },
    "PerplexityBot": {
      "platform": "Perplexity",
      "status": "ALLOWED (200)",
      "recommendation": "Keep access open"
    },
    "GoogleBot": {
      "platform": "Google AI Overviews",
      "status": "ALLOWED (200)",
      "recommendation": "Keep access open"
    },
    "BingBot": {
      "platform": "Bing Copilot",
      "status": "ALLOWED (200)",
      "recommendation": "Keep access open"
    }
  },
  "page_coverage": [
    {
      "url": "https://www.fiftystork.com",
      "title": "Data and systems consulting · Fifty Stork",
      "status_code": 200,
      "word_count": 288,
      "has_ssr_content": true,
      "h1_count": 1,
      "meta_description": true,
      "canonical": true,
      "internal_links": 20,
      "external_links": 1,
      "images": 4,
      "images_missing_alt": 0,
      "schema_types": [
        "Organization",
        "PropertyValue",
        "WebPage",
        "WebSite"
      ],
      "citability": 37.3,
      "top_citable": [
        {
          "heading": "Working together",
          "preview": "An assignment can concern one product or one data problem, or cover several systems. The result may be a recommendation, an analysis, agreed definitions or a specification. My role is...",
          "total_score": 48
        },
        {
          "heading": "Preparing information for AI ↗",
          "preview": "Identify which sources are usable and what needs to change before they are used. Illustrative examples of the approach, using constructed information.",
          "total_score": 40
        },
        {
          "heading": "Data and systems consulting",
          "preview": "I advise companies on data and the systems that use it. My work includes choosing products, deciding how systems should fit together, developing models and preparing data for automation and...",
          "total_score": 24
        }
      ],
      "errors": [],
      "ttfb_ms": 189,
      "noindex": false,
      "has_viewport": true,
      "has_author": false,
      "published_date": null,
      "modified_date": null,
      "question_headings": 0,
      "invalid_jsonld": false
    },
    {
      "url": "https://www.fiftystork.com/products/#stadra",
      "title": "Data products: FirmaDB and Stadra · Fifty Stork",
      "status_code": 200,
      "word_count": 17,
      "has_ssr_content": true,
      "h1_count": 1,
      "meta_description": true,
      "canonical": true,
      "internal_links": 0,
      "external_links": 1,
      "images": 0,
      "images_missing_alt": 0,
      "schema_types": [
        "BreadcrumbList",
        "ListItem",
        "Organization",
        "PropertyValue",
        "WebPage",
        "WebSite"
      ],
      "citability": 0,
      "top_citable": [],
      "errors": [],
      "ttfb_ms": 145,
      "noindex": false,
      "has_viewport": true,
      "has_author": false,
      "published_date": null,
      "modified_date": null,
      "question_headings": 0,
      "invalid_jsonld": false
    },
    {
      "url": "https://www.fiftystork.com/contact/",
      "title": "Contact for data and systems consulting · Fifty Stork",
      "status_code": 200,
      "word_count": 3,
      "has_ssr_content": true,
      "h1_count": 1,
      "meta_description": true,
      "canonical": true,
      "internal_links": 0,
      "external_links": 0,
      "images": 0,
      "images_missing_alt": 0,
      "schema_types": [
        "BreadcrumbList",
        "ContactPage",
        "ListItem",
        "Organization",
        "PropertyValue",
        "WebSite"
      ],
      "citability": 0,
      "top_citable": [],
      "errors": [],
      "ttfb_ms": 153,
      "noindex": false,
      "has_viewport": true,
      "has_author": false,
      "published_date": null,
      "modified_date": null,
      "question_headings": 0,
      "invalid_jsonld": false
    },
    {
      "url": "https://www.fiftystork.com/practice/product-data-model/",
      "title": "Product data model · Fifty Stork",
      "status_code": 200,
      "word_count": 139,
      "has_ssr_content": true,
      "h1_count": 1,
      "meta_description": true,
      "canonical": true,
      "internal_links": 5,
      "external_links": 0,
      "images": 1,
      "images_missing_alt": 0,
      "schema_types": [
        "BreadcrumbList",
        "ListItem",
        "Organization",
        "PropertyValue",
        "Service",
        "WebPage",
        "WebSite"
      ],
      "citability": 32.7,
      "top_citable": [
        {
          "heading": "When this is useful",
          "preview": "A product may have several packages, versions and contract-specific rights. Its records need to distinguish what is offered from what a particular customer can use.",
          "total_score": 45
        },
        {
          "heading": "My contribution",
          "preview": "I define the product entities, their relationships and authoritative sources, including how versions and customer-specific terms are recorded. A versioned market-data package defines six datasets, venue coverage, delivery, latency and...",
          "total_score": 40
        },
        {
          "heading": "What it covers",
          "preview": "Product, dataset and package identifiers and source systemsAttributes, units, coverage and permitted valuesVariants, bundles, subscriptions and their relationshipsAccess rights, usage allowances and contract-specific termsProduct versions, effective dates and historical records",
          "total_score": 13
        }
      ],
      "errors": [],
      "ttfb_ms": 171,
      "noindex": false,
      "has_viewport": true,
      "has_author": false,
      "published_date": null,
      "modified_date": null,
      "question_headings": 0,
      "invalid_jsonld": false
    },
    {
      "url": "https://www.fiftystork.com/practice/",
      "title": "Data and systems consulting catalogue · Fifty Stork",
      "status_code": 200,
      "word_count": 870,
      "has_ssr_content": true,
      "h1_count": 1,
      "meta_description": true,
      "canonical": true,
      "internal_links": 52,
      "external_links": 0,
      "images": 26,
      "images_missing_alt": 0,
      "schema_types": [
        "BreadcrumbList",
        "CollectionPage",
        "ItemList",
        "ListItem",
        "Organization",
        "PropertyValue",
        "WebSite"
      ],
      "citability": 45.3,
      "top_citable": [
        {
          "heading": "Assessments",
          "preview": "An assessment of whether a customer data platform is needed and which options meet the requirements. A recommendation with supporting comparisons, costs, unresolved questions and any further checks needed before...",
          "total_score": 58
        },
        {
          "heading": "Specifications",
          "preview": "A specification of the events recorded by the systems in scope. An event specification with definitions, example records and change rules. How records are matched to a person, account or...",
          "total_score": 51
        },
        {
          "heading": "Models",
          "preview": "Calculations of realised and expected customer value over a defined period. A customer value model with its components, horizon, assumptions and sensitivity analysis. Models that estimate future outcomes, behaviour or...",
          "total_score": 37
        }
      ],
      "errors": [],
      "ttfb_ms": 160,
      "noindex": false,
      "has_viewport": true,
      "has_author": false,
      "published_date": null,
      "modified_date": null,
      "question_headings": 0,
      "invalid_jsonld": false
    },
    {
      "url": "https://www.fiftystork.com/practice/architecture-decisions/",
      "title": "Data and systems architecture decisions · Fifty Stork",
      "status_code": 200,
      "word_count": 144,
      "has_ssr_content": true,
      "h1_count": 1,
      "meta_description": true,
      "canonical": true,
      "internal_links": 5,
      "external_links": 0,
      "images": 1,
      "images_missing_alt": 0,
      "schema_types": [
        "BreadcrumbList",
        "ListItem",
        "Organization",
        "PropertyValue",
        "Service",
        "WebPage",
        "WebSite"
      ],
      "citability": 27.5,
      "top_citable": [
        {
          "heading": "Related work",
          "preview": "Capability map ↗Collection and routing ↗Data preparation for AI ↗ For an enquiry, describe the question and the systems involved.",
          "total_score": 33
        },
        {
          "heading": "My contribution",
          "preview": "I compare arrangements for the systems in scope, identify the relevant trade-offs and document decisions about sources, connections, storage and processing. CRM, billing and product events land in separate warehouse...",
          "total_score": 32
        },
        {
          "heading": "What it covers",
          "preview": "Responsibilities of each systemAuthoritative sources and data flowsWhere transformations, calculations and other processing happenOptions and relevant constraintsDecisions, reasons and unresolved questionsDependencies affecting the proposed arrangement",
          "total_score": 27
        }
      ],
      "errors": [],
      "ttfb_ms": 199,
      "noindex": false,
      "has_viewport": true,
      "has_author": false,
      "published_date": null,
      "modified_date": null,
      "question_headings": 0,
      "invalid_jsonld": false
    },
    {
      "url": "https://www.fiftystork.com/practice/data-quality-review/",
      "title": "Data quality review · Fifty Stork",
      "status_code": 200,
      "word_count": 134,
      "has_ssr_content": true,
      "h1_count": 1,
      "meta_description": true,
      "canonical": true,
      "internal_links": 5,
      "external_links": 0,
      "images": 1,
      "images_missing_alt": 0,
      "schema_types": [
        "BreadcrumbList",
        "ListItem",
        "Organization",
        "PropertyValue",
        "Service",
        "WebPage",
        "WebSite"
      ],
      "citability": 33,
      "top_citable": [
        {
          "heading": "My contribution",
          "preview": "I examine the relevant records, assess the consequences of the problems found and recommend corrections. Any work to organise or correct the data is agreed separately. Four presence checks on...",
          "total_score": 47
        },
        {
          "heading": "What it covers",
          "preview": "Missing, duplicate or outdated recordsConflicting definitions, values and sourcesCoverage and consistency checksEffects on the intended analysis or applicationRecommended corrections and further checks",
          "total_score": 27
        },
        {
          "heading": "When this is useful",
          "preview": "Data can be adequate for one use and unsuitable for another. Quality checks need to relate defects to the analysis or process they affect.",
          "total_score": 25
        }
      ],
      "errors": [],
      "ttfb_ms": 101,
      "noindex": false,
      "has_viewport": true,
      "has_author": false,
      "published_date": null,
      "modified_date": null,
      "question_headings": 0,
      "invalid_jsonld": false
    },
    {
      "url": "https://www.fiftystork.com/practice/customer-value-models/",
      "title": "Customer lifetime value (LTV) models · Fifty Stork",
      "status_code": 200,
      "word_count": 120,
      "has_ssr_content": true,
      "h1_count": 1,
      "meta_description": true,
      "canonical": true,
      "internal_links": 5,
      "external_links": 0,
      "images": 1,
      "images_missing_alt": 0,
      "schema_types": [
        "BreadcrumbList",
        "ListItem",
        "Organization",
        "PropertyValue",
        "Service",
        "WebPage",
        "WebSite"
      ],
      "citability": 34,
      "top_citable": [
        {
          "heading": "When this is useful",
          "preview": "Customer lifetime value depends on what is counted as value, over which period, and how future activity is estimated. The same customer records can support quite different calculations.",
          "total_score": 45
        },
        {
          "heading": "My contribution",
          "preview": "I define the value calculation, analyse its components and assess the assumptions used for expected future value. Cohort contribution matrix with one cohort linked to its monthly contribution curve.",
          "total_score": 30
        },
        {
          "heading": "What it covers",
          "preview": "Revenue, cash flows and relevant costsCustomer and cohort definitionsTime horizons and treatment of incomplete historiesAssumptions about future activityUncertainty and sensitivity to missing inputs",
          "total_score": 27
        }
      ],
      "errors": [],
      "ttfb_ms": 97,
      "noindex": false,
      "has_viewport": true,
      "has_author": false,
      "published_date": null,
      "modified_date": null,
      "question_headings": 0,
      "invalid_jsonld": false
    },
    {
      "url": "https://www.fiftystork.com/practice/workflow-and-automation-design/",
      "title": "Workflow and automation design · Fifty Stork",
      "status_code": 200,
      "word_count": 172,
      "has_ssr_content": true,
      "h1_count": 1,
      "meta_description": true,
      "canonical": true,
      "internal_links": 4,
      "external_links": 0,
      "images": 1,
      "images_missing_alt": 0,
      "schema_types": [
        "BreadcrumbList",
        "ListItem",
        "Organization",
        "PropertyValue",
        "Service",
        "WebPage",
        "WebSite"
      ],
      "citability": 29,
      "top_citable": [
        {
          "heading": "My contribution",
          "preview": "I map the process, identify what can be automated and specify how the steps fit together, including who can act, who approves and how exceptions are handled. Applications include internal...",
          "total_score": 44
        },
        {
          "heading": "When this is useful",
          "preview": "A process may involve records being copied, decisions made in several places and exceptions handled outside the main system. Automation needs to account for that work.",
          "total_score": 27
        },
        {
          "heading": "What it covers",
          "preview": "Triggers, steps and required inputsDivision of work between people, systems and AIData, tools and permissions for automated stepsSystem handoffs and update timingDecision rules, branches and stop conditionsExceptions, retries and repeated...",
          "total_score": 16
        }
      ],
      "errors": [],
      "ttfb_ms": 158,
      "noindex": false,
      "has_viewport": true,
      "has_author": false,
      "published_date": null,
      "modified_date": null,
      "question_headings": 0,
      "invalid_jsonld": false
    },
    {
      "url": "https://www.fiftystork.com/practice/data-preparation-for-ai/",
      "title": "Data preparation for AI · Fifty Stork",
      "status_code": 200,
      "word_count": 291,
      "has_ssr_content": true,
      "h1_count": 1,
      "meta_description": true,
      "canonical": true,
      "internal_links": 5,
      "external_links": 0,
      "images": 1,
      "images_missing_alt": 0,
      "schema_types": [
        "BreadcrumbList",
        "ListItem",
        "Organization",
        "PropertyValue",
        "Service",
        "WebPage",
        "WebSite"
      ],
      "citability": 34,
      "top_citable": [
        {
          "heading": "Preparing information for an internal assistant",
          "preview": "An illustrative preparation plan for answering questions about orders, products and procedures. Each source needs its own treatment. SourcePreparationCheckOrder recordsKeep the order ID, current status and status timestamp together.An answer...",
          "total_score": 57
        },
        {
          "heading": "My contribution",
          "preview": "I identify the relevant material, define how it should be organised, indexed and checked, and carry out agreed preparation work where appropriate. Keyword and vector index candidates are joined by...",
          "total_score": 36
        },
        {
          "heading": "When this is useful",
          "preview": "An AI application may need information spread across documents, business systems and shared folders. Some sources overlap or disagree; others lack the context needed to interpret them.",
          "total_score": 27
        }
      ],
      "errors": [],
      "ttfb_ms": 142,
      "noindex": false,
      "has_viewport": true,
      "has_author": false,
      "published_date": null,
      "modified_date": null,
      "question_headings": 0,
      "invalid_jsonld": false
    },
    {
      "url": "https://www.fiftystork.com/practice/cdp-evaluation/",
      "title": "Customer data platform (CDP) evaluation · Fifty Stork",
      "status_code": 200,
      "word_count": 238,
      "has_ssr_content": true,
      "h1_count": 1,
      "meta_description": true,
      "canonical": true,
      "internal_links": 5,
      "external_links": 0,
      "images": 1,
      "images_missing_alt": 0,
      "schema_types": [
        "BreadcrumbList",
        "ListItem",
        "Organization",
        "PropertyValue",
        "Service",
        "WebPage",
        "WebSite"
      ],
      "citability": 38,
      "top_citable": [
        {
          "heading": "Checking a proposed customer data platform",
          "preview": "An illustrative extract from an evaluation. Each requirement has an evidence check before a product is judged suitable. RequirementEvidence to requestDecision implicationUpdate an audience after a purchaseTest the route from...",
          "total_score": 49
        },
        {
          "heading": "When this is useful",
          "preview": "A team is considering a customer data platform and needs to compare it with its current systems. The useful comparison depends on the functions and timing the team actually needs.",
          "total_score": 44
        },
        {
          "heading": "My contribution",
          "preview": "I establish the requirements, assess current coverage and evaluate suitable options using evidence from the intended use. Six requirements across three fictional options, with identity correction highlighted and no aggregate...",
          "total_score": 32
        }
      ],
      "errors": [],
      "ttfb_ms": 93,
      "noindex": false,
      "has_viewport": true,
      "has_author": false,
      "published_date": null,
      "modified_date": null,
      "question_headings": 0,
      "invalid_jsonld": false
    },
    {
      "url": "https://www.fiftystork.com/practice/event-model/",
      "title": "Event model · Fifty Stork",
      "status_code": 200,
      "word_count": 133,
      "has_ssr_content": true,
      "h1_count": 1,
      "meta_description": true,
      "canonical": true,
      "internal_links": 5,
      "external_links": 0,
      "images": 1,
      "images_missing_alt": 0,
      "schema_types": [
        "BreadcrumbList",
        "ListItem",
        "Organization",
        "PropertyValue",
        "Service",
        "WebPage",
        "WebSite"
      ],
      "citability": 26,
      "top_citable": [
        {
          "heading": "What it covers",
          "preview": "Event names and definitionsProperties, formats and required valuesIdentity keys carried on each eventSources and destinationsRules for adding or changing an event, including its history",
          "total_score": 27
        },
        {
          "heading": "My contribution",
          "preview": "I define the events and their fields with the people who produce and use the data, and identify where existing records need to change. An order-paid event schema and valid...",
          "total_score": 26
        },
        {
          "heading": "When this is useful",
          "preview": "The same action may be recorded differently by a website, application and business system. Those differences affect how the records can be used together.",
          "total_score": 25
        }
      ],
      "errors": [],
      "ttfb_ms": 115,
      "noindex": false,
      "has_viewport": true,
      "has_author": false,
      "published_date": null,
      "modified_date": null,
      "question_headings": 0,
      "invalid_jsonld": false
    },
    {
      "url": "https://www.fiftystork.com/practice/identity-model/",
      "title": "Customer identity matching and identity models · Fifty Stork",
      "status_code": 200,
      "word_count": 137,
      "has_ssr_content": true,
      "h1_count": 1,
      "meta_description": true,
      "canonical": true,
      "internal_links": 5,
      "external_links": 0,
      "images": 1,
      "images_missing_alt": 0,
      "schema_types": [
        "BreadcrumbList",
        "ListItem",
        "Organization",
        "PropertyValue",
        "Service",
        "WebPage",
        "WebSite"
      ],
      "citability": 27.3,
      "top_citable": [
        {
          "heading": "My contribution",
          "preview": "I examine the available identifiers and define when records can be linked, when they must remain separate, and how mistakes can be corrected. An email-only record produces two candidates and...",
          "total_score": 44
        },
        {
          "heading": "When this is useful",
          "preview": "A customer can have several identifiers, while an email address or device may be shared. Matching rules need to account for those cases.",
          "total_score": 25
        },
        {
          "heading": "What it covers",
          "preview": "Identifiers and the systems that issue themMatching rules and excluded signalsAnonymous activity and the conditions for linking itMerge and split rules, including effects on historyMatch rates, errors and unresolved cases",
          "total_score": 13
        }
      ],
      "errors": [],
      "ttfb_ms": 123,
      "noindex": false,
      "has_viewport": true,
      "has_author": false,
      "published_date": null,
      "modified_date": null,
      "question_headings": 0,
      "invalid_jsonld": false
    },
    {
      "url": "https://www.fiftystork.com/practice/consent-and-permissions/",
      "title": "Consent and permissions · Fifty Stork",
      "status_code": 200,
      "word_count": 142,
      "has_ssr_content": true,
      "h1_count": 1,
      "meta_description": true,
      "canonical": true,
      "internal_links": 5,
      "external_links": 0,
      "images": 1,
      "images_missing_alt": 0,
      "schema_types": [
        "BreadcrumbList",
        "ListItem",
        "Organization",
        "PropertyValue",
        "Service",
        "WebPage",
        "WebSite"
      ],
      "citability": 29.8,
      "top_citable": [
        {
          "heading": "When this is useful",
          "preview": "A preference change may reach one system before another. The systems need agreed rules for which state to use and what to do while an update is pending.",
          "total_score": 45
        },
        {
          "heading": "My contribution",
          "preview": "I map how consent is represented and propagated, working from the purposes and requirements agreed with the responsible teams. A purpose-specific revocation is current while two cached copies still show...",
          "total_score": 35
        },
        {
          "heading": "Related work",
          "preview": "Collection and routing ↗Identity model ↗Workflow and automation design ↗ For an enquiry, describe the question and the systems involved.",
          "total_score": 33
        }
      ],
      "errors": [],
      "ttfb_ms": 152,
      "noindex": false,
      "has_viewport": true,
      "has_author": false,
      "published_date": null,
      "modified_date": null,
      "question_headings": 0,
      "invalid_jsonld": false
    },
    {
      "url": "https://www.fiftystork.com/practice/collection-and-routing/",
      "title": "Collection and routing · Fifty Stork",
      "status_code": 200,
      "word_count": 140,
      "has_ssr_content": true,
      "h1_count": 1,
      "meta_description": true,
      "canonical": true,
      "internal_links": 5,
      "external_links": 0,
      "images": 1,
      "images_missing_alt": 0,
      "schema_types": [
        "BreadcrumbList",
        "ListItem",
        "Organization",
        "PropertyValue",
        "Service",
        "WebPage",
        "WebSite"
      ],
      "citability": 28,
      "top_citable": [
        {
          "heading": "My contribution",
          "preview": "I specify capture and delivery rules, including what happens when a record arrives late, fails validation or is sent more than once. A constructed trace shows a warehouse commit followed...",
          "total_score": 35
        },
        {
          "heading": "Related work",
          "preview": "Event model ↗Consent and permissions ↗Volume and cost models ↗ For an enquiry, describe the question and the systems involved.",
          "total_score": 33
        },
        {
          "heading": "When this is useful",
          "preview": "Different uses require different delivery times and data. A report updated overnight and a live workflow may not need the same route.",
          "total_score": 30
        }
      ],
      "errors": [],
      "ttfb_ms": 133,
      "noindex": false,
      "has_viewport": true,
      "has_author": false,
      "published_date": null,
      "modified_date": null,
      "question_headings": 0,
      "invalid_jsonld": false
    },
    {
      "url": "https://www.fiftystork.com/practice/funnel-design/",
      "title": "Funnel design · Fifty Stork",
      "status_code": 200,
      "word_count": 135,
      "has_ssr_content": true,
      "h1_count": 1,
      "meta_description": true,
      "canonical": true,
      "internal_links": 5,
      "external_links": 0,
      "images": 1,
      "images_missing_alt": 0,
      "schema_types": [
        "BreadcrumbList",
        "ListItem",
        "Organization",
        "PropertyValue",
        "Service",
        "WebPage",
        "WebSite"
      ],
      "citability": 24.3,
      "top_citable": [
        {
          "heading": "Related work",
          "preview": "Sales pipeline definitions ↗Lead routing and ownership ↗Measurement plan ↗ For an enquiry, describe the question and the systems involved.",
          "total_score": 33
        },
        {
          "heading": "When this is useful",
          "preview": "Teams may use the same stage name for different things. A useful funnel needs a defined population and observable conditions for movement.",
          "total_score": 30
        },
        {
          "heading": "My contribution",
          "preview": "I clarify the states, transition rules, data and handoffs between systems and teams. A 1,000-case cohort has defined stage criteria and cumulative reach; 420 qualified handoffs reconcile to 300 accepted,...",
          "total_score": 20
        }
      ],
      "errors": [],
      "ttfb_ms": 116,
      "noindex": false,
      "has_viewport": true,
      "has_author": false,
      "published_date": null,
      "modified_date": null,
      "question_headings": 0,
      "invalid_jsonld": false
    },
    {
      "url": "https://www.fiftystork.com/practice/sales-pipeline-definitions/",
      "title": "Sales pipeline definitions · Fifty Stork",
      "status_code": 200,
      "word_count": 135,
      "has_ssr_content": true,
      "h1_count": 1,
      "meta_description": true,
      "canonical": true,
      "internal_links": 5,
      "external_links": 0,
      "images": 1,
      "images_missing_alt": 0,
      "schema_types": [
        "BreadcrumbList",
        "ListItem",
        "Organization",
        "PropertyValue",
        "Service",
        "WebPage",
        "WebSite"
      ],
      "citability": 29,
      "top_citable": [
        {
          "heading": "When this is useful",
          "preview": "The current stage of an opportunity does not show how it moved through the pipeline. Reporting also depends on which dates, amounts and historical states are retained.",
          "total_score": 42
        },
        {
          "heading": "My contribution",
          "preview": "I define stage movement and reporting together so that the operational records support the intended pipeline measures. Opening and closing opportunity values reconcile through new, reopened, won, lost and revised...",
          "total_score": 29
        },
        {
          "heading": "What it covers",
          "preview": "Entry and exit conditions, required records and responsible rolesPaused, lost and reopened opportunitiesAutomatic changes and permitted overridesAmounts, dates and reporting periodsStage snapshots and movement between periodsTreatment of duplicated and removed...",
          "total_score": 16
        }
      ],
      "errors": [],
      "ttfb_ms": 121,
      "noindex": false,
      "has_viewport": true,
      "has_author": false,
      "published_date": null,
      "modified_date": null,
      "question_headings": 0,
      "invalid_jsonld": false
    },
    {
      "url": "https://www.fiftystork.com/practice/lead-routing-and-ownership/",
      "title": "Lead routing and ownership · Fifty Stork",
      "status_code": 200,
      "word_count": 123,
      "has_ssr_content": true,
      "h1_count": 1,
      "meta_description": true,
      "canonical": true,
      "internal_links": 5,
      "external_links": 0,
      "images": 1,
      "images_missing_alt": 0,
      "schema_types": [
        "BreadcrumbList",
        "ListItem",
        "Organization",
        "PropertyValue",
        "Service",
        "WebPage",
        "WebSite"
      ],
      "citability": 28.5,
      "top_citable": [
        {
          "heading": "Related work",
          "preview": "Sales pipeline definitions ↗Workflow and automation design ↗Decision models ↗ For an enquiry, describe the question and the systems involved.",
          "total_score": 33
        },
        {
          "heading": "My contribution",
          "preview": "I define assignment rules, their order of application and the fallback when a lead cannot be assigned automatically. A lead matches an existing account owner and a territory pool. Ordered...",
          "total_score": 29
        },
        {
          "heading": "What it covers",
          "preview": "Assignment criteria and required dataCapacity or territory rules where relevantDuplicate leads and existing relationshipsReassignment and fallback ownershipUnassigned records and exception handling",
          "total_score": 27
        }
      ],
      "errors": [],
      "ttfb_ms": 123,
      "noindex": false,
      "has_viewport": true,
      "has_author": false,
      "published_date": null,
      "modified_date": null,
      "question_headings": 0,
      "invalid_jsonld": false
    },
    {
      "url": "https://www.fiftystork.com/practice/campaign-and-sales-process-inventory/",
      "title": "Campaign and sales process inventory · Fifty Stork",
      "status_code": 200,
      "word_count": 126,
      "has_ssr_content": true,
      "h1_count": 1,
      "meta_description": true,
      "canonical": true,
      "internal_links": 5,
      "external_links": 0,
      "images": 1,
      "images_missing_alt": 0,
      "schema_types": [
        "BreadcrumbList",
        "ListItem",
        "Organization",
        "PropertyValue",
        "Service",
        "WebPage",
        "WebSite"
      ],
      "citability": 33,
      "top_citable": [
        {
          "heading": "My contribution",
          "preview": "I document the intended processes with their owners and identify shared dependencies, conflicting requirements and missing information. Six proposed processes are linked to triggers and required inputs. Three require an...",
          "total_score": 44
        },
        {
          "heading": "When this is useful",
          "preview": "Tool requirements often come from many proposed activities. Collecting those activities in one place makes their common data and system needs easier to examine.",
          "total_score": 22
        }
      ],
      "errors": [],
      "ttfb_ms": 104,
      "noindex": false,
      "has_viewport": true,
      "has_author": false,
      "published_date": null,
      "modified_date": null,
      "question_headings": 0,
      "invalid_jsonld": false
    },
    {
      "url": "https://www.fiftystork.com/practice/measurement-plan/",
      "title": "Measurement plan · Fifty Stork",
      "status_code": 200,
      "word_count": 125,
      "has_ssr_content": true,
      "h1_count": 1,
      "meta_description": true,
      "canonical": true,
      "internal_links": 5,
      "external_links": 0,
      "images": 1,
      "images_missing_alt": 0,
      "schema_types": [
        "BreadcrumbList",
        "ListItem",
        "Organization",
        "PropertyValue",
        "Service",
        "WebPage",
        "WebSite"
      ],
      "citability": 32,
      "top_citable": [
        {
          "heading": "My contribution",
          "preview": "I work through the questions being asked, define the relevant measures and assess whether the available records support them. A five-measure specification records questions, populations, formulas, source fields and cadence....",
          "total_score": 44
        },
        {
          "heading": "What it covers",
          "preview": "Calculation, unit and reporting periodPopulation, numerator and denominator where applicableSource records and update timingRelationships between measuresMissing inputs and limits on interpretation",
          "total_score": 27
        },
        {
          "heading": "When this is useful",
          "preview": "A measure can change because behaviour changed, because the population changed or because its source records changed. Its definition needs to make those distinctions possible.",
          "total_score": 25
        }
      ],
      "errors": [],
      "ttfb_ms": 92,
      "noindex": false,
      "has_viewport": true,
      "has_author": false,
      "published_date": null,
      "modified_date": null,
      "question_headings": 0,
      "invalid_jsonld": false
    },
    {
      "url": "https://www.fiftystork.com/practice/data-requirements/",
      "title": "Data requirements · Fifty Stork",
      "status_code": 200,
      "word_count": 149,
      "has_ssr_content": true,
      "h1_count": 1,
      "meta_description": true,
      "canonical": true,
      "internal_links": 5,
      "external_links": 0,
      "images": 1,
      "images_missing_alt": 0,
      "schema_types": [
        "BreadcrumbList",
        "ListItem",
        "Organization",
        "PropertyValue",
        "Service",
        "WebPage",
        "WebSite"
      ],
      "citability": 33.8,
      "top_citable": [
        {
          "heading": "My contribution",
          "preview": "I trace the intended use back to the records it requires and identify source options, gaps and preparation needs. A twelve-month coverage chart separates available source history from missing paid-state...",
          "total_score": 43
        },
        {
          "heading": "When this is useful",
          "preview": "A proposed analysis or workflow may depend on information that is unavailable, recorded too late or defined inconsistently. Those dependencies need to be understood before the work is specified.",
          "total_score": 37
        },
        {
          "heading": "Related work",
          "preview": "Data quality review ↗Data preparation for AI ↗Predictive models ↗ For an enquiry, describe the question and the systems involved.",
          "total_score": 33
        }
      ],
      "errors": [],
      "ttfb_ms": 92,
      "noindex": false,
      "has_viewport": true,
      "has_author": false,
      "published_date": null,
      "modified_date": null,
      "question_headings": 0,
      "invalid_jsonld": false
    },
    {
      "url": "https://www.fiftystork.com/practice/predictive-models/",
      "title": "Predictive models · Fifty Stork",
      "status_code": 200,
      "word_count": 131,
      "has_ssr_content": true,
      "h1_count": 1,
      "meta_description": true,
      "canonical": true,
      "internal_links": 5,
      "external_links": 0,
      "images": 1,
      "images_missing_alt": 0,
      "schema_types": [
        "BreadcrumbList",
        "ListItem",
        "Organization",
        "PropertyValue",
        "Service",
        "WebPage",
        "WebSite"
      ],
      "citability": 21.7,
      "top_citable": [
        {
          "heading": "My contribution",
          "preview": "I frame the prediction question, analyse the data, compare methods and interpret their performance for the intended use. Five fixed probability groups compare predictions with complete 90-day outcomes for 3,000...",
          "total_score": 29
        },
        {
          "heading": "When this is useful",
          "preview": "Questions such as whether a customer will return, when that may happen or what demand to expect require a defined target and an appropriate comparison.",
          "total_score": 22
        },
        {
          "heading": "What it covers",
          "preview": "Target and prediction horizonInputs available at the time of predictionCandidate methods and comparison baselinesEvaluation on data not used to fit the modelUncertainty, interpretation and intended use",
          "total_score": 14
        }
      ],
      "errors": [],
      "ttfb_ms": 113,
      "noindex": false,
      "has_viewport": true,
      "has_author": false,
      "published_date": null,
      "modified_date": null,
      "question_headings": 0,
      "invalid_jsonld": false
    },
    {
      "url": "https://www.fiftystork.com/practice/segmentation-models/",
      "title": "Segmentation models · Fifty Stork",
      "status_code": 200,
      "word_count": 130,
      "has_ssr_content": true,
      "h1_count": 1,
      "meta_description": true,
      "canonical": true,
      "internal_links": 5,
      "external_links": 0,
      "images": 1,
      "images_missing_alt": 0,
      "schema_types": [
        "BreadcrumbList",
        "ListItem",
        "Organization",
        "PropertyValue",
        "Service",
        "WebPage",
        "WebSite"
      ],
      "citability": 34,
      "top_citable": [
        {
          "heading": "My contribution",
          "preview": "I define and compare groupings, examine their variation and assess whether they are useful for the intended analysis or process. A fixed cohort of 2,000 customers moves between recency states...",
          "total_score": 42
        },
        {
          "heading": "When this is useful",
          "preview": "A group may be useful for one question and obscure important differences for another. Its definition also determines whether people can move between groups over time.",
          "total_score": 30
        },
        {
          "heading": "What it covers",
          "preview": "Grouping criteria and assignment methodFixed cohorts and changing statesDifferences within and between groupsStability over time and treatment of small groups",
          "total_score": 30
        }
      ],
      "errors": [],
      "ttfb_ms": 91,
      "noindex": false,
      "has_viewport": true,
      "has_author": false,
      "published_date": null,
      "modified_date": null,
      "question_headings": 0,
      "invalid_jsonld": false
    },
    {
      "url": "https://www.fiftystork.com/practice/attribution-models/",
      "title": "Attribution models · Fifty Stork",
      "status_code": 200,
      "word_count": 127,
      "has_ssr_content": true,
      "h1_count": 1,
      "meta_description": true,
      "canonical": true,
      "internal_links": 5,
      "external_links": 0,
      "images": 1,
      "images_missing_alt": 0,
      "schema_types": [
        "BreadcrumbList",
        "ListItem",
        "Organization",
        "PropertyValue",
        "Service",
        "WebPage",
        "WebSite"
      ],
      "citability": 36,
      "top_citable": [
        {
          "heading": "My contribution",
          "preview": "I define the attribution question, examine the available interaction history and compare appropriate allocation methods and their assumptions. The same 100 journeys and €12,000 are allocated by first interaction, last...",
          "total_score": 45
        },
        {
          "heading": "What it covers",
          "preview": "Outcomes, interactions and lookback periodsIdentity and source-data requirementsAllocation method and assumptionsComparison of results under alternative methodsMissing observations and limits on interpretation",
          "total_score": 27
        }
      ],
      "errors": [],
      "ttfb_ms": 87,
      "noindex": false,
      "has_viewport": true,
      "has_author": false,
      "published_date": null,
      "modified_date": null,
      "question_headings": 0,
      "invalid_jsonld": false
    },
    {
      "url": "https://www.fiftystork.com/practice/volume-and-cost-models/",
      "title": "Volume and cost models · Fifty Stork",
      "status_code": 200,
      "word_count": 122,
      "has_ssr_content": true,
      "h1_count": 1,
      "meta_description": true,
      "canonical": true,
      "internal_links": 5,
      "external_links": 0,
      "images": 1,
      "images_missing_alt": 0,
      "schema_types": [
        "BreadcrumbList",
        "ListItem",
        "Organization",
        "PropertyValue",
        "Service",
        "WebPage",
        "WebSite"
      ],
      "citability": 34,
      "top_citable": [
        {
          "heading": "My contribution",
          "preview": "I relate usage assumptions to the applicable pricing terms and compare options under plausible scenarios. A monthly cost sheet combines event charges, retained data and queries; the €3,222 versus €2,322...",
          "total_score": 43
        },
        {
          "heading": "When this is useful",
          "preview": "Costs can depend on events, stored records, processing frequency or other usage measures. An architecture choice may move costs between those categories.",
          "total_score": 25
        }
      ],
      "errors": [],
      "ttfb_ms": 93,
      "noindex": false,
      "has_viewport": true,
      "has_author": false,
      "published_date": null,
      "modified_date": null,
      "question_headings": 0,
      "invalid_jsonld": false
    }
  ],
  "strengths": [
    "A valid llms.txt file is already live, which gives AI systems a direct reading path into the site.",
    "The site already exposes machine-readable entity markup, giving AI systems a stronger identity graph.",
    "Most major AI crawlers can currently access the site, which removes one of the most common GEO blockers."
  ],
  "schema_types": [
    "BreadcrumbList",
    "CollectionPage",
    "ContactPage",
    "ItemList",
    "ListItem",
    "Organization",
    "PropertyValue",
    "Service",
    "WebPage",
    "WebSite"
  ],
  "llms": {
    "exists": true,
    "format_valid": true
  },
  "ai_readiness": {
    "files_total": 15,
    "present": [
      "/llms.txt",
      "/robots.txt"
    ],
    "missing": [
      "/ai.txt",
      "/llms-full.txt",
      "/ai-sitemap.xml",
      "/sitemap.md",
      "/ai-entities.json",
      "/ai-intent.json",
      "/ai-schema.json",
      "/rag-index.json",
      "/rag-index.jsonl",
      "/ai-disclosure.txt",
      "/training-data-policy.txt",
      "/.well-known/ai-plugin.json",
      "/manifest.json"
    ],
    "complete": false,
    "bonus_applied": 0
  }
}