Skip to content

payments · side by side

Dodo Payments vs Polar for a Next.js app

Both fill the payments slot, so a generated repo carries one or the other, never both. Every line below is read out of the two manifests.

Short answer

Pick Dodo Payments if

Founders outside the US and EU, India especially, selling software worldwide. Dodo takes local payment methods: UPI in India, cards, Apple Pay and Google Pay. It remits sales tax as the seller, so you never register for VAT abroad.

Pick Polar if

Solo founders and small teams selling digital products or SaaS worldwide, by subscription or as a one-time lifetime deal. You skip registering for VAT, GST and US sales tax before your twentieth customer.

Side by side

Price, obligations, and the surface each one adds. No row is written by hand. This is manifest.yaml, rendered.

Dodo Payments compared with Polar on pricing, fit, trade-offs, required companions, environment variables, dependencies, MCP servers and repo footprint.
From the manifestOption ADodo PaymentsOption BPolar
In one lineDodo Payments

Merchant of record in 220+ countries and regions. Sales tax is Dodo's job.

Polar

Merchant of record for developers. Polar sells to your customer, so tax is its job.

PricingDodo Payments

4% + 40c per US card or wallet payment, no monthly fee. Non-US payments add 1.5% and subscriptions add 0.5%. Standard payouts are free, with a $5 fee under $1,000. USD SWIFT payouts for non-US businesses cost $25. Sales tax is included: Dodo is the seller.

Polar

Free Starter plan at 5% + 50c per transaction. Paid plans lower the rate: Pro is $20/month at 3.8% + 40c, and Growth and Scale go lower. Non-US cards add 1.5%. Tax calculation, filing and liability are included. Organisations created before May 27, 2026 can stay on the Early Member plan: 4% + 40c, plus 0.5% on subscriptions.

Best forDodo Payments

Founders outside the US and EU, India especially, selling software worldwide. Dodo takes local payment methods: UPI in India, cards, Apple Pay and Google Pay. It remits sales tax as the seller, so you never register for VAT abroad.

Polar

Solo founders and small teams selling digital products or SaaS worldwide, by subscription or as a one-time lifetime deal. You skip registering for VAT, GST and US sales tax before your twentieth customer.

Trade-offsVerbatim from the manifestDodo Payments
  • Dodo is the seller on the customer's statement and invoice. The tax liability moves to Dodo, which is the point, but your brand is not what shows on the card line.
  • Younger than Stripe or Paddle, and the SDK changes more often. The version is pinned; read the release notes before upgrading.
  • The flat rate costs more than a direct card processor because it includes the tax work. At high volume, compare it with Stripe plus a tax vendor.
  • Fewer billing tools than Stripe. Failed renewals are not retried unless you turn Payment Retries on. Check that the reports and dunning you need exist before you commit.
  • Payouts follow a collect-then-remit cycle, not a card processor's rolling schedule. Plan your runway on the payout date, not the charge date.
Polar
  • Polar is the seller on the customer's statement and invoice. That is the point: the tax liability moves to Polar. It also means the descriptor is not your brand, and enterprise buyers sometimes ask why.
  • Payouts arrive on Polar's schedule, after it has collected and remitted. Plan your runway on that, especially in the first month.
  • The fee is higher than a direct card processor because tax is included. At high volume, compare it with a processor plus a tax vendor.
  • One product is one price. A plan sold monthly, yearly and for life is three Polar products and three env ids. billing:sync-plans creates them for you.
  • Sandbox and production are separate Polar deployments with separate tokens, products and webhook secrets. Launch day is a second setup, not a switch.
  • Fewer billing knobs than Stripe. For a plain subscription or a lifetime deal that is often enough.
Required companionsAdded for you, with a reasonDodo Payments
  • A database battery
  • An auth battery
Polar
  • A database battery
  • An auth battery
Recommended alongsideSuggested, never added for youDodo Payments
  • An email battery
Polar
  • An email battery
Env vars you will manageEvery one documented in docs/onboard.mdDodo Payments

9 variables · 2 required

  • DODO_PAYMENTS_API_KEY
  • DODO_PAYMENTS_WEBHOOK_KEY
  • BILLING_PRICE_PRO_LIFETIME
  • BILLING_PRICE_PRO_MONTHLY
  • BILLING_PRICE_PRO_YEARLY
  • BILLING_PRICE_TEAM_MONTHLY
  • BILLING_PRICE_TEAM_YEARLY
  • DODO_PAYMENTS_ENVIRONMENT
  • DODO_TAX_CATEGORY
Polar

9 variables · 3 required

  • POLAR_ACCESS_TOKEN
  • POLAR_ORGANIZATION_ID
  • POLAR_WEBHOOK_SECRET
  • BILLING_PRICE_PRO_LIFETIME
  • BILLING_PRICE_PRO_MONTHLY
  • BILLING_PRICE_PRO_YEARLY
  • BILLING_PRICE_TEAM_MONTHLY
  • BILLING_PRICE_TEAM_YEARLY
  • POLAR_ENVIRONMENT
