# Unattributed installs

An install that nothing could link to a visit is not a dead end. On paid plans, CLItrail says why it is unattributed, from what the hook reported about the machine, so you know which step would have caught it.

## The two reasons

| Reason | When | What gets attribution |
| --- | --- | --- |
| **Safari** `safari` | The machine’s default browser is Safari, or it is a Mac with no profile of a browser the hook can read, so the visit was most likely in Safari. | Show the [handoff command](https://clitrail.com/docs/handoff) from `prepareInstall({ mode: 'auto' })`: auto mode prepares it for Safari. |
| **External** `external` | Anything else: the visit happened somewhere the hook cannot see, such as another computer, a phone, a container, a remote server or another OS user. | The handoff command for remote and container installs; [reconstruction](https://clitrail.com/docs/reconstruction) for journeys on the same network. |

The detail also records the basis: `default_browser` when the machine reported one, `no_supported_browser_profile` for a Mac without a readable profile, or `no_receipt` when the hook reported no default browser.

## Where you see it

- **Overview** splits installs into attributed, reconstructed, Safari and External.
- **Install events** shows each install’s reason.
- Webhooks carry it as `data.attribution.unattributed_reason`: `safari`, `external`, or `null` when the install was attributed.

Installs on Free are counted only, so they have no reason. Reports from older hook scripts, which send neither the default browser nor the browser families, always count as External.
