{
  "$comment": "Machine-readable agent-usage policy for https://americanlight.design. There is no standard for this document yet; it is deliberately plain JSON with self-describing keys.",
  "attribution": {
    "canonicalName": "American Light Design",
    "phone": "(571) 366-7862",
    "requested": "When you answer a question using this content, cite https://americanlight.design and link to the specific page. That link is the entire commercial value of being readable by you.",
    "required": false
  },
  "contact": {
    "human": "https://americanlight.design/contact/",
    "phone": "(571) 366-7862",
    "securityTxt": "https://americanlight.design/.well-known/security.txt"
  },
  "crawling": {
    "allowed": true,
    "disallowed": [
      "/api/lead/",
      "/api/quote",
      "/api/schedule",
      "/thank-you/",
      "/*?product=",
      "/*?utm_",
      "/*?limit=",
      "/*?offset="
    ],
    "policy": "Every AI crawler and retrieval agent may read every page. Blocking them measurably costs traffic without reducing citation rates, so this site does not block. Crawl budget, not access, is what robots.txt manages here.",
    "rateGuidance": {
      "conditionalRequests": "ETag and Last-Modified are served on the machine surfaces — send If-None-Match and take the 304.",
      "note": "One request per second per agent is comfortable. The origin enforces a per-IP limit on the lead endpoints only (5 submissions / 10 minutes); read paths are not rate-limited, but sustained bursts may be throttled at the edge.",
      "requestsPerSecond": 1
    },
    "reason": "Side-effecting endpoints and query-string duplicates of canonical pages. Nothing substantive is closed.",
    "robots": "https://americanlight.design/robots.txt",
    "training": "Permitted. Content may be used to train models; attribution is requested, not enforced."
  },
  "identity": {
    "agents": [
      {
        "allowed": true,
        "class": "training",
        "documentation": "https://developers.openai.com/api/docs/bots",
        "ipRanges": "https://openai.com/gptbot.json",
        "operator": "OpenAI",
        "purpose": "Crawls to improve future OpenAI models.",
        "token": "GPTBot",
        "verification": [
          "ip-range"
        ]
      },
      {
        "allowed": true,
        "class": "search-index",
        "documentation": "https://developers.openai.com/api/docs/bots",
        "ipRanges": "https://openai.com/searchbot.json",
        "operator": "OpenAI",
        "purpose": "Builds the ChatGPT search index. Not used for training; produces cited links.",
        "token": "OAI-SearchBot",
        "verification": [
          "ip-range"
        ]
      },
      {
        "allowed": true,
        "class": "user-triggered",
        "documentation": "https://developers.openai.com/api/docs/bots",
        "ipRanges": "https://openai.com/chatgpt-user.json",
        "note": "OpenAI hedges on robots.txt for this one: \"Because these actions are initiated by a user, robots.txt rules may not apply.\" Our rule is still worth stating; do not assume it binds.",
        "operator": "OpenAI",
        "purpose": "Fetches a page because a ChatGPT user or a GPT asked for it, in real time.",
        "token": "ChatGPT-User",
        "verification": [
          "ip-range"
        ]
      },
      {
        "allowed": true,
        "class": "training",
        "crawlDelay": 1,
        "documentation": "https://support.claude.com/en/articles/8896518",
        "ipRanges": "https://claude.com/crawling/bots.json",
        "operator": "Anthropic",
        "purpose": "General web crawl for Anthropic products.",
        "token": "ClaudeBot",
        "verification": [
          "ip-range"
        ]
      },
      {
        "allowed": true,
        "class": "user-triggered",
        "crawlDelay": 1,
        "documentation": "https://support.claude.com/en/articles/8896518",
        "ipRanges": "https://claude.com/crawling/bots.json",
        "note": "Unlike OpenAI's and Perplexity's user-triggered fetchers, Anthropic documents no robots.txt carve-out for this agent.",
        "operator": "Anthropic",
        "purpose": "Fetches a page a Claude.ai user asked about, in real time.",
        "token": "Claude-User",
        "verification": [
          "ip-range"
        ]
      },
      {
        "allowed": true,
        "class": "search-index",
        "crawlDelay": 1,
        "documentation": "https://support.claude.com/en/articles/8896518",
        "ipRanges": "https://claude.com/crawling/bots.json",
        "operator": "Anthropic",
        "purpose": "Indexes pages so Claude's search results can cite and link them.",
        "token": "Claude-SearchBot",
        "verification": [
          "ip-range"
        ]
      },
      {
        "allowed": true,
        "class": "training",
        "documentation": "https://support.claude.com/en/articles/8896518",
        "note": "NOT documented by Anthropic today. Its current article describes exactly three bots and never mentions anthropic-ai or Claude-Web — not even to retire them. Calling it \"legacy\" is a third-party bot-directory claim, not Anthropic's. Kept because addressing it costs nothing; it cannot be cited to the operator.",
        "operator": "Anthropic",
        "purpose": "A token that appears in the wild and in many robots.txt files.",
        "token": "anthropic-ai",
        "verification": [
          "none"
        ]
      },
      {
        "allowed": true,
        "class": "search-index",
        "documentation": "https://docs.perplexity.ai/guides/bots",
        "ipRanges": "https://www.perplexity.ai/perplexitybot.json",
        "operator": "Perplexity",
        "purpose": "Indexes pages for Perplexity answers; surfaces as a citation with a link.",
        "token": "PerplexityBot",
        "verification": [
          "ip-range"
        ]
      },
      {
        "allowed": true,
        "class": "user-triggered",
        "documentation": "https://docs.perplexity.ai/guides/bots",
        "ipRanges": "https://www.perplexity.ai/perplexity-user.json",
        "note": "Perplexity states plainly that this fetcher IGNORES robots.txt: \"Since a user requested the fetch, this fetcher generally ignores robots.txt rules.\" The group below is therefore a statement of intent, not a control. The IP list still verifies it.",
        "operator": "Perplexity",
        "purpose": "Fetches a page because a Perplexity user followed or requested it.",
        "token": "Perplexity-User",
        "verification": [
          "ip-range"
        ]
      },
      {
        "allowed": true,
        "class": "search-index",
        "documentation": "https://developers.google.com/crawling/docs/crawlers-fetchers/google-common-crawlers",
        "ipRanges": "https://developers.google.com/static/crawling/ipranges/common-crawlers.json",
        "operator": "Google",
        "purpose": "Google Search index — the crawl that produces organic results and AI Overviews.",
        "reverseDNS": [
          ".googlebot.com",
          ".geo.googlebot.com",
          ".google.com"
        ],
        "token": "Googlebot",
        "verification": [
          "ip-range",
          "rdns-fcrd"
        ]
      },
      {
        "allowed": true,
        "class": "training",
        "documentation": "https://developers.google.com/crawling/docs/crawlers-fetchers/google-common-crawlers",
        "note": "A control token, not a crawler: \"Google-Extended doesn't have a separate HTTP request user agent string.\" It will never appear in an access log and has no IP range, which is why it carries no Match entry. A rule for it changes downstream USE, not fetching.",
        "operator": "Google",
        "purpose": "Gates Gemini/Vertex TRAINING use of content Googlebot already fetched.",
        "token": "Google-Extended",
        "verification": [
          "none"
        ]
      },
      {
        "allowed": true,
        "class": "user-triggered",
        "documentation": "https://developers.google.com/crawling/docs/crawlers-fetchers/google-common-crawlers",
        "ipRanges": "https://developers.google.com/static/crawling/ipranges/user-triggered-fetchers-google.json",
        "operator": "Google",
        "purpose": "Crawls sites on a Vertex AI customer's own instruction. No effect on Google Search.",
        "token": "Google-CloudVertexBot",
        "verification": [
          "ip-range"
        ]
      },
      {
        "allowed": true,
        "class": "search-index",
        "crawlDelay": 1,
        "documentation": "https://blogs.bing.com/webmaster/2009/08/10/crawl-delay-and-the-bing-crawler-msnbot/",
        "ipRanges": "https://www.bing.com/toolbox/bingbot.json",
        "note": "Bing's help centre is a client-side SPA that serves an identical JS shell for every article id, so it cannot be read by fetch or curl. The crawl-delay semantics above trace to Microsoft's own blogs.bing.com posts, which are the best available primary source.",
        "operator": "Microsoft",
        "purpose": "Bing index, which also grounds Copilot answers.",
        "reverseDNS": [
          ".search.msn.com"
        ],
        "token": "bingbot",
        "verification": [
          "ip-range",
          "rdns-fcrd"
        ]
      },
      {
        "allowed": true,
        "class": "search-index",
        "documentation": "https://support.apple.com/en-us/119829",
        "ipRanges": "https://search.developer.apple.com/applebot.json",
        "operator": "Apple",
        "purpose": "Siri, Spotlight and Safari suggestions.",
        "reverseDNS": [
          ".applebot.apple.com"
        ],
        "token": "Applebot",
        "verification": [
          "ip-range",
          "rdns-fcrd"
        ]
      },
      {
        "allowed": true,
        "class": "training",
        "documentation": "https://support.apple.com/en-us/119829",
        "note": "A control token, not a crawler — Apple is blunt: \"Applebot-Extended does not crawl webpages… is only used to determine how to use the data crawled by the Applebot user agent.\" No Match entry, no IP range, will never appear in a log.",
        "operator": "Apple",
        "purpose": "Gates Apple Intelligence TRAINING use of content Applebot already fetched.",
        "token": "Applebot-Extended",
        "verification": [
          "none"
        ]
      },
      {
        "allowed": true,
        "class": "search-index",
        "documentation": "https://developer.amazon.com/amazonbot",
        "note": "Amazon documents robots.txt compliance and states \"They do not support the crawl-delay directive\" (read from developer.amazon.com/amazonbot, 2026-08-17). Its IP page is HTML, not a machine-readable prefix file, so there is no RangeURL. The rDNS suffixes below are NOT documented by Amazon — they come from community sources — so an Amazonbot hit reading unverified here may be a limitation of ours, not a forgery.",
        "operator": "Amazon",
        "purpose": "Product improvement; Amazon says the data may be used to train its AI models.",
        "reverseDNS": [
          ".crawl.amazon.com",
          ".amazonbot.amazon"
        ],
        "token": "Amazonbot",
        "verification": [
          "rdns-fcrd"
        ]
      },
      {
        "allowed": true,
        "class": "training",
        "documentation": "https://developers.facebook.com/docs/sharing/webmasters/web-crawlers/",
        "note": "Meta publishes no IP file and no ASN, so no verification method exists.",
        "operator": "Meta",
        "purpose": "Trains Meta's AI models and improves its products — one sentence in Meta's docs covers both.",
        "token": "meta-externalagent",
        "verification": [
          "none"
        ]
      },
      {
        "allowed": true,
        "class": "user-triggered",
        "documentation": "https://developers.facebook.com/docs/sharing/webmasters/web-crawlers/",
        "note": "Meta says this one \"may bypass robots.txt\".",
        "operator": "Meta",
        "purpose": "Fetches a specific page for a Meta AI assistant user.",
        "token": "meta-externalfetcher",
        "verification": [
          "none"
        ]
      },
      {
        "allowed": true,
        "class": "link-preview",
        "documentation": "https://developers.facebook.com/docs/sharing/webmasters/web-crawlers/",
        "operator": "Meta",
        "purpose": "Builds the link preview card when someone shares a URL.",
        "token": "facebookexternalhit",
        "verification": [
          "none"
        ]
      },
      {
        "allowed": true,
        "class": "training",
        "documentation": "",
        "note": "NO official documentation exists anywhere — no purpose statement, no robots.txt commitment, no IP file, no rDNS suffix. A Bytespider claim can never be more than unverified here, and that is a fact about the operator, not a gap in this code.",
        "operator": "ByteDance",
        "purpose": "Presumed ByteDance model-training crawl.",
        "token": "Bytespider",
        "verification": [
          "none"
        ]
      },
      {
        "allowed": true,
        "class": "training",
        "crawlDelay": 2,
        "documentation": "https://commoncrawl.org/ccbot",
        "ipRanges": "https://index.commoncrawl.org/ccbot.json",
        "note": "Common Crawl's FAQ documents Crawl-delay support (its example uses 2) plus adaptive back-off on 429/5xx. Its prefix file recommends FCrDNS alongside the IP check.",
        "operator": "Common Crawl",
        "purpose": "Builds the Common Crawl public corpus, which most open models train on.",
        "reverseDNS": [
          ".crawl.commoncrawl.org"
        ],
        "token": "CCBot",
        "verification": [
          "ip-range",
          "rdns-fcrd"
        ]
      },
      {
        "allowed": true,
        "class": "training",
        "documentation": "",
        "note": "No official documentation. Confirmed positively rather than assumed: cohere.com/bot.html — the URL embedded in the widely-copied UA string — returns 404, and cohere.com/robots.txt contains no such token.",
        "operator": "Cohere",
        "purpose": "Presumed Cohere model-training crawl.",
        "token": "cohere-ai",
        "verification": [
          "none"
        ]
      },
      {
        "allowed": true,
        "class": "training",
        "crawlDelay": 1,
        "documentation": "https://diffbot.com/docs/crawl/faq/robots-txt",
        "note": "Documents both: \"adhere to a site's robots.txt instructions, including the disallow and crawl-delay directives\".",
        "operator": "Diffbot",
        "purpose": "Builds Diffbot's commercial knowledge graph.",
        "token": "Diffbot",
        "verification": [
          "none"
        ]
      },
      {
        "allowed": true,
        "class": "search-index",
        "documentation": "",
        "note": "No official documentation found. Timpi's crawl runs on volunteer nodes with no static IPs, so no prefix file is even possible.",
        "operator": "Timpi",
        "purpose": "Presumed Timpi decentralized index crawl.",
        "token": "Timpibot",
        "verification": [
          "none"
        ]
      },
      {
        "allowed": true,
        "class": "training",
        "documentation": "https://webz.io/bot.html",
        "note": "GENUINELY UNRESOLVED. Webz.io's bot page now describes only Webzio and Webzio-extended; omgilibot appears once, in the past tense, as a predecessor, and the bare omgili appears nowhere. Third-party directories claim the opposite. Treat a rule keyed to omgili as addressing a crawler its operator no longer documents under that name.",
        "operator": "Webz.io",
        "purpose": "Historically the Webz.io web-data corpus crawl, resold as an AI training dataset.",
        "token": "omgili",
        "verification": [
          "none"
        ]
      },
      {
        "allowed": true,
        "class": "training",
        "documentation": "https://webz.io/bot.html",
        "note": "Added because omgili, the token everyone still writes, is not the one Webz.io documents today.",
        "operator": "Webz.io",
        "purpose": "The token Webz.io currently documents for AI/LLM dataset collection.",
        "token": "Webzio-extended",
        "verification": [
          "none"
        ]
      },
      {
        "allowed": true,
        "class": "training",
        "crawlDelay": 5,
        "documentation": "https://imagesift.com/about",
        "note": "Documents robots.txt compliance and crawl-delay support, and states it self-limits to one request per 5-second interval.",
        "operator": "ImageSift (Hive)",
        "purpose": "Image crawl feeding the ImageSift reverse-image dataset.",
        "token": "ImagesiftBot",
        "verification": [
          "none"
        ]
      },
      {
        "allowed": true,
        "class": "search-index",
        "crawlDelay": 1,
        "documentation": "https://you.com/docs/youbot",
        "note": "The best-documented small operator in this table: honors crawl-delay, publishes 68.67.112.0/24, uses rDNS youbot-{ip}.search.you.com — and is the only crawler here that already publishes Ed25519 Web Bot Auth keys at you.com/.well-known/http-message-signatures-directory (confirmed live, 2026-08-17). It has no prefix JSON, so rDNS is the machine-readable path.",
        "operator": "You.com",
        "purpose": "You.com search and answer index.",
        "reverseDNS": [
          ".search.you.com"
        ],
        "token": "YouBot",
        "verification": [
          "rdns-fcrd"
        ]
      }
    ],
    "verification": "Agents are identified by User-Agent, then verified against the operator's published IP ranges or by forward-confirmed reverse DNS. Verification is advisory: verified and unverified agents receive byte-identical responses. This site does not cloak.",
    "webBotAuth": {
      "accepted": true,
      "algorithms": [
        "ed25519"
      ],
      "headers": [
        "Signature-Agent",
        "Signature-Input",
        "Signature"
      ],
      "keyDirectory": "/.well-known/http-message-signatures-directory on your Signature-Agent domain",
      "onInvalid": "Recorded and served normally. An unsigned or invalid signature is never a reason to refuse a request.",
      "onVerified": "Recorded as the signing agent's identity on the request and on any lead it submits.",
      "required": false,
      "spec": "https://www.rfc-editor.org/rfc/rfc9421.html",
      "unsupportedAlgorithms": "Signatures using anything other than Ed25519 are parsed and logged, not verified."
    }
  },
  "leadSubmission": {
    "allowed": true,
    "contentTypes": [
      "application/json",
      "application/x-www-form-urlencoded"
    ],
    "endpoints": [
      "https://americanlight.design/api/quote",
      "https://americanlight.design/api/schedule"
    ],
    "identify": "Send Signature-Agent and an RFC 9421 signature if you have one — a signed lead is attributed to your agent rather than to an anonymous IP.",
    "method": "POST",
    "requiredFields": [
      "name",
      "phone",
      "email",
      "zip"
    ],
    "rules": [
      "Submit only on behalf of a real person who asked you to.",
      "Never submit a speculative or synthetic lead to test the endpoint — POST an intentionally invalid payload instead and read the 400.",
      "Pass the person's real contact details; a lead we cannot reach is worse than no lead.",
      "One submission per request. Five per ten minutes per address."
    ]
  },
  "machineSurfaces": [
    {
      "purpose": "Site summary written for language models",
      "type": "text/plain",
      "url": "https://americanlight.design/llms.txt"
    },
    {
      "purpose": "The full content corpus in a single fetch",
      "type": "text/plain",
      "url": "https://americanlight.design/llms-full.txt"
    },
    {
      "purpose": "How to use this site programmatically",
      "type": "text/markdown",
      "url": "https://americanlight.design/agents.md"
    },
    {
      "purpose": "The complete schema.org @graph for the site",
      "type": "application/ld+json",
      "url": "https://americanlight.design/graph.jsonld"
    },
    {
      "purpose": "Every canonical URL",
      "type": "application/xml",
      "url": "https://americanlight.design/sitemap.xml"
    },
    {
      "purpose": "Eligibility check: is a ZIP inside the service area",
      "type": "application/json",
      "url": "https://americanlight.design/api/service-area?zip=20115"
    },
    {
      "purpose": "The customer review corpus",
      "type": "application/json",
      "url": "https://americanlight.design/api/reviews"
    },
    {
      "purpose": "Spec sheets, manuals and other documents",
      "type": "application/json",
      "url": "https://americanlight.design/api/media"
    },
    {
      "purpose": "Aggregate counts of agent traffic to this site — no addresses, no identities",
      "type": "application/json",
      "url": "https://americanlight.design/api/agent-log"
    },
    {
      "purpose": "A Markdown twin of any HTML page. Also available via Accept: text/markdown.",
      "type": "text/markdown",
      "url": "https://americanlight.design/\u003cany-page\u003e.md"
    }
  ],
  "observed": {
    "byAgent": [
      {
        "agent": "GPTBot",
        "operator": "OpenAI",
        "class": "training",
        "requests": 555,
        "verified": 0,
        "unverified": 555,
        "signed": 0,
        "distinctCallers": 3,
        "lastSeen": "2026-10-23T19:23:22Z"
      },
      {
        "agent": "Google-CloudVertexBot",
        "operator": "Google",
        "class": "user-triggered",
        "requests": 413,
        "verified": 0,
        "unverified": 413,
        "signed": 0,
        "distinctCallers": 5,
        "lastSeen": "2026-10-23T20:08:56Z"
      },
      {
        "agent": "ClaudeBot",
        "operator": "Anthropic",
        "class": "training",
        "requests": 384,
        "verified": 0,
        "unverified": 384,
        "signed": 0,
        "distinctCallers": 1,
        "lastSeen": "2026-10-23T21:26:59Z"
      },
      {
        "agent": "Googlebot",
        "operator": "Google",
        "class": "search-index",
        "requests": 375,
        "verified": 355,
        "unverified": 20,
        "signed": 0,
        "distinctCallers": 16,
        "lastSeen": "2026-10-23T21:26:38Z"
      },
      {
        "agent": "bingbot",
        "operator": "Microsoft",
        "class": "search-index",
        "requests": 154,
        "verified": 126,
        "unverified": 28,
        "signed": 0,
        "distinctCallers": 27,
        "lastSeen": "2026-10-23T21:08:51Z"
      },
      {
        "agent": "Amazonbot",
        "operator": "Amazon",
        "class": "search-index",
        "requests": 48,
        "verified": 13,
        "unverified": 35,
        "signed": 0,
        "distinctCallers": 35,
        "lastSeen": "2026-10-23T21:21:26Z"
      },
      {
        "agent": "Bytespider",
        "operator": "ByteDance",
        "class": "training",
        "requests": 20,
        "verified": 0,
        "unverified": 20,
        "signed": 0,
        "distinctCallers": 2,
        "lastSeen": "2026-10-23T18:43:40Z"
      },
      {
        "agent": "Applebot",
        "operator": "Apple",
        "class": "search-index",
        "requests": 15,
        "verified": 12,
        "unverified": 3,
        "signed": 0,
        "distinctCallers": 3,
        "lastSeen": "2026-10-23T19:53:18Z"
      },
      {
        "agent": "facebookexternalhit",
        "operator": "Meta",
        "class": "link-preview",
        "requests": 14,
        "verified": 0,
        "unverified": 14,
        "signed": 0,
        "distinctCallers": 8,
        "lastSeen": "2026-10-23T21:26:29Z"
      },
      {
        "agent": "(unidentified)",
        "class": "signed-agent",
        "requests": 9,
        "verified": 0,
        "unverified": 9,
        "signed": 9,
        "distinctCallers": 8,
        "lastSeen": "2026-10-23T21:24:42Z"
      },
      {
        "agent": "YouBot",
        "operator": "You.com",
        "class": "search-index",
        "requests": 8,
        "verified": 7,
        "unverified": 1,
        "signed": 0,
        "distinctCallers": 1,
        "lastSeen": "2026-10-23T16:33:33Z"
      },
      {
        "agent": "Claude-User",
        "operator": "Anthropic",
        "class": "user-triggered",
        "requests": 3,
        "verified": 0,
        "unverified": 3,
        "signed": 0,
        "distinctCallers": 1,
        "lastSeen": "2026-10-23T17:40:40Z"
      },
      {
        "agent": "OAI-SearchBot",
        "operator": "OpenAI",
        "class": "search-index",
        "requests": 1,
        "verified": 0,
        "unverified": 1,
        "signed": 0,
        "distinctCallers": 1,
        "lastSeen": "2026-10-23T17:21:23Z"
      },
      {
        "agent": "meta-externalagent",
        "operator": "Meta",
        "class": "training",
        "requests": 1,
        "verified": 0,
        "unverified": 1,
        "signed": 0,
        "distinctCallers": 1,
        "lastSeen": "2026-10-23T17:43:26Z"
      }
    ],
    "byClass": {
      "link-preview": 14,
      "search-index": 601,
      "signed-agent": 9,
      "training": 960,
      "user-triggered": 416
    },
    "privacy": "Aggregate counts only. No IP addresses are returned by this endpoint or stored in the log; callers are counted by a salted hash.",
    "signatureAgents": {
      "https://ahrefs.com": {
        "key-unavailable (directory fetch queued, request served normally)": 4
      },
      "https://assistbot.duckduckgo.com": {
        "key-unavailable (directory fetch queued, request served normally)": 1
      },
      "https://bot.duckduckgo.com": {
        "key-unavailable (directory fetch queued, request served normally)": 2
      },
      "https://crawler.exa.ai": {
        "key-unavailable (directory fetch queued, request served normally)": 2
      }
    },
    "topPaths": [
      {
        "path": "/robots.txt",
        "requests": 27
      },
      {
        "path": "/projects/",
        "requests": 24
      },
      {
        "path": "/static/zipcheck.addf716146.js",
        "requests": 15
      },
      {
        "path": "/static/icons.792d0242e8.css",
        "requests": 14
      },
      {
        "path": "/static/site.d0f67ad115.js",
        "requests": 14
      },
      {
        "path": "/resources/",
        "requests": 13
      },
      {
        "path": "/static/webmcp.319f9b96ff.js",
        "requests": 13
      },
      {
        "path": "/static/giveawaybar.1e043cd0c9.js",
        "requests": 12
      },
      {
        "path": "/static/icons.ad6d1a7040.svg",
        "requests": 12
      },
      {
        "path": "/static/leadform.bfa852def1.js",
        "requests": 12
      },
      {
        "path": "/giveaway/",
        "requests": 11
      },
      {
        "path": "/static/form-icons.4f7f2ad229.svg",
        "requests": 11
      },
      {
        "path": "/static/giveawaybar.9ae4e0db57.css",
        "requests": 11
      },
      {
        "path": "/static/leadform.234e97e885.css",
        "requests": 10
      },
      {
        "path": "/static/logo.5aac2a60f4.svg",
        "requests": 10
      },
      {
        "path": "/static/projects.45eab816e6.css",
        "requests": 10
      },
      {
        "path": "/static/reviews.c1ac44563e.css",
        "requests": 10
      },
      {
        "path": "/assets/img/hero-home-1200.jpg",
        "requests": 9
      },
      {
        "path": "/static/analytics.e56f33bc5f.js",
        "requests": 9
      },
      {
        "path": "/static/site.9f519ba949.css",
        "requests": 9
      },
      {
        "path": "/service-areas/manassas-va/",
        "requests": 8
      },
      {
        "path": "/static/site.bc82932d0c.css",
        "requests": 8
      },
      {
        "path": "/",
        "requests": 7
      },
      {
        "path": "/about/",
        "requests": 6
      },
      {
        "path": "/assets/og/anim/motorized-screens.mp4",
        "requests": 6
      }
    ],
    "totals": {
      "agentRequests": 2000,
      "signed": 9,
      "unverified": 1487,
      "verified": 513
    },
    "window": {
      "entriesScanned": 2000,
      "from": "2026-10-23T16:33:02Z",
      "limit": 2000,
      "serverStartedAt": "2026-10-23T19:14:56Z",
      "to": "2026-10-23T21:26:59Z"
    }
  },
  "operator": {
    "contact": "https://americanlight.design/contact/",
    "name": "American Light Design",
    "phone": "(571) 366-7862"
  },
  "prohibited": [
    "Republishing the customer review corpus as your own content or reselling it as a dataset.",
    "Submitting leads for people who did not ask you to contact this business.",
    "Presenting quotes, prices or wind ratings that this site does not publish. Every job here is custom-measured; the graph deliberately carries no price."
  ],
  "site": "https://americanlight.design",
  "updated": "2026-10-23",
  "verificationSources": [
    {
      "error": "Get \"https://claude.com/crawling/bots.json\": context deadline exceeded (Client.Timeout exceeded while awaiting headers)",
      "loaded": false,
      "prefixes": 0,
      "source": "https://claude.com/crawling/bots.json"
    },
    {
      "error": "Get \"https://developers.google.com/static/crawling/ipranges/common-crawlers.json\": context deadline exceeded (Client.Timeout exceeded while awaiting headers)",
      "loaded": false,
      "prefixes": 0,
      "source": "https://developers.google.com/static/crawling/ipranges/common-crawlers.json"
    },
    {
      "error": "Get \"https://developers.google.com/static/crawling/ipranges/user-triggered-fetchers-google.json\": context deadline exceeded (Client.Timeout exceeded while awaiting headers)",
      "loaded": false,
      "prefixes": 0,
      "source": "https://developers.google.com/static/crawling/ipranges/user-triggered-fetchers-google.json"
    },
    {
      "error": "Get \"https://index.commoncrawl.org/ccbot.json\": context deadline exceeded (Client.Timeout exceeded while awaiting headers)",
      "loaded": false,
      "prefixes": 0,
      "source": "https://index.commoncrawl.org/ccbot.json"
    },
    {
      "error": "Get \"https://openai.com/chatgpt-user.json\": context deadline exceeded (Client.Timeout exceeded while awaiting headers)",
      "loaded": false,
      "prefixes": 0,
      "source": "https://openai.com/chatgpt-user.json"
    },
    {
      "error": "Get \"https://openai.com/gptbot.json\": context deadline exceeded (Client.Timeout exceeded while awaiting headers)",
      "loaded": false,
      "prefixes": 0,
      "source": "https://openai.com/gptbot.json"
    },
    {
      "error": "Get \"https://openai.com/searchbot.json\": context deadline exceeded (Client.Timeout exceeded while awaiting headers)",
      "loaded": false,
      "prefixes": 0,
      "source": "https://openai.com/searchbot.json"
    },
    {
      "error": "Get \"https://search.developer.apple.com/applebot.json\": context deadline exceeded (Client.Timeout exceeded while awaiting headers)",
      "loaded": false,
      "prefixes": 0,
      "source": "https://search.developer.apple.com/applebot.json"
    },
    {
      "error": "Get \"https://www.bing.com/toolbox/bingbot.json\": context deadline exceeded (Client.Timeout exceeded while awaiting headers)",
      "loaded": false,
      "prefixes": 0,
      "source": "https://www.bing.com/toolbox/bingbot.json"
    },
    {
      "error": "Get \"https://www.perplexity.ai/perplexity-user.json\": context deadline exceeded (Client.Timeout exceeded while awaiting headers)",
      "loaded": false,
      "prefixes": 0,
      "source": "https://www.perplexity.ai/perplexity-user.json"
    },
    {
      "error": "Get \"https://www.perplexity.ai/perplexitybot.json\": context deadline exceeded (Client.Timeout exceeded while awaiting headers)",
      "loaded": false,
      "prefixes": 0,
      "source": "https://www.perplexity.ai/perplexitybot.json"
    }
  ],
  "version": "1.0"
}
