Skip to Content
APIEndpointsCrawler activity over time

Crawler activity over time

Crawl volume over time, split by operator bucket. Use it to spot a trend, a spike after a publish, or a crawler that has stopped coming.

Granularity is derived, not chosen: a single-day range returns 24 hourly buckets, any longer range returns daily buckets.

GET /v1/brands/{brand_id}/crawler/timeseries

Authorization

HeaderTypeRequired
AuthorizationBearer asky_sk_…required

Path parameters

ParameterTypeRequiredDescription
brand_iduuidrequiredFrom List brands

Query parameters

ParameterTypeRequiredDescription
limitintegeroptionalRows per page, 1 to 100. Defaults to 20.
cursorstringoptionalOpaque cursor from the previous response. Treat it as a token, never construct one.
start_dateYYYY-MM-DDoptionalInclusive lower bound, YYYY-MM-DD in UTC. Narrows the population before metrics are computed.
end_dateYYYY-MM-DDoptionalInclusive upper bound, YYYY-MM-DD in UTC. Narrows the population before metrics are computed.

Request

curl --request GET \ --url 'https://api.askylabs.com/v1/brands/242546de-4cee-4a7d-952e-f6aa60c63ef8/crawler/timeseries?start_date=2026-07-14&end_date=2026-08-13' \ --header 'Authorization: Bearer <api-key>'

Response

{ "data": [ { "bucket": "2026-08-11", "ChatGPT": 44, "Perplexity": 9, "Claude": 6, "Google": 27, "Microsoft": 1, "Other": 3, "total": 90 }, { "bucket": "2026-08-13", "ChatGPT": 51, "Perplexity": 12, "Claude": 4, "Google": 30, "Microsoft": 0, "Other": 2, "total": 99 } ], "pagination": { "limit": 20, "has_more": true, "next_cursor": "eyJ2IjoxLCJvIjoyMCwibCI6MjB9" }, "meta": { "period": { "start_date": "2026-08-11", "end_date": "2026-08-13" }, "granularity": "day", "timezone": "UTC" }, "request_id": "req_ce20b7418d3f49a0b7e5" }

Response fields

FieldTypeDescription
data.periodobjectrequired
data.granularitystringrequired. hour or day
data.timezonestringrequired. Always UTC
data.pointsobject[]required. { bucket, ChatGPT, Perplexity, Claude, Google, Microsoft, Other, total }
data.points[].bucketstring | integerrequired. A date for daily, an hour 023 for hourly
request_idstringrequired. Also returned as the x-request-id header. Quote it when contacting support

Errors

StatusCodeWhen
400invalid_requestA parameter is unknown or malformed. The message names it
401invalid_tokenThe key is missing, malformed, or does not exist
401token_expiredThe key passed its expiry date
401token_revokedThe key was revoked
404not_foundThe brand does not exist, or this key is not allowed to reach it. The two are deliberately indistinguishable
429rate_limitedOver 300 requests per minute. See the Retry-After header

Notes

Bot traffic only. Ordinary human visits are excluded before anything is counted, and they are the large majority of raw log rows. A figure here is therefore never comparable to a pageview count from your analytics tool.

Buckets with no visits are omitted. The series is sparse, so a missing date means zero crawls, not missing data. If you are charting this, fill the gaps client-side or a quiet day will silently close up and distort the shape — note the example above skips 2026-08-12.

Last updated on