Before you start
You need:- access to Measure > Crawler Analytics > Settings for the brand;
- a server-side or edge runtime that can observe requests after routing;
- the hostname configured for the Qwairy brand;
- a secure secret store for the connector key.
GET and HEAD request events for the configured brand hostname. An apex domain and its www form are treated as equivalent. Other subdomains need their own brand scope.
Create and protect the key
- In Crawler Analytics settings, select Generic HTTP API.
- Select Create Key.
- Enter a descriptive name and an IANA analytics time zone, such as
Europe/Paris. - Copy the secret when it appears. Qwairy shows only its prefix later.
- Store it as a server-side secret. Do not place it in browser code, source control, request URLs, or application logs.
Send events
SendPOST requests to:
Authorization: Bearer YOUR_CRAWLER_KEY is also accepted. Prefer X-API-Key for the setup shown in Qwairy.
Each event used for aggregation needs these fields:
The API accepts one object, an array of objects, newline-delimited JSON, or an object with a
logs array. A stable Idempotency-Key header or batch_id field lets byte-different retries be deduplicated.
Filter known AI crawler user agents in your runtime before calling the endpoint. Qwairy applies its maintained registry again on receipt and discards human, traditional-search, and unknown user agents.
Test delivery
Replace the hostname and key before running this synthetic check:Limits and delivery scope
- A generic request can contain at most 1,000 events and 2,000,000 normalized bytes.
- Events delivered more than 72 hours late fall outside the current late-arrival window.
- The shared ceilings are 10,000,000 events per integration per day and 200,000,000 events per billed team per day.
- Your runtime, network provider, or observability stack may charge for reading and forwarding logs.
- Filtering or sampling before delivery makes the resulting counts partial for that scope.
Troubleshooting
- 401 or 403: confirm that the secret belongs to the Generic HTTP connector for this brand and is still active.
- 400: validate the JSON shape, record count, method, path, hostname, User-Agent, and timestamp.
- 413: reduce the batch size or encoded payload size.
- 429: pause until the
Retry-Afterinterval has elapsed, then retry the same idempotent batch. - Acknowledged but not connected: confirm that the hostname matches the brand and that the test uses a currently recognized AI crawler User-Agent and a current timestamp.
- Counts are lower than source logs: check upstream filters, sampling, excluded paths, excluded user agents, late delivery, and rejected hostnames.