Dependencies addedDodo Payments
  • dodopayments ~2.52.0
  • server-only ^0.0.1
  • standardwebhooks ^1.1.1
Polar
  • @polar-sh/sdk ^0.49.0
  • server-only ^0.0.1
MCP serversWritten into .mcp.jsonDodo Payments

None. No extra agent tools from this one.

Polar
  • polar: https://mcp.polar.sh/mcp/polar-sandbox
Footprint in your repoDodo Payments

14 files, plus 3 injections into shared stack files

Polar

12 files, plus 3 injections into shared stack files

What changes in your repo

The paths each battery contributes, diffed. A path in the third list is written by both, so swapping rewrites that file rather than adding one.

Only with Dodo Payments (9)

  • scripts/1 file
    • billing/1 file
      • dodo-test-webhook.ts
  • src/8 files
    • app/1 file
      • api/1 file
        • webhooks/1 file
          • dodo/1 file
            • route.ts
    • lib/7 files
      • billing/7 files
        • dodo-config.ts
        • dodo-events.test.ts
        • dodo-events.ts
        • dodo-fixtures.ts
        • dodo-objects.test.ts
        • dodo-objects.ts
        • dodo.ts

Only with Polar (7)

  • scripts/1 file
    • billing/1 file
      • test-webhook.ts
  • src/6 files
    • app/1 file
      • api/1 file
        • webhooks/1 file
          • polar/1 file
            • route.ts
    • lib/5 files
      • billing/5 files
        • polar-objects.test.ts
        • polar-objects.ts
        • polar-webhooks.test.ts
        • polar-webhooks.ts
        • polar.ts

Same path, different implementation (5)

  • scripts/3 files
    • billing/3 files
      • prune-events.ts
      • reconcile.ts
      • sync-plans.ts
  • src/1 file
    • lib/1 file
      • billing/1 file
        • provider.ts
  • tests/1 file
    • e2e/1 file
      • billing-webhook.spec.ts

Shared stack files Dodo Payments injects into

  • env-required
  • legal-processors
  • verify-checks

Shared stack files Polar injects into

  • env-required
  • legal-processors
  • verify-checks

Dodo Payments in your .env.local

.env.localbash12 lines
# required
DODO_PAYMENTS_API_KEY=dodo_test_replace_me
DODO_PAYMENTS_WEBHOOK_KEY=whsec_replace_me

# optional
BILLING_PRICE_PRO_LIFETIME=
BILLING_PRICE_PRO_MONTHLY=
BILLING_PRICE_PRO_YEARLY=
BILLING_PRICE_TEAM_MONTHLY=
BILLING_PRICE_TEAM_YEARLY=
DODO_PAYMENTS_ENVIRONMENT=test_mode
DODO_TAX_CATEGORY=saas

Polar in your .env.local

.env.localbash12 lines
# required
POLAR_ACCESS_TOKEN=polar_oat_replace_me
POLAR_ORGANIZATION_ID=00000000-0000-0000-0000-000000000000
POLAR_WEBHOOK_SECRET=whsec_replace_me

# optional
BILLING_PRICE_PRO_LIFETIME=
BILLING_PRICE_PRO_MONTHLY=
BILLING_PRICE_PRO_YEARLY=
BILLING_PRICE_TEAM_MONTHLY=
BILLING_PRICE_TEAM_YEARLY=
POLAR_ENVIRONMENT=sandbox

What changes for your agents

