# Antlytics — full documentation > Antlytics is privacy-friendly web analytics for developers who build with AI (Cursor, Claude, MCP). Unlimited sites from US$9/month. No cookies, no dashboard lockouts, soft fair-use limits. Install with npx @antlytics/init or ask your AI to set up tracking. This file contains the complete documentation. A shorter index lives at /llms.txt. --- # Add Antlytics to Hashnode Source: https://www.antlytics.com/docs/hashnode Install the Antlytics snippet on your Hashnode blog via Advanced settings (custom domain required). # Add Antlytics to Hashnode ## Prerequisites - An Antlytics account ([sign up free](https://www.antlytics.com/signup)) - Your tracking ID from **Settings → Tracking Snippet** in your Antlytics dashboard ## Install the snippet 1. In your Hashnode dashboard, go to your blog's **Settings**. 2. Click **Advanced**. 3. Paste the snippet into the **Head HTML** field. 4. Click **Update**. > **Note:** Custom Head HTML requires a **custom domain** on Hashnode. It is not available on the default `hashnode.dev` subdomain. ```html ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to Teachable Source: https://www.antlytics.com/docs/teachable Install the Antlytics snippet on your Teachable school via Code Snippets settings. # Add Antlytics to Teachable ## Prerequisites - An Antlytics account ([sign up free](https://www.antlytics.com/signup)) - Your tracking ID from **Settings → Tracking Snippet** in your Antlytics dashboard ## Install the snippet 1. In your Teachable admin, go to **Settings → Code Snippets**. 2. Paste the snippet into the **Head code** field. 3. Click **Save**. The snippet is applied to every page in your Teachable school, including course pages and sales pages. ```html ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to WooCommerce Source: https://www.antlytics.com/docs/woocommerce WooCommerce runs on WordPress — follow the WordPress guide to install Antlytics on your WooCommerce store. # Add Antlytics to WooCommerce WooCommerce is a WordPress plugin, so the installation process is the same as for any WordPress site. See the [WordPress install guide](/docs/wordpress) for step-by-step instructions. This page exists so you can find Antlytics when searching for WooCommerce analytics. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Astro Source: https://www.antlytics.com/docs/astro Add Antlytics to your Astro project using the official integration or a plain script. # Astro Two options: the `@antlytics/astro` integration (recommended), or a plain ` ``` ### Why `is:inline`? By default Astro bundles and optimises scripts. The `is:inline` directive tells Astro to output the script exactly as written, without processing or deduplication. This is required here because the snippet uses plain IIFE syntax that does not need bundling, and because `is:inline` guarantees the script appears in the `` on every render. ## 3. Verify data is flowing Run your Astro site (`astro dev` or your build preview) and open it in a browser. Check the real-time count in your Antlytics dashboard — data appears within seconds. ## View transitions (Astro 3+) If you use Astro's [View Transitions](https://docs.astro.build/en/guides/view-transitions/) (``), the snippet's `popstate` listener will capture client-side navigation automatically. No additional configuration is required. ## Troubleshooting - Open the browser **Network** tab and confirm a `POST` to `/api/ingest/pageview` returns `200`. - Confirm the tracking ID matches **Settings → Tracking Snippet** in your Antlytics dashboard. - Test in an incognito window if you have an ad blocker, or set up the [first-party proxy](/docs/first-party-proxy). See [Troubleshooting](/docs/troubleshooting) for more common issues. --- # Connect Antlytics to Zapier Source: https://www.antlytics.com/docs/zapier Send your Antlytics analytics data to 7,000+ apps using Zapier webhooks or the API. # Connect Antlytics to Zapier Zapier connects Antlytics to thousands of apps — Slack, Notion, Google Sheets, HubSpot, and more — without writing code. ## Option A: Webhooks (recommended) Antlytics sends a signed HTTP POST to any URL when events fire. Use Zapier's **Webhooks by Zapier** trigger to catch them. ### Steps 1. In Zapier, create a new Zap. Choose **Webhooks by Zapier** → **Catch Hook** as the trigger. 2. Copy the webhook URL Zapier gives you (e.g. `https://hooks.zapier.com/hooks/catch/…`). 3. In your Antlytics dashboard, go to **Settings → Webhooks** → **Add webhook**. 4. Paste the URL, choose **Daily summary** and/or **Pageview threshold**, then click **Create**. 5. Copy the signing secret shown once — paste it somewhere safe. 6. Click **Test** in Antlytics to send a sample payload, then click **Test trigger** in Zapier to capture it. 7. Add action steps in Zapier for whichever app you want to notify. ### Example payload (daily summary) ```json { "event": "daily_summary", "site_id": "YOUR_SITE_ID", "site_name": "example.com", "period": "2026-04-11", "stats": { "visitors": 142, "pageviews": 387, "bounce_rate": 45, "top_pages": [{ "path": "/", "visitors": 80 }], "top_referrers": [] }, "timestamp": "2026-04-11T09:00:00Z" } ``` Zapier maps each field automatically. Use `stats.visitors` or `stats.pageviews` in your action steps. --- ## Option B: API polling via Zapier Schedule Use a **Schedule by Zapier** trigger (daily) combined with a **Webhooks by Zapier** → **GET** action to fetch stats on demand. 1. Create a Zap with **Schedule by Zapier** → **Every day** as the trigger. 2. Add a **Webhooks by Zapier** → **GET** action step. 3. Set the URL to: ``` https://www.antlytics.com/api/v1/stats?site_id=YOUR_SITE_ID ``` 4. Under **Headers**, add: ``` Authorization: Bearer ant_YOUR_TOKEN ``` 5. Map the returned `visitors`, `pageviews`, and `bounce_rate` to your next action step. Create your API token in **Settings → API tokens**. --- ## Verifying signatures If your Zap processes the payload in a Code step, verify the `X-Antlytics-Signature` header to confirm the payload came from Antlytics: ```js const crypto = require('crypto'); const expected = 'sha256=' + crypto .createHmac('sha256', inputData.webhookSecret) .update(inputData.rawBody) .digest('hex'); const trusted = crypto.timingSafeEqual( Buffer.from(inputData.signature), Buffer.from(expected) ); ``` ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID. --- # Deploy Antlytics on Vercel Source: https://www.antlytics.com/docs/vercel Antlytics works on any framework deployed to Vercel — follow the guide for your framework. # Deploy Antlytics on Vercel Vercel is a deployment platform, not a framework. The Antlytics snippet goes in your application code, not in Vercel settings. Follow the install guide for your framework: - [Next.js App Router](/docs/nextjs-app-router) — the most common Vercel stack - [Astro](/docs/astro) - [SvelteKit](/docs/sveltekit) - [Nuxt](/docs/nuxt) - [Remix](/docs/remix) - [Gatsby](/docs/gatsby) - [Vue / Vite](/docs/vue-vite) ## Environment variables for the first-party proxy If you are using the [first-party proxy](/docs/first-party-proxy), add your environment variables in the Vercel dashboard: 1. Go to your project → **Settings → Environment Variables**. 2. Add `NEXT_PUBLIC_APP_URL` (e.g. `https://www.antlytics.com`) so the proxy rewrite target is set correctly. 3. Redeploy after adding variables. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # First-party proxy Source: https://www.antlytics.com/docs/first-party-proxy Route pageviews through your own domain with the SDK. # First-party proxy (optional) Some ad blockers filter third-party analytics domains. A **first-party proxy** forwards pageview requests through **your** origin so they look like ordinary same-site traffic. ### 1. Install the package ```bash npm install @antlytics/analytics # or pnpm add @antlytics/analytics ``` ### 2. Create the proxy route on your site Re-export the SDK handlers (path may vary with your framework): ```ts // app/api/antlytics/pageview/route.ts export { GET, OPTIONS, POST } from "@antlytics/analytics/proxy" ``` ### 3. Point the snippet at your domain Change the `u` variable in your snippet to your **proxy** URL (not the raw Antlytics host): ```js var u="https://your-domain.com/api/antlytics/pageview"; ``` The SDK proxy forwards to Antlytics **`/api/ingest/pageview`** upstream. Your public path stays under `/api/antlytics/...` on your domain. --- # Migrating from Google Analytics Source: https://www.antlytics.com/docs/migrating-from-google-analytics How to add Antlytics alongside GA4, verify it's working, and then remove GA4 when you're ready. # Migrating from Google Analytics Antlytics cannot import historical data from Google Analytics — GA4 does not export individual event records in a portable format. This guide explains how to run both tools in parallel, verify Antlytics is working correctly, and remove GA4 when you are ready. Recommended approach: run Antlytics alongside GA4 for two to four weeks before removing GA4. This gives you a reference period to compare numbers and confirms the install is working before you lose access to your existing data. --- ## What you will lose Before switching: - **Historical data stays in GA4.** Antlytics starts from zero on install day. There is no way to backfill historical pageviews or events. - **Modelled data is not portable.** GA4 uses machine learning to estimate traffic when consent is withheld. That modelled data exists only inside GA4's reporting layer. - **Acquisition channel history.** Your channel groupings, attribution models, and campaign data from before the migration will only be accessible in GA4 going forward. If you need to preserve historical GA4 data for analysis, export it to BigQuery or download CSV reports before you switch fully to Antlytics. --- ## Step 1 — Install Antlytics ### Option A: CLI (recommended) ```bash npx @antlytics/init ``` The installer detects your framework, authenticates via browser OAuth, and installs the correct tracking component. It verifies that events are arriving before it exits. ### Option B: Manual (Next.js App Router) ```bash npm install @antlytics/analytics ``` In `app/layout.tsx`: ```tsx import { Analytics } from '@antlytics/analytics/next' export default function RootLayout({ children }: { children: React.ReactNode }) { return ( {children} ) } ``` ### Option C: Script tag (any framework) In your ``: ```html ``` --- ## Step 2 — Run both tools in parallel Leave GA4 in place while you run Antlytics. Both tools will collect data independently. Use this period to: - Confirm Antlytics numbers are in the expected range compared to GA4 - Set up conversion goals in Antlytics to match any GA4 goals you use regularly - Train your team on the Antlytics dashboard Antlytics and GA4 will not produce identical numbers — they use different counting methods (GA4 uses sessions with session timeout logic; Antlytics counts unique session IDs). A 10–20% variance is normal. What you are checking is that the relative patterns match: similar top pages, similar referrer distribution, similar day-of-week trends. --- ## Step 3 — Configure conversion goals If you use GA4 goal tracking, recreate your key goals in Antlytics before removing GA4. **Via the MCP server** (if you have it configured): ``` Create a goal called "Thank you page" for visits to /thank-you on my site. ``` **Via the dashboard:** Go to **Settings → Goals**, click **Add goal**, enter a name and the path pattern. --- ## Step 4 — Remove GA4 When you are confident Antlytics is working correctly: **If you installed via GTM:** 1. Open Google Tag Manager 2. Find the GA4 Configuration tag and the GA4 Event tags 3. Set their trigger to "Never fire" or delete them 4. Publish the container **If you installed the `gtag.js` script directly:** Remove the ` ``` Prefer copying the exact snippet from **Settings → Tracking Snippet** in your dashboard — it always matches the live generator output. ## 3. Verify data is flowing Open your live site in a browser, then check the real-time count in your Antlytics dashboard. Data appears within seconds. Full traffic charts refresh on page reload. ## What the snippet does - Sends one pageview on initial load. - Re-fires on `popstate` so client-side navigation (e.g. SPA routing) is captured. - Reads UTM parameters from the current URL automatically. - No cookies are set. The session ID lives only in `sessionStorage` and clears when the tab closes. ## Troubleshooting If data does not appear after a few minutes: - Check the browser **Network** tab for a `POST` to `/api/ingest/pageview` — the response should be `200`. - Confirm the tracking ID in the snippet matches the one in **Settings → Tracking Snippet**. - If you use an ad blocker in your own browser, test in an incognito window, or set up the [first-party proxy](/docs/first-party-proxy). - Check that nothing in your `` blocks inline scripts (CSP headers or a script-blocking plugin). See [Troubleshooting](/docs/troubleshooting) for more common issues. --- # Privacy behaviour Source: https://www.antlytics.com/docs/privacy-behaviour What Antlytics collects, what it does not, and how sessions work. # Privacy behaviour > **This page describes Antlytics's product behaviour, not legal compliance status.** Whether Antlytics meets your specific compliance obligations depends on your jurisdiction, your implementation, and other tools on your site. Consult your legal adviser for advice specific to your situation. --- ## What Antlytics collects For each pageview, Antlytics records: | Field | What it is | |---|---| | Pathname | The URL path of the page, for example `/blog/my-post`. Query strings and hashes are included in the raw event but the hash is not used for matching. | | Referrer | The referring URL reported by the browser, if present. | | Session ID | A UUID generated per-tab using `sessionStorage` (see below). | | UTM parameters | `utm_source`, `utm_medium`, `utm_campaign`, `utm_content`, `utm_term` if present in the page URL. | | Country | Derived from the visitor's IP address at the time of the request. Only the country code is stored — not the IP address itself. | | Device type | Desktop, mobile, or tablet, derived from the User-Agent header. | | Browser | Derived from the User-Agent header. | | Operating system | Derived from the User-Agent header. | ### Engagement signals (when enabled) If your site uses the current tracker or SDK, Antlytics also records per-pageview engagement signals: | Field | What it is | |---|---| | Scroll depth | The maximum percentage of the page the visitor scrolled, sent as the visitor leaves the page. | | Time on page | Milliseconds of active time on the page, sent as the visitor leaves the page. | ### Custom events (when you send them) If you call `Antlytics.track('event_name', { ...props })`, the event name and the properties you pass are stored alongside the standard pageview fields. **You control what goes in event properties** — do not include names, email addresses, or other personal identifiers. --- ## What Antlytics does not collect - **Cookies** — Antlytics sets no first-party or third-party cookies of any kind. - **IP addresses** — The IP address is used only to look up the country code. It is not logged, stored in the database, or associated with any event record. - **Cross-site tracking** — Antlytics tracks visitors only on sites that have explicitly installed the Antlytics tracking script. There is no cross-site identity. - **Fingerprinting** — Antlytics does not use canvas fingerprinting, font fingerprinting, or any other technique that would uniquely identify a visitor across sessions. - **Personal data** — No names, email addresses, phone numbers, or other personal identifiers are collected by the tracker. --- ## How sessions work Session continuity within a single browsing tab is tracked using a UUID stored in `sessionStorage`. This means: - The session ID is generated fresh when a visitor opens a new tab or window. - It is cleared automatically when the tab closes — it does not persist across browser sessions or restarts. - It is not shared between tabs, even on the same browser. - It cannot be used to track a visitor across different visits to your site. This approach provides enough session continuity to calculate bounce rate and session-based metrics without creating a persistent cross-session identifier. --- ## Unique visitor counting Because Antlytics does not use cookies or persistent identifiers, unique visitors are estimated using a daily-rotating hash. The hash combines non-personal signals available at the time of the pageview request — these signals change day to day, so the same visitor appears as a new unique visitor on a new day. This means: - Unique visitor counts are estimates, not exact individual counts. - Long-period unique visitor numbers (e.g. "unique visitors in the last 30 days") are approximations and may undercount or overcount repeat visitors. - This approach is a deliberate privacy trade-off: no persistent identifier means no cross-session tracking. --- ## Third-party processors Antlytics uses the following third-party services for its own operation: | Processor | Purpose | |---|---| | Clerk | Authentication and user management | | Supabase | Database for storing analytics events and account data | | Stripe | Payment processing for paid subscriptions | | Vercel | Application hosting and edge network (processes requests in transit) | | Resend | Transactional email (weekly summaries, usage alerts, receipts) | | Upstash | Rate limiting (sees hashed request identifiers only, no analytics data) | Each processor handles data under its own privacy policy. Antlytics analytics data is not shared with these processors for their own purposes. ### AI providers (bring your own key) If you connect an AI provider for [AI Page Insights](/docs/ai-page-insights), the provider you choose (Anthropic, OpenAI, Google, OpenRouter, or an OpenAI-compatible endpoint) receives **aggregate page statistics only** — pageview counts, referrers, and engagement metrics for the page you request insights for. No raw visitor data leaves Antlytics. Your API key is stored encrypted (AES-256-GCM) and can be removed at any time from **Settings → AI**. If you never connect a key, no data is sent to any AI provider. --- ## Compliance positioning Antlytics is designed so that its default tracking configuration does not use cookies, does not collect IP addresses, and does not store personal data. This design may reduce your compliance overhead in some jurisdictions — for example, tools that do not use cookies may not require a cookie consent banner in some regulatory frameworks. > **This is not legal advice.** Regulatory requirements vary by jurisdiction, by the type of data you collect, and by other tools on your site. Consult your legal adviser to confirm your obligations. --- ## Further reading - [Quick start](/docs/quick-start) — install the tracking snippet - [Data retention](/docs/data-retention) — how long event data is kept - [Troubleshooting](/docs/troubleshooting) — common install issues --- # Quick install (npx) Source: https://www.antlytics.com/docs/quick-install Install Antlytics in any project with a single command. # Quick install The fastest way to add Antlytics to any project: ```bash npx @antlytics/init ``` That's it. The CLI detects your framework, opens your browser for one-click sign-in, and edits your project files automatically. --- ## What it does 1. **Detects your framework** — checks for `next.config.*`, `nuxt.config.*`, `svelte.config.*`, or `astro.config.*`. Asks if it can't tell. 2. **Opens your browser** — a one-time authorisation page. No API key pasting. Sign in with your Antlytics account, confirm the code, click "Authorise." 3. **Installs the package** — runs the right install command for your package manager (pnpm, npm, yarn, or bun). 4. **Edits your layout/config** — inserts the `` component or module config with your tracking ID. 5. **Offers AI rules** — optionally writes `CLAUDE.md`, `.cursorrules`, or `.windsurfrules` so your AI coding tool knows how to use Antlytics correctly. --- ## Framework-specific behaviour ### Next.js Installs `@antlytics/analytics`, edits `app/layout.tsx` to add `` inside ``. ### Nuxt 3 Installs `@antlytics/nuxt`, edits `nuxt.config.ts` to add the module. ### SvelteKit Installs `@antlytics/svelte`, edits `src/routes/+layout.svelte` to add ``. ### Astro Installs `@antlytics/astro`, edits `astro.config.mjs` to add the integration. ### Plain HTML Prints the ` ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to Blogger Source: https://www.antlytics.com/docs/blogger Install the Antlytics snippet on your Blogger site by editing the theme HTML. # Add Antlytics to Blogger ## Prerequisites - An Antlytics account ([sign up free](https://www.antlytics.com/signup)) - Your tracking ID from **Settings → Tracking Snippet** in your Antlytics dashboard ## Install the snippet 1. In your Blogger dashboard, go to **Theme → Edit HTML**. 2. Find the closing `` tag in the template. 3. Paste the snippet immediately before ``. 4. Click **Save theme**. ```html ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to Thinkific Source: https://www.antlytics.com/docs/thinkific Install the Antlytics snippet on your Thinkific site via Code and Analytics settings. # Add Antlytics to Thinkific ## Prerequisites - An Antlytics account ([sign up free](https://www.antlytics.com/signup)) - Your tracking ID from **Settings → Tracking Snippet** in your Antlytics dashboard ## Install the snippet 1. In your Thinkific admin, go to **Settings → Code & Analytics**. 2. Paste the snippet into the **Site Header Code** field. 3. Click **Save Changes**. The snippet is injected on all pages of your Thinkific site. ```html ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # AI coding tools Source: https://www.antlytics.com/docs/ai-coding-tools Install Antlytics from your editor and query your analytics from Claude, Cursor, Windsurf, ChatGPT, and more. # Antlytics in AI coding tools Antlytics is built to work with the AI coding tools developers use every day. Install it from your editor. Query your stats from your chat. --- ## Part 1 — Install with one command Run this in your terminal, or ask your AI coding tool to run it for you: ```bash npx @antlytics/init ``` What happens: 1. **Framework detection** — the CLI detects Next.js, Nuxt, SvelteKit, Astro, or plain HTML automatically from your config files. 2. **Browser OAuth** — opens a browser tab, signs you in to Antlytics (or creates an account), and returns an API token to the CLI. 3. **Tracking ID injection** — edits your layout file to add the Antlytics snippet or component for your framework. 4. **Rule file** — writes `CLAUDE.md`, `.cursorrules`, or `.windsurfrules` so your AI assistant knows not to remove Antlytics during refactors. The CLI prints each step as it runs. To undo it: remove the snippet from your layout file and delete the rule file. --- ## Part 2 — Query your stats from your AI Once connected, the Antlytics MCP server lets Claude, Cursor, Windsurf, and other AI tools read your analytics data directly. **MCP URL:** `https://www.antlytics.com/mcp` ### Available tools | Tool | What it does | |---|---| | `get_stats` | Visitors, pageviews, bounce rate, sessions for a site and time range | | `get_top_pages` | Top pages by pageviews and unique visitors | | `get_top_referrers` | Top referrers by visit count | ### Example prompts Once connected, try these: - "What were my top 5 pages on antlytics.com last week?" - "Show me the stats for antlytics.com for the past 30 days." - "Which referrer sent the most visitors to antlytics.com this month?" --- ## Part 3 — Setup per tool ### Claude Code ```bash claude mcp add --transport http antlytics https://www.antlytics.com/mcp ``` Then in any session: `claude` → authenticate when prompted. ### Cursor Add to `.cursor/mcp.json` in your project root: ```json { "mcpServers": { "antlytics": { "url": "https://www.antlytics.com/mcp" } } } ``` Restart Cursor. The Antlytics tools appear in the MCP panel. ### Claude Desktop 1. Open **Claude Desktop → Settings → Connectors** 2. Paste the URL: `https://www.antlytics.com/mcp` 3. Click **Connect** and authorise when prompted Or edit `claude_desktop_config.json` directly: ```json { "mcpServers": { "antlytics": { "url": "https://www.antlytics.com/mcp" } } } ``` ### Windsurf Open **Settings → MCP** and add the server URL `https://www.antlytics.com/mcp`. Refer to Windsurf's documentation for the exact steps. ### Cline Open Cline settings, navigate to **MCP Servers**, and add `https://www.antlytics.com/mcp` as a remote server. ### Zed In your Zed settings, add the MCP server URL `https://www.antlytics.com/mcp`. Refer to Zed's documentation for the exact steps. ### ChatGPT Find Antlytics in the [ChatGPT App Directory](https://chatgpt.com/gpts) and connect — authentication is handled via OAuth automatically. --- ## Part 4 — Rule files When `npx @antlytics/init` runs, it writes a rule file for your AI tool: | File | Tool | |---|---| | `CLAUDE.md` | Claude Code | | `.cursorrules` | Cursor | | `.windsurfrules` | Windsurf | These tell your AI assistant: - Where the Antlytics snippet lives in your layout file - Not to remove or comment out the tracking snippet during refactors - Where to find the Antlytics docs if it needs to look something up You can also install the rule file manually from `@antlytics/ai-rules`: ```ts import { claudeMd, cursorRules, windsurfRules } from '@antlytics/ai-rules' ``` --- ## More resources - [API reference](/docs/api-reference) — REST API for programmatic access - [MCP reference](/docs/mcp) — full MCP server documentation - [Quick install](/docs/quick-install) — CLI reference --- # Connect Antlytics to Make Source: https://www.antlytics.com/docs/make Send your Antlytics analytics data to Make (formerly Integromat) using webhooks or the API. # Connect Antlytics to Make Make (formerly Integromat) connects Antlytics to hundreds of apps using visual automation scenarios. ## Option A: Webhooks (recommended) 1. In Make, create a new scenario. Add a **Webhooks** → **Custom webhook** module as the trigger. 2. Click **Add** to create a new webhook and copy the URL Make provides. 3. In your Antlytics dashboard, go to **Settings → Webhooks** → **Add webhook**. 4. Paste the URL, select your events, then click **Create**. Copy the signing secret shown once. 5. Click **Test** in Antlytics to send a sample payload. 6. Back in Make, click **OK** — Make captures the payload structure and maps all fields. 7. Add further modules to forward data to Google Sheets, Slack, Notion, or any other app. ### Example payload (daily summary) ```json { "event": "daily_summary", "site_id": "YOUR_SITE_ID", "site_name": "example.com", "period": "2026-04-11", "stats": { "visitors": 142, "pageviews": 387, "bounce_rate": 45, "top_pages": [{ "path": "/", "visitors": 80 }], "top_referrers": [] }, "timestamp": "2026-04-11T09:00:00Z" } ``` Access fields in subsequent modules as `{{1.stats.visitors}}`, `{{1.stats.pageviews}}`, etc. --- ## Option B: API polling via Make scheduler 1. Create a scenario with a **Clock** (schedule) trigger set to daily. 2. Add an **HTTP** → **Make a request** module. 3. Configure it: - **URL:** `https://www.antlytics.com/api/v1/stats?site_id=YOUR_SITE_ID` - **Method:** GET - **Headers:** `Authorization: Bearer ant_YOUR_TOKEN` 4. Parse the response and map fields to the next module. Create your API token in **Settings → API tokens**. --- ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID. --- # Dashboard overview Source: https://www.antlytics.com/docs/dashboard-overview What you see when you sign in — metrics, charts, and breakdown tables explained. # Dashboard overview When you first sign in, Antlytics opens **Overview** for your most-visited site (default last seven days). Headline metrics, a traffic chart, and short breakdowns sit here. Deeper tables live on dedicated sidebar pages so Overview stays scannable. --- ## Sidebar sections | Section | What it shows | | ------- | ------------- | | **Overview** | KPIs, traffic chart, traffic health, top pages/referrers/campaigns summaries, goals and funnels at a glance | | **Pages** | Full top-pages list; click a path for per-page detail and AI Page Insights | | **Campaigns** | UTM sources, mediums, and campaigns | | **Referrers** | Referring domains | | **Goals** | Path-based conversion counts for the selected period | | **Funnels** | Multi-step conversion and drop-off | | **Events** | Custom event rankings (`Antlytics.track`) | | **Real-time** | Visitors active in the last few minutes (polls every 30 seconds) | | **Audiences** | Coming soon | | **Settings** | Snippet, goals/funnels setup, billing, API tokens, AI keys, shields | Site and date-range selection carry across analytics sections via the URL (`?site=` and `?period=`). --- ## What you see on Overview - **Top row** — Visitors, Pageviews, Bounce rate, Avg. session for the selected date range. - **Line chart** — traffic trend for the selected period. - **Summaries** — top pages, referrers, UTM, goals, and funnels with “View all” links into the dedicated pages. - **Breakdown cards** — countries, devices, and operating systems. If you manage multiple sites, the sidebar site switcher reloads analytics for the selected site. --- ## Key metrics explained ### Visitors Unique visitors estimated for the selected date range. Antlytics uses a daily-rotating hash to approximate unique visitors without cookies or persistent identifiers. Visitors are counted per day — a person who visits on Monday and again on Wednesday counts as two visitors for that week. This is different from Google Analytics, which can track individuals across sessions using cookies. Antlytics's approach is more privacy-preserving but means long-period unique visitor counts are approximations. ### Pageviews Total page loads recorded by the tracker script. Each time your tracking script fires — on initial load or on client-side navigation — a pageview is recorded. If a visitor views three pages in one session, that counts as three pageviews. ### Bounce rate The percentage of sessions where the visitor viewed only one page before leaving. A high bounce rate is not always bad — a blog post that answers a question completely may have a high bounce rate simply because visitors found what they needed. Bounce rate is calculated per session, not per visitor. --- ## Filtering and date ranges Use the date-range picker in the top-right of the dashboard to change the reporting window. Available presets: - Last 7 days (default) - Fortnight (14 days) - Month (30 days) - 3 months (90 days) - 6 months (180 days) All metrics, charts, and breakdown tables update automatically when you change the date range. --- ## Pages, referrers, and UTM breakdowns ### Pages table Lists the most-visited pages on your site for the selected period, sorted by pageview count. Click any page to filter the entire dashboard to that page. ### Referrers table Shows where your visitors came from — which websites, search engines, or direct entries sent traffic to your site. **Direct / none** means no referrer header was present: this includes bookmarks, typed URLs, and some mobile apps. For more detail on campaign traffic, see [UTM campaigns](/docs/utm-campaigns). ### Countries table Visitors bucketed by country, derived from the IP address at the time of the pageview request. IP addresses are not stored — only the country code is recorded. ### Devices, browsers, and OS Breakdown by device type (desktop, mobile, tablet), browser (Chrome, Firefox, Safari, etc.), and operating system. Derived from the User-Agent header sent with each pageview request. --- ## Real-time The **"X online"** badge in the dashboard header shows how many visitors have been active on your site in the last few minutes. Open **Real-time** in the sidebar for active pages, recent events, and locations. The view refreshes about every 30 seconds. Real-time counts are not rolled into historical Visitors/Pageviews totals. --- ## Managing multiple sites Antlytics supports tracking multiple sites from a single account. The site switcher in the sidebar lets you jump between sites. Each site has its own tracking ID, dashboard view, and goal configuration. A free account can create **one site**. Analytics views require a paid plan or the free trial. The [Starter plan](/pricing) supports **unlimited sites** for US$9/month. To add a new site, go to **Settings → Sites → Add site** and copy the generated tracking snippet for that site. --- ## Next steps - [Quick start](/docs/quick-start) — add the tracking snippet to any site - [Conversion goals](/docs/conversion-goals) — track signups, downloads, and purchases - [Campaign tracking (UTM)](/docs/utm-campaigns) — see which campaigns drive traffic - [First-party proxy](/docs/first-party-proxy) — route analytics through your domain to bypass ad blockers --- # Data retention Source: https://www.antlytics.com/docs/data-retention How long Antlytics keeps your analytics data and what happens when retention expires. # Data retention --- ## Retention by plan | Plan | Data retention | |---|---| | Free | 6 months from the date of each event | | Starter | 2 years from the date of each event | | Pro | 3 years from the date of each event | Retention applies from the date each event is recorded, not from your account creation date. Events recorded today on a Starter plan are retained for two years from today. --- ## What happens when retention expires Events older than your plan's retention window are subject to a scheduled weekly purge job. Until purge is enabled in production, the job runs in dry-run mode (it evaluates what would be deleted without removing rows). Treat the windows above as the policy we enforce once purge is live — export anything you need before downgrading. > If you need to retain data beyond the policy window, export regularly or copy via the API. Questions: [support@antlytics.com](mailto:support@antlytics.com). --- ## Exporting your data Antlytics provides: - **Dashboard CSV export** — from the dashboard, use **Download** on the **Top pages**, **Referrers**, and **UTM** breakdowns. Each file covers a **rolling seven-day** window. Top pages and referrers are aggregated counts in that window; the UTM export lists UTM fields from matching pageviews. Column headings match the downloaded file. Available on **Free and Starter**; sign in required. - **Public API** — the [API reference](/docs/api-reference) documents Bearer-token endpoints for summary stats, top pages, and referrers over a date range you choose (within your plan and practical limits). Use this for automation or custom date ranges beyond the dashboard CSV window. For exports that do not match these options, contact [support@antlytics.com](mailto:support@antlytics.com). --- ## Upgrading and downgrading plans If you upgrade from Free to Starter, the two-year retention window applies to all future events from the upgrade date. Historical data from the Free period is not retroactively extended. If you downgrade from Starter to Free, all of your data becomes subject to the Free six-month window — events older than six months will be removed once purge is enabled. Export anything you need before downgrading. --- ## Further reading - [Privacy behaviour](/docs/privacy-behaviour) — what data Antlytics collects - [API reference](/docs/api-reference) — read your analytics data programmatically - [Quick start](/docs/quick-start) — get started with tracking --- # Deploy Antlytics on Netlify Source: https://www.antlytics.com/docs/netlify Antlytics works on any framework deployed to Netlify — follow the guide for your framework. # Deploy Antlytics on Netlify Netlify is a deployment platform. The Antlytics snippet belongs in your application code, not in Netlify settings. Follow the install guide for your framework: - [Next.js App Router](/docs/nextjs-app-router) - [Astro](/docs/astro) - [Gatsby](/docs/gatsby) - [Hugo](/docs/hugo) - [Jekyll](/docs/jekyll) - [Eleventy](/docs/eleventy) - [Plain HTML / vanilla JS](/docs/plain-html) ## Content Security Policy If your site uses a strict `Content-Security-Policy` header, ensure your Netlify `_headers` file allows the Antlytics ingest endpoint: ``` /* Content-Security-Policy: script-src 'self' 'unsafe-inline'; connect-src 'self' https://www.antlytics.com ``` `'unsafe-inline'` is required to run the inline tracking script. Alternatively, set up the [first-party proxy](/docs/first-party-proxy) and connect only to your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Ingest API Source: https://www.antlytics.com/docs/ingest-api POST /api/ingest/pageview reference. # Ingest API reference Endpoint: **`POST {your-antlytics-origin}/api/ingest/pageview`** Accepts JSON. All fields except **`tracking_id`** and **`pathname`** are optional. | Field | Type | Description | | ----- | ---- | ----------- | | `tracking_id` | UUID (required) | Your site's tracking ID from the dashboard | | `pathname` | string (required) | URL path only, e.g. `/blog/my-post` (no query string) | | `referrer` | string | Full referrer URL | | `session_id` | UUID | Anonymous session id — use a `sessionStorage` UUID for consistency | | `user_agent` | string | User-Agent string (the server-side request header is preferred; use this only for non-browser SDK contexts) | | `utm_source` | string | Campaign source | | `utm_medium` | string | Campaign medium | | `utm_campaign` | string | Campaign name | | `utm_term` | string | Paid search keyword | | `utm_content` | string | Differentiates creatives or links | **Country and device type are always derived server-side** from CDN-injected headers (`X-Vercel-IP-Country`) and the `User-Agent` request header. These values cannot be overridden from the request body, which ensures geography data cannot be forged by client scripts. The dashboard snippet fills UTM fields from the current page URL automatically. ### Rate limits The ingest endpoint enforces sliding-window rate limits per IP address and per tracking ID. Requests that exceed the limit receive a `429 Too Many Requests` response with a `Retry-After` header indicating when to retry. ### Bot and spam filtering The ingest endpoint applies a lightweight baseline filter before writing to the database. Requests with User-Agent strings matching known bots, crawlers, and headless browsers are silently accepted (HTTP 200) but not recorded, so your dashboard reflects only real visitor traffic. A similar check runs on the referrer field to drop known spam referrer injection. The filter is applied server-side and cannot be bypassed from the client payload. --- # Migrating from Plausible Source: https://www.antlytics.com/docs/migrating-from-plausible How to switch from Plausible Analytics (cloud or self-hosted) to Antlytics. # Migrating from Plausible Antlytics cannot import historical data from Plausible — Plausible does not export individual event records in a format that can be imported into another tool. This guide explains how to run both tools in parallel, verify Antlytics is working, and remove Plausible when you are ready. Recommended approach: run both tools in parallel for two to four weeks. Both scripts are lightweight (under 10 KB each), and the combined overhead is negligible. --- ## What you will lose - **Historical data stays in Plausible.** Antlytics starts from zero on install day. - **Custom events.** If you have configured custom events in Plausible using `plausible('event-name')`, you will need to recreate equivalent tracking in Antlytics. Antlytics goal tracking is currently path-based; custom event types are on the roadmap. - **Funnels and revenue attribution** (Plausible cloud). These are Plausible-specific features with no direct equivalent in Antlytics at this stage. Export any reports or CSV data you want to retain before fully removing Plausible. --- ## Step 1 — Install Antlytics Plausible uses a single ` ``` ### Option C: Next.js ```bash npm install @antlytics/analytics ``` In `app/layout.tsx`: ```tsx import { Analytics } from '@antlytics/analytics/next' export default function RootLayout({ children }: { children: React.ReactNode }) { return ( {children} ) } ``` --- ## Step 2 — Run both tools in parallel Leave Plausible in place while you verify Antlytics. Use the parallel period to: - Confirm traffic numbers are in the expected range (10–20% variance between tools is normal due to different bot filtering and session counting methods) - Check that top pages and referrer patterns match what you see in Plausible - Recreate any important goals in Antlytics --- ## Step 3 — Recreate goals If you use Plausible's goal tracking, recreate your page-visit goals in Antlytics before removing Plausible. **Via the MCP server:** ``` Create a goal called "Contact form" for visits to /contact/success on my site. ``` **Via the dashboard:** Go to **Settings → Goals → Add goal**. Enter a name and the exact path you want to track. --- ## Step 4 — Remove Plausible When you are satisfied with the Antlytics install: **Self-hosted Plausible:** Remove the ` ) } ``` Prefer copying the exact string from **Settings → Tracking Snippet** so it never drifts from the live generator. --- # Send Antlytics data to Discord Source: https://www.antlytics.com/docs/discord Post daily analytics summaries and alerts to a Discord channel using Antlytics webhooks. # Send Antlytics data to Discord Post your daily analytics summary to a Discord channel using Discord's built-in webhook support. ## Option A: Webhooks (direct) Discord webhooks accept a JSON body with a `content` string or rich `embeds`. Antlytics sends its own payload format, so you will need a middle layer (Zapier, Make, or n8n) to reshape the message. ### Create a Discord webhook 1. Open the Discord channel you want to post to → **Settings (⚙)** → **Integrations** → **Webhooks**. 2. Click **New Webhook**, name it (e.g. "Antlytics"), and copy the **Webhook URL**. ### Forward via Zapier 1. Create a Zapier Zap: **Webhooks by Zapier** → **Catch Hook** (trigger). 2. Connect Antlytics to this Zap URL via **Settings → Webhooks → Add webhook**. 3. Add a **Webhooks by Zapier** → **POST** action step: - **URL:** your Discord webhook URL - **Data (JSON body):** ```json { "content": "📊 **{{site_name}}** — {{period}}\n• Visitors: {{stats__visitors}}\n• Pageviews: {{stats__pageviews}}\n• Bounce rate: {{stats__bounce_rate}}%" } ``` ### Forward via n8n In n8n, add an **HTTP Request** node after the Webhook trigger: - **Method:** POST - **URL:** your Discord webhook URL - **Body (JSON):** ```json { "content": "📊 {{ $json.site_name }} — {{ $json.period }}\nVisitors: {{ $json.stats.visitors }} · Pageviews: {{ $json.stats.pageviews }}" } ``` --- ## Option B: API polling Use a [Zapier Schedule](/docs/zapier) or [Make scheduler](/docs/make) to call `GET /api/v1/stats` daily and POST a formatted message to Discord. --- ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID. --- # Send Antlytics data to Notion Source: https://www.antlytics.com/docs/notion Log daily analytics stats to a Notion database using Zapier, Make, or the Notion API. # Send Antlytics data to Notion Append daily analytics rows to a Notion database for team dashboards and progress tracking. ## Option A: Via Zapier (easiest) 1. Create a Zapier Zap: **Webhooks by Zapier → Catch Hook** (trigger). 2. In Antlytics → **Settings → Webhooks → Add webhook**, paste the Zapier URL and select **Daily summary**. 3. Add a **Notion → Create database item** action step. 4. Connect your Notion workspace and select the database. 5. Map fields: - **Date** → `period` - **Visitors** (Number) → `stats__visitors` - **Pageviews** (Number) → `stats__pageviews` - **Bounce rate** (Number) → `stats__bounce_rate` ## Option B: Via Make 1. Connect Antlytics via **Settings → Webhooks** to a **Make webhook trigger**. 2. Add a **Notion → Create a database item** module. 3. Map the same fields using Make's `{{1.stats.visitors}}` notation. ## Option C: Notion API + Apps Script Call the Antlytics API and write to Notion in one Apps Script function on a daily trigger: ```js const ANTLYTICS_TOKEN = 'ant_YOUR_API_TOKEN'; const ANTLYTICS_SITE_ID = 'YOUR_SITE_ID'; const NOTION_TOKEN = 'secret_YOUR_NOTION_TOKEN'; const NOTION_DATABASE_ID = 'YOUR_DATABASE_ID'; function syncToNotion() { // Fetch stats const statsRes = UrlFetchApp.fetch( `https://www.antlytics.com/api/v1/stats?site_id=${ANTLYTICS_SITE_ID}`, { headers: { Authorization: `Bearer ${ANTLYTICS_TOKEN}` } } ); const { visitors, pageviews, bounce_rate } = JSON.parse(statsRes.getContentText()); const today = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyy-MM-dd'); // Write to Notion UrlFetchApp.fetch('https://api.notion.com/v1/pages', { method: 'post', contentType: 'application/json', headers: { Authorization: `Bearer ${NOTION_TOKEN}`, 'Notion-Version': '2022-06-28', }, payload: JSON.stringify({ parent: { database_id: NOTION_DATABASE_ID }, properties: { Date: { date: { start: today } }, Visitors: { number: visitors }, Pageviews: { number: pageviews }, 'Bounce rate': { number: bounce_rate }, }, }), }); } ``` Set up a daily time-based trigger via `ScriptApp.newTrigger('syncToNotion').timeBased().everyDays(1).create()`. --- ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID. --- # SvelteKit Source: https://www.antlytics.com/docs/sveltekit Add Antlytics to your SvelteKit project using the official component. # SvelteKit ## Install ```bash npm install @antlytics/svelte ``` ## Usage Add the `` component to your root layout (`src/routes/+layout.svelte`): ```svelte ``` The component sends a pageview when the layout first mounts and on every client-side navigation via SvelteKit's `afterNavigate` lifecycle hook. No additional configuration required. ## Props | Prop | Required | Default | Description | |---|---|---|---| | `trackingId` | Yes | — | UUID from **Antlytics → Sites** | | `apiHost` | No | `https://www.antlytics.com` | Use your own [first-party proxy](/docs/first-party-proxy) | ## Verify data is flowing Start your dev server (`vite dev`) and open the app in a browser. Check the real-time count in your Antlytics dashboard — data appears within seconds. See [Troubleshooting](/docs/troubleshooting) for common issues. --- # WordPress Source: https://www.antlytics.com/docs/wordpress Install the Antlytics snippet via your theme or a header-scripts plugin. # WordPress There are two ways to add the Antlytics snippet to a WordPress site. Pick the one that matches how you manage your theme. ## Prerequisites - An Antlytics account and at least one site created in your dashboard - The **tracking ID** (UUID) from **Settings → Tracking Snippet** - Administrator access to your WordPress site ## Option A — Theme editor (classic themes) If you are using a classic (non-block) theme and have access to the theme editor: 1. In your WordPress admin, go to **Appearance → Theme File Editor**. 2. Open **`header.php`** from the file list on the right. 3. Locate the closing `` tag. 4. Paste the snippet immediately before ``: ```html ``` 5. Replace `YOUR_SITE_ID` with your tracking ID from the Antlytics dashboard. 6. Click **Update File**. > **Note:** If you update your theme, the edit to `header.php` may be overwritten. Use a child theme or switch to Option B to avoid losing it. ## Option B — Header-scripts plugin (block themes or safer alternative) If you are using a block theme (e.g. Twenty Twenty-Four) or want a change that survives theme updates, use a plugin that adds code to your site's ``. Search the WordPress plugin directory for "header footer scripts" or "custom head code" — there are several free options. Once installed: 1. Open the plugin's settings page. 2. Paste the snippet (with `YOUR_SITE_ID` replaced) into the **header** or **``** field. 3. Save. No need to touch any theme files. ## Caching plugins If your site uses a caching plugin (e.g. WP Super Cache, W3 Total Cache, WP Rocket), the script tag is static HTML and requires no special configuration — it will be cached along with the rest of the page and will still fire correctly in the browser. No special exclusion rules are needed. ## Verify data is flowing Visit your live WordPress site in a browser, then check the real-time count in your Antlytics dashboard. Data appears within seconds. ## Troubleshooting - Open the browser **Network** tab and look for a `POST` to `/api/ingest/pageview`. A `200` response means the snippet fired correctly. - Confirm the tracking ID matches **Settings → Tracking Snippet** in your Antlytics dashboard. - Test in an incognito window if you have an ad blocker installed, or set up the [first-party proxy](/docs/first-party-proxy). See [Troubleshooting](/docs/troubleshooting) for more common issues. --- # Add Antlytics to Ecwid Source: https://www.antlytics.com/docs/ecwid Install the Antlytics snippet on your Ecwid store via Custom Code settings. # Add Antlytics to Ecwid ## Prerequisites - An Antlytics account ([sign up free](https://www.antlytics.com/signup)) - Your tracking ID from **Settings → Tracking Snippet** in your Antlytics dashboard ## Install the snippet 1. In your Ecwid control panel, go to **Settings → Custom Code**. 2. Paste the snippet below into the **Add code to head tag** field. 3. Save your changes. > **Note:** Custom Code is available on Ecwid Business and Unlimited plans. ```html ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to Podia Source: https://www.antlytics.com/docs/podia Install the Antlytics snippet on your Podia storefront via Custom Code settings. # Add Antlytics to Podia ## Prerequisites - An Antlytics account ([sign up free](https://www.antlytics.com/signup)) - Your tracking ID from **Settings → Tracking Snippet** in your Antlytics dashboard ## Install the snippet 1. In your Podia dashboard, go to **Settings → Custom Code**. 2. Paste the snippet into the **Head** field. 3. Click **Save**. The snippet runs on every page of your Podia storefront. ```html ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to Tumblr Source: https://www.antlytics.com/docs/tumblr Install the Antlytics snippet on your Tumblr blog via the theme HTML editor. # Add Antlytics to Tumblr ## Prerequisites - An Antlytics account ([sign up free](https://www.antlytics.com/signup)) - Your tracking ID from **Settings → Tracking Snippet** in your Antlytics dashboard ## Install the snippet 1. In your Tumblr dashboard, go to your blog's **Settings → Edit theme**. 2. Click **Edit HTML**. 3. Find the closing `` tag and paste the snippet immediately before it. 4. Click **Update preview**, then **Save**. > **Note:** Custom HTML editing requires a **custom theme**. The default Tumblr themes support this; if you are using a locked theme, you will need to switch to a custom one first. ```html ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # API Reference Source: https://www.antlytics.com/docs/api-reference Public JSON API for reading analytics data and managing sites, goals, funnels, and custom events. # API Reference The Antlytics API lets you read analytics data and manage sites, goals, and funnels programmatically — useful for dashboards, automations, and AI tool integrations. **Base URL:** `https://www.antlytics.com/api/v1` **OpenAPI:** machine-readable spec at [`/openapi.json`](https://www.antlytics.com/openapi.json) (OpenAPI 3.1). Use it with code generators, API clients, and AI assistants. --- ## Authentication All requests require an API token in the `Authorization` header: ``` Authorization: Bearer ant_ ``` Create tokens in **Settings → API tokens**. Each token is shown once — copy it to a secure location immediately. --- ## Plan requirements The REST API is available on **paid plans** (Starter and Pro, including the 14-day trial). Requests from a free-plan account return: ```json { "error": "The REST API and MCP server require a paid plan. Upgrade in Settings → Billing." } ``` with status `403 Forbidden`. --- ## Rate limits 60 requests per minute per token. Exceeded requests receive `429 Too Many Requests` with a `Retry-After` header. --- ## Endpoints ### GET /v1/stats Summary statistics for a site over a time range. **Query parameters:** | Parameter | Required | Description | |---|---|---| | `site_id` | Yes | UUID of the site | | `from` | No | ISO 8601 datetime (inclusive) | | `to` | No | ISO 8601 datetime (exclusive) | **Response:** ```json { "visitors": 1240, "pageviews": 3820, "bounce_rate": 42, "sessions": 1240 } ``` **Example:** ```bash curl "https://www.antlytics.com/api/v1/stats?site_id=YOUR_SITE_ID&from=2024-01-01T00:00:00Z&to=2024-02-01T00:00:00Z" \ -H "Authorization: Bearer ant_YOUR_TOKEN" ``` --- ### GET /v1/pages Top pages by pageviews for a site. **Query parameters:** | Parameter | Required | Default | Description | |---|---|---|---| | `site_id` | Yes | — | UUID of the site | | `from` | No | — | ISO 8601 datetime | | `to` | No | — | ISO 8601 datetime | | `limit` | No | 10 | 1–100 | **Response:** ```json [ { "path": "/", "pageviews": 1820, "visitors": 940 }, { "path": "/pricing", "pageviews": 410, "visitors": 310 } ] ``` **Example:** ```bash curl "https://www.antlytics.com/api/v1/pages?site_id=YOUR_SITE_ID&limit=5" \ -H "Authorization: Bearer ant_YOUR_TOKEN" ``` --- ### GET /v1/referrers Top referrers by visit count for a site. **Query parameters:** | Parameter | Required | Default | Description | |---|---|---|---| | `site_id` | Yes | — | UUID of the site | | `from` | No | — | ISO 8601 datetime | | `to` | No | — | ISO 8601 datetime | | `limit` | No | 10 | 1–100 | **Response:** ```json [ { "referrer": "google.com", "visits": 620 }, { "referrer": "reddit.com", "visits": 180 } ] ``` **Example:** ```bash curl "https://www.antlytics.com/api/v1/referrers?site_id=YOUR_SITE_ID" \ -H "Authorization: Bearer ant_YOUR_TOKEN" ``` --- ### GET /v1/utm UTM source, medium, and campaign breakdown for a site. Only events with a `utm_source` are included. **Query parameters:** | Parameter | Required | Default | Description | |---|---|---|---| | `site_id` | Yes | — | UUID of the site | | `from` | No | — | ISO 8601 datetime | | `to` | No | — | ISO 8601 datetime | | `limit` | No | 20 | 1–100 | **Response:** ```json [ { "utm_source": "google", "utm_medium": "cpc", "utm_campaign": "launch", "visitors": 340, "pageviews": 520 }, { "utm_source": "twitter", "utm_medium": "social", "utm_campaign": null, "visitors": 120, "pageviews": 180 } ] ``` **Example:** ```bash curl "https://www.antlytics.com/api/v1/utm?site_id=YOUR_SITE_ID" \ -H "Authorization: Bearer ant_YOUR_TOKEN" ``` --- ### GET /v1/countries Visitors and pageviews grouped by country (ISO 3166-1 alpha-2). Only events with a country value are included. **Query parameters:** | Parameter | Required | Default | Description | |---|---|---|---| | `site_id` | Yes | — | UUID of the site | | `from` | No | — | ISO 8601 datetime | | `to` | No | — | ISO 8601 datetime | | `limit` | No | 20 | 1–100 | **Response:** ```json [ { "country": "AU", "visitors": 480, "pageviews": 920 }, { "country": "US", "visitors": 310, "pageviews": 580 } ] ``` **Example:** ```bash curl "https://www.antlytics.com/api/v1/countries?site_id=YOUR_SITE_ID&limit=10" \ -H "Authorization: Bearer ant_YOUR_TOKEN" ``` --- ### GET /v1/devices Visitors and pageviews grouped by device type (`desktop`, `mobile`, `tablet`). Only events with a device value are included. **Query parameters:** | Parameter | Required | Default | Description | |---|---|---|---| | `site_id` | Yes | — | UUID of the site | | `from` | No | — | ISO 8601 datetime | | `to` | No | — | ISO 8601 datetime | | `limit` | No | 20 | 1–100 | **Response:** ```json [ { "device": "desktop", "visitors": 620, "pageviews": 1240 }, { "device": "mobile", "visitors": 380, "pageviews": 560 } ] ``` **Example:** ```bash curl "https://www.antlytics.com/api/v1/devices?site_id=YOUR_SITE_ID" \ -H "Authorization: Bearer ant_YOUR_TOKEN" ``` --- ### GET /v1/events Custom event counts grouped by event name. **Query parameters:** | Parameter | Required | Default | Description | |---|---|---|---| | `site_id` | Yes | — | UUID of the site | | `from` | No | — | ISO 8601 datetime | | `to` | No | — | ISO 8601 datetime | | `limit` | No | 50 | 1–100 | **Response:** ```json [ { "name": "signup", "events": 42, "sessions": 38 }, { "name": "cta_click", "events": 18, "sessions": 15 } ] ``` --- ### GET /v1/sites List all sites owned by the API token user. **Response:** ```json [ { "id": "…", "name": "My app", "url": "https://example.com", "tracking_id": "…", "created_at": "2024-01-01T00:00:00Z" } ] ``` --- ### POST /v1/sites Create a site. Free accounts are limited to one site; paid plans have unlimited sites. **Body:** `{ "name": "My app", "url": "https://example.com" }` **Response:** `201` with the created site object (same shape as list). --- ### GET /v1/goals List conversion goals for a site. **Query parameters:** `site_id` (required) **Response:** ```json [ { "id": "…", "site_id": "…", "name": "Signup", "path_pattern": "/thank-you", "created_at": "2024-01-01T00:00:00Z" } ] ``` --- ### POST /v1/goals Create a conversion goal. **Body:** `{ "site_id": "…", "name": "Signup", "path_pattern": "/thank-you" }` `path_pattern` must start with `/`. **Response:** `201` with the created goal. --- ### GET /v1/funnels List funnels for a site. **Query parameters:** `site_id` (required) **Response:** ```json [ { "id": "…", "site_id": "…", "name": "Signup", "steps": [ { "type": "path", "value": "/pricing" }, { "type": "path", "value": "/thank-you" } ], "created_at": "2024-01-01T00:00:00Z" } ] ``` --- ### POST /v1/funnels Create a funnel with 2–8 ordered steps (`type`: `path` or `event`). **Body:** ```json { "site_id": "…", "name": "Signup", "steps": [ { "type": "path", "value": "/pricing" }, { "type": "event", "value": "checkout_complete" } ] } ``` **Response:** `201` with the created funnel. --- ### GET /v1/funnels/:id/results Compute ordered step progression for a funnel. When `from`/`to` are omitted, defaults to the last 7 days. **Query parameters:** `from`, `to` (optional ISO 8601) **Response:** ```json { "id": "…", "name": "Signup", "site_id": "…", "period": { "from": "…", "to": "…" }, "result": { "overallConversion": 42, "steps": [ { "step": { "type": "path", "value": "/pricing" }, "sessions": 100, "conversionFromStart": 100, "conversionFromPrevious": 100 } ] } } ``` --- ## Error responses All errors return JSON: ```json { "error": "Unauthorized" } ``` | Status | Meaning | |---|---| | `401` | Missing or invalid token | | `403` | Your account is on the Free plan — the API requires a paid plan | | `404` | Site not found or doesn't belong to this token | | `422` | Invalid query parameters | | `429` | Rate limit exceeded | --- # Connect Antlytics to n8n Source: https://www.antlytics.com/docs/n8n Receive Antlytics webhook events or poll the API inside n8n workflows. # Connect Antlytics to n8n n8n is an open-source automation platform. Connect it to Antlytics via webhooks or scheduled API calls. ## Option A: Webhooks (recommended) 1. In n8n, create a new workflow. Add a **Webhook** node as the trigger. 2. Set the **HTTP Method** to POST. Copy the **Test URL** (or **Production URL** for live use). 3. In your Antlytics dashboard, go to **Settings → Webhooks** → **Add webhook**. 4. Paste the URL, select your events, then click **Create**. Save the signing secret. 5. Click **Test** in Antlytics to fire a test payload into n8n. 6. In n8n, activate the webhook and add downstream nodes — e.g. Slack, Notion, Google Sheets. ### Example payload (daily summary) ```json { "event": "daily_summary", "site_id": "YOUR_SITE_ID", "site_name": "example.com", "period": "2026-04-11", "stats": { "visitors": 142, "pageviews": 387, "bounce_rate": 45, "top_pages": [{ "path": "/", "visitors": 80 }], "top_referrers": [] }, "timestamp": "2026-04-11T09:00:00Z" } ``` Access fields in n8n expressions as `{{ $json.stats.visitors }}`. ### Verifying signatures Add a **Code** node before your action nodes to verify the `X-Antlytics-Signature` header: ```js const crypto = require('crypto'); const secret = 'YOUR_WEBHOOK_SECRET'; const body = JSON.stringify($input.first().json); const expected = 'sha256=' + crypto.createHmac('sha256', secret).update(body).digest('hex'); if ($input.first().headers['x-antlytics-signature'] !== expected) { throw new Error('Invalid signature'); } return $input.all(); ``` --- ## Option B: API polling via Schedule trigger 1. Add a **Schedule Trigger** node (e.g. daily at 09:00). 2. Add an **HTTP Request** node configured as: - **Method:** GET - **URL:** `https://www.antlytics.com/api/v1/stats?site_id=YOUR_SITE_ID` - **Authentication:** Header Auth — `Authorization: Bearer ant_YOUR_TOKEN` 3. Connect the response to downstream nodes. --- ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID. --- # Conversion goals Source: https://www.antlytics.com/docs/conversion-goals Track key pages with exact path matching. # Conversion goals Goals measure how many **sessions** reach important pages. They use the **pathname** from each pageview your snippet already sends — **no tracker changes** and no separate “events” API. ### Rules - Each goal matches a single **exact pathname**: same string as in the browser path, starting with **`/`**, for example `/pricing` or `/thank-you`. - **Query strings and hashes are ignored** for matching. `/signup?ref=twitter` is stored and matched as **`/signup`**. If you need a conversion only after checkout, use a **dedicated route** (for example `/welcome`) rather than relying on `?success=1`. - Goals are **per site**. Choose the correct site in the sidebar before opening **Settings → Goals**. - Conversions on **Goals** (and the Overview summary) use sessions that hit that path within the dashboard’s **current reporting window**. ### Create a goal 1. Open **Settings → Goals**. 2. Enter a name (e.g. _Visited pricing_) and the path (e.g. `/pricing`). 3. Choose **Add goal**. Counts appear on **Goals** in the sidebar (and as a summary on **Overview**) for the dashboard’s current reporting window. ### Example paths | Goal name (examples) | Path | Notes | | -------------------- | ---- | ----- | | Thank you | `/thank-you` | Typical confirmation URL | | Pricing | `/pricing` | Requires a real route — not an in-page section on `/` | | Signup | `/signup` | Funnel start | | Dashboard home | `/dashboard` | Noisy if users return often | | Starter welcome | `/dashboard/billing/welcome` | Example of a **unique** post-purchase URL | Use paths that exist on **your** property. Inspect the address bar or your route tree when unsure. ### Ideas that do **not** work without extra routes - “User scrolled to pricing” on the homepage — if pricing is only an anchor on **`/`**, every visit is still pathname **`/`**. - “Billing paid” if users only ever land on **`/dashboard/settings`** with different query params — all count as the same path. Fix by adding a **clean success URL** or accepting a broader proxy metric. ### Goals vs. top pages **Goals** are named conversion events — they count how many sessions reached a specific path. They are not the right tool for "which doc page is most popular" or general URL popularity across hundreds of routes. For broad URL traffic, use the **Pages** sidebar section (or the Overview top-pages summary). It aggregates pageviews by pathname without requiring a goal for every URL. Use goals for the handful of paths that represent meaningful business outcomes (signed up, subscribed, contacted support). Use Top Pages for everything else. --- # Deploy Antlytics on Cloudflare Pages Source: https://www.antlytics.com/docs/cloudflare-pages Antlytics works on any framework deployed to Cloudflare Pages — follow the guide for your framework. # Deploy Antlytics on Cloudflare Pages Cloudflare Pages is a deployment platform. The Antlytics snippet belongs in your application code, not in Cloudflare settings. Follow the install guide for your framework: - [Next.js App Router](/docs/nextjs-app-router) - [Astro](/docs/astro) - [SvelteKit](/docs/sveltekit) - [Nuxt](/docs/nuxt) - [Hugo](/docs/hugo) - [Plain HTML / vanilla JS](/docs/plain-html) ## Cloudflare Zaraz Cloudflare Zaraz is an alternative tag management layer that runs analytics scripts at the edge. You do not need Zaraz to use Antlytics — add the snippet directly to your application code as described in the framework guide. If you are already using Zaraz for other tools and prefer to centralise your scripts there, you can add a Zaraz **Custom Managed Component** that runs the Antlytics snippet. See the [Cloudflare Zaraz documentation](https://developers.cloudflare.com/zaraz/) for setup steps. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Migrating from Umami Source: https://www.antlytics.com/docs/migrating-from-umami How to switch from a self-hosted Umami instance to Antlytics. # Migrating from Umami Antlytics cannot import historical data from Umami — Umami does not expose a portable event-level export that can be imported into another tool. This guide explains how to run both tools in parallel, verify Antlytics is working, and remove Umami when you are ready. Recommended approach: run both tools in parallel for two to four weeks. Umami's script tag and the Antlytics script tag are both lightweight and will not meaningfully affect page performance. --- ## What you will lose - **Historical data stays in Umami.** Antlytics starts from zero on install day. - **Custom events.** If you have configured custom events using Umami's `umami.track()` API, there is no direct migration path. Antlytics goal tracking is currently path-based; custom event types are on the roadmap. Export any aggregate reports you want to retain from the Umami dashboard before decommissioning your instance. --- ## Step 1 — Install Antlytics Umami uses a script tag loaded from your self-hosted domain (or `cloud.umami.is` for Umami Cloud). You will add the Antlytics script alongside it initially. ### Option A: CLI (recommended) ```bash npx @antlytics/init ``` The CLI detects your framework and configures the tracking component automatically. ### Option B: Script tag (any site) Add the Antlytics script alongside your existing Umami script: ```html ``` ### Option C: Next.js ```bash npm install @antlytics/analytics ``` In `app/layout.tsx`: ```tsx import { Analytics } from '@antlytics/analytics/next' export default function RootLayout({ children }: { children: React.ReactNode }) { return ( {children} ) } ``` --- ## Step 2 — Run both tools in parallel Leave Umami running while you verify Antlytics. Use the parallel period to: - Confirm traffic numbers are in the expected range (10–20% variance between tools is normal) - Check that top pages and referrer patterns match - Recreate any page-visit goals you track in Umami --- ## Step 3 — Recreate goals If you use Umami's event tracking for conversion monitoring, recreate the equivalent page-visit goals in Antlytics. **Via the MCP server:** ``` Create a goal called "Signup complete" for visits to /signup/success on my site. ``` **Via the dashboard:** Go to **Settings → Goals → Add goal**. Enter a name and the path pattern. --- ## Step 4 — Remove Umami When you are satisfied with the Antlytics install: Remove the Umami ` ``` 3. Click **Save Changes**. ## 3. Publish your site Custom code changes only take effect after publishing. Click **Publish** in the Designer toolbar and publish to your Webflow subdomain or custom domain. ## 4. Verify data is flowing Open your published Webflow site in a browser, then check the real-time count in your Antlytics dashboard. Data appears within seconds. ## Troubleshooting - Custom code does **not** run in the Webflow Designer preview — you must publish first and test on the live URL. - Open the browser **Network** tab and confirm a `POST` to `/api/ingest/pageview` returns `200`. - Confirm the tracking ID matches **Settings → Tracking Snippet** in your Antlytics dashboard. - Test in an incognito window if you have an ad blocker enabled, or set up the [first-party proxy](/docs/first-party-proxy). See [Troubleshooting](/docs/troubleshooting) for more common issues. --- # Add Antlytics to Circle Source: https://www.antlytics.com/docs/circle Install the Antlytics snippet on your Circle community via Custom Code settings. # Add Antlytics to Circle ## Prerequisites - An Antlytics account ([sign up free](https://www.antlytics.com/signup)) - Your tracking ID from **Settings → Tracking Snippet** in your Antlytics dashboard ## Install the snippet 1. In your Circle community admin, go to **Admin → Settings → Custom Code**. 2. Paste the snippet into the **Head** field. 3. Click **Save**. The snippet will be injected on all pages of your Circle community. ```html ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to Contentful Source: https://www.antlytics.com/docs/contentful Contentful is headless — add Antlytics to your frontend application, not to Contentful itself. # Add Antlytics to Contentful Contentful is a **headless CMS** — it stores and delivers content but has no built-in frontend. The Antlytics snippet goes in your frontend application, not in Contentful itself. Follow the guide for your frontend framework: - [Next.js App Router](/docs/nextjs-app-router) — the most common Contentful frontend - [Gatsby](/docs/gatsby) — also widely used with Contentful - [Plain HTML / vanilla JS](/docs/plain-html) — for simple frontends Add the snippet to your root layout so it runs on every page that renders Contentful content. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to Gumroad Source: https://www.antlytics.com/docs/gumroad Track visitors on your own marketing site that links to Gumroad — Gumroad-hosted pages do not support custom scripts. # Add Antlytics to Gumroad Gumroad-hosted product pages do not support custom ` ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Campaign tracking (UTM) Source: https://www.antlytics.com/docs/utm-campaigns UTM parameters on links into your site. # Campaign tracking (UTM) The Antlytics snippet reads `utm_*` parameters from the **current page URL** and sends them with each pageview. No extra configuration. Add UTMs to links pointing at your site: ``` https://example.com/blog?utm_source=newsletter&utm_medium=email&utm_campaign=launch-week ``` Visits appear in the **Campaigns** panel on the dashboard, broken down by source, medium, and campaign name. --- # Connect Antlytics to Pipedream Source: https://www.antlytics.com/docs/pipedream Receive Antlytics webhook events or call the API on a schedule inside Pipedream workflows. # Connect Antlytics to Pipedream Pipedream is a serverless integration platform. Use it to receive Antlytics webhooks and forward data to any destination. ## Option A: Webhooks (recommended) 1. In Pipedream, create a new workflow. Choose **HTTP / Webhook** as the trigger. 2. Copy the unique endpoint URL Pipedream gives you. 3. In your Antlytics dashboard, go to **Settings → Webhooks** → **Add webhook**. 4. Paste the URL, select your events, then click **Create**. Save the signing secret. 5. Click **Test** in Antlytics — the payload appears immediately in Pipedream's event inspector. 6. Add action steps to route data to Slack, Airtable, HubSpot, or run custom Node.js / Python code. ### Example payload (daily summary) ```json { "event": "daily_summary", "site_id": "YOUR_SITE_ID", "site_name": "example.com", "period": "2026-04-11", "stats": { "visitors": 142, "pageviews": 387, "bounce_rate": 45, "top_pages": [{ "path": "/", "visitors": 80 }], "top_referrers": [] }, "timestamp": "2026-04-11T09:00:00Z" } ``` Reference fields in steps as `steps.trigger.event.body.stats.visitors`. ### Verifying signatures (optional Node.js step) ```js import crypto from 'crypto'; export default defineComponent({ async run({ steps }) { const secret = process.env.ANTLYTICS_WEBHOOK_SECRET; const body = JSON.stringify(steps.trigger.event.body); const expected = 'sha256=' + crypto.createHmac('sha256', secret).update(body).digest('hex'); const received = steps.trigger.event.headers['x-antlytics-signature']; if (!crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(received))) { throw new Error('Invalid signature'); } } }); ``` Store the signing secret in **Environment Variables** under Pipedream project settings. --- ## Option B: API polling via Pipedream scheduler 1. Create a workflow with a **Schedule** trigger (e.g. daily at 09:00). 2. Add a **Node.js** step: ```js import axios from 'axios'; export default defineComponent({ async run({ steps, $ }) { const { data } = await axios.get( 'https://www.antlytics.com/api/v1/stats', { params: { site_id: process.env.ANTLYTICS_SITE_ID }, headers: { Authorization: `Bearer ${process.env.ANTLYTICS_API_TOKEN}` }, } ); return data; } }); ``` Store `ANTLYTICS_SITE_ID` and `ANTLYTICS_API_TOKEN` in **Environment Variables**. --- ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID. --- # Custom events Source: https://www.antlytics.com/docs/custom-events Track button clicks, signups, and other actions with Antlytics.track(). # Custom events Custom events record actions that are not pageviews — button clicks, signups, downloads, video plays. They power funnels and add depth to AI Page Insights. ### Script tag If you installed the script snippet, `Antlytics.track()` is available globally after the tracker loads: ```html ``` ### Next.js / npm SDK The `` component exposes `window.antlytics.track()`: ```tsx "use client" export function WaitlistButton() { return ( ) } ``` Or use the standalone client from `@antlytics/analytics`: ```ts import { createAnalyticsClient } from "@antlytics/analytics" const analytics = createAnalyticsClient({ siteId: "your-tracking-id" }) analytics.track("waitlist_signup", { plan: "pro" }) ``` ### Rules - **Event names** may contain letters, numbers, spaces and `. : / _ -`, up to 120 characters. Use consistent names — `waitlist_signup`, not a mix of `WaitlistSignup` and `waitlist-signup`. - **Props** are optional and limited to flat JSON scalars (strings, numbers, booleans, null). Nested objects are rejected. At most 20 keys and 1 KB serialised. - Events inherit the same privacy model as pageviews: no cookies, no persistent identifiers, session scoped to the browser tab. - Events pass through the same bot filtering, rate limits, and shield rules as pageviews. ### Where events show up - **Events** — ranked event names and session counts for the selected period (sidebar → Events). - **Funnels** — use an event as a funnel step (see [Funnels](/docs/funnels)). - **AI Page Insights** — engagement and conversion signals feed page summaries. For "visitor reached a page" conversions, [goals](/docs/conversion-goals) remain the simplest tool — no code changes needed. ### Marketing CTAs without custom code On sites that load the Antlytics script, you can fire events from HTML with `data-ant-event` (and optional `data-ant-prop-*` attributes). Antlytics’s own marketing pages use this pattern; see the tracker docs or ask support if you want the same delegated click helper. --- # Deploy Antlytics on Render Source: https://www.antlytics.com/docs/render Antlytics works on any framework deployed to Render — follow the guide for your framework. # Deploy Antlytics on Render Render is a deployment platform. The Antlytics snippet belongs in your application code, not in Render settings. Follow the install guide for your framework or language: - [Next.js App Router](/docs/nextjs-app-router) - [Django](/docs/django) - [Ruby on Rails](/docs/rails) - [Flask](/docs/flask) - [Laravel](/docs/laravel) - [Plain HTML / vanilla JS](/docs/plain-html) ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # MCP server Source: https://www.antlytics.com/docs/mcp Use Antlytics from Claude, Cursor, Windsurf, and other AI coding tools via the Model Context Protocol. 26 tools covering setup, goals, funnels, events, diagnostics, traffic breakdowns, reports, and ingest management. # Antlytics MCP server The Antlytics MCP server lets you manage your analytics and query your data directly inside Claude, Cursor, Windsurf, Cline, Zed, and any other tool that supports the Model Context Protocol. **MCP URL:** `https://www.antlytics.com/mcp` --- ## Install ### Claude Code ```bash claude mcp add --transport http antlytics https://www.antlytics.com/mcp ``` ### Cursor Add to `.cursor/mcp.json` in your project root: ```json { "mcpServers": { "antlytics": { "url": "https://www.antlytics.com/mcp" } } } ``` ### Claude Desktop 1. Open **Claude Desktop → Settings → Connectors** 2. Paste the URL: `https://www.antlytics.com/mcp` 3. Click **Connect** and authorise when prompted Or edit `claude_desktop_config.json` directly: ```json { "mcpServers": { "antlytics": { "url": "https://www.antlytics.com/mcp" } } } ``` ### Windsurf / Cline / Zed Add the MCP URL `https://www.antlytics.com/mcp` in your tool's MCP settings panel. Refer to your tool's documentation for the exact steps. --- ## Authentication When you connect, the MCP server opens your browser for a one-time OAuth sign-in. Sign in with your Antlytics account and click **Authorise**. Tokens are stored by your MCP client — you won't need to sign in again. To revoke access: **Antlytics dashboard → Settings → API tokens**, find the MCP token and click Revoke. --- ## Plan requirements MCP access is a paid-plan feature: | Plan | MCP access | |---|---| | **Free** | No MCP tool calls | | **Starter** (incl. 14-day trial) | Read and setup tools — stats, pages, referrers, UTM, countries, devices, events, funnels, period comparison, sites, goals, install snippets, diagnostics, shield listing | | **Pro** | Everything in Starter plus admin tools: `generate_report`, `pause_ingest`, `resume_ingest`, `rotate_tracking_id`, `add_shield_rule`, `toggle_shield_rule`, `delete_shield_rule` | Calls outside your plan return a clear error message with an upgrade pointer — nothing fails silently. --- ## Available tools ### Setup and management #### `list_sites` List all analytics sites owned by the authenticated user. **Inputs:** none required **Output:** `[{ id, name, url, tracking_id, created_at }]` **Example:** *"List all my Antlytics sites."* --- #### `create_site` Create a new analytics site. **Inputs:** `name` (required), `url` (required — must be a valid URL) **Output:** `{ id, name, url, tracking_id }` **Example:** *"Create an Antlytics site for https://myapp.com."* --- #### `get_install_snippet` Return the tracking snippet and install instructions for a site and framework. **Inputs:** `site_id` (required), `framework` (optional — `nextjs` | `nuxt` | `sveltekit` | `astro` | `html`, defaults to `html`) **Output:** `{ tracking_id, framework, snippet, instructions }` **Example:** *"Get the Next.js install snippet for my site."* --- ### Goals #### `create_goal` Create a conversion goal that tracks visits to a specific path. **Inputs:** `site_id` (required), `name` (required), `path_pattern` (required — must start with `/`) **Output:** `{ id, name, path_pattern, created_at }` **Example:** *"Create a goal called 'Checkout complete' that tracks visits to /thank-you on my site."* --- #### `list_goals` List all conversion goals for a site, each with its conversion count over the last 30 days. **Inputs:** `site_id` (required) **Output:** `[{ id, name, path_pattern, created_at, conversions_last_30d }]` **Example:** *"Show me all goals and their conversion counts for myapp.com."* --- #### `delete_goal` Delete a conversion goal by id. **Inputs:** `goal_id` (required) **Output:** `{ deleted, goal_id, name }` **Example:** *"Delete the Checkout complete goal."* --- ### Funnels and custom events #### `list_funnels` List conversion funnels for a site. **Inputs:** `site_id` (required) **Output:** `[{ id, site_id, name, steps, created_at }]` **Example:** *"List the funnels on my site."* --- #### `create_funnel` Create a funnel with 2–8 ordered steps. Each step is `{ type: "path" | "event", value }`. Path values must start with `/`. **Inputs:** `site_id` (required), `name` (required), `steps` (required) **Output:** `{ id, site_id, name, steps, created_at }` **Example:** *"Create a signup funnel from /pricing to /thank-you."* --- #### `get_funnel_results` Compute ordered step progression for a funnel. Defaults to the last 7 days. **Inputs:** `funnel_id` (required), `from`, `to` (optional ISO 8601) **Output:** `{ id, name, site_id, period, result }` **Example:** *"How is my signup funnel converting this week?"* --- #### `get_events` Custom event counts grouped by event name. Defaults to the last 7 days. **Inputs:** `site_id` (required), `from`, `to`, `limit` (default 50, max 100) **Output:** `{ period, events: [{ name, events, sessions }] }` **Example:** *"Which custom events fired most last week?"* --- ### Diagnostics #### `check_install` Check whether a site is correctly receiving pageviews. Returns status, event counts, and suggestions if there is a problem. **Inputs:** `site_id` (required) **Output:** ```json { "site_name": "...", "tracking_id": "...", "status": "receiving_data" | "no_recent_data" | "never_received", "last_event_at": "ISO" | null, "events_last_hour": 0, "events_last_24h": 0, "unique_paths_24h": 0, "suggestions": ["..."] } ``` **Example:** *"Check whether my site is correctly tracking pageviews."* --- ### Analytics #### `get_stats` Summary statistics for a site. **Inputs:** `site_id` (required), `from`, `to` (optional ISO 8601; default: last 7 days) **Output:** `{ visitors, pageviews, bounce_rate, sessions, period: { from, to } }` **Example:** *"What were my stats for the last 30 days?"* --- #### `get_top_pages` Top pages by pageviews. **Inputs:** `site_id` (required), `from`, `to`, `limit` (default 10, max 100) **Output:** `[{ path, pageviews, visitors }]` **Example:** *"What were my top 5 pages last week?"* --- #### `get_top_referrers` Top referrers by visit count. **Inputs:** `site_id` (required), `from`, `to`, `limit` (default 10, max 100) **Output:** `[{ referrer, visits }]` **Example:** *"Which referrers sent the most visitors this month?"* --- #### `get_utm_breakdown` Visitors and pageviews grouped by UTM source, medium, and campaign. **Inputs:** `site_id` (required), `from`, `to`, `limit` (default 20, max 100) **Output:** `[{ utm_source, utm_medium, utm_campaign, visitors, pageviews }]` **Example:** *"Break down my traffic by UTM campaign for the last 14 days."* --- #### `get_countries` Visitors and pageviews grouped by country. **Inputs:** `site_id` (required), `from`, `to`, `limit` (default 20, max 100) **Output:** `[{ country, visitors, pageviews }]` **Example:** *"Which countries are my visitors coming from?"* --- #### `get_devices` Visitors and pageviews grouped by device type. **Inputs:** `site_id` (required), `from`, `to`, `limit` (default 20, max 100) **Output:** `[{ device, visitors, pageviews }]` **Example:** *"What percentage of my traffic is mobile?"* --- #### `compare_periods` Compare KPIs between two date ranges and return percentage changes. **Inputs:** `site_id` (required), `current_from`, `current_to`, `previous_from`, `previous_to` (all ISO 8601) **Output:** ```json { "current": { "visitors": N, "pageviews": N, "bounce_rate": N, "sessions": N }, "previous": { "visitors": N, "pageviews": N, "bounce_rate": N, "sessions": N }, "changes": { "visitors_pct": 12.5, "pageviews_pct": -3.2, "bounce_rate_delta": -2, "sessions_pct": 10.0 } } ``` **Example:** *"Compare this week's traffic to last week."* --- ### Reporting #### `generate_report` (Pro) Generate a comprehensive analytics report covering KPIs, top pages, referrers, UTM sources, countries, and devices. The previous period is automatically computed as the same duration immediately before `from`. **Inputs:** `site_id` (required), `from`, `to` (optional, default last 7 days), `format` (optional — `markdown` | `csv` | `json`, default `markdown`) **Output (markdown):** A formatted report you can paste into Slack, Notion, email, or save as a file. **Output (csv):** One section per data type, concatenated with section headers. **Output (json):** Raw data object combining all metrics. **Example:** *"Generate a markdown report for myapp.com for the last 30 days and paste it here."* --- ### Ingest and shields #### `list_shield_rules` List traffic shield rules for a site (hostname, IP, country, path, referrer filters). **Inputs:** `site_id` (required) **Output:** `{ site_id, site_name, rules, total }` **Example:** *"Show the shield rules on my site."* --- #### `add_shield_rule` (Pro) Add a shield rule. Soft cap: 30 rules per site. **Inputs:** `site_id` (required), `rule_type` (required), `value` (required) **Rule types:** `hostname_allow`, `ip_deny`, `ip_allow`, `country_deny`, `country_allow`, `path_deny`, `path_allow`, `referrer_deny` **Example:** *"Block referrer spam from spam.com on my site."* --- #### `toggle_shield_rule` (Pro) Enable or disable a shield rule. **Inputs:** `rule_id` (required) **Example:** *"Disable the IP deny rule I just added."* --- #### `delete_shield_rule` (Pro) Permanently delete a shield rule. **Inputs:** `rule_id` (required) **Example:** *"Delete shield rule rule-id."* --- #### `pause_ingest` (Pro) Pause pageview ingest for a site (tracking ID stays the same). **Inputs:** `site_id` (required) **Example:** *"Pause ingest on my staging site."* --- #### `resume_ingest` (Pro) Resume ingest after a pause. **Inputs:** `site_id` (required) **Example:** *"Resume ingest on my staging site."* --- #### `rotate_tracking_id` (Pro) Rotate the site tracking ID. Update your snippet after rotating. **Inputs:** `site_id` (required) **Example:** *"Rotate the tracking ID for myapp.com."* --- ## Example prompts Once connected, try these in Claude, Cursor, or Windsurf: **Setup:** - "Create an Antlytics site for https://myapp.com and give me the Next.js install snippet." - "Check whether my site is receiving pageviews." - "Create a goal called 'Signed up' that tracks visits to /welcome." **Analytics:** - "What were my top 5 pages on myapp.com last week?" - "Break down my traffic by UTM campaign for the last 14 days." - "Compare this week's stats to last week." - "Which countries are my top 5 sources of traffic?" **Reports:** - "Generate a weekly analytics report for myapp.com in markdown." - "Give me a JSON report for the last 30 days so I can process it." --- ## Rate limits 120 requests per minute per access token. Exceeded requests return `429 Too Many Requests`. --- ## Privacy The MCP server has access to your analytics data — the same data shown in the Antlytics dashboard. Write tools (create site, create goal) only modify your own account's data. No raw user data (IP addresses, user agents) is exposed. See our [privacy policy](/privacy) for details. --- # Send Antlytics data to Telegram Source: https://www.antlytics.com/docs/telegram Forward daily analytics summaries and alerts to a Telegram chat via a bot or automation middleware. # Send Antlytics data to Telegram Telegram does not support Incoming Webhooks natively, so you need either a **Telegram Bot** (via a middleware layer) or an automation platform like [Zapier](/docs/zapier), [Make](/docs/make), or [n8n](/docs/n8n). ## Option A: Via Zapier (easiest) 1. Create a Zapier Zap: **Webhooks by Zapier → Catch Hook** (trigger). 2. In Antlytics → **Settings → Webhooks → Add webhook**, paste the Zapier URL and select your events. 3. Add a **Telegram → Send Message** action step and connect your Telegram bot. 4. Map the message text: ``` 📊 {{site_name}} — {{period}} Visitors: {{stats__visitors}} Pageviews: {{stats__pageviews}} Bounce rate: {{stats__bounce_rate}}% ``` ## Option B: Via Make (n8n similar) 1. In Make, add a **Webhooks → Custom webhook** trigger. Connect Antlytics to it. 2. Add a **Telegram Bot → Send a text message** module. 3. Format the message using Make's fields: ``` 📊 {{1.site_name}} — {{1.period}} Visitors: {{1.stats.visitors}} Pageviews: {{1.stats.pageviews}} ``` ## Option C: Direct Telegram Bot (custom code) If you host your own server, you can receive the Antlytics webhook and forward it to Telegram's Bot API: ```js // Node.js example app.post('/webhook', async (req, res) => { const { site_name, period, stats } = req.body; const text = `📊 *${site_name}* — ${period}\nVisitors: ${stats.visitors}\nPageviews: ${stats.pageviews}`; await fetch( `https://api.telegram.org/bot${process.env.TELEGRAM_TOKEN}/sendMessage`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ chat_id: process.env.TELEGRAM_CHAT_ID, text, parse_mode: 'Markdown' }), } ); res.sendStatus(200); }); ``` Your server URL becomes the Antlytics webhook destination. --- ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID. --- # Visualise Antlytics data in Looker Studio Source: https://www.antlytics.com/docs/looker-studio Build custom Looker Studio dashboards using the Antlytics API via a community connector or data blend. # Visualise Antlytics data in Looker Studio Looker Studio (formerly Google Data Studio) can connect to Antlytics via a community connector built with Apps Script, or via a Google Sheets data source you populate with the Antlytics API. ## Option A: Google Sheets as an intermediary (easiest) 1. Follow the [Google Sheets](/docs/google-sheets) guide to log daily stats to a sheet automatically. 2. In Looker Studio, click **+ Create → Data source**. 3. Choose **Google Sheets**, select your spreadsheet and sheet, then click **Connect**. 4. Build your charts using the `Date`, `Visitors`, `Pageviews`, and `Bounce rate` dimensions. This approach updates daily (or however often your Apps Script trigger runs). --- ## Option B: Custom community connector (Apps Script) Build a Looker Studio community connector that calls the Antlytics API directly. This enables date-range filtering and live data. ### Connector scaffold ```js // Code.gs — Looker Studio community connector for Antlytics const cc = DataStudioApp.createCommunityConnector(); function getAuthType() { return cc.newAuthTypeResponse().setAuthType(cc.AuthType.NONE).build(); } function getConfig(request) { const config = cc.newConfig(); config.newTextInput() .setId('siteId') .setName('Site ID') .setHelpText('Found in Antlytics Settings → Tracking Snippet'); config.newTextInput() .setId('apiToken') .setName('API Token') .setHelpText('Create one in Antlytics Settings → API tokens'); return config.build(); } function getSchema(request) { const fields = cc.getFields(); fields.newDimension().setId('date').setName('Date').setType(cc.FieldType.YEAR_MONTH_DAY); fields.newMetric().setId('visitors').setName('Visitors').setType(cc.FieldType.NUMBER); fields.newMetric().setId('pageviews').setName('Pageviews').setType(cc.FieldType.NUMBER); fields.newMetric().setId('bounce_rate').setName('Bounce rate (%)').setType(cc.FieldType.NUMBER); return { schema: fields.build() }; } function getData(request) { const { siteId, apiToken } = request.configParams; const { startDate, endDate } = request.dateRange; const url = `https://www.antlytics.com/api/v1/stats?site_id=${siteId}&from=${startDate}T00:00:00Z&to=${endDate}T23:59:59Z`; const res = UrlFetchApp.fetch(url, { headers: { Authorization: `Bearer ${apiToken}` }, muteHttpExceptions: true, }); const { visitors, pageviews, bounce_rate } = JSON.parse(res.getContentText()); const fields = cc.getFields(); return { schema: request.fields.map((f) => fields.getFieldById(f.name)), rows: [{ values: [startDate.replace(/-/g, ''), visitors, pageviews, bounce_rate] }], }; } ``` ### Deploy and connect 1. Open the Apps Script project → **Deploy → New deployment → Web app**. 2. Set **Execute as: Me** and **Who has access: Anyone**. 3. Copy the deployment URL. 4. In Looker Studio → **+ Create → Data source → Build your own** → paste the URL. --- ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID. --- # Add Antlytics to Gatsby Source: https://www.antlytics.com/docs/gatsby Install the Antlytics snippet in every Gatsby page via gatsby-ssr. # Add Antlytics to Gatsby ## Prerequisites - An Antlytics account ([sign up free](https://www.antlytics.com/signup)) - Your tracking ID from **Settings → Tracking Snippet** in your Antlytics dashboard ## Install the snippet Use Gatsby's `onRenderBody` SSR hook to inject the script into the `` of every page. Create or edit `gatsby-ssr.tsx` in your project root: ```tsx // gatsby-ssr.tsx import React from "react"; import type { GatsbySSR } from "gatsby"; const analyticsScript = `(function(){ var t="YOUR-SITE-ID", u="https://www.antlytics.com/api/ingest/pageview", k="ant_sid"; function sid(){ try{var s=sessionStorage.getItem(k);if(s)return s; s=crypto.randomUUID();sessionStorage.setItem(k,s);return s;} catch(e){return crypto.randomUUID();} } function utm(){ try{var p=new URLSearchParams(location.search),o={}; ["utm_source","utm_medium","utm_campaign","utm_term","utm_content"] .forEach(function(k){var v=p.get(k);if(v)o[k]=v;}); return o;} catch(e){return {};} } function send(){ fetch(u,{method:"POST",headers:{"Content-Type":"application/json"}, keepalive:true, body:JSON.stringify(Object.assign( {tracking_id:t,pathname:location.pathname, referrer:document.referrer||undefined,session_id:sid()}, utm()))}); } send(); window.addEventListener("popstate",send); })();`; export const onRenderBody: GatsbySSR["onRenderBody"] = ({ setHeadComponents, }) => { setHeadComponents([ ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Connect Antlytics to IFTTT Source: https://www.antlytics.com/docs/ifttt Use IFTTT Webhooks to receive Antlytics events and trigger actions in other services. # Connect Antlytics to IFTTT IFTTT's **Webhooks** service lets you receive an HTTP POST from Antlytics and trigger any IFTTT action — email notifications, Google Sheets rows, smart home devices, and more. ## Option A: Webhooks (recommended) ### Get your IFTTT Webhooks URL 1. Go to [ifttt.com/maker_webhooks](https://ifttt.com/maker_webhooks) → **Documentation**. 2. Note your unique key and the trigger URL format: ``` https://maker.ifttt.com/trigger/{event}/with/key/{your-key} ``` 3. Choose an event name — e.g. `antlytics_daily` — and build the full URL: ``` https://maker.ifttt.com/trigger/antlytics_daily/with/key/YOUR_IFTTT_KEY ``` ### Create the Antlytics webhook 1. In your Antlytics dashboard, go to **Settings → Webhooks** → **Add webhook**. 2. Paste the IFTTT URL above. 3. Select **Daily summary** and click **Create**. 4. Save the signing secret for your records. 5. Click **Test** to fire a test event to IFTTT. ### Create the IFTTT Applet 1. In IFTTT, create a new Applet. Choose **Webhooks** → **Receive a web request** as the trigger. 2. Enter the event name you chose (e.g. `antlytics_daily`). 3. Choose your action (e.g. send an email, append a Google Sheets row). 4. IFTTT passes `value1`, `value2`, `value3` from the POST body. To map Antlytics fields, set up a Pipedream or Make middle-step to extract specific values before forwarding to IFTTT. > **Note:** IFTTT Webhooks only pass three value fields. For richer automation use [Zapier](/docs/zapier), [Make](/docs/make), or [n8n](/docs/n8n) instead. --- ## Option B: API polling IFTTT does not natively support scheduled HTTP GET requests. Use a [Schedule by Zapier](/docs/zapier) or [Make scheduler](/docs/make) to poll the Antlytics API and then forward results to an IFTTT webhook. --- ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID. --- # Deploy Antlytics on Railway Source: https://www.antlytics.com/docs/railway Antlytics works on any framework deployed to Railway — follow the guide for your framework. # Deploy Antlytics on Railway Railway is a deployment platform. The Antlytics snippet belongs in your application code, not in Railway settings. Follow the install guide for your framework or language: - [Next.js App Router](/docs/nextjs-app-router) - [Django](/docs/django) - [Ruby on Rails](/docs/rails) - [Flask](/docs/flask) - [Laravel](/docs/laravel) - [Spring Boot](/docs/spring-boot) - [Plain HTML / vanilla JS](/docs/plain-html) ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Funnels Source: https://www.antlytics.com/docs/funnels Measure step-by-step conversion through pages and custom events. # Funnels Funnels show how visitors progress through an ordered sequence of steps — and where they drop off. Each step is either a **page** (exact pathname) or a **custom event** (by name). ### How matching works - A session reaches step N only after matching steps 1 through N−1 **in order** within the **same session**. - Page steps match the exact pathname, same rules as [goals](/docs/conversion-goals). - Event steps match the `event_name` sent via [`Antlytics.track()`](/docs/custom-events). - Out-of-order visits do not count: for a funnel `/pricing → /signup`, a session that hits `/signup` first and `/pricing` later only counts for step 1. ### Create a funnel 1. Open **Settings → Funnels**. 2. Name the funnel (e.g. _Signup flow_). 3. Add 2–8 steps in order, choosing **Page** or **Event** for each. 4. Choose **Add funnel**. Results appear on **Funnels** in the sidebar (and as a summary on **Overview**) with per-step counts, drop-off, and overall conversion. ### Example | Step | Type | Value | | ---- | ---- | ----- | | 1 | Page | `/pricing` | | 2 | Page | `/signup` | | 3 | Event | `signup_complete` | The Funnels page shows sessions at each step, the percentage of step-1 sessions remaining, and the overall conversion rate for the selected period. ### Funnels vs. goals Goals count sessions that reach a single page. Funnels measure a **sequence** — use them when the order matters and you want to see where visitors abandon a flow. --- # Troubleshooting Source: https://www.antlytics.com/docs/troubleshooting Fix the four most common Antlytics install problems. # Troubleshooting The four issues below cover the vast majority of install problems. Work through them in order. --- ## 1. Ad blocker or browser extension blocking the request **Symptom:** The Network tab shows the `POST /api/ingest/pageview` request is blocked or cancelled, or there is no request at all. **What's happening:** Many ad blockers and privacy extensions block requests to known analytics hostnames, including `www.antlytics.com`. This affects only your own testing — real visitors without extensions will usually be unaffected — but it makes verification harder. **Fix:** Use the [first-party proxy](/docs/first-party-proxy) to route pageview requests through your own domain. Once set up, analytics traffic is indistinguishable from your own API traffic and will not be blocked. **Quick workaround while testing:** Open an incognito or private window (extensions are disabled by default), or temporarily disable your ad blocker for `localhost` or your staging domain. --- ## 2. Wrong tracking ID **Symptom:** The request fires and returns `200`, but no data appears in your dashboard, or data appears in the wrong site. **What's happening:** Each site in Antlytics has a unique UUID tracking ID. If the ID in your snippet does not match the site you are viewing in the dashboard, the event is recorded against a different site — or silently accepted but discarded if the ID does not match any of your sites. **Fix:** 1. In the Antlytics dashboard, open **Settings → Tracking Snippet**. Confirm the site shown in the sidebar is the one you are tracking. 2. Copy the snippet directly from that page — it is pre-filled with the correct tracking ID for the selected site. 3. Paste it into your site, replacing any previous snippet. You can also find your tracking ID in **Sites** (the UUID column next to each site name). --- ## 3. SPA route changes not being tracked **Symptom:** The first pageview is recorded, but navigating between pages in a single-page app does not generate additional events. **What's happening:** The current tracker and the `` component from `@antlytics/analytics/next` intercept `history.pushState()` and `history.replaceState()` (the mechanisms SPA routers use for client-side navigation) as well as `popstate`, so soft navigations are counted automatically. Older versions of the snippet only listened for `popstate`. **Fix:** Update to the latest tracker snippet or SDK version. For Next.js, use the `` component from `@antlytics/analytics/next` — follow the [Next.js App Router guide](/docs/nextjs-app-router) for the recommended integration. If you're pinned to an older snippet version, re-fire a pageview on each route change using your router's navigation hook, or contact [support@antlytics.com](mailto:support@antlytics.com) for guidance for a specific framework. --- ## 4. Snippet not firing at all **Symptom:** No `POST /api/ingest/pageview` request appears in the browser Network tab. Work through these checks in order: **a. Confirm the snippet is in ``** Open your page source (`Ctrl+U` / `Cmd+U`) and search for `ant_sid`. If it is missing, the snippet was not rendered. Check that: - The snippet is inside the `` tag, not ``. - Your build or CMS is not stripping inline ` ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. ### Step 2 — Include the partial in your base template Open `layouts/_default/baseof.html` (or your active theme's equivalent) and add the partial just before ``: ```html {{ .Title }} {{- partial "head.html" . }} {{- partial "antlytics.html" . }} ``` If you use a third-party theme, override the head partial rather than editing the theme files directly so your change survives theme updates. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to Memberful Source: https://www.antlytics.com/docs/memberful Memberful works with your existing site — add Antlytics to the site you control, not to Memberful itself. # Add Antlytics to Memberful Memberful is a membership plugin that works with your existing website. The tracking snippet goes in the frontend site you control, not in Memberful itself. Follow the guide for your website's technology: - [WordPress](/docs/wordpress) — the most common Memberful integration - [Next.js App Router](/docs/nextjs-app-router) — for custom Next.js sites - [Plain HTML / vanilla JS](/docs/plain-html) — for static or custom sites Install the snippet in the root layout of your site so it tracks all pages, including the Memberful-powered checkout pages embedded on your domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to Saleor Source: https://www.antlytics.com/docs/saleor Saleor is headless — add Antlytics to your storefront frontend, not to the Saleor backend. # Add Antlytics to Saleor Saleor is a headless e-commerce platform — it provides the commerce backend but your storefront is a separate React, Next.js, or other frontend application. Install the Antlytics snippet in your storefront by following the guide for your frontend framework: - [Next.js App Router](/docs/nextjs-app-router) — the most common Saleor storefront stack - [Plain HTML / vanilla JS](/docs/plain-html) — if your storefront uses vanilla JS The snippet goes in the root layout of your frontend, not in Saleor itself. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to Strapi Source: https://www.antlytics.com/docs/strapi Strapi is headless — add Antlytics to your frontend application, not to the Strapi backend. # Add Antlytics to Strapi Strapi is a **headless CMS** — it provides a content API, but your frontend is a separate project. Install the Antlytics snippet in your frontend application, not in Strapi. Follow the guide for your frontend: - [Next.js App Router](/docs/nextjs-app-router) - [Nuxt](/docs/nuxt) - [SvelteKit](/docs/sveltekit) - [Plain HTML / vanilla JS](/docs/plain-html) Add the snippet to your root layout so it runs on every page that displays Strapi content. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to Wix Source: https://www.antlytics.com/docs/wix Install the Antlytics snippet on your Wix site via Custom Code. # Add Antlytics to Wix ## Prerequisites - An Antlytics account ([sign up free](https://www.antlytics.com/signup)) - Your tracking ID from **Settings → Tracking Snippet** in your Antlytics dashboard ## Install the snippet 1. In your Wix dashboard, go to **Settings → Custom Code**. 2. Click **Add Custom Code** in the **Head** section. 3. Paste the snippet, set it to apply to **All Pages**, and choose **Head** as the placement. 4. Click **Apply**. > **Note:** Custom Code requires a Wix Premium plan. ```html ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # AI Page Insights Source: https://www.antlytics.com/docs/ai-page-insights Plain-English summaries and recommendations for every important page, powered by your own LLM key. # AI Page Insights Every important page can have an AI-generated summary that explains the data and recommends actionable improvements. The goal is not to replace your analytics — it is to answer **"what should I do next?"** without you interpreting charts. ### What you get For any page on your site, insights cover: - Traffic trends versus the previous period - Where visitors arrived from (referrers and campaigns) - Engagement compared with your site average (scroll depth, reading time) - Goal conversions from that page - Entry and exit behaviour Alongside concrete recommendations — for example, adding an inline CTA, linking to related content before the drop-off point, or writing a follow-up piece for the same audience. ### Plan requirements AI Page Insights requires a **paid plan** (Starter or Pro, including the 14-day trial). On the Free plan, insight requests return a friendly upgrade prompt — head to **Settings → Billing** to start a trial. ### Bring your own key (BYOK) Antlytics never sends your analytics data to a model you have not chosen. You connect your own LLM API key, and insight requests go directly from Antlytics' servers to your provider: - **Anthropic (Claude)** - **OpenAI** - **Google (Gemini)** - **OpenRouter** - Any **OpenAI-compatible endpoint** (custom base URL) Your key is encrypted at rest (AES-256-GCM) and never shown again after saving. You pay your provider directly for usage — Antlytics adds no markup. ### Setup 1. Open **Settings → AI**. 2. Choose a provider, model, and paste your API key. 3. Use **Test connection** to confirm it works. 4. Open any page from the **Overview → Pages** table — the AI insights card generates on first view. ### Regenerating Insights are cached per page and reporting period, and regenerated only when you ask — use the **Regenerate** button after your traffic changes or you update the page. ### Better data, better insights Insights improve with more signal: - Update to the latest tracker or SDK to capture **scroll depth and reading time**. - Define [goals](/docs/conversion-goals) so conversion rates appear in summaries. - Fire [custom events](/docs/custom-events) for key actions. - Tag campaigns with [UTM parameters](/docs/utm-campaigns). --- # Connect Antlytics to Pabbly Connect Source: https://www.antlytics.com/docs/pabbly-connect Receive Antlytics webhook events in Pabbly Connect and automate actions across 2,000+ apps. # Connect Antlytics to Pabbly Connect Pabbly Connect is a no-code automation platform. Use its **Webhook** trigger to receive Antlytics events and route data to any connected app. ## Option A: Webhooks (recommended) 1. In Pabbly Connect, create a new workflow. Choose **Webhook** as the trigger and copy the endpoint URL. 2. In your Antlytics dashboard, go to **Settings → Webhooks** → **Add webhook**. 3. Paste the Pabbly Connect URL, select your events, then click **Create**. Save the signing secret. 4. Click **Test** in Antlytics to fire a sample payload into your Pabbly Connect workflow. 5. Pabbly Connect captures the payload structure. Map fields to your action apps. ### Example payload (daily summary) ```json { "event": "daily_summary", "site_id": "YOUR_SITE_ID", "site_name": "example.com", "period": "2026-04-11", "stats": { "visitors": 142, "pageviews": 387, "bounce_rate": 45, "top_pages": [{ "path": "/", "visitors": 80 }], "top_referrers": [] }, "timestamp": "2026-04-11T09:00:00Z" } ``` In Pabbly Connect action steps, reference fields as `{{stats.visitors}}`, `{{stats.pageviews}}`, etc. --- ## Option B: API polling via Pabbly Connect scheduler Pabbly Connect supports a **Schedule** trigger for recurring automations: 1. Add a **Schedule** trigger and configure your interval (e.g. daily). 2. Add an **API** action step with: - **Method:** GET - **URL:** `https://www.antlytics.com/api/v1/stats?site_id=YOUR_SITE_ID` - **Headers:** `Authorization: Bearer ant_YOUR_TOKEN` 3. Map the response fields to subsequent action steps. Create your API token in **Settings → API tokens**. --- ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID. --- # Deploy Antlytics on Fly.io Source: https://www.antlytics.com/docs/fly-io Antlytics works on any framework deployed to Fly.io — follow the guide for your framework. # Deploy Antlytics on Fly.io Fly.io is a deployment platform. The Antlytics snippet belongs in your application code, not in Fly.io settings. Follow the install guide for your framework or language: - [Next.js App Router](/docs/nextjs-app-router) - [Django](/docs/django) - [Ruby on Rails](/docs/rails) - [Flask](/docs/flask) - [Laravel](/docs/laravel) - [Plain HTML / vanilla JS](/docs/plain-html) ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Use Antlytics data in Grafana Source: https://www.antlytics.com/docs/grafana Visualise Antlytics analytics in Grafana using the JSON API datasource plugin. # Use Antlytics data in Grafana Display Antlytics analytics data in Grafana dashboards using the **JSON API** datasource plugin and the Antlytics REST API. ## Prerequisites - Grafana 9+ (cloud or self-hosted) - The **JSON API** datasource plugin installed (search "JSON API" in **Plugins → Add new plugin**) ## Setup ### Install the JSON API plugin In Grafana Cloud or self-hosted: **Administration → Plugins → search "JSON API" → Install**. ### Configure the datasource 1. Go to **Connections → Data sources → Add new data source**. 2. Choose **JSON API**. 3. Set: - **URL:** `https://www.antlytics.com/api/v1` - **Auth → Custom HTTP Headers:** - **Header:** `Authorization` - **Value:** `Bearer ant_YOUR_TOKEN` 4. Click **Save & test**. --- ## Creating panels ### Summary stats panel Add a **Stat** or **Time series** panel with this datasource query: - **Path:** `/stats` - **Query string:** `site_id=YOUR_SITE_ID&from=${__from:date:iso}&to=${__to:date:iso}` - **Fields:** - `visitors` → Visitors - `pageviews` → Pageviews - `bounce_rate` → Bounce rate (%) ### Top pages table Add a **Table** panel: - **Path:** `/pages` - **Query string:** `site_id=YOUR_SITE_ID&from=${__from:date:iso}&to=${__to:date:iso}&limit=10` - Columns: `path`, `pageviews`, `visitors` ### Top referrers table - **Path:** `/referrers` - **Query string:** `site_id=YOUR_SITE_ID&from=${__from:date:iso}&to=${__to:date:iso}&limit=10` - Columns: `referrer`, `visits` --- ## Example dashboard JSON Import this minimal dashboard via **Dashboards → Import → Paste JSON**: ```json { "title": "Antlytics", "panels": [ { "type": "stat", "title": "Visitors", "datasource": "JSON API", "targets": [{ "fields": [{ "jsonPath": "$.visitors" }] }], "gridPos": { "x": 0, "y": 0, "w": 4, "h": 4 } }, { "type": "stat", "title": "Pageviews", "datasource": "JSON API", "targets": [{ "fields": [{ "jsonPath": "$.pageviews" }] }], "gridPos": { "x": 4, "y": 0, "w": 4, "h": 4 } } ] } ``` Adjust `datasource` to match the name you gave your JSON API source. --- ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID. --- # Add Antlytics to Directus Source: https://www.antlytics.com/docs/directus Directus is headless — add Antlytics to your frontend application. # Add Antlytics to Directus Directus is a **headless CMS** — it exposes your database as a REST and GraphQL API, but the frontend is a separate application you build. Install the Antlytics snippet in your frontend. Follow the guide for your frontend framework: - [Next.js App Router](/docs/nextjs-app-router) - [Nuxt](/docs/nuxt) - [SvelteKit](/docs/sveltekit) - [Plain HTML / vanilla JS](/docs/plain-html) Add the snippet to your root layout so it tracks all pages of your Directus-powered site. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to Framer Source: https://www.antlytics.com/docs/framer Install the Antlytics snippet on your Framer site via Site Settings. # Add Antlytics to Framer ## Prerequisites - An Antlytics account ([sign up free](https://www.antlytics.com/signup)) - Your tracking ID from **Settings → Tracking Snippet** in your Antlytics dashboard ## Install the snippet 1. Open your project in Framer and go to **Site Settings** (the gear icon). 2. Click **General**, then scroll to **Custom Code**. 3. Paste the snippet into the **Start of `` tag** field. 4. Publish your site for the changes to take effect. ```html ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to Jekyll Source: https://www.antlytics.com/docs/jekyll Install the Antlytics snippet via a Jekyll include in every page's head. # Add Antlytics to Jekyll ## Prerequisites - An Antlytics account ([sign up free](https://www.antlytics.com/signup)) - Your tracking ID from **Settings → Tracking Snippet** in your Antlytics dashboard ## Install the snippet ### Step 1 — Create the include Create `_includes/antlytics.html`: ```html ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. ### Step 2 — Add the include to your head layout Open `_includes/head.html` (or your default layout at `_layouts/default.html`) and add the include inside ``: ```html {{ page.title }} {% include antlytics.html %} ``` If your theme places the `` content elsewhere, add the include to that file. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to Medusa Source: https://www.antlytics.com/docs/medusa Medusa is headless — add Antlytics to your storefront frontend application. # Add Antlytics to Medusa Medusa is a headless commerce platform — the Medusa server handles orders, products, and payments, but the storefront is a separate Next.js or other frontend application. Install the Antlytics snippet in your storefront by following the guide for your frontend: - [Next.js App Router](/docs/nextjs-app-router) — the official Medusa starter uses Next.js - [Plain HTML / vanilla JS](/docs/plain-html) — for custom storefronts The snippet belongs in the root layout of your storefront app, not in the Medusa server. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Connect Antlytics to Activepieces Source: https://www.antlytics.com/docs/activepieces Receive Antlytics webhook events in Activepieces and automate actions across your stack. # Connect Antlytics to Activepieces Activepieces is an open-source automation platform. Connect Antlytics using its **Webhook** trigger to receive analytics events and drive downstream automations. ## Option A: Webhooks (recommended) 1. In Activepieces, create a new flow. Add a **Webhook** trigger and copy the endpoint URL. 2. In your Antlytics dashboard, go to **Settings → Webhooks** → **Add webhook**. 3. Paste the Activepieces URL, select your events, then click **Create**. Save the signing secret. 4. Click **Test** in Antlytics to send a sample payload — Activepieces captures the shape automatically. 5. Add action pieces (Slack message, Google Sheets row, HTTP request, etc.) using the mapped fields. ### Example payload (daily summary) ```json { "event": "daily_summary", "site_id": "YOUR_SITE_ID", "site_name": "example.com", "period": "2026-04-11", "stats": { "visitors": 142, "pageviews": 387, "bounce_rate": 45, "top_pages": [{ "path": "/", "visitors": 80 }], "top_referrers": [] }, "timestamp": "2026-04-11T09:00:00Z" } ``` Reference fields in Activepieces as `{{trigger.stats.visitors}}`. --- ## Option B: API polling via schedule trigger 1. Add a **Schedule** trigger with your desired interval. 2. Add an **HTTP** action piece: - **Method:** GET - **URL:** `https://www.antlytics.com/api/v1/stats?site_id=YOUR_SITE_ID` - **Headers:** `Authorization: Bearer ant_YOUR_TOKEN` 3. Map the response to subsequent action pieces. --- ## Self-hosted Activepieces If you run Activepieces on your own infrastructure, ensure the instance can receive inbound POST requests from Antlytics servers and that the webhook URL is publicly reachable. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID. --- # Deploy Antlytics on DigitalOcean App Platform Source: https://www.antlytics.com/docs/digitalocean-app-platform Antlytics works on any framework deployed to DigitalOcean App Platform — follow the guide for your framework. # Deploy Antlytics on DigitalOcean App Platform DigitalOcean App Platform is a deployment platform. The Antlytics snippet belongs in your application code, not in App Platform settings. Follow the install guide for your framework or language: - [Next.js App Router](/docs/nextjs-app-router) - [Gatsby](/docs/gatsby) - [Django](/docs/django) - [Ruby on Rails](/docs/rails) - [Flask](/docs/flask) - [Plain HTML / vanilla JS](/docs/plain-html) ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Usage & fair use Source: https://www.antlytics.com/docs/usage-and-fair-use How pageview usage is measured, what happens near your plan limit, and why there is no lockout. # Usage & fair use Paid plans include a generous monthly pageview allowance. This page explains how usage is measured and what happens if you approach or pass it. --- ## What's included | Plan | Included pageviews / month | |---|---| | **Starter** | 500,000 | | **Pro** | 2,000,000 | Usage is counted as **pageview events ingested per calendar month (UTC), across all your sites combined**. Custom events and engagement beacons do not count towards the pageview allowance. --- ## The usage meter Open **Settings → Billing** to see the current month's pageviews against your plan's allowance, with a progress bar and percentage. The meter resets at the start of each calendar month. --- ## What happens near the limit - **At ~80% of your allowance** — we email you a heads-up so nothing surprises you. - **At 100%** — we email you again and show an upgrade suggestion in the dashboard. Each alert is sent at most once per calendar month. ## What does not happen - **No lockout.** Your dashboard keeps working and your data keeps flowing. - **No metered overage charges.** We never bill you automatically for going over. - **No data loss.** Events past the allowance are still ingested and stored. If your traffic has genuinely outgrown your plan, we'll ask you to move to a suitable tier — with notice, not a switch-off. Sustained extreme overuse (far beyond any plan's allowance) may be throttled to protect the service, but that conversation happens by email first. --- ## Data retention Retention is separate from the monthly allowance: events are kept for 6 months on Free, 2 years on Starter, and 3 years on Pro. See [data retention](/docs/data-retention). --- ## Questions Email [support@antlytics.com](mailto:support@antlytics.com) — usage questions are answered by a human. --- # Add Antlytics to Eleventy Source: https://www.antlytics.com/docs/eleventy Install the Antlytics snippet in your Eleventy base layout for full-site tracking. # Add Antlytics to Eleventy ## Prerequisites - An Antlytics account ([sign up free](https://www.antlytics.com/signup)) - Your tracking ID from **Settings → Tracking Snippet** in your Antlytics dashboard ## Install the snippet Open your base layout file — typically `_includes/base.njk` (Nunjucks), `_includes/base.html` (HTML), or `_includes/base.liquid` (Liquid) — and paste the snippet inside ``: **Nunjucks (`_includes/base.njk`):** ```html ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. **HTML (`_includes/base.html`):** The same snippet works identically in plain HTML layouts. **Liquid (`_includes/base.liquid`):** Also identical — Liquid layouts support raw ` ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to Payload CMS Source: https://www.antlytics.com/docs/payload-cms Payload CMS is Next.js-native — follow the Next.js App Router guide to add Antlytics. # Add Antlytics to Payload CMS Payload CMS is **Next.js-native** — your Payload project is also your frontend Next.js application. Follow the [Next.js App Router guide](/docs/nextjs-app-router) to add the snippet to your root layout. Add it to `app/(frontend)/layout.tsx` (or your root layout file) so it tracks all public-facing pages without running inside the Payload admin panel. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to PrestaShop Source: https://www.antlytics.com/docs/prestashop Install the Antlytics snippet on your PrestaShop store via a header injection module or theme edit. # Add Antlytics to PrestaShop ## Prerequisites - An Antlytics account ([sign up free](https://www.antlytics.com/signup)) - Your tracking ID from **Settings → Tracking Snippet** in your Antlytics dashboard ## Install the snippet The simplest way to add a global header script in PrestaShop is via a module: 1. Install a **header injection** or **custom HTML** module from the PrestaShop Addons marketplace (search for "header script" or "custom code"). Several free options are available. 2. In the module settings, paste the snippet into the **Head** or **Header** field so it is injected before `` on every page. 3. Save and clear your PrestaShop cache. Alternatively, if you are comfortable editing theme files, open your active theme's `header.tpl` and paste the snippet just before the closing `` tag. > **Caching note:** Always clear the PrestaShop cache after making theme or module changes. ```html ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Connect Antlytics to Relay.app Source: https://www.antlytics.com/docs/relay Receive Antlytics webhook events in Relay.app to trigger collaborative workflows. # Connect Antlytics to Relay.app Relay.app is a collaborative automation platform. Use its **HTTP trigger** to receive Antlytics analytics events and kick off team workflows. ## Option A: Webhooks (recommended) 1. In Relay.app, create a new workflow. Choose **HTTP trigger** as the starting step and copy the endpoint URL. 2. In your Antlytics dashboard, go to **Settings → Webhooks** → **Add webhook**. 3. Paste the Relay URL, select your events (e.g. **Daily summary**), then click **Create**. 4. Save the signing secret shown once. 5. Click **Test** in Antlytics — the payload arrives in Relay's run history. 6. Build out your workflow steps: send a Slack message, assign a task, update a Google Sheet, or run a human approval step. ### Example payload (daily summary) ```json { "event": "daily_summary", "site_id": "YOUR_SITE_ID", "site_name": "example.com", "period": "2026-04-11", "stats": { "visitors": 142, "pageviews": 387, "bounce_rate": 45, "top_pages": [{ "path": "/", "visitors": 80 }], "top_referrers": [] }, "timestamp": "2026-04-11T09:00:00Z" } ``` Map `stats.visitors`, `stats.pageviews`, and `site_name` to messages and data steps within your workflow. --- ## Option B: API polling Relay.app does not have a built-in scheduler trigger. Use a [Zapier Schedule](/docs/zapier) or [Make scheduler](/docs/make) to poll `GET /api/v1/stats` and forward results to Relay via an HTTP step. --- ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID. --- # Deploy Antlytics on AWS Amplify Source: https://www.antlytics.com/docs/aws-amplify Antlytics works on any framework deployed to AWS Amplify Hosting — follow the guide for your framework. # Deploy Antlytics on AWS Amplify AWS Amplify Hosting is a deployment platform. The Antlytics snippet belongs in your application code, not in Amplify settings. Follow the install guide for your framework: - [Next.js App Router](/docs/nextjs-app-router) — Amplify supports Next.js SSR/SSG natively - [React / Vite](/docs/vue-vite) — for Create React App or Vite-based React projects - [Gatsby](/docs/gatsby) - [Angular](/docs/angular) - [Vue / Vite](/docs/vue-vite) - [Plain HTML / vanilla JS](/docs/plain-html) ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to Carrd Source: https://www.antlytics.com/docs/carrd Install the Antlytics snippet on your Carrd site via the Embed element. # Add Antlytics to Carrd ## Prerequisites - An Antlytics account ([sign up free](https://www.antlytics.com/signup)) - Your tracking ID from **Settings → Tracking Snippet** in your Antlytics dashboard ## Install the snippet Carrd does not provide a global `` injection field. Instead, add the snippet using a hidden **Embed** element: 1. In the Carrd editor, click **+** and add an **Embed** element. 2. Set the type to **Code** and paste the snippet. 3. Tick **Hidden** so the element is not visible on your page. 4. Publish your site. > **Note:** The Embed element requires a Carrd Pro Plus plan or higher. ```html ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to Docusaurus Source: https://www.antlytics.com/docs/docusaurus Install the Antlytics snippet in your Docusaurus site via headTags in the site config. # Add Antlytics to Docusaurus ## Prerequisites - An Antlytics account ([sign up free](https://www.antlytics.com/signup)) - Your tracking ID from **Settings → Tracking Snippet** in your Antlytics dashboard ## Install the snippet Add the snippet to every page using the `headTags` option in `docusaurus.config.ts`: ```ts // docusaurus.config.ts import type { Config } from "@docusaurus/types"; const config: Config = { // ... your existing config ... headTags: [ { tagName: "script", attributes: {}, innerHTML: `(function(){ var t="YOUR-SITE-ID", u="https://www.antlytics.com/api/ingest/pageview", k="ant_sid"; function sid(){ try{var s=sessionStorage.getItem(k);if(s)return s; s=crypto.randomUUID();sessionStorage.setItem(k,s);return s;} catch(e){return crypto.randomUUID();} } function utm(){ try{var p=new URLSearchParams(location.search),o={}; ["utm_source","utm_medium","utm_campaign","utm_term","utm_content"] .forEach(function(k){var v=p.get(k);if(v)o[k]=v;}); return o;} catch(e){return {};} } function send(){ fetch(u,{method:"POST",headers:{"Content-Type":"application/json"}, keepalive:true, body:JSON.stringify(Object.assign( {tracking_id:t,pathname:location.pathname, referrer:document.referrer||undefined,session_id:sid()}, utm()))}); } send(); window.addEventListener("popstate",send); })();`, }, ], }; export default config; ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. If you use `docusaurus.config.js` instead of TypeScript, the same `headTags` option applies — just remove the type import. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to KeystoneJS Source: https://www.antlytics.com/docs/keystonejs KeystoneJS is headless — add Antlytics to your frontend application. # Add Antlytics to KeystoneJS KeystoneJS is a **headless CMS** built on GraphQL. Your frontend is a separate application. Install the Antlytics snippet in that frontend, not in KeystoneJS itself. Follow the guide for your frontend: - [Next.js App Router](/docs/nextjs-app-router) — the most common KeystoneJS frontend - [Plain HTML / vanilla JS](/docs/plain-html) Add the snippet to your root layout so it runs on every page that renders KeystoneJS content. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Connect Antlytics to Integrately Source: https://www.antlytics.com/docs/integrately Receive Antlytics webhook events in Integrately and automate actions across 1,200+ apps. # Connect Antlytics to Integrately Integrately is a 1-click automation platform. Use its **Webhook** trigger to receive Antlytics analytics events and drive actions in popular apps. ## Option A: Webhooks (recommended) 1. In Integrately, create a new automation. Search for **Webhook** as the trigger app and choose **Webhook received** as the event. 2. Copy the webhook URL Integrately provides. 3. In your Antlytics dashboard, go to **Settings → Webhooks** → **Add webhook**. 4. Paste the URL, select your events, then click **Create**. Save the signing secret. 5. Click **Test** in Antlytics to send a sample payload. 6. Back in Integrately, click **Capture webhook response** — the payload fields become available for mapping. 7. Add action steps to send notifications, update records, or post messages. ### Example payload (daily summary) ```json { "event": "daily_summary", "site_id": "YOUR_SITE_ID", "site_name": "example.com", "period": "2026-04-11", "stats": { "visitors": 142, "pageviews": 387, "bounce_rate": 45, "top_pages": [{ "path": "/", "visitors": 80 }], "top_referrers": [] }, "timestamp": "2026-04-11T09:00:00Z" } ``` Use `stats > visitors` and `stats > pageviews` in your action step field mapping. --- ## Option B: API polling Integrately does not have a built-in scheduler. Use a **Schedule + HTTP** pattern in [Zapier](/docs/zapier) or [Make](/docs/make), or set up a simple cron job that calls `GET /api/v1/stats` and posts results to an Integrately webhook. --- ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID. --- # Add Antlytics to Bubble Source: https://www.antlytics.com/docs/bubble Install the Antlytics snippet on your Bubble app via SEO settings. # Add Antlytics to Bubble ## Prerequisites - An Antlytics account ([sign up free](https://www.antlytics.com/signup)) - Your tracking ID from **Settings → Tracking Snippet** in your Antlytics dashboard ## Install the snippet 1. In your Bubble editor, go to **Settings → SEO / metatags**. 2. Scroll to **Script/meta tags in header**. 3. Paste the snippet into the field. 4. Deploy your app for changes to take effect. ```html ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to Notion Sites Source: https://www.antlytics.com/docs/notion-sites Custom script support on Notion-hosted pages varies by setup — learn what is possible. # Add Antlytics to Notion Sites Support for custom `` scripts on Notion-hosted pages **varies by setup**: **Notion native sites (`notion.site`):** Notion's built-in site publishing does not currently support injecting custom scripts. Visitor tracking is not available on `notion.site` subdomains. **Super.so (custom domains on Notion):** Super.so supports custom code injection. In your Super dashboard, go to **Site Settings → Code Injection** and paste the snippet into the **Head** field. Super wraps your Notion pages in a custom frontend that supports this. **Other Notion-to-website tools:** Check your tool's documentation for a custom `` or code injection field. If one exists, paste the snippet there. If you are building a marketing site separately (e.g. in Webflow or with a framework) that links to Notion pages, install the snippet on your marketing site following the appropriate guide. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to VitePress Source: https://www.antlytics.com/docs/vitepress Install the Antlytics snippet in your VitePress site via the head config option. # Add Antlytics to VitePress ## Prerequisites - An Antlytics account ([sign up free](https://www.antlytics.com/signup)) - Your tracking ID from **Settings → Tracking Snippet** in your Antlytics dashboard ## Install the snippet Add the snippet to `.vitepress/config.ts` using the `head` array: ```ts // .vitepress/config.ts import { defineConfig } from "vitepress"; export default defineConfig({ // ... your existing config ... head: [ [ "script", {}, `(function(){ var t="YOUR-SITE-ID", u="https://www.antlytics.com/api/ingest/pageview", k="ant_sid"; function sid(){ try{var s=sessionStorage.getItem(k);if(s)return s; s=crypto.randomUUID();sessionStorage.setItem(k,s);return s;} catch(e){return crypto.randomUUID();} } function utm(){ try{var p=new URLSearchParams(location.search),o={}; ["utm_source","utm_medium","utm_campaign","utm_term","utm_content"] .forEach(function(k){var v=p.get(k);if(v)o[k]=v;}); return o;} catch(e){return {};} } function send(){ fetch(u,{method:"POST",headers:{"Content-Type":"application/json"}, keepalive:true, body:JSON.stringify(Object.assign( {tracking_id:t,pathname:location.pathname, referrer:document.referrer||undefined,session_id:sid()}, utm()))}); } send(); window.addEventListener("popstate",send); })();`, ], ], }); ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. Each entry in `head` is a tuple of `[tagName, attributes, innerHTML]`. The empty `{}` as the second element means no additional HTML attributes on the ` ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to Starlight Source: https://www.antlytics.com/docs/starlight Install the Antlytics snippet in your Starlight (Astro) docs site via the head config. # Add Antlytics to Starlight ## Prerequisites - An Antlytics account ([sign up free](https://www.antlytics.com/signup)) - Your tracking ID from **Settings → Tracking Snippet** in your Antlytics dashboard ## Install the snippet Starlight is built on Astro. Add the snippet via the `head` option in your Starlight integration config in `astro.config.mjs`: ```js // astro.config.mjs import { defineConfig } from "astro/config"; import starlight from "@astrojs/starlight"; export default defineConfig({ integrations: [ starlight({ title: "My Docs", // ... your existing Starlight config ... head: [ { tag: "script", content: `(function(){ var t="YOUR-SITE-ID", u="https://www.antlytics.com/api/ingest/pageview", k="ant_sid"; function sid(){ try{var s=sessionStorage.getItem(k);if(s)return s; s=crypto.randomUUID();sessionStorage.setItem(k,s);return s;} catch(e){return crypto.randomUUID();} } function utm(){ try{var p=new URLSearchParams(location.search),o={}; ["utm_source","utm_medium","utm_campaign","utm_term","utm_content"] .forEach(function(k){var v=p.get(k);if(v)o[k]=v;}); return o;} catch(e){return {};} } function send(){ fetch(u,{method:"POST",headers:{"Content-Type":"application/json"}, keepalive:true, body:JSON.stringify(Object.assign( {tracking_id:t,pathname:location.pathname, referrer:document.referrer||undefined,session_id:sid()}, utm()))}); } send(); window.addEventListener("popstate",send); })();`, }, ], }), ], }); ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. This injects the script into every Starlight page, including the sidebar layout. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to MkDocs Source: https://www.antlytics.com/docs/mkdocs Install the Antlytics snippet in your MkDocs site via a custom theme override. # Add Antlytics to MkDocs ## Prerequisites - An Antlytics account ([sign up free](https://www.antlytics.com/signup)) - Your tracking ID from **Settings → Tracking Snippet** in your Antlytics dashboard ## Install the snippet MkDocs Material and most other MkDocs themes support custom template overrides. ### Step 1 — Enable the overrides directory In `mkdocs.yml`, add a `custom_dir` under `theme`: ```yaml # mkdocs.yml theme: name: material # or your active theme custom_dir: overrides ``` ### Step 2 — Create the override template Create `overrides/main.html` and extend the base template to inject the snippet: ```html {% extends "base.html" %} {% block scripts %} {{ super() }} {% endblock %} ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. `{{ super() }}` preserves all existing scripts from the base theme. The Antlytics snippet is appended after them. For themes other than Material, check the theme's documentation for the correct block name and whether `custom_dir` is supported. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to Weebly Source: https://www.antlytics.com/docs/weebly Install the Antlytics snippet on your Weebly site via the SEO settings. # Add Antlytics to Weebly ## Prerequisites - An Antlytics account ([sign up free](https://www.antlytics.com/signup)) - Your tracking ID from **Settings → Tracking Snippet** in your Antlytics dashboard ## Install the snippet 1. In your Weebly editor, go to **Settings → SEO**. 2. Scroll to **Header Code**. 3. Paste the snippet into the field. 4. Click **Save**, then publish your site. ```html ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to Duda Source: https://www.antlytics.com/docs/duda Install the Antlytics snippet on your Duda site via Site Settings. # Add Antlytics to Duda ## Prerequisites - An Antlytics account ([sign up free](https://www.antlytics.com/signup)) - Your tracking ID from **Settings → Tracking Snippet** in your Antlytics dashboard ## Install the snippet 1. In the Duda editor, open **Site Settings**. 2. Go to **Head HTML**. 3. Paste the snippet into the head HTML field. 4. Save and republish your site. ```html ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to Hexo Source: https://www.antlytics.com/docs/hexo Install the Antlytics snippet in your Hexo theme's head partial for full-site tracking. # Add Antlytics to Hexo ## Prerequisites - An Antlytics account ([sign up free](https://www.antlytics.com/signup)) - Your tracking ID from **Settings → Tracking Snippet** in your Antlytics dashboard ## Install the snippet Locate your active theme's head partial. For the default Landscape theme this is `themes/landscape/layout/_partial/head.ejs`. Other themes use a similar path. Paste the snippet just before the closing `` tag in that file: ```html ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. ### Using a custom theme or injecting without editing theme files If you prefer not to modify theme files directly, Hexo supports **injectors** via `scripts/inject.js` in your project root: ```js // scripts/inject.js hexo.extend.injector.register("head_end", function () { return ``; }); ``` This approach survives theme updates. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to Tilda Source: https://www.antlytics.com/docs/tilda Install the Antlytics snippet on your Tilda site via Site Settings. # Add Antlytics to Tilda ## Prerequisites - An Antlytics account ([sign up free](https://www.antlytics.com/signup)) - Your tracking ID from **Settings → Tracking Snippet** in your Antlytics dashboard ## Install the snippet 1. In the Tilda project editor, go to **Site Settings → More → Custom Code**. 2. Paste the snippet into the **Head** field. 3. Save and re-export your site pages for the change to apply. ```html ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to Zola Source: https://www.antlytics.com/docs/zola Install the Antlytics snippet in your Zola base template for full-site tracking. # Add Antlytics to Zola ## Prerequisites - An Antlytics account ([sign up free](https://www.antlytics.com/signup)) - Your tracking ID from **Settings → Tracking Snippet** in your Antlytics dashboard ## Install the snippet Open your base template — typically `templates/base.html` — and paste the snippet inside the `` section. If your template uses a `{% block head %}` block, add it there: ```html {% block title %}{{ config.title }}{% endblock %} {% block head %}{% endblock %} {% block content %}{% endblock %} ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to Bridgetown Source: https://www.antlytics.com/docs/bridgetown Install the Antlytics snippet in your Bridgetown default layout for full-site tracking. # Add Antlytics to Bridgetown ## Prerequisites - An Antlytics account ([sign up free](https://www.antlytics.com/signup)) - Your tracking ID from **Settings → Tracking Snippet** in your Antlytics dashboard ## Install the snippet Open your default layout — typically `src/_layouts/default.html` (or `.erb` / `.liquid`) — and paste the snippet inside ``: ```html {{ resource.data.title }} {{ liquid_render "shared/head" }} {{ content }} ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. If you use an ERB layout, the snippet goes in the same position — the ` ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to Pelican Source: https://www.antlytics.com/docs/pelican Install the Antlytics snippet in your Pelican theme base template for full-site tracking. # Add Antlytics to Pelican ## Prerequisites - An Antlytics account ([sign up free](https://www.antlytics.com/signup)) - Your tracking ID from **Settings → Tracking Snippet** in your Antlytics dashboard ## Install the snippet Open your active theme's base template — typically `themes/{your-theme}/templates/base.html` — and paste the snippet inside the `` section: ```html {% block title %}{{ SITENAME }}{% endblock %} {% block head %}{% endblock %} ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. If you are using the Simple or Notmyidea default theme, create a custom theme that extends it rather than editing the installed theme files directly. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to Typedream Source: https://www.antlytics.com/docs/typedream Install the Antlytics snippet on your Typedream site via Custom Code settings. # Add Antlytics to Typedream ## Prerequisites - An Antlytics account ([sign up free](https://www.antlytics.com/signup)) - Your tracking ID from **Settings → Tracking Snippet** in your Antlytics dashboard ## Install the snippet 1. In the Typedream editor, go to **Settings → Custom Code**. 2. Paste the snippet into the **Head** field. 3. Save your settings and republish. ```html ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to Softr Source: https://www.antlytics.com/docs/softr Install the Antlytics snippet on your Softr app via Custom Code settings. # Add Antlytics to Softr ## Prerequisites - An Antlytics account ([sign up free](https://www.antlytics.com/signup)) - Your tracking ID from **Settings → Tracking Snippet** in your Antlytics dashboard ## Install the snippet 1. In your Softr dashboard, go to **Settings → Custom Code**. 2. Paste the snippet into the **Head** section. 3. Save and publish your app. The snippet runs on every page of your Softr application. ```html ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to Vue / Vite Source: https://www.antlytics.com/docs/vue-vite Install the Antlytics snippet in the root index.html of your Vue or Vite project. # Add Antlytics to Vue / Vite ## Prerequisites - An Antlytics account ([sign up free](https://www.antlytics.com/signup)) - Your tracking ID from **Settings → Tracking Snippet** in your Antlytics dashboard ## Install the snippet Open `index.html` in your project root and paste the snippet inside ``: ```html ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. For a standard Vite project the file is at the project root. For a Vite + Vue app created with `npm create vue@latest` it is also at the root. The snippet's built-in `popstate` listener captures Vue Router navigation automatically — no additional configuration is needed. ### Nuxt 3 If you are using Nuxt 3 (Vue meta-framework), follow the [Nuxt guide](/docs/nuxt) instead. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to Angular Source: https://www.antlytics.com/docs/angular Install the Antlytics snippet in src/index.html for full Angular app tracking. # Add Antlytics to Angular ## Prerequisites - An Antlytics account ([sign up free](https://www.antlytics.com/signup)) - Your tracking ID from **Settings → Tracking Snippet** in your Antlytics dashboard ## Install the snippet Open `src/index.html` and paste the snippet inside ``: ```html ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. This file is the single HTML entry point for your Angular application. The snippet loads once and the built-in `popstate` listener tracks Angular Router navigation without any additional setup. ### Angular Universal (SSR) If you use Angular Universal for server-side rendering, the snippet in `src/index.html` is included in the server-rendered HTML. The tracker fires on the client after hydration, which is the correct behaviour. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to Unicorn Platform Source: https://www.antlytics.com/docs/unicorn-platform Install the Antlytics snippet on your Unicorn Platform site via Custom Code. # Add Antlytics to Unicorn Platform ## Prerequisites - An Antlytics account ([sign up free](https://www.antlytics.com/signup)) - Your tracking ID from **Settings → Tracking Snippet** in your Antlytics dashboard ## Install the snippet 1. In the Unicorn Platform editor, open **Settings → Custom Code**. 2. Paste the snippet into the **Head** field. 3. Save and publish your site. ```html ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to Dorik Source: https://www.antlytics.com/docs/dorik Install the Antlytics snippet on your Dorik site via Site Settings. # Add Antlytics to Dorik ## Prerequisites - An Antlytics account ([sign up free](https://www.antlytics.com/signup)) - Your tracking ID from **Settings → Tracking Snippet** in your Antlytics dashboard ## Install the snippet 1. In the Dorik editor, go to **Site Settings → Custom Code**. 2. Paste the snippet into the **Head** field. 3. Save and publish your site. ```html ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to Ember Source: https://www.antlytics.com/docs/ember Install the Antlytics snippet in app/index.html for full Ember app tracking. # Add Antlytics to Ember ## Prerequisites - An Antlytics account ([sign up free](https://www.antlytics.com/signup)) - Your tracking ID from **Settings → Tracking Snippet** in your Antlytics dashboard ## Install the snippet Open `app/index.html` and paste the snippet inside ``: ```html ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. `app/index.html` is the single entry point for your Ember application. The snippet loads on every page and the built-in `popstate` listener tracks Ember Router transitions. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to Google Tag Manager Source: https://www.antlytics.com/docs/google-tag-manager Install the Antlytics snippet via a Google Tag Manager custom HTML tag. # Add Antlytics to Google Tag Manager ## Prerequisites - An Antlytics account ([sign up free](https://www.antlytics.com/signup)) - Your tracking ID from **Settings → Tracking Snippet** in your Antlytics dashboard ## Install the snippet 1. In your GTM workspace, click **Tags → New**. 2. Set the **Tag type** to **Custom HTML**. 3. Paste the snippet into the HTML field. 4. Under **Triggering**, choose **All Pages** (or the trigger you prefer). 5. Save the tag and **Submit** your container to publish. > **Tip:** Direct snippet installation (without GTM) reduces complexity and avoids the extra round-trip GTM introduces. GTM is a good option if you are already using it to manage other tags and prefer a single deployment workflow. ```html ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to Laravel Source: https://www.antlytics.com/docs/laravel Install the Antlytics snippet in your Laravel Blade layout before . # Add Antlytics to Laravel ## Prerequisites - An Antlytics account ([sign up free](https://www.antlytics.com/signup)) - Your tracking ID from **Settings → Tracking Snippet** in your Antlytics dashboard ## Install the snippet Open your primary Blade layout — typically `resources/views/layouts/app.blade.php` — and paste the snippet just before the closing `` tag: ```blade {{-- resources/views/layouts/app.blade.php --}} {{ config('app.name', 'Laravel') }} @vite(['resources/css/app.css', 'resources/js/app.js']) @yield('content') ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. If your project uses a different layout name or Livewire, add the snippet to whichever Blade file wraps every user-facing page. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to Django Source: https://www.antlytics.com/docs/django Install the Antlytics snippet in your Django base template for full-site tracking. # Add Antlytics to Django ## Prerequisites - An Antlytics account ([sign up free](https://www.antlytics.com/signup)) - Your tracking ID from **Settings → Tracking Snippet** in your Antlytics dashboard ## Install the snippet Open your base template — typically `templates/base.html` — and paste the snippet inside ``. Place it outside any `{% block %}` so it is not accidentally overridden by child templates: ```html {% block title %}My Site{% endblock %} {% block head %}{% endblock %} {% block content %}{% endblock %} ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. Make sure your `TEMPLATES` setting in `settings.py` points to the directory containing `base.html`. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to Ruby on Rails Source: https://www.antlytics.com/docs/rails Install the Antlytics snippet in your Rails application layout before . # Add Antlytics to Ruby on Rails ## Prerequisites - An Antlytics account ([sign up free](https://www.antlytics.com/signup)) - Your tracking ID from **Settings → Tracking Snippet** in your Antlytics dashboard ## Install the snippet Open `app/views/layouts/application.html.erb` and paste the snippet just before the closing `` tag: ```erb <%# app/views/layouts/application.html.erb %> <%= content_for?(:title) ? yield(:title) : "My App" %> <%= csrf_meta_tags %> <%= csp_meta_tag %> <%= stylesheet_link_tag "application", "data-turbo-track": "reload" %> <%= javascript_importmap_tags %> <%= yield %> ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. ### Hotwire / Turbo If your app uses Hotwire Turbo Drive, Turbo replaces page content without full reloads. The snippet's `popstate` listener fires on Turbo navigations, so pageviews are captured correctly. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to Flask Source: https://www.antlytics.com/docs/flask Install the Antlytics snippet in your Flask base Jinja2 template for full-site tracking. # Add Antlytics to Flask ## Prerequisites - An Antlytics account ([sign up free](https://www.antlytics.com/signup)) - Your tracking ID from **Settings → Tracking Snippet** in your Antlytics dashboard ## Install the snippet Open your base Jinja2 template — typically `templates/base.html` — and paste the snippet inside ``: ```html {% block title %}My App{% endblock %} {% block head %}{% endblock %} {% block content %}{% endblock %} ``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. Child templates that `{% extends "base.html" %}` will automatically include the snippet on every rendered page. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Add Antlytics to Spring Boot Source: https://www.antlytics.com/docs/spring-boot Install the Antlytics snippet in your Spring Boot Thymeleaf layout template. # Add Antlytics to Spring Boot This guide covers Spring Boot applications using **Thymeleaf** templates. ## Prerequisites - An Antlytics account ([sign up free](https://www.antlytics.com/signup)) - Your tracking ID from **Settings → Tracking Snippet** in your Antlytics dashboard ## Install the snippet Open your layout template — typically `src/main/resources/templates/layout.html` (or `fragments/layout.html` if you use Thymeleaf layout dialect) — and paste the snippet inside ``: ```html My App
``` > **Note:** Replace `YOUR-SITE-ID` with the tracking ID from your Antlytics dashboard. `th:inline="none"` tells Thymeleaf not to process the JavaScript inside the ` ``` Then include it in your layouts: ``. ## Verify installation 1. Visit your site in a browser. 2. Open your Antlytics dashboard → **Overview**. 3. Your visit should appear within a few seconds. If data does not appear after a few minutes, check the [troubleshooting guide](/docs/troubleshooting). ## Optional: First-party proxy To avoid ad blockers, set up a [first-party proxy](/docs/first-party-proxy) on your own domain. ## Need help? Email [support@antlytics.com](mailto:support@antlytics.com) with your site ID and page URL. --- # Introduction Source: https://www.antlytics.com/docs Privacy-friendly analytics for developers who build with AI — install in minutes, ask in Cursor or Claude, clear limits with no lockouts. # Documentation Antlytics is privacy-friendly web analytics for developers who build with AI. Track pageviews and sessions across all your sites — no cookies, soft fair-use limits, **no dashboard lockouts**. Install with a snippet, SDK, or `npx @antlytics/init`, then ask Cursor or Claude via MCP when you want the why. ## Start here - [Quick install (CLI)](/docs/quick-install) — `npx @antlytics/init`, framework detect - [MCP server](/docs/mcp) — connect Cursor, Claude, Windsurf; query stats with numbers attached - [AI coding tools](/docs/ai-coding-tools) — CLI + MCP + rules files workflow - [Usage & fair use](/docs/usage-and-fair-use) — pageview allowances, email alerts, no lockout - [Privacy behaviour](/docs/privacy-behaviour) — no cookies, IP handling, session model ## Tracking & goals - [Quick start](/docs/quick-start) — vanilla script tag - [Next.js App Router](/docs/nextjs-app-router) — root layout pattern - [First-party proxy](/docs/first-party-proxy) — optional `@antlytics/analytics` proxy - [Ingest API reference](/docs/ingest-api) — `POST /api/ingest/pageview` fields - [Conversion goals](/docs/conversion-goals) — pathname rules and examples - [Campaign tracking (UTM)](/docs/utm-campaigns) - [Dashboard overview](/docs/dashboard-overview) — what you see after install ## API & migrations - [REST API reference](/docs/api-reference) — OpenAPI-backed `/api/v1` - [Migrating from Google Analytics](/docs/migrating-from-google-analytics) - [Migrating from Plausible](/docs/migrating-from-plausible) - [Migrating from Umami](/docs/migrating-from-umami) > **Self-tracking the Antlytics marketing site:** internal analytics may use an optional environment variable set only on **your** deployment. Customer properties use the per-site tracking ID from **Settings → Tracking Snippet** — not that variable. --- # Blog index - [Soft Fair-Use vs Analytics Dashboard Lockouts](https://www.antlytics.com/blog/analytics-lockouts-vs-fair-use): What happens when you exceed your pageview plan? Soft fair-use with email alerts and no dashboard lockout — versus tools that gate your data until you upgrade. - [Ask Cursor Why Traffic Moved — Numbers Behind the Answer](https://www.antlytics.com/blog/ask-cursor-why-traffic-moved): Connect Antlytics MCP to Cursor or Claude, ask why traffic dropped, and get answers with real KPIs attached — not dashboard homework. - [Best Web Analytics Tools in 2026: How to Choose](https://www.antlytics.com/blog/best-web-analytics-tools-2026): Buyer’s guide to web analytics tools in 2026 — GA4, privacy-friendly options, multi-site pricing, and AI/MCP install for developers who build with Cursor or Claude. - [Google Analytics Alternatives for Developers in 2026](https://www.antlytics.com/blog/google-analytics-alternatives-for-developers-2026): How developers should pick a GA4 alternative — SDKs, multi-site pricing, self-host vs SaaS, and MCP for Cursor/Claude — analytics for devs who build with AI. - [BYOK AI Analytics: Why You Should Bring Your Own Key for Page Insights](https://www.antlytics.com/blog/byok-ai-page-insights): AI-generated page insights are useful; AI lock-in and token markups are not. Here's how bring-your-own-key (BYOK) AI analytics works and why it's the right architecture. - [Custom Events and Funnels for Indie Developers: A Practical Setup Guide](https://www.antlytics.com/blog/custom-events-funnels-indie-developers): How to track the actions that matter — signups, checkouts, feature usage — with custom events and funnels, without adding a heavyweight product-analytics suite. - [Fair Use vs Metered Billing: How Analytics Pricing Should Handle Traffic Spikes](https://www.antlytics.com/blog/fair-use-vs-metered-analytics-pricing): Your post hits the front page, traffic goes 20x, and your analytics tool either locks you out or sends a surprise bill. There's a third option: fair-use limits with no lockout and no metered overages. - [50 Posts on Analytics: What We Learned](https://www.antlytics.com/blog/what-we-learned-50-blog-posts): A retrospective on 50 blog posts about privacy-first analytics — the themes that came up most, the questions readers ask most often, and what surprised us along the way. - [Privacy Analytics for E-Commerce Sites](https://www.antlytics.com/blog/privacy-analytics-for-ecommerce): Can privacy-first analytics work for e-commerce? You won't get revenue attribution, but you'll get traffic insights and conversion goal tracking that matter for most small shops. - [Building Custom Dashboards with the Antlytics API](https://www.antlytics.com/blog/antlytics-api-custom-dashboards): Your data, your dashboard. Use the Antlytics public API to build custom views, automate reports, and pipe analytics into your own tools. - [Real-Time Analytics: What It Shows and What It Doesn't](https://www.antlytics.com/blog/understanding-real-time-analytics): Real-time analytics tells you who's on your site right now. Here's what it can and can't show in a privacy-first context. - [Analytics for Nuxt: Setup Guide](https://www.antlytics.com/blog/nuxt-analytics): How to add privacy-friendly analytics to a Nuxt project. Nuxt's plugin system makes analytics setup clean. - [AI Coding Tools 2026: Where Analytics Fits In](https://www.antlytics.com/blog/ai-coding-tool-ecosystem): Cursor, Claude Code, Bolt, Lovable — the 2026 AI coding landscape, and where analytics slots into the workflow. - [Open-Source Project Analytics: What to Track](https://www.antlytics.com/blog/analytics-for-open-source-projects): Your docs site is the front door of your open-source project. Here's what to measure and why. - [SPA Analytics: Tracking Page Views in Single-Page Apps](https://www.antlytics.com/blog/spa-analytics-single-page-apps): SPAs don't trigger full page loads. Here's how analytics handles that and how to set it up correctly. - [The True Cost of Free Google Analytics](https://www.antlytics.com/blog/true-cost-free-analytics): What does 'free' Google Analytics actually cost? GA is free in dollars but expensive in privacy debt, complexity, and consent overhead. - [Exporting Analytics Data as CSV](https://www.antlytics.com/blog/how-to-export-analytics-csv): How to get your analytics data out of the Antlytics dashboard and into a spreadsheet. - [Web Analytics for Non-Technical Founders](https://www.antlytics.com/blog/non-technical-founder-analytics): You don't need to code to read your analytics. Here's what the numbers mean and what to do with them. - [What Your AI Coding Tool Gets Wrong About Analytics](https://www.antlytics.com/blog/ai-coding-tool-analytics-mistakes): Ask Cursor or Claude Code to 'add analytics' and you'll usually get Google Analytics, a deprecated library, or nothing at all. Here's why — and what to do instead. - [Analytics for AI Coding Tools in 2026](https://www.antlytics.com/blog/analytics-for-ai-coding-tools-2026): Analytics for developers who build with AI — connect Cursor, Claude Code, and Windsurf via MCP. Install once, ask why traffic moved, get numbers attached. - [Why Setting Up Analytics Is Still Broken in 2026](https://www.antlytics.com/blog/analytics-setup-broken-2026): Analytics tools have had 15 years to make setup easy. They haven't. Here's what keeps going wrong — and why the problem is structural, not cosmetic. - [Privacy-First Analytics Tools in 2026: An Honest Comparison](https://www.antlytics.com/blog/privacy-analytics-tools-2026): Compare Plausible, Fathom, Umami, Simple Analytics, and Antlytics — privacy-friendly analytics, multi-site pricing, no lockouts, and MCP for AI coding tools. - [Analytics for SvelteKit: A Quick Setup Guide](https://www.antlytics.com/blog/sveltekit-analytics): How to add privacy-friendly analytics to a SvelteKit project. SvelteKit's routing needs a specific approach. - [Bot Traffic and Referrer Spam: Cleaning Your Analytics](https://www.antlytics.com/blog/bot-traffic-referrer-spam): Not every pageview is a real person. How to spot and deal with bot traffic and referrer spam in your analytics data. - [Newsletter Landing Page Analytics: What to Track](https://www.antlytics.com/blog/analytics-newsletter-landing-pages): How to track newsletter signup page performance. Your landing page is your funnel — track it properly. - [Analytics Date Ranges: Reading Trends Correctly](https://www.antlytics.com/blog/date-ranges-and-trends): Your analytics data tells different stories depending on the time window you choose. Here's how to pick the right date range and spot real trends vs noise. - [Building in Public: Share Real Analytics, Not Vanity Metrics](https://www.antlytics.com/blog/building-in-public-with-analytics): Show your audience real traffic numbers. How indie developers use analytics as a build-in-public tool. - [When Google Analytics Is Still the Right Choice](https://www.antlytics.com/blog/when-google-analytics-is-right-choice): Are there good reasons to stay on GA4? Honest answer: yes. Here's when Google Analytics is actually the better tool. - [Analytics for Webflow: Step-by-Step Setup](https://www.antlytics.com/blog/analytics-for-webflow): No code required — just Project Settings. Here's how to add privacy-friendly analytics to a Webflow site. - [Why Antlytics Moved from AUD to USD Pricing](https://www.antlytics.com/blog/aud-pricing-saas): Antlytics originally billed in Australian dollars. Here's why we moved to USD pricing, and what it means for Australian users. - [Product Launch Analytics: What to Track and When](https://www.antlytics.com/blog/analytics-during-product-launch): Your launch day analytics tell you more than any other day. Here's what to watch, when to watch it, and what to do with what you see. - [Privacy Analytics: Scripts vs SDKs vs Proxies vs APIs](https://www.antlytics.com/blog/privacy-analytics-toolbox): Four integration methods, each with different trade-offs. Here's how to choose the right one for your stack. - [Independent Analytics vs Bundled Hosting Analytics](https://www.antlytics.com/blog/independent-analytics-vs-bundled-hosting): Your hosting platform offers analytics. But should you use them? When independent analytics gives you more control. - [WordPress Analytics Without a Plugin](https://www.antlytics.com/blog/analytics-for-wordpress-without-plugins): A script tag in your theme is simpler than a plugin. Here's how to add privacy-friendly analytics to WordPress without installing a plugin. - [Blog Analytics: What Your Data Says About Your Writing](https://www.antlytics.com/blog/blog-analytics-metrics-writing): Your analytics dashboard tells you what to write next. Here's how to use traffic data to improve your blog content. - [Analytics for Hackathon Projects: Ship and Track](https://www.antlytics.com/blog/analytics-for-hackathon-projects): Ship it, track it, demo it with real numbers. Why analytics belong in every hackathon project. - [Switching From Per-Site to Flat-Rate Analytics](https://www.antlytics.com/blog/switching-to-flat-rate-analytics): Per-site pricing adds up. Here's what changes when you switch from a per-site plan to flat-rate multi-site analytics. - [UTM Campaign Tracking: A Complete Beginner's Guide](https://www.antlytics.com/blog/utm-campaign-tracking-guide): Understand where your traffic comes from. UTM parameters explained with practical examples. - [What Data Do Privacy Analytics Tools Actually Store?](https://www.antlytics.com/blog/what-data-privacy-analytics-stores): Full transparency on what goes into the database and what doesn't when you use privacy-first analytics. - [Adding Analytics to Your Astro Site](https://www.antlytics.com/blog/astro-analytics-setup): Astro's island architecture needs a specific approach. Here's how to add privacy-friendly analytics to an Astro site. - [How to Tell Your AI Coding Tool to Add Analytics](https://www.antlytics.com/blog/prompt-ai-coding-tool-add-analytics): Copy-paste prompts for Cursor, Claude Code, and Bolt that add analytics to your project correctly. - [How to Read Your Analytics Dashboard (Plain Guide)](https://www.antlytics.com/blog/how-to-read-analytics-dashboard): A plain-language guide to every number on your analytics dashboard screen — for people who don't have a data background. - [Side Project Analytics: One Dashboard, Many Sites](https://www.antlytics.com/blog/side-project-analytics-one-dashboard): You don't need 10 accounts. You need one dashboard with 10 sites. Here's how to manage analytics across a side project portfolio. - [Privacy-Friendly Analytics for Australian Businesses](https://www.antlytics.com/blog/privacy-analytics-for-australian-businesses): Australian Privacy Principles, transparent pricing, and a cookieless approach. What Australian businesses should know about privacy-friendly analytics. - [Referrer Data Explained: Privacy-Friendly Analytics](https://www.antlytics.com/blog/understanding-referrer-data): How does referrer tracking work without cookies? Referrers tell you where visitors come from — here's how that works in a cookieless world. - [Conversion Goals Without Cookies: A Practical Guide](https://www.antlytics.com/blog/conversion-goals-without-cookies): Track signups, downloads, and purchases without cookies. Path-based goals work with privacy-friendly analytics. - [Adding Analytics to AI-Generated Code: Common Pitfalls](https://www.antlytics.com/blog/instrumenting-ai-generated-code): AI tools generate functional code but skip observability. Here's what to add after your AI coding session. - [Analytics for Multiple Sites Without Overpaying](https://www.antlytics.com/blog/analytics-for-multiple-sites-without-overpaying): Managing analytics across multiple sites shouldn't mean multiplying your bill. Here's how to keep costs predictable. - [Analytics Script Size: Why Lighter Is Better](https://www.antlytics.com/blog/lightweight-analytics-scripts-size-matters): How much does an analytics script slow down my site? Lightweight analytics scripts are designed to have minimal impact on page performance. Here's what to look for. - [Free Analytics Tools: What You Actually Get](https://www.antlytics.com/blog/free-tier-analytics-what-you-get): An honest overview of free analytics tiers across tools — what you get, what you give up, and when to upgrade. - [First-Party Analytics Proxy: Why and How to Set It Up](https://www.antlytics.com/blog/first-party-proxy-explained): Ad blockers hide your analytics. A first-party proxy routes data through your domain so you see all visitors. - [What Is MCP? A Developer's Guide to the Model Context Protocol](https://www.antlytics.com/blog/what-is-mcp-developer-guide): MCP makes every AI tool speak the same language. Antlytics ships a live MCP server for Cursor and Claude — here's what the protocol is and how to use it. - [Migrating from Google Analytics: A Step-by-Step Guide](https://www.antlytics.com/blog/migrating-from-google-analytics-step-by-step): Switch from GA4 to privacy-friendly analytics in 15 minutes. What to expect, what you keep, and what changes. - [Portfolio Site Analytics: What Actually Matters](https://www.antlytics.com/blog/analytics-for-your-portfolio-site): Your portfolio is a product — treat it like one. Here's what analytics data actually tells you about your developer portfolio. - [Do You Need a Cookie Banner with Privacy-Friendly Analytics?](https://www.antlytics.com/blog/do-you-need-cookie-banner-privacy-analytics): Cookieless analytics doesn't use cookies — but does that mean you can ditch the banner? Here's what actually changes. - [How to Set Up Antlytics on Next.js (Step by Step)](https://www.antlytics.com/blog/nextjs-analytics-setup-guide): Add privacy-friendly analytics to your Next.js site in under five minutes. SDK install, first-party proxy, and conversion goals — all explained. - [Add Analytics to Your Vibe-Coded App in 60 Seconds](https://www.antlytics.com/blog/analytics-for-vibe-coded-apps): You built your app with AI. Now add analytics with one command — no config files, no tracking plans, no momentum break. - [Per-Site Analytics Pricing: Why It Hurts Multi-Project Devs](https://www.antlytics.com/blog/per-site-analytics-pricing-problem): Running 5 sites on per-site analytics plans gets expensive fast. Here's how flat-rate multi-site pricing changes the economics. - [What Analytics Data Do You Actually Need?](https://www.antlytics.com/blog/what-analytics-data-do-you-actually-need): You don't need 200 metrics to understand your website. Here are the five that matter for small sites and personal projects. - [How Cookieless Analytics Counts Visitors](https://www.antlytics.com/blog/how-cookieless-analytics-counts-visitors): How do privacy tools count unique visitors without cookies? The daily-salt hash method explained in plain language. - [Google Analytics Alternatives in 2026: What's Actually Worth It](https://www.antlytics.com/blog/google-analytics-alternatives-2026): Honest GA4 alternatives in 2026 — Plausible, Fathom, Umami, Antlytics. Privacy, multi-site pricing, no lockouts, and MCP for developers who build with AI. - [What Is Privacy-First Analytics? A Plain-Language Guide](https://www.antlytics.com/blog/what-is-privacy-first-analytics): Privacy-first analytics collects the data you need without cookies or personal information. Here's what that means in practice. - [Analytics for Indie Developers: What You Actually Need](https://www.antlytics.com/blog/analytics-for-indie-developers): Most analytics tools are built for marketing teams. Here's what indie developers, bloggers, and portfolio site owners actually need from their analytics. - [Analytics for AI-Built Sites: A Practical Guide](https://www.antlytics.com/blog/analytics-for-vibe-coders): You built your site with Cursor, Claude Code, or Bolt. Now you need to know if anyone's visiting. Here's how to add analytics without breaking your vibe-coded app. - [Choosing the Right Analytics Tool: An Honest Comparison](https://www.antlytics.com/blog/analytics-tool-comparison-guide): Factual comparison of privacy-friendly analytics tools — multi-site pricing, MCP for AI coding tools, fair-use vs lockouts, and honest trade-offs. - [Antlytics Implementation Guides: Setup, Proxy, Goals & More](https://www.antlytics.com/blog/antlytics-implementation-guides): Step-by-step guides for setting up Antlytics — from basic script installation to first-party proxies, conversion goals, and UTM campaign tracking. - [Privacy-First Web Analytics: The Complete Guide](https://www.antlytics.com/blog/privacy-first-web-analytics-guide): A practical guide to privacy-friendly analytics — what it means, how cookieless tracking works, and how to choose a tool that respects your visitors.