# Changelog

> Notable changes to Kymo and these docs.

Canonical: https://kymo.in/docs/meta/changelog
Last updated: 2026-10-19

Notable changes, newest first. Versions are dated; anything that changes what
you see or what the numbers mean is listed here.

## v1.5 — 2026-10-19

- **The Referrers card on Analytics is now Sources, and it counts visits.**
  It used to count pageviews, so every click from one of your pages to
  another landed in "Direct / None" and made it look far larger than it is.
  The Inbound page changed the same way.
- **"Direct" is split in two.** *Typed or bookmarked* is a visit that started
  on your homepage. *Link, no referrer* is a visit that started on a deeper
  page with no referrer, usually from an app, an email, a chat or an AI
  answer. Click it to see the pages those visits landed on.
- **A visit with no referrer but a `utm_source` counts under that source.**
  ChatGPT tags its own links with `utm_source=chatgpt.com`, so those visits
  join the `chatgpt.com` row.

## v1.4 — 2026-10-19

- **A new line under the three numbers on the AI Traffic page** compares the
  pages AI read in the period before with the pages it did not, by how often
  each got an AI visitor in this period. It shows the result whichever way it
  goes.
- **"No one clicked through" now waits for the visitors.** AI visitors often
  arrive days after the read, so a page gets this verdict only when AI read it
  at least 3 times in the period before and nobody arrived in this period. A
  page read only this period no longer gets it. "Sending you people" now also
  counts a page read in the period before and visited in this one.

## v1.3 — 2026-09-28

- **The AI Visibility page is now the AI Traffic page**, and it leads with
  people instead of crawler reads. The address is unchanged: `/prompts`.
- **The middle number counts everyone AI sent you.** It used to count only
  the visitors Kymo could match to a read it had logged, which was a small
  part of the real number. It now counts every person who arrived from an AI
  answer, by referrer or `utm_source`. That subset is still shown, as a
  detail line under the new number.
- **All three numbers at the top count the same people**: AI read your pages,
  AI sent you N people, and N of them converted. A person is counted once per
  day, because the visitor ID changes at midnight UTC.
- **New sections.** *Where they came from* shows the people and conversions
  per assistant, with a line of their traffic over time. *Journeys* shows each
  person's path from the AI answer to what they did next, in two tabs,
  Converted and Still browsing. *Came back another way* counts later visits
  by people AI first brought to you.
- **The page table has five columns and three views**: Sending you people,
  Read with no visitors, and All pages. Prompt family, platforms, trend,
  confidence and intent now open under a row.
- **More assistants are recognised**: Copilot, Meta AI, DeepSeek, Grok and Le
  Chat, and links tagged `utm_source=chatgpt.com`, which ChatGPT adds to its
  own links.
- **Verdicts read the people count.** A page that sent people now reads
  "Sending you people" even when none of them was matched to a logged read.
- **The page no longer needs the server snippet to show anything.** Without
  it, the page shows the people AI sent you and leaves the reads empty until
  the snippet is installed.
- The guide is rewritten for the new page:
  [Reading the AI Traffic page](https://kymo.in/docs/guides/reading-ai-report).

> **Note:** Your AI numbers will be higher than before, including for past date ranges.
> Kymo classifies a visit's source when it reads the data, so the wider list of
> assistants and the `utm_source=chatgpt.com` rule also count visits that
> arrived before today. Nothing about your traffic changed; Kymo now counts
> visits it used to miss.

## v1.2 — 2026-08-11

- **First-touch attribution, on by default.** The Goals page now shows two
  source columns: **First touch**, the source that first brought a visitor to
  your site, and **Last touch**, the source of the visit that converted. A
  purchase in July can now be credited to the newsletter that brought the
  reader in back in May.
- **This changes behaviour on sites that are already installed, with no
  action from the site owner.** It takes effect on the next pageview after the
  tracker updates, because `beat.js` is served from kymo.in and every site
  loads the current version. There is nothing to redeploy.
- **What it stores.** One first-party `localStorage` key, `kymo_ft`, on your
  own domain, holding the UTM parameters, referrer and landing path of the
  first visit, plus a timestamp. No cookie. No identifier, and nothing that
  identifies a person. It is never read across domains, and it expires after
  13 months.
- **How to turn it off.** Add `data-attribution="off"` to your kymo script
  tag. The tracker then reads no storage and writes none.
- **Stripe purchases can carry it.** Pass `window.kymo.attribution()` as a
  `kymo_ft` metadata field on the Checkout Session and the purchase row
  carries its first touch. The existing `kymo_visitor` attribution is
  unchanged, and a checkout without `kymo_ft` records exactly as before.
- Full detail: [First-touch attribution](https://kymo.in/docs/guides/attribution). The
  [privacy page](https://kymo.in/privacy) and
  [Privacy model](https://kymo.in/docs/trust/privacy) state what the key holds.

> **Note:** The First touch column is blank for goals completed before this shipped. Kymo
> does not backfill it, because the data to backfill it from never existed.

## v1.1 — 2026-08-06

- **Free AI visibility checker** at [/tools/ai-visibility-checker](https://kymo.in/tools/ai-visibility-checker).
  Enter a domain and it fetches that homepage as each of seven AI crawlers,
  then emails a report: the live status code each one got, what robots.txt
  allows, whether the page reads without JavaScript, and which structured data
  is missing. No account, and nothing to install on the site being checked.
  There is a [full sample report](https://kymo.in/tools/ai-visibility-checker/sample-report)
  if you want to see what comes back before running one.
- **Every report now opens with a score out of 95**, plus the points earned on
  each of the eight checks, so you can tell at a glance whether the result is
  good without reading eight sections first. The weighting reflects what each
  problem actually costs: crawler access alone is worth more than a third,
  because a 403 makes everything else academic. **The maximum is 95, not 100**,
  and that is deliberate. The check reads public signals from outside your
  site, so it can tell you whether a crawler *could* read a page but not
  whether it did, how often, or which pages it took. Those last five points
  live in your server logs, which is what Kymo itself shows you.
- **AI crawler directory** at [/crawlers](https://kymo.in/crawlers). Every crawler Kymo knows
  about, with its user agent, robots.txt token, purpose, and what blocking it
  actually costs you. One page per crawler, filterable by purpose and operator.
- **Crawler classification reworked.** Crawlers are now filed by *operator*
  (OpenAI, Anthropic, Google) rather than by product name, and by what the
  agent is for: training, search index, live fetch, classic search, and
  several others. Your dashboards use the operator names, so a provider that
  runs several agents now reads consistently across the app, the directory and
  any report.
- **Control tokens are labelled as such.** `Google-Extended` and
  `Applebot-Extended` are robots.txt directives with no user agent of their
  own: they never make a request and can never appear in your logs. They are
  now marked as control tokens everywhere they are shown, and a report row
  that probes Google-Extended policy is labelled `Googlebot (Google-Extended
  policy)`, because Googlebot is what actually performs that fetch.
- **Meta's crawlers added**, along with several agents that were missing, and
  every entry re-checked against its operator's own documentation.
- **Privacy wording corrected.** Kymo stores no raw IP addresses and no human
  visitor's user-agent string. For bot traffic the crawler's user agent *is*
  recorded, because identifying which crawler arrived is the entire point of
  the feature and no person is involved. The
  [privacy page](https://kymo.in/privacy) states both halves.

## v1.0 — 2026-07

- Documentation site launched at `/docs`.
- AI Visibility Report: reworked hero metrics, trend chart, and a per-page intent column.
- Milestone plates: shareable cards for visitor-count milestones.

> **Note:** This changelog starts at v1.0. Changes from before this page existed are not listed.
