Ad platform bot traffic
Daily count of ad platform review bots Mythic dropped before storing anything. When ads launch, the platform's own crawlers open every landing page. Meta's arrive with ordinary phone and desktop browsers, an fbclid and a facebook.com referrer, so they look like ad clicks. Mythic drops any request from Meta's, TikTok's, LinkedIn's or X's own network, and declared ad crawlers such as AdsBot-Google, at the edge. They never reach sessions, attribution, experiments, replays or destinations, so this count is the only place they show.
source is events (event batches; events counts the events in them), replay (session recording uploads) or link_click (Mythic short-link clicks). Events stored before the filter shipped on 2026-10-07 were removed from Meta's network by IP.
curl -X GET "https://mythic-analytics.gulp.workers.dev/client/v1/data/sessions/bot-traffic?location_id=example_string&days=30" \
-H "Content-Type: application/json" \
-H "X-Location-Id: example_string" \
-H "Authorization: Bearer YOUR_API_TOKEN"
import requests
import json
url = "https://mythic-analytics.gulp.workers.dev/client/v1/data/sessions/bot-traffic?location_id=example_string&days=30"
headers = {
"Content-Type": "application/json",
"X-Location-Id": "example_string",
"Authorization": "Bearer YOUR_API_TOKEN"
}
response = requests.get(url, headers=headers)
print(response.json())
const response = await fetch("https://mythic-analytics.gulp.workers.dev/client/v1/data/sessions/bot-traffic?location_id=example_string&days=30", {
method: "GET",
headers: {
"Content-Type": "application/json",
"X-Location-Id": "example_string",
"Authorization": "Bearer YOUR_API_TOKEN"
}
});
const data = await response.json();
console.log(data);
package main
import (
"fmt"
"net/http"
)
func main() {
req, err := http.NewRequest("GET", "https://mythic-analytics.gulp.workers.dev/client/v1/data/sessions/bot-traffic?location_id=example_string&days=30", nil)
if err != nil {
panic(err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("X-Location-Id", "example_string")
req.Header.Set("Authorization", "Bearer YOUR_API_TOKEN")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println("Response Status:", resp.Status)
}
require 'net/http'
require 'json'
uri = URI('https://mythic-analytics.gulp.workers.dev/client/v1/data/sessions/bot-traffic?location_id=example_string&days=30')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri)
request['Content-Type'] = 'application/json'
request['X-Location-Id'] = 'example_string'
request['Authorization'] = 'Bearer YOUR_API_TOKEN'
response = http.request(request)
puts response.body
{
"success": true,
"data": {
"location_id": "538d4ced-447c-40b9-9afa-d220f9afcc84",
"days": 30,
"date_from": "2026-09-08",
"total_requests": 121,
"total_events": 259,
"by_platform": {
"meta": {
"requests": 121,
"events": 259
}
},
"daily": [
{
"date": "2026-10-07",
"platform": "meta",
"source": "events",
"requests": 81,
"events": 259
},
{
"date": "2026-10-07",
"platform": "meta",
"source": "replay",
"requests": 40,
"events": 0
}
]
}
}
{
"error": "Bad Request",
"message": "The request contains invalid parameters or malformed data",
"code": 400,
"details": [
{
"field": "email",
"message": "Invalid email format"
}
]
}
{
"error": "Error",
"message": "An upstream data service failed",
"code": 502
}
{
"error": "Service Unavailable",
"message": "The service is temporarily unavailable. Please try again later",
"code": 503
}
/sessions/bot-traffic
Target server for requests. Edit to use your own host.
Agency key (ak_) or location secret key (sk_) as a bearer token. Format: Bearer ak_... or Bearer sk_.... Scoped keys (mcp_) are accepted too and need the read scope of the family the route belongs to (people, events, sessions, replays, exceptions, heatmaps or bigquery_export). See Using an mcp_ key over HTTP.
ak_) or location secret key (sk_) as a bearer token. Format: Bearer ak_... or Bearer sk_.... Scoped keys (mcp_) are accepted too and need the read scope of the family the route belongs to (people, events, sessions, replays, exceptions, heatmaps or bigquery_export). See Using an mcp_ key over HTTP.
Alternative to the X-Location-Id header for agency (ak_) keys. Ignored for secret (sk_) keys.
Trailing window in days. Default 30, min 1, max 400.
Location to scope the request to. Required for agency (ak_) keys on the event routes. Ignored for secret (sk_) keys, which resolve their own location, and not used by /export.
Request Preview
Response
Response will appear here after sending the request
Authentication
Bearer token. Agency key (ak_) or location secret key (sk_) as a bearer token. Format: Bearer ak_... or Bearer sk_.... Scoped keys (mcp_) are accepted too and need the read scope of the family the route belongs to (people, events, sessions, replays, exceptions, heatmaps or bigquery_export). See Using an mcp_ key over HTTP.
Query Parameters
Alternative to the X-Location-Id header for agency (ak_) keys. Ignored for secret (sk_) keys.
Trailing window in days. Default 30, min 1, max 400.
Headers
Location to scope the request to. Required for agency (ak_) keys on the event routes. Ignored for secret (sk_) keys, which resolve their own location, and not used by /export.