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'smetadatawhen 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:
| Metric | Definition |
|---|---|
| Revenue | Payments minus refunds, in the site's currency, by payment time |
| Paying customers | Distinct customers who paid in the period |
| Conversion rate | First-time buyers ÷ unique visitors |
| Revenue per visitor | Revenue ÷ unique visitors |
| Average order value | Revenue ÷ payments that aren't refunds |
| LTV | All 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
- The visit. The traffic.cx tracker records the visit with its source, campaign and landing page.
- 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'smetadata. - The payment. When
payment.succeededarrives, traffic.cx credits the visit using last non-direct (default) or first touch, within a 90-day lookback by default (7 to 365 days). - Subscriptions. The first subscription payment starts the subscription; later ones are renewals that keep its credit.
- Refunds (
refund.succeeded) are subtracted on the day they happen, credited to the payment they refund. Arefund.failedremoves that refund. - 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.
- 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.
- Pass the visitor's IDs. When your server creates the checkout session, put the validated
tcxobject inmetadata. 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). - 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
| Webhook | Recorded as |
|---|---|
payment.succeeded | A one-off payment, or a subscription payment: the first one starts the subscription and later ones are renewals that keep its credit |
refund.succeeded | A refund of the payment |
refund.failed | Removes 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.