PureStats verification is split into separate checks so you can see exactly where the setup fails.

## Verification states

| State | Meaning |
| --- | --- |
| Script found | The configured page contains a PureStats script tag. |
| Script loads | The browser can load `pf.js` from PureStats. |
| First hit received | PureStats accepted a pageview for the site or one of its aliases. |

All three states must pass before the site should be considered fully installed.

## How to run a manual check

1. Open your site in a normal browser.
2. Disable browser extensions that block analytics scripts.
3. Confirm the script exists in page source.
4. Open the browser Network panel and look for `pf.js`.
5. Reload the page and check whether `/api/event` returns a successful response.
6. Return to PureStats and refresh Site Health.

## Common failure reasons

- `data-domain` does not match the canonical site or alias.
- The website has a Content Security Policy that blocks `https://purestats.io`.
- The current path is excluded in Site Settings.
- Consent mode is enabled and no consent was granted.
- A bot/spam filter suppresses the visit.

## Verification and aliases

PureStats automatically pairs `example.com` and `www.example.com` when the matching hostname is available. For other hostnames such as `app.example.com`, `docs.example.com` or checkout domains, add the hostname as an alias before installing the tracker there. Without an allowed alias, PureStats rejects the event because the hostname is not allowed for that site.

:::info
Verification checks are intentionally stricter than dashboard filters. A hit must first be accepted by the tracking API before dashboard filters can include or exclude it.
:::
