Trace reads Stripe server-side and joins each charge back to the original visitor session — by metadata when you control checkout, by email when you don't. Deterministic, first-party, auditable to the dollar.
Or see how it works ↓Every charge in your dashboard came from a real Stripe event, joined to a visitor we can point to, by a method we name. No view-through fudges. No probabilistic models. No black box.
Attribution resolves on Stripe's charge.succeeded — not on a thank-you page that may never load. Failed pixel calls don't lose data.
Each revenue row tags itself with metadata, email_match, or unattributed. Three states, one of them honest.
Visitor IDs sit in your apex domain's first-party cookies. Apple's 7-day cap doesn't apply — we don't depend on a live cookie at conversion.
The pixel captures clicks. Stripe Connect streams charges. Trace joins them by visitor ID or email.
One <script defer> tag in <head>. Captures pageviews + UTMs, sets a 1-year first-party visitor cookie. ~1.3 KB gzipped.
<script defer
src="https://tracerev.com/track.js"
data-site="site_…"></script>Read-only OAuth. Twelve months of charges backfill on connect; future charges arrive via webhook within seconds.
// custom checkout? add one line:
import { getAttribution }
from '@trace/sdk/next';
stripe.checkout.sessions.create({
metadata: await getAttribution()
});Each charge shows the original UTM, referrer, and the method we used to resolve it. Filter by source, campaign, or content.
meta / cpc $4.20 ROAS
google / organic $7.10 ROAS
reddit / post $9.80 ROAS
email / klaviyo $11.40 ROASNo-feature-bait list. Everything below works today.
Day one of your Stripe connect, the dashboard fills with a year of attributed revenue. No 'let it run for a quarter to see signal.'
@trace/sdk for Next App + Pages, Express, browser, and generic Node. One line in your Checkout Session creation, deterministic from there.
Every revenue row is tagged metadata, email_match, or unattributed — so you know exactly how each dollar got its source.
Drop in monthly spend per source. Trace pro-rates by window overlap so any date range gives you correct ROAS, no spreadsheet gymnastics.
The visitor's earliest event with a UTM or referrer wins. Your podcast ad doesn't lose credit to the Google search three weeks later.
USD only. We refuse to silently convert euro charges to dollars at yesterday's FX rate — that's how ROAS comparisons quietly become meaningless.
7-day trial. Cancel any time. No event-volume tiers.
Billed monthly. Cancel any time.
Founder pricing: first 50 customers lock in $79/mo for life with code FOUNDER50.
<script> tag in your <head>, then click "Connect Stripe." If you build your own Checkout Sessions, the SDK adds trace_visitor_id to metadata in one line.identify() calls.Connect Stripe and the dashboard fills with twelve months of history. No card required for the trial.
Start 7-day free trial