Served from your own domain
Keep collecting when the blocker is on. The snippet and the endpoint both sit on a subdomain of your site, so nothing calls a domain that appears on a blocklist and the SDK survives the strictest configurations.
Key takeaway
One event, collected once, does three jobs. It fills the gap in your analytics, it goes back to the ad platforms as a server-side conversion, and it is the row attribution runs on. Every tool downstream reads the same event, which is why the numbers stop disagreeing.
Collection
Ad blockers work from lists of known domains, and google-analytics.com and the platform pixels are on all of them. An SDK served from your own domain is not, which is most of the 30 to 40% of traffic GA4 never records.
Keep collecting when the blocker is on. The snippet and the endpoint both sit on a subdomain of your site, so nothing calls a domain that appears on a blocklist and the SDK survives the strictest configurations.
Count the visitor without storing anything personal. Sessions group by a hashed IP and user agent computed server-side, and the hash is ephemeral and cannot be reversed to a person.
Report complete traffic whatever your consent rate. Without consent collection runs anonymously with no client-side storage; with consent a first-party cookie makes the visitor persistent, and only the attribution depth changes.
Add it without your developer pushing back. Under 5KB compressed, async, no movement in Core Web Vitals, and one snippet in the head or the native app on Shopify.
Forwarding
A conversion the browser never reported is a conversion the platform's optimiser never learned from. TrustData sends the event you already collected server-side, with the deduplication key attached, so the platform counts it once and bids on it properly.
Define a conversion once and stop maintaining three integrations. It maps to Meta Conversions API, Google Enhanced Conversions and the TikTok Events API, or feeds the server-side GTM container you already run.
Feed the platform's optimiser without inflating your own numbers. Server-side events carry the key that matches them to the browser pixel, so the typical result is a 15 to 30% lift in match rate rather than in reported conversions.
Forward personal fields only for visitors who consented to marketing. Everyone else still counts in your own analytics, they simply leave without identifiers attached.
Record the sale even when the confirmation page never fires. Purchases can be read from Shopify webhooks or your backend, which is the case a browser pixel silently loses.

Ownership
First-party is a property claim, not a marketing word. The events you collect and the attribution tables built from them export to storage you control, in a format your warehouse already reads.
Take the raw rows into your own stack. Events and attribution tables export to your Google Cloud Storage or Amazon S3 bucket, ready for BigQuery, Looker Studio or whatever pipeline you already run.
Pick the format your destination wants. Parquet for columnar analytics, CSV when a spreadsheet is the endpoint, both on the schema the dashboard reads so an export is never a lossy copy.
Query a year-old cohort without asking anyone. Events are kept with no retention limit, and nothing gets aggregated away at a plan boundary.
The parts of the collection layer that stay one click away, so the story above does not have to carry them.
Track clicks, form submissions and purchases through one API, and attach a user ID to tie sessions together across devices and visits. Works with React, Vue, Next.js and Nuxt without a framework-specific build.
One snippet in the head, the same as installing a tag manager. Shopify has a native integration that needs no code at all. Custom events and server-side forwarding take about half an hour with the documentation open.
The same event stream feeds multi-touch attribution, the AI referrer detection behind AI visibility, and the anomaly checks Lumen runs. One collection layer, not one per product.
Collected once, it is forwarded to the ad platforms, recovers the sales the browser never reported, and meets whatever else you connect.
One integration point for Meta CAPI, Google Enhanced Conversions and the TikTok Events API, or a pipe into the server-side GTM container you already run.
Orders read from Shopify webhooks or your backend, so a sale is recorded even when the confirmation page never fires and the browser reported nothing.
Every connector, included on every plan with no per-tier cap. Ad platforms, analytics, back office, CRM, search consoles and tag manager.
FAQ
GA4 runs a client-side tag loaded from google-analytics.com, a domain that every ad blocker list carries and that Safari's tracking prevention treats as third-party. TrustData's SDK is served from a subdomain of your own site and posts to a collection endpoint on that same domain, so there is no known domain to match against. Measured capture is 92 to 98% of traffic, against 60 to 70% for a typical GA4 install. The missing 30 to 40% is not random either: it skews toward Safari, Firefox and desktop users running blockers.
Yes, and this is the part most tools get wrong. Without consent, TrustData runs in anonymous mode with no cookies and no persistent identifier. Sessions are grouped by a server-side hash of IP and user agent that is ephemeral and cannot be reversed to an individual, which is how privacy-first tools like Plausible and Fathom operate and why that mode needs no consent banner. With consent, a first-party cookie is set and the visitor becomes persistent, which is what multi-touch attribution needs. Your total traffic count is complete in both modes.
Because 100% would not be true and we are not going to print it. A visitor who blocks JavaScript entirely, a bot filtered out on purpose, or a browser that fails the request leaves no record on any system. The honest number is the range we measure across customer properties, and the useful comparison is against the 60 to 70% a GA4 tag records on the same sites. If a vendor promises you 100% capture, ask them what they do about a visitor with JavaScript disabled.
No. The compressed SDK is under 5KB and loads asynchronously, so it does not block rendering and does not move Largest Contentful Paint or the other Core Web Vitals. The collection request goes to a subdomain of your own site and is served from the edge, which also makes it faster than a round trip to a third-party analytics host.
You take it. Raw events and attribution tables export to your own Google Cloud Storage or Amazon S3 bucket in Parquet or CSV, on the same schema the dashboard reads, and there is no retention limit that quietly deletes history first. The export is available while you are a customer rather than only on the way out, because a data claim you can only test at cancellation is not a data claim.
14-day free trial
14-day free trial. One snippet, five minutes, and the same event stream feeds attribution, forwarding and AI visibility.