Track pageviews, sessions, geography, devices, and referrers for a deployed project. Brimble’s built-in analytics work without a third-party tracker, you enable them in the dashboard, drop a snippet on your site, and traffic shows up.
Prerequisites
- A web-service or static-site project.
- A plan that includes web analytics. The free plan has limited or no access; paid plans surface the full dashboard.
Enable analytics
- Open the project.
- Click the Web analytics tab.
- Click Enable analytics. Brimble generates a website ID for the project.
- Brimble shows a tracking snippet. Copy it.
There are two snippet flavors:
- Client-side, a small
<script> you drop into your site’s HTML head. Works for any frontend, including static sites.
- Server-side, a server-rendered include for frameworks that mount the page on the server (Next.js server components, Remix loaders, Rails views, etc.).
Pick whichever fits your stack. Both report to the same dashboard.
Drop in the snippet
For most stacks, the simplest path is the client-side snippet. Paste it into your site’s <head>:
<script defer data-website-id="<your-website-id>" src="https://analytics.brimble.io/script.js"></script>
Deploy. The next page load reports back to Brimble.
For frameworks with their own analytics conventions:
- Next.js, add the snippet to
_app.tsx (Pages router) or app/layout.tsx (App router).
- Vite / React / Vue, add to
index.html.
- Astro / Hugo / static, add to your layout template.
- Rails / Django / Phoenix, add to your application layout.
What’s tracked
| Metric | Description |
|---|
| Pageviews | Each page load counts as one pageview. SPA navigations are tracked via the History API. |
| Sessions | A burst of activity from one visitor. A session ends after 30 minutes of inactivity. |
| Visitors | Unique pseudonymous IDs. Brimble doesn’t fingerprint or set persistent cookies, visitors are estimated. |
| Top pages | URLs sorted by pageview count. |
| Top referrers | Where visitors came from (other domains, social platforms, search engines). |
| Geography | Country and (where available) city, derived from IP. |
| Devices | Desktop, tablet, mobile, TV. |
| Browsers | Chrome, Safari, Firefox, etc. |
| Traffic heatmap | Visit volume by day-of-week and time-of-day. |
| Visitor map | World map heatmap of visitor origin. |
Personal data (full IP, exact location, individual identity) is not stored. Aggregations are designed to give you traffic intelligence without surveilling individuals.
Time range
The dashboard’s range picker covers:
- Last 7 days (default)
- Last 30 days
- Custom range
Each chart updates to the selected range.
Disable or remove the website
To stop tracking a project:
- Go to Web analytics.
- Click ⋯ → Disable.
Existing data stays in the dashboard until you click Delete website data, which is permanent.
Multiple sites in one project
Each Brimble project gets one website ID. If you serve multiple sites from one project (sub-paths or subdomains routed to different parts of the same service), pageviews are attributed to the host the request came in on, the dashboard groups them under “Top pages” with the full path.
Verification
After deploying with the snippet in place:
- Open your site in a browser.
- Reload a couple of times, click around.
- Wait 30–60 seconds.
- In the Brimble Web analytics tab, Pageviews should reflect your activity.
If it doesn’t, open your browser’s Network tab and check that requests to analytics.brimble.io are going through (no 404, no CORS error, no ad-blocker rule).
Custom events
The default snippet tracks pageviews. For event tracking (button clicks, form submits, conversions), call the SDK’s track() method:
window.brimble?.track("signup", { plan: "pro" });
Troubleshooting
Snippet loaded but no data. Open your browser’s Network tab and confirm requests to analytics.brimble.io are going through (no 404, no CORS error, no extension blocking the request). If those requests are firing and the dashboard is still empty, contact support with the website ID.
SPA route changes don’t count. The snippet listens for History API events (pushState, replaceState). If your router uses fragment-only navigation (#/route) or replaces the page DOM without pushing state, it won’t tick. Switch your router to History API mode, or call the SDK’s manual track method.
Numbers don’t match server-side request logs. Expected. Server logs include bots, prefetches, and direct API hits the analytics dashboard filters out. The two views answer different questions.
Next steps
- Logs, runtime logs and request logs are separate from web analytics.
- Custom domains, analytics work the same on default and custom domains.
Last modified on May 9, 2026