[{"data":1,"prerenderedAt":1456},["ShallowReactive",2],{"navigation_docs":3,"-connectors-cloudflare-ai-crawlers":144,"-connectors-cloudflare-ai-crawlers-surround":1451},[4,23,45,90,108,126],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":22},"Getting started","i-lucide-rocket","/getting-started","1.getting-started",[10,14,18],{"title":11,"path":12,"stem":13},"Introduction","/getting-started/introduction","1.getting-started/1.introduction",{"title":15,"path":16,"stem":17},"Quickstart","/getting-started/quickstart","1.getting-started/2.quickstart",{"title":19,"path":20,"stem":21},"Core concepts","/getting-started/concepts","1.getting-started/3.concepts",false,{"title":24,"icon":25,"path":26,"stem":27,"children":28,"page":22},"Tracking SDK","i-lucide-chart-line","/tracking-sdk","2.tracking-sdk",[29,33,37,41],{"title":30,"path":31,"stem":32},"Overview","/tracking-sdk/overview","2.tracking-sdk/1.overview",{"title":34,"path":35,"stem":36},"JavaScript SDK","/tracking-sdk/javascript","2.tracking-sdk/2.javascript",{"title":38,"path":39,"stem":40},"Events reference","/tracking-sdk/events","2.tracking-sdk/3.events",{"title":42,"path":43,"stem":44},"Event schema","/tracking-sdk/event-schema","2.tracking-sdk/4.event-schema",{"title":46,"icon":47,"path":48,"stem":49,"children":50,"page":22},"Connectors","i-lucide-plug","/connectors","3.connectors",[51,54,58,62,66,70,74,78,82,86],{"title":30,"path":52,"stem":53},"/connectors/overview","3.connectors/1.overview",{"title":55,"path":56,"stem":57},"Cloudflare AI crawlers","/connectors/cloudflare-ai-crawlers","3.connectors/10.cloudflare-ai-crawlers",{"title":59,"path":60,"stem":61},"Google Ads","/connectors/google-ads","3.connectors/2.google-ads",{"title":63,"path":64,"stem":65},"Meta Ads","/connectors/meta-ads","3.connectors/3.meta-ads",{"title":67,"path":68,"stem":69},"TikTok Ads","/connectors/tiktok-ads","3.connectors/4.tiktok-ads",{"title":71,"path":72,"stem":73},"LinkedIn Ads","/connectors/linkedin-ads","3.connectors/5.linkedin-ads",{"title":75,"path":76,"stem":77},"Pinterest Ads","/connectors/pinterest-ads","3.connectors/6.pinterest-ads",{"title":79,"path":80,"stem":81},"Custom webhooks","/connectors/webhooks","3.connectors/7.webhooks",{"title":83,"path":84,"stem":85},"PrestaShop","/connectors/prestashop","3.connectors/8.prestashop",{"title":87,"path":88,"stem":89},"WooCommerce","/connectors/woocommerce","3.connectors/9.woocommerce",{"title":91,"icon":92,"path":93,"stem":94,"children":95,"page":22},"Attribution","i-lucide-git-fork","/attribution","4.attribution",[96,100,104],{"title":97,"path":98,"stem":99},"How attribution works","/attribution/overview","4.attribution/1.overview",{"title":101,"path":102,"stem":103},"Data-driven model","/attribution/data-driven","4.attribution/2.data-driven",{"title":105,"path":106,"stem":107},"Attribution windows","/attribution/windows","4.attribution/3.windows",{"title":109,"icon":110,"path":111,"stem":112,"children":113,"page":22},"Dashboard","i-lucide-layout-dashboard","/dashboard","5.dashboard",[114,118,122],{"title":115,"path":116,"stem":117},"Dashboard overview","/dashboard/overview","5.dashboard/1.overview",{"title":119,"path":120,"stem":121},"Metrics reference","/dashboard/metrics","5.dashboard/2.metrics",{"title":123,"path":124,"stem":125},"Alerts","/dashboard/alerts","5.dashboard/3.alerts",{"title":127,"icon":128,"path":129,"stem":130,"children":131,"page":22},"Lumen","i-lucide-shield-check","/lumen","6.lumen",[132,136,140],{"title":133,"path":134,"stem":135},"Lumen overview","/lumen/overview","6.lumen/1.overview",{"title":137,"path":138,"stem":139},"Setup","/lumen/setup","6.lumen/2.setup",{"title":141,"path":142,"stem":143},"Investigations","/lumen/investigations","6.lumen/3.investigations",{"id":145,"title":55,"body":146,"description":1445,"extension":1446,"links":1447,"meta":1448,"navigation":312,"path":56,"seo":1449,"stem":57,"__hash__":1450},"docs/3.connectors/10.cloudflare-ai-crawlers.md",{"type":147,"value":148,"toc":1419},"minimark",[149,158,181,184,189,199,202,207,244,251,255,258,377,454,465,469,472,514,540,543,547,551,557,594,601,889,893,899,905,911,942,944,948,1028,1031,1033,1037,1043,1063,1066,1068,1071,1077,1106,1110,1143,1147,1150,1154,1168,1170,1174,1188,1191,1195,1230,1234,1240,1281,1288,1308,1318,1331,1335,1349,1376,1383,1387,1400,1402,1415],[150,151,152,153,157],"p",{},"AI crawlers like GPTBot, ClaudeBot and PerplexityBot don't run JavaScript. They hit ",[154,155,156],"code",{},"/robots.txt",", sitemaps and raw HTML endpoints, so the TrustData JS SDK never sees them. A Cloudflare Worker deployed on your zone wraps 100% of requests and forwards a small log line to TrustData, which classifies each hit into one of:",[159,160,161,169,175],"ul",{},[162,163,164,168],"li",{},[165,166,167],"strong",{},"AI bot visit"," — user agent matches a known AI crawler",[162,170,171,174],{},[165,172,173],{},"AI referral visit"," — referrer is an AI engine (chat.openai.com, perplexity.ai, claude.ai, …) and the visitor is human",[162,176,177],{},[178,179,180],"em",{},"Everything else is dropped at ingest — we never store general traffic logs.",[150,182,183],{},"Classification runs server-side, so when a new AI bot appears you get coverage retroactively — no redeploy of the Worker.",[185,186,188],"h2",{"id":187},"how-it-works","How it works",[190,191,196],"pre",{"className":192,"code":194,"language":195},[193],"language-text","┌──────────────────────┐\n│ Your Cloudflare zone │\n│      (100% of traffic)\n└──────────┬───────────┘\n           │  every request wrapped by the Worker\n           │\n           ▼\n┌──────────────────────┐      forwards a small log line\n│  TrustData Worker    │ ─────────────────────────────►  TrustData\n│  ai-bot-collector    │\n└──────────────────────┘\n                                             │\n                                             ▼\n                                ┌──────────────────────────┐\n                                │  TrustData classifies:   │\n                                │  AI bot? AI referral?    │\n                                │  Everything else dropped │\n                                └────────────┬─────────────┘\n                                             │\n                                             ▼\n                                ┌──────────────────────────┐\n                                │  Live Events view        │\n                                │  (AI bot / AI referral   │\n                                │   badges) + daily roll-  │\n                                │   ups in your dashboard  │\n                                └──────────────────────────┘\n","text",[154,197,194],{"__ignoreMap":198},"",[185,200,137],{"id":201},"setup",[203,204,206],"h3",{"id":205},"_1-issue-an-api-key","1. Issue an API key",[208,209,210,220,234,241],"ol",{},[162,211,212,213,216,217],{},"In your organization settings, open the ",[165,214,215],{},"Integrations"," tab → ",[165,218,219],{},"Log ingest keys",[162,221,222,223,226,227,230,231],{},"Pick ",[165,224,225],{},"Cloudflare Worker"," (or ",[165,228,229],{},"Cloudflare Logpush"," for Enterprise) as the provider, name the key, and click ",[165,232,233],{},"Issue ingest key",[162,235,236,237,240],{},"Optionally pin a ",[165,238,239],{},"default attribution ID"," — the Worker will tag events with this ID when the payload omits one",[162,242,243],{},"Copy the key immediately — it is shown only once",[150,245,246,247,250],{},"Keys use the format ",[154,248,249],{},"td_cf_\u003Crandom>",". Only the prefix and a SHA-256 hash are stored in TrustData; the full key cannot be recovered. If lost, revoke it and generate a new one.",[203,252,254],{"id":253},"_2-deploy-the-worker","2. Deploy the Worker",[150,256,257],{},"The TrustData AI-bot collector is an open-source Cloudflare Worker you deploy on your own zone. It runs as middleware on every request, clones the response to read size/status, and fires a JSON payload at TrustData. It never alters the response.",[190,259,263],{"className":260,"code":261,"language":262,"meta":198,"style":198},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Clone the collector\ngit clone https://github.com/trstdata/trustdata-integrations\ncd trustdata-integrations/cloudflare/ai-bot-collector\nnpm install\n\n# 1. Edit wrangler.jsonc — replace example.com with your domain in `route`\n# 2. Set your attribution ID (Analytics → Properties → your property →\n#    Attribution IDs) in the TRUSTDATA_ATTRIBUTION_ID var\n# 3. Add your API key as a Cloudflare secret\nnpx wrangler secret put TRUSTDATA_API_KEY\n\n# 4. Deploy\nnpx wrangler deploy\n","bash",[154,264,265,274,288,298,307,314,320,326,332,338,356,361,367],{"__ignoreMap":198},[266,267,270],"span",{"class":268,"line":269},"line",1,[266,271,273],{"class":272},"sHwdD","# Clone the collector\n",[266,275,277,281,285],{"class":268,"line":276},2,[266,278,280],{"class":279},"sBMFI","git",[266,282,284],{"class":283},"sfazB"," clone",[266,286,287],{"class":283}," https://github.com/trstdata/trustdata-integrations\n",[266,289,291,295],{"class":268,"line":290},3,[266,292,294],{"class":293},"s2Zo4","cd",[266,296,297],{"class":283}," trustdata-integrations/cloudflare/ai-bot-collector\n",[266,299,301,304],{"class":268,"line":300},4,[266,302,303],{"class":279},"npm",[266,305,306],{"class":283}," install\n",[266,308,310],{"class":268,"line":309},5,[266,311,313],{"emptyLinePlaceholder":312},true,"\n",[266,315,317],{"class":268,"line":316},6,[266,318,319],{"class":272},"# 1. Edit wrangler.jsonc — replace example.com with your domain in `route`\n",[266,321,323],{"class":268,"line":322},7,[266,324,325],{"class":272},"# 2. Set your attribution ID (Analytics → Properties → your property →\n",[266,327,329],{"class":268,"line":328},8,[266,330,331],{"class":272},"#    Attribution IDs) in the TRUSTDATA_ATTRIBUTION_ID var\n",[266,333,335],{"class":268,"line":334},9,[266,336,337],{"class":272},"# 3. Add your API key as a Cloudflare secret\n",[266,339,341,344,347,350,353],{"class":268,"line":340},10,[266,342,343],{"class":279},"npx",[266,345,346],{"class":283}," wrangler",[266,348,349],{"class":283}," secret",[266,351,352],{"class":283}," put",[266,354,355],{"class":283}," TRUSTDATA_API_KEY\n",[266,357,359],{"class":268,"line":358},11,[266,360,313],{"emptyLinePlaceholder":312},[266,362,364],{"class":268,"line":363},12,[266,365,366],{"class":272},"# 4. Deploy\n",[266,368,370,372,374],{"class":268,"line":369},13,[266,371,343],{"class":279},[266,373,346],{"class":283},[266,375,376],{"class":283}," deploy\n",[378,379,380,396],"table",{},[381,382,383],"thead",{},[384,385,386,390,393],"tr",{},[387,388,389],"th",{},"Variable",[387,391,392],{},"Type",[387,394,395],{},"Purpose",[397,398,399,416,435],"tbody",{},[384,400,401,407,410],{},[402,403,404],"td",{},[154,405,406],{},"TRUSTDATA_INGEST_URL",[402,408,409],{},"var",[402,411,412,413],{},"Pre-filled to ",[154,414,415],{},"https://t.trustdata.tech/v1/logs/cloudflare_worker",[384,417,418,423,425],{},[402,419,420],{},[154,421,422],{},"TRUSTDATA_ATTRIBUTION_ID",[402,424,409],{},[402,426,427,428],{},"Your attribution ID UUID from ",[165,429,430,431,434],{},"Analytics → Properties → ",[266,432,433],{},"your property"," → Attribution IDs",[384,436,437,442,447],{},[402,438,439],{},[154,440,441],{},"TRUSTDATA_API_KEY",[402,443,444],{},[165,445,446],{},"secret",[402,448,449,450,453],{},"The ",[154,451,452],{},"td_cf_..."," key from step 1",[455,456,458,459,464],"callout",{"icon":457},"i-lucide-info","Logpush (Cloudflare Enterprise) is supported as an alternative to the Worker — see the ",[460,461,463],"a",{"href":462},"#logpush-ingest-enterprise","Logpush endpoint"," below. Same API key, different payload format.",[203,466,468],{"id":467},"_3-verify","3. Verify",[150,470,471],{},"From any terminal, simulate a GPTBot visit:",[190,473,475],{"className":260,"code":474,"language":262,"meta":198,"style":198},"curl -X POST \\\n  https://your-domain.com/ \\\n  -H \"User-Agent: Mozilla/5.0 (compatible; GPTBot/1.0; +https://openai.com/gptbot)\"\n",[154,476,477,492,499],{"__ignoreMap":198},[266,478,479,482,485,488],{"class":268,"line":269},[266,480,481],{"class":279},"curl",[266,483,484],{"class":283}," -X",[266,486,487],{"class":283}," POST",[266,489,491],{"class":490},"sTEyZ"," \\\n",[266,493,494,497],{"class":268,"line":276},[266,495,496],{"class":283},"  https://your-domain.com/",[266,498,491],{"class":490},[266,500,501,504,508,511],{"class":268,"line":290},[266,502,503],{"class":283},"  -H",[266,505,507],{"class":506},"sMK4o"," \"",[266,509,510],{"class":283},"User-Agent: Mozilla/5.0 (compatible; GPTBot/1.0; +https://openai.com/gptbot)",[266,512,513],{"class":506},"\"\n",[150,515,516,517,520,521,524,525,534,535,539],{},"Within ~60 seconds the event should appear in the ",[165,518,519],{},"Live Events"," view for your attribution ID, tagged with an ",[154,522,523],{},"AI bot"," badge. Navigate via ",[165,526,430,527,529,530,533],{},[266,528,433],{}," → Attribution IDs → ",[266,531,532],{},"your attribution ID"," → Live Events",". If not, see ",[460,536,538],{"href":537},"#troubleshooting","Troubleshooting",".",[541,542],"hr",{},[185,544,546],{"id":545},"endpoint-reference","Endpoint reference",[203,548,550],{"id":549},"worker-ingest","Worker ingest",[190,552,555],{"className":553,"code":554,"language":195},[193],"POST https://t.trustdata.tech/v1/logs/cloudflare_worker\n",[154,556,554],{"__ignoreMap":198},[378,558,559,569],{},[381,560,561],{},[384,562,563,566],{},[387,564,565],{},"Header",[387,567,568],{},"Value",[397,570,571,582],{},[384,572,573,578],{},[402,574,575],{},[154,576,577],{},"X-API-Key",[402,579,580],{},[154,581,452],{},[384,583,584,589],{},[402,585,586],{},[154,587,588],{},"Content-Type",[402,590,591],{},[154,592,593],{},"application/json",[150,595,596,597,600],{},"Body is a JSON ",[165,598,599],{},"array"," of log objects (batched — today one element per request, grows into larger batches without a wire-format change):",[190,602,606],{"className":603,"code":604,"language":605,"meta":198,"style":198},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[\n  {\n    \"timestamp\": 1740000000000,\n    \"attribution_id\": \"prop-uuid\",\n    \"host\": \"example.com\",\n    \"method\": \"GET\",\n    \"pathname\": \"/blog/post\",\n    \"query_params\": { \"utm_source\": \"chatgpt\" },\n    \"ip\": \"1.2.3.4\",\n    \"user_agent\": \"Mozilla/5.0 (compatible; GPTBot/1.0; …)\",\n    \"referer\": \"\",\n    \"status\": 200,\n    \"bytes\": 4821,\n    \"country\": \"US\",\n    \"asn\": 13335\n  }\n]\n","json",[154,607,608,613,618,640,660,680,700,720,753,773,793,809,825,841,862,877,883],{"__ignoreMap":198},[266,609,610],{"class":268,"line":269},[266,611,612],{"class":506},"[\n",[266,614,615],{"class":268,"line":276},[266,616,617],{"class":506},"  {\n",[266,619,620,623,627,630,633,637],{"class":268,"line":290},[266,621,622],{"class":506},"    \"",[266,624,626],{"class":625},"spNyl","timestamp",[266,628,629],{"class":506},"\"",[266,631,632],{"class":506},":",[266,634,636],{"class":635},"sbssI"," 1740000000000",[266,638,639],{"class":506},",\n",[266,641,642,644,647,649,651,653,656,658],{"class":268,"line":300},[266,643,622],{"class":506},[266,645,646],{"class":625},"attribution_id",[266,648,629],{"class":506},[266,650,632],{"class":506},[266,652,507],{"class":506},[266,654,655],{"class":283},"prop-uuid",[266,657,629],{"class":506},[266,659,639],{"class":506},[266,661,662,664,667,669,671,673,676,678],{"class":268,"line":309},[266,663,622],{"class":506},[266,665,666],{"class":625},"host",[266,668,629],{"class":506},[266,670,632],{"class":506},[266,672,507],{"class":506},[266,674,675],{"class":283},"example.com",[266,677,629],{"class":506},[266,679,639],{"class":506},[266,681,682,684,687,689,691,693,696,698],{"class":268,"line":316},[266,683,622],{"class":506},[266,685,686],{"class":625},"method",[266,688,629],{"class":506},[266,690,632],{"class":506},[266,692,507],{"class":506},[266,694,695],{"class":283},"GET",[266,697,629],{"class":506},[266,699,639],{"class":506},[266,701,702,704,707,709,711,713,716,718],{"class":268,"line":322},[266,703,622],{"class":506},[266,705,706],{"class":625},"pathname",[266,708,629],{"class":506},[266,710,632],{"class":506},[266,712,507],{"class":506},[266,714,715],{"class":283},"/blog/post",[266,717,629],{"class":506},[266,719,639],{"class":506},[266,721,722,724,727,729,731,734,736,739,741,743,745,748,750],{"class":268,"line":328},[266,723,622],{"class":506},[266,725,726],{"class":625},"query_params",[266,728,629],{"class":506},[266,730,632],{"class":506},[266,732,733],{"class":506}," {",[266,735,507],{"class":506},[266,737,738],{"class":279},"utm_source",[266,740,629],{"class":506},[266,742,632],{"class":506},[266,744,507],{"class":506},[266,746,747],{"class":283},"chatgpt",[266,749,629],{"class":506},[266,751,752],{"class":506}," },\n",[266,754,755,757,760,762,764,766,769,771],{"class":268,"line":334},[266,756,622],{"class":506},[266,758,759],{"class":625},"ip",[266,761,629],{"class":506},[266,763,632],{"class":506},[266,765,507],{"class":506},[266,767,768],{"class":283},"1.2.3.4",[266,770,629],{"class":506},[266,772,639],{"class":506},[266,774,775,777,780,782,784,786,789,791],{"class":268,"line":340},[266,776,622],{"class":506},[266,778,779],{"class":625},"user_agent",[266,781,629],{"class":506},[266,783,632],{"class":506},[266,785,507],{"class":506},[266,787,788],{"class":283},"Mozilla/5.0 (compatible; GPTBot/1.0; …)",[266,790,629],{"class":506},[266,792,639],{"class":506},[266,794,795,797,800,802,804,807],{"class":268,"line":358},[266,796,622],{"class":506},[266,798,799],{"class":625},"referer",[266,801,629],{"class":506},[266,803,632],{"class":506},[266,805,806],{"class":506}," \"\"",[266,808,639],{"class":506},[266,810,811,813,816,818,820,823],{"class":268,"line":363},[266,812,622],{"class":506},[266,814,815],{"class":625},"status",[266,817,629],{"class":506},[266,819,632],{"class":506},[266,821,822],{"class":635}," 200",[266,824,639],{"class":506},[266,826,827,829,832,834,836,839],{"class":268,"line":369},[266,828,622],{"class":506},[266,830,831],{"class":625},"bytes",[266,833,629],{"class":506},[266,835,632],{"class":506},[266,837,838],{"class":635}," 4821",[266,840,639],{"class":506},[266,842,844,846,849,851,853,855,858,860],{"class":268,"line":843},14,[266,845,622],{"class":506},[266,847,848],{"class":625},"country",[266,850,629],{"class":506},[266,852,632],{"class":506},[266,854,507],{"class":506},[266,856,857],{"class":283},"US",[266,859,629],{"class":506},[266,861,639],{"class":506},[266,863,865,867,870,872,874],{"class":268,"line":864},15,[266,866,622],{"class":506},[266,868,869],{"class":625},"asn",[266,871,629],{"class":506},[266,873,632],{"class":506},[266,875,876],{"class":635}," 13335\n",[266,878,880],{"class":268,"line":879},16,[266,881,882],{"class":506},"  }\n",[266,884,886],{"class":268,"line":885},17,[266,887,888],{"class":506},"]\n",[203,890,892],{"id":891},"logpush-ingest-enterprise","Logpush ingest (Enterprise)",[190,894,897],{"className":895,"code":896,"language":195},[193],"POST https://t.trustdata.tech/v1/logs/cloudflare_logpush\n",[154,898,896],{"__ignoreMap":198},[150,900,901,902,904],{},"Authentication accepts either an ",[154,903,577],{}," header or, for Cloudflare's HTTP destination which cannot set custom headers, the header-injection query parameter:",[190,906,909],{"className":907,"code":908,"language":195},[193],"?header_X-API-Key=td_cf_...&attribution_id=\u003Cprop-uuid>\n",[154,910,908],{"__ignoreMap":198},[150,912,913,914,917,918,917,921,917,924,917,927,917,930,917,933,917,936,917,939,539],{},"Body is NDJSON (one log line per newline), using Cloudflare's native field names: ",[154,915,916],{},"EdgeStartTimestamp",", ",[154,919,920],{},"ClientRequestHost",[154,922,923],{},"ClientRequestURI",[154,925,926],{},"ClientRequestUserAgent",[154,928,929],{},"ClientRequestReferer",[154,931,932],{},"ClientIP",[154,934,935],{},"ClientCountry",[154,937,938],{},"EdgeResponseStatus",[154,940,941],{},"EdgeResponseBytes",[541,943],{},[185,945,947],{"id":946},"what-gets-captured","What gets captured",[378,949,950,963],{},[381,951,952],{},[384,953,954,957,960],{},[387,955,956],{},"Badge",[387,958,959],{},"Trigger",[387,961,962],{},"Example",[397,964,965,994,1015],{},[384,966,967,971,974],{},[402,968,969],{},[165,970,523],{},[402,972,973],{},"User agent matches a known AI crawler",[402,975,976,917,979,917,982,917,985,917,988,917,991],{},[154,977,978],{},"GPTBot",[154,980,981],{},"PerplexityBot",[154,983,984],{},"ClaudeBot",[154,986,987],{},"Google-Extended",[154,989,990],{},"Bytespider",[154,992,993],{},"Amazonbot",[384,995,996,1001,1004],{},[402,997,998],{},[165,999,1000],{},"AI referral",[402,1002,1003],{},"Referrer is an AI engine, visitor is human",[402,1005,1006,917,1009,917,1012],{},[154,1007,1008],{},"perplexity.ai",[154,1010,1011],{},"chat.openai.com",[154,1013,1014],{},"claude.ai",[384,1016,1017,1022,1025],{},[402,1018,1019],{},[178,1020,1021],{},"(dropped)",[402,1023,1024],{},"Everything else",[402,1026,1027],{},"Organic search, direct traffic, social referrals",[150,1029,1030],{},"The full bot and referrer lists are maintained on TrustData's side. When a new AI crawler appears, you get coverage automatically from the next hit forward — no redeploy of the Worker.",[541,1032],{},[185,1034,1036],{"id":1035},"viewing-crawler-activity","Viewing crawler activity",[150,1038,1039,1040,1042],{},"Crawler events surface in the ",[165,1041,519],{}," view for your attribution ID, one row per hit:",[159,1044,1045,1051,1056],{},[162,1046,1047,1048,1050],{},"Rows with an ",[165,1049,523],{}," badge — user agent matched a known AI crawler",[162,1052,1047,1053,1055],{},[165,1054,1000],{}," badge — human visitor arrived from an AI engine",[162,1057,1058,1059,1062],{},"Any other event with a small ",[165,1060,1061],{},"bot"," tag — traffic the server flagged as non-human from the browser SDK",[150,1064,1065],{},"Live Events shows the last 30 minutes, refreshing every few seconds. Aggregated per-bot counts by day and page surface in your dashboard and refresh daily.",[541,1067],{},[185,1069,538],{"id":1070},"troubleshooting",[203,1072,1074],{"id":1073},"_401-unauthorized",[154,1075,1076],{},"401 Unauthorized",[159,1078,1079,1090,1100],{},[162,1080,1081,1082,1085,1086,1089],{},"Check the header is exactly ",[154,1083,1084],{},"X-API-Key: td_cf_..."," (no ",[154,1087,1088],{},"Bearer"," prefix)",[162,1091,1092,1093,1096,1097],{},"Verify the key is still ",[165,1094,1095],{},"Active"," under ",[165,1098,1099],{},"Organization → Integrations → Log ingest keys",[162,1101,1102,1103],{},"Confirm no extra whitespace around the token when you ran ",[154,1104,1105],{},"wrangler secret put",[203,1107,1109],{"id":1108},"no-events-appear-in-the-dashboard","No events appear in the dashboard",[208,1111,1112,1118,1124,1134],{},[162,1113,1114,1115],{},"Check the Worker is deployed and receiving traffic: ",[154,1116,1117],{},"npx wrangler tail",[162,1119,1120,1121],{},"Confirm the UA matches a known bot — try a curl with ",[154,1122,1123],{},"User-Agent: GPTBot/1.0",[162,1125,1126,1127,1129,1130],{},"Verify ",[154,1128,422],{}," is a real attribution ID UUID from ",[165,1131,430,1132,434],{},[266,1133,433],{},[162,1135,1136,1137,1139,1140,1142],{},"Check that ",[154,1138,406],{}," points to ",[154,1141,415],{}," (no trailing slash)",[203,1144,1146],{"id":1145},"events-arrive-in-live-events-but-aggregate-dashboards-lag","Events arrive in Live Events but aggregate dashboards lag",[150,1148,1149],{},"Live Events is real-time. The aggregated per-day / per-page bot dashboards refresh once a day (around 3:00 AM UTC), so those break­downs lag by one run. If it's been longer than 24 hours, contact support.",[203,1151,1153],{"id":1152},"worker-causes-latency-on-the-customer-response","Worker causes latency on the customer response",[150,1155,1156,1157,1160,1161,1164,1165,1167],{},"It shouldn't — the Worker uses ",[154,1158,1159],{},"ctx.waitUntil()"," to fire-and-forget the TrustData POST after returning the origin response. If you see added latency, check ",[154,1162,1163],{},"wrangler tail"," for an errored forward — transient ingest failures are swallowed, but a bad ",[154,1166,406],{}," can cause DNS resolution delays.",[541,1169],{},[185,1171,1173],{"id":1172},"webmcp-hosting-automatic","WebMCP hosting (automatic)",[150,1175,1176,1177,1183,1184,1187],{},"Once deployed, the same Worker also hosts your ",[460,1178,1182],{"href":1179,"rel":1180},"https://www.w3.org/TR/webmcp/",[1181],"nofollow","WebMCP"," manifest at ",[154,1185,1186],{},"/.well-known/webmcp.json",". AI agents read this file to discover which tools your site exposes (search, add-to-cart, booking, contact…) before loading any page.",[150,1189,1190],{},"You don't need a separate build step — TrustData serves the signed manifest and the Worker caches it on the edge.",[203,1192,1194],{"id":1193},"how-the-manifest-is-served","How the manifest is served",[208,1196,1197,1203,1210,1217,1227],{},[162,1198,1199,1200],{},"Agent requests ",[154,1201,1202],{},"https://\u003Cyour-zone>/.well-known/webmcp.json",[162,1204,1205,1206,1209],{},"Worker checks Cloudflare KV for a cached copy (",[154,1207,1208],{},"webmcp:v1:\u003Cattribution_id>",", 1-hour TTL)",[162,1211,1212,1213,1216],{},"On cache miss, Worker fetches from ",[154,1214,1215],{},"TRUSTDATA_MANIFEST_URL"," + your attribution ID",[162,1218,1219,1220,1223,1224],{},"Response is returned with ",[154,1221,1222],{},"Content-Type: application/json"," and ",[154,1225,1226],{},"Cache-Control: public, max-age=3600",[162,1228,1229],{},"Agent verifies the Ed25519 signature inside the JSON body and calls the declared tools",[203,1231,1233],{"id":1232},"enable-it","Enable it",[150,1235,1236,1237,632],{},"WebMCP hosting is on by default in ",[154,1238,1239],{},"wrangler.jsonc",[190,1241,1245],{"className":1242,"code":1243,"language":1244,"meta":198,"style":198},"language-jsonc shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\"vars\": {\n  \"TRUSTDATA_MANIFEST_URL\": \"https://app.trustdata.tech/api/v1/webmcp\",\n  \"TRUSTDATA_ATTRIBUTION_ID\": \"\u003Cyour property UUID>\"\n},\n\"kv_namespaces\": [\n  { \"binding\": \"WEBMCP_CACHE\", \"id\": \"\u003Cyour KV namespace id>\" }\n]\n","jsonc",[154,1246,1247,1252,1257,1262,1267,1272,1277],{"__ignoreMap":198},[266,1248,1249],{"class":268,"line":269},[266,1250,1251],{},"\"vars\": {\n",[266,1253,1254],{"class":268,"line":276},[266,1255,1256],{},"  \"TRUSTDATA_MANIFEST_URL\": \"https://app.trustdata.tech/api/v1/webmcp\",\n",[266,1258,1259],{"class":268,"line":290},[266,1260,1261],{},"  \"TRUSTDATA_ATTRIBUTION_ID\": \"\u003Cyour property UUID>\"\n",[266,1263,1264],{"class":268,"line":300},[266,1265,1266],{},"},\n",[266,1268,1269],{"class":268,"line":309},[266,1270,1271],{},"\"kv_namespaces\": [\n",[266,1273,1274],{"class":268,"line":316},[266,1275,1276],{},"  { \"binding\": \"WEBMCP_CACHE\", \"id\": \"\u003Cyour KV namespace id>\" }\n",[266,1278,1279],{"class":268,"line":322},[266,1280,888],{},[150,1282,1283,1284,1287],{},"Create the KV namespace once (any name works — ",[154,1285,1286],{},"webmcp_cache"," is the convention):",[190,1289,1291],{"className":260,"code":1290,"language":262,"meta":198,"style":198},"npx wrangler kv:namespace create webmcp_cache\n",[154,1292,1293],{"__ignoreMap":198},[266,1294,1295,1297,1299,1302,1305],{"class":268,"line":269},[266,1296,343],{"class":279},[266,1298,346],{"class":283},[266,1300,1301],{"class":283}," kv:namespace",[266,1303,1304],{"class":283}," create",[266,1306,1307],{"class":283}," webmcp_cache\n",[150,1309,1310,1311,1314,1315,1317],{},"Paste the returned ",[154,1312,1313],{},"id"," into ",[154,1316,1239],{}," and redeploy:",[190,1319,1321],{"className":260,"code":1320,"language":262,"meta":198,"style":198},"npx wrangler deploy\n",[154,1322,1323],{"__ignoreMap":198},[266,1324,1325,1327,1329],{"class":268,"line":269},[266,1326,343],{"class":279},[266,1328,346],{"class":283},[266,1330,376],{"class":283},[203,1332,1334],{"id":1333},"declare-the-tools","Declare the tools",[150,1336,1337,1338,1341,1342,1345,1346,1348],{},"In TrustData, go to ",[165,1339,1340],{},"Settings"," → ",[165,1343,1344],{},"Attribution Properties"," → your property → ",[165,1347,1182],{}," and add 2–3 tools:",[159,1350,1351,1360,1368],{},[162,1352,1353,1356,1357],{},[154,1354,1355],{},"search_products"," — input schema: ",[154,1358,1359],{},"{ query: string }",[162,1361,1362,1356,1365],{},[154,1363,1364],{},"add_to_cart",[154,1366,1367],{},"{ sku: string, quantity: number }",[162,1369,1370,1356,1373],{},[154,1371,1372],{},"contact_sales",[154,1374,1375],{},"{ email: string, message: string }",[150,1377,1378,1379,1382],{},"Save. On the next Worker cache miss (at most 1 hour later), agents will see your updated manifest. Click ",[165,1380,1381],{},"Rotate keys"," to invalidate every cached signature immediately — useful if you suspect a leaked key.",[203,1384,1386],{"id":1385},"disable-webmcp-hosting","Disable WebMCP hosting",[150,1388,1389,1390,1393,1394,1396,1397,1399],{},"Remove the ",[154,1391,1392],{},"kv_namespaces"," block and set ",[154,1395,1215],{}," to an empty string. The Worker falls through to your origin for ",[154,1398,1186],{},", so any existing static file you serve there keeps working.",[541,1401],{},[150,1403,1404,1409,1410],{},[460,1405,1408],{"href":1406,"rel":1407},"https://trustdata.tech/product/integrations",[1181],"Integrations overview"," on trustdata.tech · ",[460,1411,1414],{"href":1412,"rel":1413},"https://trustdata.tech/waitlist",[1181],"Free trial",[1416,1417,1418],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":198,"searchDepth":276,"depth":276,"links":1420},[1421,1422,1427,1431,1432,1433,1439],{"id":187,"depth":276,"text":188},{"id":201,"depth":276,"text":137,"children":1423},[1424,1425,1426],{"id":205,"depth":290,"text":206},{"id":253,"depth":290,"text":254},{"id":467,"depth":290,"text":468},{"id":545,"depth":276,"text":546,"children":1428},[1429,1430],{"id":549,"depth":290,"text":550},{"id":891,"depth":290,"text":892},{"id":946,"depth":276,"text":947},{"id":1035,"depth":276,"text":1036},{"id":1070,"depth":276,"text":538,"children":1434},[1435,1436,1437,1438],{"id":1073,"depth":290,"text":1076},{"id":1108,"depth":290,"text":1109},{"id":1145,"depth":290,"text":1146},{"id":1152,"depth":290,"text":1153},{"id":1172,"depth":276,"text":1173,"children":1440},[1441,1442,1443,1444],{"id":1193,"depth":290,"text":1194},{"id":1232,"depth":290,"text":1233},{"id":1333,"depth":290,"text":1334},{"id":1385,"depth":290,"text":1386},"Capture AI-bot visits and AI-engine referrals at the Cloudflare edge — traffic the browser SDK can't see.","md",null,{},{"title":55,"description":1445},"EYSTSjqmYPh74X7LrEoO-TBH-RXD4kUet3QIEo6QCxE",[1452,1454],{"title":30,"path":52,"stem":53,"description":1453,"children":-1},"Connect your ad platforms into one unified data layer—no more conflicting reports.",{"title":59,"path":60,"stem":61,"description":1455,"children":-1},"Connect Google Ads and configure tracking parameters.",1776778994531]