Each battery ships rules, skills, subagents and hooks that an agent loads before it touches the code that battery owns. Picking one is also picking how your agents behave in src/lib/billing/**.

Dodo Payments

  • 2

    Skills

  • 2

    Rules

  • 6

    Solution docs

Rules (2)

Dodo translates, the shared billing core writes, and nothing leaves the server

src/lib/pricing.ts · src/lib/billing/** · scripts/billing/** · src/app/api/webhooks/dodo/**

Verify every Dodo webhook, keep every handler idempotent

src/app/api/webhooks/dodo/** · src/lib/billing/provider.ts · src/lib/billing/dodo-events.ts · src/lib/billing/dodo-objects.ts · src/lib/billing/webhook.ts

Skills (2)

/add-product

Add or change a plan or price on Dodo Payments (monthly, yearly or one-time lifetime). Edit src/lib/pricing.ts, create the Dodo product, wire its env var, and prove checkout and the webhook end to end.

/test-webhook

Exercise the Dodo webhook endpoint. Send a signed fixture offline, forward real test-mode events with the Dodo CLI, buy a subscription and a one-time product, refund one, assert idempotency, and debug signature failures.

Subagents and hooks

None of its own. The foundation agents and guard hooks still ship.

Polar

  • 2

    Skills

  • 2

    Rules

  • 6

    Solution docs

  • 1

    MCP servers

Rules (2)

Polar translates, the shared billing core writes the store

src/lib/pricing.ts · src/lib/billing/** · scripts/billing/**

Verify every Polar webhook, keep every handler idempotent

src/app/api/webhooks/polar/** · src/lib/billing/provider.ts · src/lib/billing/polar-webhooks.ts · src/lib/billing/webhook.ts

Skills (2)

/add-product

Add or change a plan or price on Polar (monthly, yearly or one-time lifetime). Edit src/lib/pricing.ts, create the Polar product, wire its env var, and prove checkout and the webhook end to end.

/test-webhook

Exercise the Polar webhook endpoint locally. Forward real sandbox events with the Polar CLI, or sign a one-time order yourself; buy both kinds of price, refund one, prove replays are no-ops, and debug signature failures.

Subagents and hooks

None of its own. The foundation agents and guard hooks still ship.

What each one already knows

Solution docs land in docs/solutions/ in your repo and are published here, so you can read the failure modes before you commit.

Dodo Payments (6)

Polar (6)

Which one to pick

From meta.bestFor and meta.tradeoffs. If a claim is not in the manifest, it is not on this page.

Pick Dodo Payments when

Founders outside the US and EU, India especially, selling software worldwide. Dodo takes local payment methods: UPI in India, cards, Apple Pay and Google Pay. It remits sales tax as the seller, so you never register for VAT abroad.

And accept that(5)
  • Dodo is the seller on the customer's statement and invoice. The tax liability moves to Dodo, which is the point, but your brand is not what shows on the card line.
  • Younger than Stripe or Paddle, and the SDK changes more often. The version is pinned; read the release notes before upgrading.
  • The flat rate costs more than a direct card processor because it includes the tax work. At high volume, compare it with Stripe plus a tax vendor.
  • Fewer billing tools than Stripe. Failed renewals are not retried unless you turn Payment Retries on. Check that the reports and dunning you need exist before you commit.
  • Payouts follow a collect-then-remit cycle, not a card processor's rolling schedule. Plan your runway on the payout date, not the charge date.

Pick Polar when

Solo founders and small teams selling digital products or SaaS worldwide, by subscription or as a one-time lifetime deal. You skip registering for VAT, GST and US sales tax before your twentieth customer.

And accept that(6)
  • Polar is the seller on the customer's statement and invoice. That is the point: the tax liability moves to Polar. It also means the descriptor is not your brand, and enterprise buyers sometimes ask why.
  • Payouts arrive on Polar's schedule, after it has collected and remitted. Plan your runway on that, especially in the first month.
  • The fee is higher than a direct card processor because tax is included. At high volume, compare it with a processor plus a tax vendor.
  • One product is one price. A plan sold monthly, yearly and for life is three Polar products and three env ids. billing:sync-plans creates them for you.
  • Sandbox and production are separate Polar deployments with separate tokens, products and webhook secrets. Launch day is a second setup, not a switch.
  • Fewer billing knobs than Stripe. For a plain subscription or a lifetime deal that is often enough.

Questions people actually ask

Should I choose Dodo Payments or Polar?
Dodo Payments is best for founders outside the US and EU, India especially, selling software worldwide. Dodo takes local payment methods: UPI in India, cards, Apple Pay and Google Pay. It remits sales tax as the seller, so you never register for VAT abroad. Polar is best for solo founders and small teams selling digital products or SaaS worldwide, by subscription or as a one-time lifetime deal. You skip registering for VAT, GST and US sales tax before your twentieth customer. Both fill the payments slot, so a generated repo carries one or the other, never both.
How much do Dodo Payments and Polar cost?
Dodo Payments: 4% + 40c per US card or wallet payment, no monthly fee. Non-US payments add 1.5% and subscriptions add 0.5%. Standard payouts are free, with a $5 fee under $1,000. USD SWIFT payouts for non-US businesses cost $25. Sales tax is included: Dodo is the seller. Polar: Free Starter plan at 5% + 50c per transaction. Paid plans lower the rate: Pro is $20/month at 3.8% + 40c, and Growth and Scale go lower. Non-US cards add 1.5%. Tax calculation, filing and liability are included. Organisations created before May 27, 2026 can stay on the Early Member plan: 4% + 40c, plus 0.5% on subscriptions.
What changes in my repo if I switch from Dodo Payments to Polar?
Dodo Payments writes 14 files, 9 environment variables and 3 dependencies, and installs 2 path-scoped rules, 2 skills and 6 solution docs. Polar writes 12 files, 9 environment variables and 2 dependencies, and installs 2 path-scoped rules, 2 skills and 6 solution docs.

Decide once, then build the repo that already knows the decision.

Either way you get that choice’s rules, skills and solution docs installed, plus the guard hooks, an onboarding doc for exactly these env vars, and the Compound Engineering loop. Free and MIT.