Skip to content

Revenue

Dodo Payments revenue by traffic source

Dodo Payments takes the payment. traffic.cx tells you which visit, source and campaign it came from, and keeps crediting that source for later subscription payments. Paste a Dodo Payments API key, pass one ID from the visit as checkout metadata, and payments and refunds show up next to the traffic that earned them. Payments that can't be linked stay in your totals as "Unattributed".

Last updated

Last updated 28 October 2026. Setup details come from the Dodo Payments setup guide and revenue docs. Need the step-by-step technical guide? Go to /integrations/dodo.

In short

  • Connect: create an API key in Dodo Payments (Developer → API Keys) and paste it in traffic.cx Settings → Revenue. traffic.cx detects test or live mode, creates the webhook and imports the last 90 days.
  • Link: pass the visitor's pageview ID (tcx_pvid) in the checkout session's metadata when your server creates it.
  • Read: revenue, paying customers, conversion rate and revenue per visitor by channel, source, campaign, landing page, country and device.
  • Cost: included on every plan, Free too: one site, 3,000 events a month, no card.

What Dodo Payments sales look like in traffic.cx

traffic.cx reads one-off payments, subscription payments and refunds. On the Revenue page you compare sources by:

MetricDefinition
RevenuePayments minus refunds, in the site's currency, by payment time
Paying customersDistinct customers who paid in the period
Conversion rateFirst-time buyers ÷ unique visitors
Revenue per visitorRevenue ÷ unique visitors
Average order valueRevenue ÷ payments that aren't refunds
LTVAll the revenue so far of the customers first won in the period, per customer

Dodo Payments describes itself as a merchant of record that handles sales tax and VAT (Dodo Payments docs, as of Oct 28, 2026). traffic.cx leaves the tax Dodo Payments collects out of payments. Refunds count what was refunded, tax included, because Dodo Payments doesn't split a refund's tax (Dodo Payments guide).

How a Dodo Payments sale finds its visit

  1. The visit. The traffic.cx tracker records the visit with its source, campaign and landing page.
  2. The checkout. When the visitor starts checkout, your page reads trafficcx.pageviewId() (and, in cookie mode, trafficcx.visitorId()) and your server adds them to the checkout session's metadata.
  3. The payment. When payment.succeeded arrives, traffic.cx credits the visit using last non-direct (default) or first touch, within a 90-day lookback by default (7 to 365 days).
  4. Subscriptions. The first subscription payment starts the subscription; later ones are renewals that keep its credit.
  5. Refunds (refund.succeeded) are subtracted on the day they happen, credited to the payment they refund. A refund.failed removes that refund.
  6. No link: the payment stays in the totals as Unattributed.

In the default cookieless mode, the pageview ID links a payment to the visit where checkout started; visitor IDs rotate daily and don't connect visits across days. Longer journeys need the optional cookie mode (same browser only) or an earlier payment from the same customer (cookieless vs cookie mode).

Connect Dodo Payments in three steps

Install and verify the tracker first. You need an owner or admin role in traffic.cx and a Dodo Payments account. Use test mode and a separate traffic.cx test site first.

  1. Create an API key. In Dodo Payments, open Developer → API Keys and create a key. The connector needs to read payments and refunds and to list and create webhooks; reading brands is optional and shows your business's name in Settings. In traffic.cx, open Settings → Revenue, choose Connect next to Dodo Payments and paste it. If a permission is missing, the error names it.
  2. Pass the visitor's IDs. When your server creates the checkout session, put the validated tcx object in metadata. Use the same environment (test or live) for your key, product and checkout. The setup guide has the code, using the official Dodo Payments TypeScript client (GitHub).
  3. Test one payment. Follow the test attribution flow. Confirm the payment's metadata includes the pageview ID, the connection shows test mode, and the payment has the expected source. Try a refund and, for subscriptions, a renewal.

The Dodo Payments details traffic.cx handles

WebhookRecorded as
payment.succeededA one-off payment, or a subscription payment: the first one starts the subscription and later ones are renewals that keep its credit
refund.succeededA refund of the payment
refund.failedRemoves that refund
  • Test or live is worked out from the key; your checkout code still has to pick its environment explicitly.
  • Missed webhooks: failed deliveries are retried, and an hourly sync is the fallback.
  • Signing secret is kept encrypted.

When a payment shows as Unattributed

  • The completed payment's metadata had no pageview ID (empty IDs can't identify a source).
  • The tracker was blocked or hadn't loaded when checkout started.
  • The buyer returned on a later day or another device in cookieless mode.
  • It's a backfilled payment from before you connected.

Pricing

Sign up with Google or email and start on the Free plan: every feature on one site, no card and no trial clock. Revenue attribution is included on every plan, Free too. A payment received through a provider integration is not a pageview or custom event. See pricing.

See which traffic pays you

Start free · Dodo Payments setup guide · How revenue attribution works · Pricing

Using another provider? See Stripe, Lemon Squeezy or Polar.

Frequently asked questions

How do I see which traffic source my Dodo Payments sales come from?

Install the traffic.cx script, connect Dodo Payments with an API key in Settings → Revenue, and pass the visitor's pageview ID in the checkout session's metadata. traffic.cx then credits each payment to the visit's source, campaign and landing page.

What permissions does the Dodo Payments key need?

Access to read payments and refunds and to list and create webhooks. Reading brands is optional; it lets Settings show your business's name.

Do subscription renewals keep their original source?

Yes. The first subscription payment starts the subscription, and later payments are renewals that keep its credit.

How are tax and refunds handled?

Payments leave out the tax Dodo Payments collects as the merchant of record. Refunds count what was refunded, tax included, because Dodo Payments doesn't split a refund's tax.

Can I test before going live?

Yes. A test-mode key connects your test mode. Use a separate traffic.cx test site so test payments stay out of your real reports.

Do I need cookies for this?

No. In the default cookieless mode, the pageview ID links a payment to the visit where checkout started. The optional cookie mode links visits across days in the same browser. Whether you need consent depends on your setup and the rules that apply to you.