> ## Documentation Index
> Fetch the complete documentation index at: https://www.usenotra.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Track AI crawlers on Nuxt

> Install the @usenotra/sdk tracker in a Nuxt app to log AI crawlers, AI-cited fetches and AI referrals in Notra.

This guide adds the Notra tracker to a Nuxt app in about five minutes and touches one file, `server/middleware/geo.ts`.

> [!TIP]
>
> The **Agent** tab has a **Copy agent prompt** button, and when you paste its prompt into Claude Code, Cursor or Codex, the agent does these steps for you.

**1. Get your token**

Open **Analytics** in the GEO sidebar and stay on the **Agent** tab. Until the first event arrives, the page shows **No activity yet** with the full install panel, which has **Install the package**, **Set your token** and **Add the proxy** sections. Your token appears in the **Set your token** section, and the panel's **Copy agent prompt** button copies an instruction block you can paste into a coding agent.

From the API, reading the snippets needs `traffic.read` and issuing the token needs `traffic.write`:

```bash theme={"system"}
curl https://api.usenotra.com/v1/geo/ingest/setup \
  -H "Authorization: Bearer $NOTRA_API_KEY"
```

```bash theme={"system"}
curl -X POST "https://api.usenotra.com/v1/geo/ingest/token?projectId=$PROJECT_ID" \
  -H "Authorization: Bearer $NOTRA_API_KEY"
```

Both return `ingestUrl`, `snippet` (the Next.js snippet) and `snippets` with `next`, `nuxt`, `tanstack`, `astro`, `sveltekit`, `reactRouter` and `netlify` keys, and the token endpoint adds `token`.

The ingest routes are organization-level, so pass `projectId` to bind the token to one project or omit it to track the whole organization. Issuing a token does not invalidate tokens issued earlier. Install the same project token on every domain the project tracks, and add extra hostnames under **Tracked domains** in GEO settings.

**2. Install the package**

```bash npm theme={"system"}
npm install @usenotra/sdk
```

```bash yarn theme={"system"}
yarn add @usenotra/sdk
```

```bash pnpm theme={"system"}
pnpm add @usenotra/sdk
```

```bash bun theme={"system"}
bun add @usenotra/sdk
```

**3. Set the environment variable**

Add the token as `NOTRA_GEO_TOKEN` in your site's environment variables, both locally and at your hosting provider, and never hardcode or commit it.

**4. Add the tracker**

```typescript server/middleware/geo.ts theme={"system"}
import { createGeoHandler } from "@usenotra/sdk/nuxt";

const geo = createGeoHandler({
  token: process.env.NOTRA_GEO_TOKEN!,
  endpoint: "https://ingest.usenotra.com",
});

export default defineEventHandler(async (event) => {
  await geo(event);
});
```

Nitro usually does not pass geo headers, so location fields stay undefined and ingest falls back to an IP-based lookup.

**5. Deploy and verify**

After you deploy your site, the **Agent** tab switches from the install panel to the dashboard as soon as Notra stores the first AI crawler visit or referral. Crawlers visit on their own schedule, so the first event can take a while on a quiet site.

## Next steps

> [card] [Tracker reference](https://www.usenotra.com/docs/analytics/tracker-reference.md)
>
> Options, excluded paths, privacy and token rotation.

> [card] [Journey tagging](https://www.usenotra.com/docs/analytics/journeys.md)
>
> Follow one agent across the pages it reads.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.