Weight on every page view
The analytics script loads on every page of the site. At about 149 KB against about 1.1 KB, the difference is paid by every visitor on every navigation.
Role · CTO and engineering
GA4's script weighs around 149 KB, needs consent wiring through a banner and a tag manager, and marketing still asks engineering why the numbers do not match. Sealmetrics is one deferred script of about 1.1 KB that sets no cookies and writes nothing to the device, tracks single-page app routes out of the box, and exposes the same data through a REST API, an MCP server and a BigQuery connector on every plan.
One script tag · no device storage · SPA routes automatic · API, MCP and BigQuery on every plan · Dublin
Quick answer
Web analytics from an engineering point of view is a script on every page, a data flow to govern and an API the rest of the company will ask for. GA4 ships around 149 KB of JavaScript on the wire, sets cookies that a consent banner and tag manager must gate, and exports to BigQuery with daily limits on standard properties. Sealmetrics loads one deferred script of about 1.1 KB, 132 times lighter in the measurement of 27 August 2026. It writes no cookie or other device storage and keeps no IP address; a session marker lives in memory for about two hours. History API routers in React, Vue, Angular or Next.js are tracked without configuration. The data is available through a REST API with read-only tokens, a hosted MCP server and a BigQuery connector, all on every plan. It is a managed service in Dublin: there is no self-hosted version.
What engineering ends up owning
The questions below are the ones an engineering lead answers for any analytics vendor. The difference is how much of the answer lands on your team.
| What you own | With GA4, a tag manager and Consent Mode | With Sealmetrics | Where to verify |
|---|---|---|---|
| Script weight | About 149 KB of gtag.js on the wire, before the tag manager container | About 1.1 KB, deferred | Tracker measurement, 27 Aug 2026 |
| Consent plumbing | Tags gated by the banner; Consent Mode states to configure and keep in step | No cookie or device storage to gate for the analytics tag itself | Docs: what we track |
| Single-page apps | Page changes configured in GA4 or the tag manager | History API navigation tracked by default; manual mode with auto=0 and spa=0 | Docs: SPA support |
| Ad-blocker exposure | Loaded from Google's domains, which block lists include | Default t.sealmetrics.com, or a subdomain of your own domain | Docs: first-party tracker |
| Data access | BigQuery export with a daily event limit on standard properties | REST API, MCP server and BigQuery connector on every plan | Integrations pages |
| Retention | Setting per property | Fixed TTLs: event rows 1 day, hourly 90 days, daily and conversions 24 months | Docs: data location and retention |
The weight comparison is a dated measurement, re-run on 27 August 2026 and published with its method in we measured every analytics script. What the architecture stores, and why no identifier survives the session, is covered in security and the first-party data collection glossary entry.
What a heavy analytics stack costs
Engineering rarely chooses the analytics tool, but it carries it. Three costs show up in every team.
The analytics script loads on every page of the site. At about 149 KB against about 1.1 KB, the difference is paid by every visitor on every navigation.
Each new tag reopens the banner configuration, the tag manager triggers and the Consent Mode states. Keeping them in step is engineering work that ships no feature.
When marketing asks why analytics disagrees with the store, the answer often is visitors the tag never recorded. On a Shopify store measured side by side for 48 days, GA4 did not record 29% of visits — the case set out on complete data.
The implementation
The steps below cover a custom stack. Stores on Shopify, WooCommerce or Magento use the native integrations listed on platforms; install takes 5 to 30 minutes depending on the platform.
Place the tracker once in the head of every page, with defer. It fires the first pageview on load and writes no cookie, localStorage or sessionStorage entry.
To reduce ad-blocker loss, create the subdomain shown in the dashboard with an A record, email the team, and switch to the snippet served from your subdomain once they confirm. Do not run both snippets, or pageviews are counted twice.
Routers built on the History API are tracked automatically. Hash-based routers are not. For a content group per route, load the script with auto=0 and spa=0 and fire each pageview yourself.
Call sealmetrics.conv for purchases or leads with their value, and sealmetrics.micro for steps such as add to cart. Keep names, emails and other personal data out of properties.
Give analysts a read-only API token, connect AI assistants to the hosted MCP endpoint, and set up the BigQuery connector for the warehouse. Webhooks and audit logs are available from the Scale plan.
Code, as documented
Copied from docs.sealmetrics.com. Replace YOUR_ACCOUNT_ID with the site ID from the dashboard; the full reference is in the MCP reference and the tracker documentation.
Once, in the head of every page.
<script src="https://t.sealmetrics.com/t.js?id=YOUR_ACCOUNT_ID" defer></script>Both flags are needed to fire every pageview yourself with its content group.
<script src="https://t.sealmetrics.com/t.js?id=YOUR_ACCOUNT_ID&auto=0&spa=0" defer></script>
<script>
// fire each pageview yourself, with its content group
sealmetrics({ group: 'home' });
</script>Items are optional on the purchase and feed product reports by channel.
sealmetrics.micro('add_to_cart', {
product_id: 'SKU-123',
price: '89.99',
quantity: '1'
});
sealmetrics.conv('purchase', 149.99, {
currency: 'EUR',
items: [
{ product_name: 'Blue Running Shoes', price: 89.99, quantity: 1, category: 'footwear' }
]
});Hosted endpoint; the assistant authorises with the user's own Sealmetrics account.
claude mcp add --transport http sealmetrics https://mcp.sealmetrics.com/mcpWho touches it
Each role reaches the same data through the interface it already works with.
A vendor that adds little weight and little upkeep.
One deferred script, no device storage to govern, fixed retention and a managed service in Dublin.
Security overviewCorrect pageviews in a single-page app without router code.
History API tracking by default, manual mode with auto=0 and spa=0, content groups at load.
Platforms and stacksAnalytics data in the warehouse without a sampled export.
A BigQuery connector with a star schema, hourly or daily sync, included on every plan.
BigQuery connectorAssistants that answer from real data, not from a guess.
A hosted MCP endpoint with more than 40 read-only tools, authorised per user.
MCP referenceMeasured, with the method published
Two measurements engineering can check: a dated weight comparison of analytics scripts, re-run on 27 August 2026, and a 48-day side-by-side run on a Shopify store reconciled with its real orders.
What it does not do
These limits are architectural. Attribution is last click within each session.
Sealmetrics is a managed service. Analytics data is processed and stored in Dublin, Ireland; isolated processing is available on Enterprise.
Event-level rows are purged after 1 day. What you query and export are aggregates and conversions, kept for 24 months.
Routers based on /#/ paths are not detected automatically. Fire the pageviews yourself in manual mode.
After the DNS record, the Sealmetrics team completes the server side before you switch snippets.
Configuration changes happen in the dashboard, not through API tokens or the hosted MCP endpoint.
The REST API, MCP server and BigQuery connector are on every plan; webhooks and audit logs start on Scale.
Questions engineering asks
About 1.1 KB gzip on the wire and 1,991 bytes uncompressed for the full t.js, in the measurement of 27 August 2026. GA4's gtag.js measured about 149 KB on the wire the same day, 132 times heavier. The script loads with defer.
Yes. Any router built on the History API is tracked automatically: pushState, replaceState and back or forward navigation each fire a pageview, and duplicates of the same URL are skipped. Hash-based routers are not detected automatically; use manual mode with auto=0 and spa=0.
Yes. Create the subdomain shown in the dashboard with an A record, email the team to complete the server side, then replace the default snippet with the one served from your subdomain. Requests from your own domain are far less likely to be blocked by ad blockers than those to t.sealmetrics.com.
No. The tracker writes nothing to the device and does not fingerprint. A short-lived session marker, derived per site and kept in memory for about two hours, groups the hits of one visit; it is not stored in the browser and cannot recognise a returning visitor.
The REST API with read-only tokens, the hosted MCP server and the BigQuery connector are included on every plan, the free Agentic tier among them. Webhooks and audit logs are available from Scale, and isolated processing on Enterprise. Rate limits depend on the plan.
No. Sealmetrics runs as a managed service, with analytics data processed and stored in Dublin, Ireland. Enterprise plans add isolated processing.
Yes. The tracker can be added directly in the HTML or through Google Tag Manager, and it runs next to GA4 without changing its setup. Most teams run both over a full commercial cycle before deciding which one reports to the business.
Technical walkthrough
Thirty minutes on your own architecture: the script, single-page app routing, first-party loading, the API and the BigQuery schema.