Skip to main content
Stripe server-sidePlatform solution

Server-side tracking for Stripe

This is the archetypal case for server-side. Stripe's webhooks fire on every charge, renewal, refund and failed payment with no browser involved, and the click ID can live in customer or subscription metadata so a renewal eleven months later still references the original click. Almost nothing about that is possible browser-side.

Free30 minutesNo obligation

Stripe server-side · what breaks

What goes wrong on Stripe

  1. 01

    Stripe Checkout is a different domain

    The session splits where the money moves, so browser attribution is at its weakest exactly when it matters.

  2. 02

    Renewals have no browser at all

    A card charged on month four fires nothing anywhere.

  3. 03

    Refunds and failed payments ignored

    Both are webhook events and both are routinely unwired.

  4. 04

    Lifetime value guessed at signup

    Rather than accumulated as payments clear.

Stripe server-side · the fix

What changes — Stripe server-side

  • Every charge counted as it clears

    First payment, renewal, upgrade.

  • Click ID in Stripe metadata

    So renewals stay attributable indefinitely.

  • Refunds and failures reversed

    So reported revenue tracks collected revenue.

Stripe server-side · architecture

What Stripe exposes to a server container

If you only ever build one server-side integration, this is the one that pays.

  1. 1

    Charge and invoice webhooks as the event source

    One event per payment, as it clears.

  2. 2

    Click ID in customer or subscription metadata

    Written at signup, referenced for the life of the customer.

  3. 3

    Charge ID as the deduplication key

    Unique per payment.

  4. 4

    Refunds and failures wired as reversals

    The step that makes revenue honest.

  5. 5

    Amounts as charged

    Never a projected lifetime figure.

Stripe server-side · diagnose

Where Stripe tracking breaks, in diagnostic order

Each check rules out a class of cause, so by the last one there is usually a single explanation standing.

  1. 01

    Compare Stripe collected revenue to platform revenue

    For a closed month.

  2. 02

    List subscribed webhooks

    Usually none, or only the checkout one.

  3. 03

    Check whether click IDs reach Stripe metadata

    Determines renewal attribution entirely.

  4. 04

    Check whether refunds do anything

    Usually not.

  5. 05

    Establish whether checkout is hosted or embedded

    It decides how much the browser can see.

Stripe server-side · prove

The QA evidence — Stripe server-side

Run on Stripe specifically, on a live conversion rather than in preview mode.

Source of truth

your Stripe charge and invoice records

  • Each payment type confirmed arriving as its own event.
  • Click ID present in Stripe metadata on a live customer.
  • Charge ID confirmed as the deduplication key at every destination.
  • Collected revenue reconciled against Stripe for a closed month.
  • A real refund tested and confirmed reversing.
  • Reconciled over a fully closed window, matched per record rather than on totals.
  • Re-checked 30 days later, and after any platform update.

Stripe server-side · free audit

What we check in the free audit

  • Compare Stripe collected revenue to platform revenue
  • List subscribed webhooks
  • Check whether click IDs reach Stripe metadata
  • Check whether refunds do anything
  • Establish whether checkout is hosted or embedded

Checked against

your Stripe charge and invoice records

Get my free conversion tracking audit

Free30 minutesNo obligation

Stripe server-side · when not to buy

When you don't need this on Stripe

Worth reading before you buy anything, from us or anyone.

  • If you sell one-time products through embedded Elements on your own domain and your numbers reconcile, the browser event may genuinely be sufficient.
  • If you have no subscriptions and no refunds, most of the recurring complexity here doesn't apply to you.
  • The webhook work is well-documented and any backend developer can do it. Hand them this page.
  • Check which webhooks you already subscribe to first. Some stacks have more wired than the team realises.

Stripe server-side · what we deliver

What the server-side build gives you on Stripe

  • Container on your own subdomain

    Your domain, your certificate, hosting in an account you control.

  • Money events from Stripe charges

    Stripe's charge and invoice webhooks, which fire on every payment with no browser involved.

  • Deduplicated at every destination

    On a shared event ID, verified before any existing path is removed.

  • Consent enforced before dispatch

    A denied destination receives nothing, verified by capture rather than configuration.

Written guarantee

95%+ tracking accuracy

Measured against your Stripe charge and invoice records. Miss it and we keep working at no cost.

Get my free conversion tracking audit

Pricing

Pick the package that fits your ad spend

Browser-side starter

$400One-time fee · lifetime ownership

Repairs and verifies the browser-side setup you already have, on a live conversion. Honest about its ceiling on this platform.

  • Root cause fixed, not worked around
  • Verified on a live conversion
  • Reconciled against your own records
  • Written handover
Fix what I have

1st-party server-side

Recommended

$800One-time fee · most popular

Money events sent from your own records through a first-party container on your subdomain, so the browser can no longer lose them.

  • First-party server container on your own subdomain
  • Money events from your records, not the browser
  • Deduplicated on a shared event ID at every destination
  • First-party cookies beyond Safari's 7-day cap
  • 95%+ accuracy and 8+ Meta EMQ, guaranteed in writing
Rebuild it server-side

Full 1st-party stack

$1,800One-time fee · lifetime ownership

Every paid channel server-side plus the offline loop, with monitoring so the next break surfaces in days.

  • Everything in 1st-party server-side
  • Pinterest, Snapchat, Reddit and LinkedIn CAPI
  • CRM and offline conversion loop
  • Refunds and cancellations corrected wherever each platform allows it
  • Monitoring on every destination
Get the full stack

FAQ

Stripe server-side questions, answered

Charge succeeded, invoice paid, refunds, and payment failures at minimum. checkout.session.completed alone misses every renewal.

Free · 30 min

Move Stripe events off the browser

Free30 minutesNo obligation