Skip to main content
Recharge server-sidePlatform solution

Server-side tracking for Recharge

Recharge gives you good webhooks and no way to send a conversion anywhere, which makes the server-side build unusually clean here: subscribe to subscription and charge events, store the click identifier on the subscription rather than the order, and decide in writing what happens at renewal. The one Recharge-specific trap is that every charge also creates a Shopify order, so your store's existing integration is probably already firing on the same commercial event.

Free30 minutesNo obligation

Recharge server-side · what breaks

What goes wrong on Recharge

  1. 01

    Renewals invisible to every ad platform

    They happen on a cron, with no customer present. Nothing that fires from a page can see them, and no amount of pixel work changes that.

  2. 02

    The first order double-counted

    Recharge creates a Shopify order, so the store's native integration and a Recharge-aware setup can both fire for the same purchase.

  3. 03

    Churn never reversed

    A subscription that cancels stops producing revenue, and almost nobody wires the cancellation back to anywhere.

  4. 04

    Acquisition valued at one box

    A subscriber worth twelve shipments optimized as though they were a single-purchase customer.

Recharge server-side · the fix

What changes — Recharge server-side

  • Acquisition and recurring revenue separated

    One is what you bid on; the other is what you report. Conflating them is the standard mistake.

  • First order sent once, at lifetime value

    Deduplicated on the Shopify order ID, valued at expected subscriber lifetime rather than one shipment.

  • Cancellations reversed

    So reported subscriber value can go down, which is the only way it stays honest.

Recharge server-side · architecture

What Recharge exposes to a server container

The server-side build on Recharge specifically.

  1. 1

    Source events from Recharge webhooks

    Not from the thank-you page. A subscription customer who closes the tab has still subscribed.

  2. 2

    Store the click identifier on the subscription

    Not on the order. The subscription is the object that persists across every renewal.

  3. 3

    Decide the renewal policy before building

    Reporting always; bidding only deliberately. Write the decision down.

  4. 4

    Deduplicate against the Shopify order

    Recharge creates one, and your store's existing integration probably already fires on it.

  5. 5

    Wire cancellation as a reversal

    Available and almost never implemented.

Recharge server-side · diagnose

Where Recharge 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 Recharge revenue against reported revenue for a closed month

    The gap is your renewal blind spot and it is usually the largest discrepancy in the business.

  2. 02

    Check whether a subscription carries a click identifier

    If the identifier is on the order and not the subscription, renewals can never be attributed.

  3. 03

    Look for double counting on the first order

    Recharge creates a Shopify order, and your store integration probably already fires on it.

  4. 04

    Check whether cancellation does anything at all

    Almost never wired, and it means reported subscriber value only ever rises.

  5. 05

    Ask what the renewal number is for

    Reporting and bidding need different answers, and conflating them is the real mistake under the technical one.

Recharge server-side · prove

The QA evidence — Recharge server-side

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

Source of truth

Recharge's own subscription and order records, cross-checked against the Shopify orders they create

  • A test subscription created, with exactly one conversion firing and the identifier confirmed on the subscription rather than the order.
  • A renewal processed and confirmed to land wherever the written policy says it should — and nowhere else.
  • A cancellation confirmed to reverse at each destination that accepts one.
  • Recharge revenue reconciled against reported revenue for a fully closed month, with acquisition and recurring separated.
  • The lifetime value model shown as a calculation from your own churn data, not asserted.
  • Reconciled over a fully closed window, matched per record rather than on totals.
  • Re-checked 30 days later, and after any platform update.

Recharge server-side · free audit

What we check in the free audit

  • Compare Recharge revenue against reported revenue for a closed month
  • Check whether a subscription carries a click identifier
  • Look for double counting on the first order
  • Check whether cancellation does anything at all
  • Ask what the renewal number is for

Checked against

Recharge's own subscription and order records, cross-checked against the Shopify orders they create

Get my free conversion tracking audit

Free30 minutesNo obligation

Recharge server-side · when not to buy

When you don't need this on Recharge

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

  • If you sell one-off products with a small subscription tail, the store's native integration may already be adequate. Measure the recurring share first.
  • If your churn data is too young to model lifetime value, say so and use a conservative figure rather than an invented one.
  • If Recharge revenue and reported revenue already agree within a few percent, this is working and there is nothing to buy.
  • If you are not running paid media at meaningful spend, the reporting fix matters and the ad-platform work does not.

Recharge server-side · what we deliver

What the server-side build gives you on Recharge

  • Container on your own subdomain

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

  • Money events from Recharge's subscription records

    Recharge's subscription and charge records are authoritative for recurring revenue; the Shopify order list is authoritative for what the store banked. They should agree, and reconciling them against each other is the first thing worth doing.

  • 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 Recharge's own subscription and order records, cross-checked against the Shopify orders they create. 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

Recharge server-side questions, answered

You need a server-side event source, which the Recharge webhooks already give you. A container is useful when you are feeding several destinations from one place; for a single destination a direct webhook handler is simpler and does the same job.

Free · 30 min

Move Recharge events off the browser

Free30 minutesNo obligation