Overview
Every way to send data to MetrikStack, from the browser script and server-side SDKs to CDN logs and log drains, and what each source sees and misses.
A site can run any combination of these sources, and none depends on another. The browser script on its own is a complete setup; each source you add counts traffic the others miss. See How merging works for what happens when more than one source sees the same page load.
| Source | Sees | Misses |
|---|---|---|
| Browser script | Everything a real browser executes | Visitors with ad blockers, most bots, clients without JavaScript |
| Node SDK (not published yet) | Every HTML response your app server renders | Static or CDN-cached responses your app never handles |
| Laravel (not published yet) | Same as the Node SDK, for Laravel apps | Same |
| WordPress (on request) | Browser script, server-side pageviews, or both | Fully page-cached responses on the server side |
| Cloudflare Worker | Every response through the zone, including cache hits | Traffic that bypasses Cloudflare |
| Bunny | Every request through the Pull Zone, via Log Forwarding | In-app navigation in single-page apps |
| Vercel | Every request through Vercel's proxy, via a Log Drain | Traffic served by another CDN in front of Vercel |
| Netlify | Every request Netlify served, via a Log Drain | Traffic that bypasses Netlify |
| Access logs | Whatever your web server logs | Anything not logged (e.g. edge-cached responses on some CDNs) |
You create each source on a site in the dashboard, with a kind: script,
server, edge_cloudflare, edge_bunny or logs. Every source except the
browser script gets an ingest token, shown once when you create it and sent
as Authorization: Bearer <ingest_token> (to POST /v1/batch for the SDKs
and the Worker). The browser script uses the site's public site_id
instead.