---
title: Analytics
description: Six supported providers, configured by value — never by script tag.
---

```json
{
  "analytics": {
    "provider": "plausible",
    "options": { "domain": "docs.example.com" }
  }
}
```

`analytics` is a registry of providers Reed knows how to emit, not a place to paste a
snippet. Six are supported:

## `ga4`

<ParamField name="measurementId" type="string" required>
  Matches `^G-[A-Z0-9]{4,20}$`.
</ParamField>

## `plausible`

<ParamField name="domain" type="string" required>
  A bare hostname — no scheme, no path.
</ParamField>

<ParamField name="host" type="string">
  HTTPS origin of a self-hosted instance.
</ParamField>

## `posthog`

<ParamField name="projectApiKey" type="string" required>
  Matches `^phc_[A-Za-z0-9]{16,}$`.
</ParamField>

<ParamField name="apiHost" type="string">
  HTTPS origin of a self-hosted instance.
</ParamField>

## `fathom`

<ParamField name="siteId" type="string" required>
  Matches `^[A-Z0-9]{6,12}$`.
</ParamField>

<ParamField name="host" type="string">
  HTTPS origin of a self-hosted instance.
</ParamField>

## `umami`

<ParamField name="websiteId" type="string" required>
  A canonical UUID.
</ParamField>

<ParamField name="host" type="string">
  HTTPS origin of a self-hosted instance.
</ParamField>

## `matomo`

<ParamField name="siteId" type="string" required>
  Matches `^[0-9]{1,10}$`.
</ParamField>

<ParamField name="host" type="string" required>
  HTTPS origin. Required for Matomo, unlike the others.
</ParamField>

## Why a registry

Adding a provider is a change to Reed — a reviewed, versioned registry entry — not a
tenant configuration option. The error message says so directly when you name an unknown
provider.

The reason is the same one behind `head` taking no scripts: a platform that builds other
people's repositories cannot let config inject arbitrary JavaScript and still be safe to
run. A registry means every script Reed emits is one Reed's own maintainers chose.

If your provider is not on the list, it is not configurable today. That is a genuine
limitation rather than a workaround waiting to be discovered.

## Identifiers are validated

Each provider's identifier is checked against its real format. A Plausible `domain` with a
scheme, or a GA4 id missing its `G-` prefix, fails at `reed check` rather than producing a
site that silently records nothing.

Self-hosted `host` values must be HTTPS origins.
