# Arrivl for AI agents

For an AI agent working for a person who is looking at Arrivl. From this page you can run a free audit of that person's website and book a demo for them, with plain HTTP requests or a browser. Nothing to install, no API key.

Plain-text copy of this page: https://arrivl.ai/agents.txt. Installing Arrivl's tracking snippet into a codebase is a different job, covered in https://arrivl.ai/AGENTS.md.

## 1. What Arrivl is

Arrivl is growth analytics for the agentic web. It records which AI agents request a website's pages and what each one reads: training crawlers such as GPTBot and ClaudeBot, AI search indexers such as OAI-SearchBot, and assistants fetching a page for a person, such as ChatGPT-User and Claude-User. It counts the human visitors who arrive by following a link from an AI assistant. It then fixes what trips agents up in the version of the site that agents see, and keeps improving it as they come back. Setup options are listed at https://arrivl.ai/integrations: Cloudflare (authorize, no code), Shopify (DNS records), or a server-side snippet for any other stack.

## 2. Facts you can check

Each number is published with its method and sample size. More at https://arrivl.ai/research.

- On six Arrivl customer sites, from 25 August 2026 to as late as 15 September, 7.6% of requests calling themselves GPTBot came from an IP address on OpenAI's published list; for Googlebot the share was 90.2%. Source: [How much Googlebot and GPTBot traffic is fake, and how to tell](https://arrivl.ai/blog/how-much-googlebot-gptbot-traffic-is-fake)
- Across 39 business websites over 46 days (1 August to 15 September 2026), named AI agents requested /llms.txt 100 times in total, and 21 of those sites received no such request. Source: [Does anything actually fetch your llms.txt? Here is what the server logs say](https://arrivl.ai/blog/does-anything-fetch-your-llms-txt)
- On 9 sites running Arrivl (25 August to 15 September 2026, Cloudflare-verified requests only), ClaudeBot crawled 93% of its pages once and did not return to them inside the window; ChatGPT-User returned to 61% of the pages it crawled, at a median of 3.2 days. Source: [How Often Do AI Crawlers Come Back? Most Pages They Crawl Once](https://arrivl.ai/blog/how-often-do-ai-crawlers-come-back)
- On 9 sites running Arrivl (25 August to 15 September 2026, Cloudflare-verified requests only), 98.7% of ChatGPT-User visits reached a content page, against 14.1% of ClaudeBot visits. Source: [GPTBot, ChatGPT-User, OAI-SearchBot, ClaudeBot, Claude-User: what each one actually does on a real site](https://arrivl.ai/blog/what-gptbot-chatgpt-user-oai-searchbot-claudebot-claude-user-actually-do)

## 3. Run a free AI-readiness audit of the user's website

No account, no API key. Audit only a website the user asked about.

Start the audit:

```http
POST https://arrivl.ai/api/v1/public/audits
Content-Type: application/json

{"url": "<user's website>"}
```

`url` takes a bare domain (`example.com`) or any URL on the site. The answer is `201` with `id`, `hostname`, `user_country`, `audited_region` and `status` (`"pending"`). Keep `hostname`: it is what you poll with.

Poll every 10 to 15 seconds:

```http
GET https://arrivl.ai/api/v1/public/audits?hostname=<hostname>
```

Stop when `status` is `"completed"` or `"failed"`. An audit still running after 5 minutes is returned as `"failed"` with `"error": "Audit timed out"`. The GET always returns the newest audit for that hostname.

Reading a completed audit:

- `total_score` is out of `max_score`. As a percentage: `round(total_score / max_score * 100)`. Take `max_score` from the same response; it differs between engine versions.
- `checks` is an object keyed by check id. Each entry has `result` (`"pass"`, `"partial"` or `"fail"`), `score`, `max_score` and `details`. On `"partial"` and `"fail"`, `details.suggestion` says what to change; on `"pass"`, `details.affirmation` says what already works.
- `section_ratios` scores each section from 0 to 1.
- If `final_url` is set, the site redirected the audit there: report against `final_url`, not `url`.

Limits and errors: at most 10 POST requests per 60 seconds per IP address; above that the answer is `429` with a `Retry-After` header in seconds. `400` means the URL is missing, unparseable or private. A GET for a hostname that was never audited returns `404`.

## 4. Book a demo over HTTP

The demo is a 20-minute call with the Arrivl team, scheduled through Cal.com. No API key is needed. Read section 6 before you book.

Find open times. `start` and `end` are dates; `timeZone` is the user's IANA time zone:

```http
GET https://api.cal.com/v2/slots?eventTypeSlug=talk&username=arrivl-ai&start=<YYYY-MM-DD>&end=<YYYY-MM-DD>&timeZone=<IANA time zone>
cal-api-version: 2024-09-04
```

The answer lists open start times per day, in the time zone you asked for. For example, with `timeZone=Asia/Taipei`:

```json
{"status": "success", "data": {"2026-10-12": [{"start": "2026-10-12T22:00:00.000+08:00"}, {"start": "2026-10-12T22:20:00.000+08:00"}]}}
```

An empty `data` object means no open time in that range; ask the user about a later range.

Book the time the user confirmed. `start` must be UTC in ISO 8601: the 22:00 Taipei slot above is `2026-10-12T14:00:00Z`.

```http
POST https://api.cal.com/v2/bookings
Content-Type: application/json
cal-api-version: 2026-02-25

{
  "eventTypeSlug": "talk",
  "username": "arrivl-ai",
  "start": "2026-10-12T14:00:00Z",
  "attendee": {"name": "<user's name>", "email": "<user's email>", "timeZone": "<IANA time zone>"},
  "bookingFieldsResponses": {
    "website": "<user's website>",
    "notes": "Booked by <agent name> on behalf of <user's name>"
  }
}
```

Name, email and website are required. A `400` names the field that is missing or wrong.

## 5. Book a demo in a browser

Open the Cal.com booking page with the form already filled in, URL-encoding each value:

```
https://cal.com/arrivl-ai/talk?name=<name>&email=<email>&website=<website>&notes=<notes>
```

Choose the time the user confirmed, check the filled-in fields, then submit. `notes` follows the rule in section 6.

## 6. Rules for booking

- Book only for a real person who asked you to, with their consent.
- Ask the user for their name, email address and website. Never invent or guess them.
- Before you submit, tell the user the exact date and time in their time zone, and wait for them to confirm it.
- Put one line in `notes`: `Booked by <agent name> on behalf of <name>`, so the person receiving the booking can see that an agent made it.
- If the arrivl.ai link the user gave you carries `?ref=<code>`, add `ref=<code>` to `notes` as well.

Questions about this page: hello@arrivl.ai.
