Dodo Payments Review: Pricing, vs Stripe and Polar, Setup
Dodo Payments review for SaaS devs: verified fees, a $29/mo cost example, Dodo vs Stripe vs Polar, payout risks, and a Next.js setup.

Dodo Payments is a merchant of record (MoR) for SaaS, AI, and digital products: it becomes the legal seller, charges your customers, handles sales tax and VAT, and pays you out. Most pages ranking for "dodo payments" today are app store listings, funding profiles, Medium posts, and deal sites. This review is written for developers: verified fees as of October 2026, a real cost example on a $29/mo plan, a fair Dodo vs Stripe vs Polar comparison, the risks worth checking before you go live, and a Next.js setup that matches the current SDK.
We ship Dodo Payments as one of four billing providers in TurboStarter Core, next to Stripe, Lemon Squeezy, and Polar. So we have no reason to oversell it, and the honest verdict is below.
Short answer
Use Dodo Payments if you are a solo founder or small team selling SaaS or AI subscriptions globally, you want one company to own tax, VAT, and chargebacks, and you are based in a country where Stripe or Polar payouts are hard to get. Its standard rate (4% + 40¢, plus 0.5% for subscriptions) is cheaper than most 5% + 50¢ MoRs on a typical plan.
Skip Dodo Payments if you need the lowest possible fees and can handle tax registrations yourself (use Stripe), if predictable, fast payouts are critical to your cash flow (it pays twice a month by default and has public reports of account closures with held balances), or if you already qualify for Polar's Early Member rate.
What is a merchant of record?
A merchant of record is the company legally responsible for selling a product to the end customer. It appears on the card statement, calculates and remits sales tax, VAT, and GST, handles refunds and chargebacks, and then pays the product owner their share minus fees.
Compare that with a payment processor like Stripe: you are the seller, you register for tax in each jurisdiction where you cross a threshold, and the processor just moves the money. That is cheaper per transaction and gives you more control, but the compliance work is yours.
Dodo describes itself in its docs as an MoR that sells your product "to customers in 220+ countries as the legal seller, so payment processing, sales tax and VAT, fraud screening, and chargebacks are handled for you." If you want the broader context on MoR vs processor tradeoffs, our Stripe vs Lemon Squeezy vs Polar vs Creem comparison covers the model in more depth.
Dodo Payments in 60 seconds
| Fact | Detail (as of October 2026) |
|---|---|
| Company | Bengaluru-based, founded 2023 by Rishabh Goel and Ayush Agarwal; $1.1M pre-seed led by Antler, 9Unicorns, and Venture Catalysts (Economic Times) |
| Public release | v1.0.0 on 23 Feb 2025 (changelog); shipping releases every few weeks since |
| Model | Merchant of record |
| Billing models | One-time, subscriptions, add-ons, seats, usage-based (meters), credits, pay what you want |
| Distribution | License keys, digital file delivery, entitlements (GitHub, Discord, Telegram, Notion, Framer) |
| Server SDKs | TypeScript, Python, Go, PHP, Java, Kotlin, C#, Ruby, Rust |
| Framework adaptors | Next.js, Nuxt, Express, Hono, SvelteKit, Convex, Better Auth, and more (adaptors overview) |
| Migration | Docs cover moving products, customers, discounts, and license keys from Lemon Squeezy, Stripe, Polar, or Paddle |
Dodo Payments pricing and fees (October 2026)
Dodo has one self-serve plan with no monthly fee, plus custom enterprise pricing. Everything below comes from the official pricing page.
| Item | Fee |
|---|---|
| US cards and wallets (Apple Pay, Google Pay) | 4% + 40¢ |
| International cards and APMs (outside the US) | +1.5% |
| Subscriptions, add-ons, usage-based billing | +0.5% |
| PayPal, BNPL (Klarna, Afterpay) | +3% |
| ACH Direct Debit (US) / SEPA Direct Debit | 1.5%, capped at $15 / €15 (replaces the card fee) |
| India domestic (INR cards, UPI) | 4% + 15¢ (plus international fees) |
| Tax calculation, filing, invoicing, analytics | Included |
| License keys, storefront, digital delivery | Included |
| Abandoned cart, dunning, payment retries | Free to enable, 5% of recovered revenue only |
| Refunds | $1 per refund |
| Disputes / chargebacks | $30 per dispute |
| Payouts | $5 fee on payouts under $1,000; USD SWIFT wire $25 |
| Adaptive currency (80+ currencies) | 0% to you; 2-4% FX fee charged to the customer |
| Bring your own processor (Stripe, Adyen) | 0.5% |
Two details matter more than the headline rate:
- The surcharges stack. A subscription paid with a non-US card is 4% + 0.5% + 1.5% = 6% + 40¢. If your audience is mostly outside the US, model that number, not 4%.
- The fixed costs are higher than Stripe or Polar. A $30 dispute fee is double Stripe's $15 received fee and Polar's $15. The $5 payout fee only applies below $1,000, so it mostly bites in your first months.
Early-stage teams can also apply to Dodo for Startups, which offers up to 12 months of free credits and preferential "startup pricing". The credits are application-based, so do not bake them into your model until you are accepted.
What a $29/mo plan actually costs
Here is one subscription payment of $29 on each provider, using only published rates. Assumptions: card payment, no currency conversion, and tax not added on top of the price (some providers calculate fees on the tax-inclusive total, which raises the fee slightly where VAT applies).
| Provider (rate as of October 2026) | Formula for a subscription charge | US card | Non-US card |
|---|---|---|---|
| Dodo Payments (Standard) | 4% + 40¢, +0.5% sub, +1.5% intl | $1.71 (5.9%) | $2.14 (7.4%) |
| Polar Starter (orgs created from 27 May 2026) | 5% + 50¢, +1.5% intl | $1.95 (6.7%) | $2.39 (8.2%) |
| Polar Pro ($20/mo plan) | 3.8% + 40¢, +1.5% intl | $1.50 + $20/mo | $1.94 + $20/mo |
| Stripe + Billing + Tax Basic (you are the seller) | 2.9% + 30¢, +0.7%, +0.5%, +1.5% intl | $1.49 (5.1%) | $1.92 (6.6%) |
| Stripe Managed Payments + Billing (Stripe is MoR) | 2.9% + 30¢, +3.5%, +0.7%, +1.5% intl | $2.36 (8.1%) | $2.79 (9.6%) |
| Paddle | 5% + 50¢, all-inclusive | $1.95 (6.7%) | $1.95 (6.7%) |
| Lemon Squeezy | 5% + 50¢, some payments add fees | from $1.95 | from $1.95 |
Sources: Dodo pricing, Polar pricing, Stripe pricing, Stripe Billing pricing, Stripe Tax pricing, Paddle pricing, Lemon Squeezy pricing.
Scale that to 100 US subscribers ($2,900 MRR): Dodo takes about $170.50, Polar Starter $195, Polar Pro $170.20 (including the $20 plan), Stripe's processor stack $148.90, and Stripe Managed Payments $235.90. Dodo's default twice-monthly payouts would each be around $1,450 here, so no $5 payout fee.
The Stripe row looks cheapest, but it excludes the cost of being the seller: tax registrations, filings, and the time spent on them. Stripe Tax Basic only calculates and collects tax where you are already registered; registrations and filings sit in the separate Tax Complete subscription. That is the real tradeoff behind every "dodo payments vs stripe" search.
One more data point: Polar's legacy Early Member rate (4% + 40¢, +0.5% for subscriptions) is identical to Dodo's standard rate. If your Polar org was created before 27 May 2026, Dodo has no fee advantage over Polar for you.
Dodo Payments vs Stripe vs Polar
| Factor | Dodo Payments | Stripe | Polar |
|---|---|---|---|
| Model | Merchant of record | Processor (MoR only via Managed Payments) | Merchant of record |
| Base fee (US card) | 4% + 40¢ | 2.9% + 30¢ | 5% + 50¢ (Starter), down to 3.4% + 30¢ on paid plans ($20 to $400/mo) |
| Subscription surcharge | +0.5% | Billing: 0.7% of billing volume | None on current plans |
| International card | +1.5% | +1.5%, +1% if currency conversion | +1.5% |
| Sales tax / VAT | Included; calculation, filing, reporting in 190+ countries | Tax Basic 0.5% (you register and file) or Managed Payments +3.5% (75+ countries) | Included as MoR |
| Dispute fee | $30 | $15 received, +$15 if you counter (refunded if you win) | $15 |
| Payout timing | Bi-monthly by default (18th and 4th), weekly on request, or monthly | Rolling, weekly, or monthly; instant payouts for 1.5% | Manual withdrawals; 7-day settlement delay for orgs created from 12 May 2026 |
| Payout costs / threshold | $5 under $1,000; default threshold $100, minimum $50 | Standard payouts free | Stripe fees: $2/mo active + 0.25% + 25¢ per payout; $10 minimum (USD) |
| Who can sign up | ID issued in one of 177 listed countries (+11 grandfathered) | Countries on stripe.com/global | Countries supported by Stripe Connect Express payouts |
| Usage-based billing | Meters + event ingestion, credits with rollover and overage | Meters API in Billing; advanced via Metronome | Meters + event ingestion |
| License keys | Included | Not built in | Included (benefit) |
| Better Auth plugin | @dodopayments/better-auth (Better Auth 1.4+) | @better-auth/stripe | @polar-sh/better-auth (Better Auth 1.7+, Node 22+) |
| Next.js integration | @dodopayments/nextjs route handlers (Next.js 14, 15, 16) | Official Node SDK | Official SDK and framework adapters |
Sources: Dodo payouts, Dodo merchant countries, Stripe Managed Payments, Polar payouts, Polar supported countries, Dodo Better Auth adaptor, Polar Better Auth adapter, Better Auth Stripe plugin.
Dodo Payments vs Stripe
Pick Stripe when you are in a Stripe-supported country, you want the cheapest processing, the deepest API, and full control of checkout (Elements, Connect, custom invoicing), and you are fine registering for tax yourself or paying for Stripe Tax Complete. Stripe is also the safest choice if you might become a platform or marketplace, since Managed Payments does not support Connect.
Pick Dodo when you would rather pay roughly one extra percentage point to make tax and chargebacks someone else's problem, or when Stripe is not available to you at all. Stripe's own MoR option costs more on a $29 plan ($2.36 vs $1.71 on a US card), so if MoR is the requirement, Dodo is the cheaper of the two.
Dodo Payments vs Polar
These two are the closest substitutes: developer-first MoRs with SDKs, Better Auth plugins, meters, and license keys.
- Fees: for new orgs, Dodo's 4.5% + 40¢ on subscriptions beats Polar Starter's 5% + 50¢. Polar Pro (3.8% + 40¢ plus $20/mo) saves 0.7% per transaction, so by our math it overtakes Dodo above roughly $2,860/mo in subscription sales.
- Payouts: Polar lets you withdraw whenever your balance clears the minimum; Dodo pays on a fixed cycle but charges nothing on payouts above $1,000.
- Eligibility: Polar pays out through Stripe Connect Express, so your country must be on that list. Dodo runs its own payouts and accepts IDs from 177 countries. This is the main reason founders pick Dodo over Polar.
Pros and cons
Pros
- Lower standard rate than the 5% + 50¢ MoRs (Paddle, Lemon Squeezy, Polar Starter) on typical SaaS price points
- Broad merchant eligibility: identity documents from 177 countries are accepted
- Full billing toolkit without extra fees: usage meters, credits, seats, add-ons, license keys, entitlements, PPP and localized pricing
- Developer surface is solid: 9 server SDKs, Next.js and Better Auth adaptors, a CLI that forwards test webhooks to localhost, and test mode
- Recovery features only charge on revenue they actually recover
Cons
- Surcharges stack fast for non-US subscription revenue (6% + 40¢ on a non-US card)
- $30 disputes and $1 refunds are pricier than most competitors
- Fixed payout cycle; no daily payouts, and weekly payouts require a support request
- Younger company with a pre-seed funding round, so less operating history than Stripe or Paddle
- Mixed public reviews around account closures and held funds (below)
Dodo Payments alternatives
If Dodo is not a fit, these are the realistic alternatives for a merchant of record for SaaS, all verified above:
- Polar: the closest developer-first substitute, with manual payouts and paid plans down to 3.4% + 30¢. Payout countries are limited to Stripe Connect Express coverage.
- Paddle: 5% + 50¢ all-inclusive, with no separate international or subscription surcharge.
- Lemon Squeezy: 5% + 50¢ with built-in email marketing and license keys; some payments carry extra fees.
- Stripe Managed Payments: Stripe as your MoR for +3.5% on top of standard fees, if you want to stay inside the Stripe ecosystem.
- Plain Stripe: not an MoR, but the cheapest per transaction if you handle tax registration yourself.
Is Dodo Payments legit? Risks to check before going live
Dodo is a real, funded company with frequent releases, public docs, and a published compliance policy. The real concern is the one every MoR carries: the MoR holds your money, and it can stop paying it out.
As of October 2026, Dodo scores 3.6 from 114 reviews on Trustpilot. Positive reviews praise setup speed and access to international payments where other providers are unavailable. Negative reviews describe accounts closed around payout time and balances held for long periods, often citing 120 days. Individual reviews are unverified, but Dodo's Review & Monitoring Policy confirms the mechanism: reviews run at activation, before the first payout, on triggers like new domains or rising disputes, and periodically, and for policy violations or non-response "the account may be closed and payouts withheld."
Polar runs account reviews too (which can take up to 14 days before a first payout), so this is not unique to Dodo. Still, run this checklist before routing real revenue through it:
- Read the Merchant Acceptance Policy and confirm your product category is not restricted or prohibited. If you are unsure, ask support before you integrate.
- Confirm your ID country is on the eligible list. Eligibility follows the country that issued your identity document, not where your company is registered.
- Complete every verification form, including bank verification, before launch. Live payments and payouts are enabled separately, so an account can take money while payouts are still inactive.
- Keep your website, pricing, and refund policy consistent with what you submitted, and answer compliance emails fast. New domains, product shifts, and unanswered information requests can pause payouts.
- Keep your billing layer swappable so you can move providers without rewriting the app.
How to set up Dodo Payments in Next.js
This is the minimal App Router integration: hosted checkout via the official TypeScript SDK, verified webhooks via @dodopayments/nextjs, and local testing with the Dodo CLI. Code follows the current checkout sessions guide and Next.js adaptor docs.
Create an API key in test mode
In the Dodo dashboard, switch to Test Mode, then go to Developer > API Keys and create a key. Test mode simulates payments without real charges, and test checkouts run on test.checkout.dodopayments.com.
npm install dodopayments @dodopayments/nextjs zodThe Next.js adaptor needs Zod 3.25 or Zod 4 as a peer dependency.
Add environment variables
DODO_PAYMENTS_API_KEY=""
DODO_PAYMENTS_WEBHOOK_KEY=""
DODO_PAYMENTS_ENVIRONMENT="test_mode" # or "live_mode"
DODO_PRO_MONTHLY_PRODUCT_ID="pdt_..."Keep these server-only. Never prefix them with NEXT_PUBLIC_.
Create a product
Under Products, create a subscription product (for example "Pro, $29/month") and copy its pdt_... ID into DODO_PRO_MONTHLY_PRODUCT_ID. Checkout sessions take a cart of product IDs, so the simplest setup is one product per plan and interval (a monthly and a yearly Pro plan are two products).
Create a checkout session
import DodoPayments from "dodopayments";
import { NextResponse } from "next/server";
import { getCurrentUser } from "~/lib/auth";
const dodo = new DodoPayments({
bearerToken: process.env.DODO_PAYMENTS_API_KEY,
environment: process.env.DODO_PAYMENTS_ENVIRONMENT as
| "test_mode"
| "live_mode",
});
export async function POST() {
const user = await getCurrentUser();
if (!user) {
return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
}
// The product ID comes from server config, never from the request body.
const session = await dodo.checkoutSessions.create({
product_cart: [
{ product_id: process.env.DODO_PRO_MONTHLY_PRODUCT_ID!, quantity: 1 },
],
customer: { email: user.email, name: user.name },
return_url: `${process.env.NEXT_PUBLIC_URL}/billing/success`,
});
return NextResponse.json({ url: session.checkout_url });
}Redirect the browser to url. Checkout sessions expire after 24 hours and the URL is single-use, so create a new session per attempt.
The adaptor also ships a ready-made Checkout route handler. It is fine for prototypes, but it accepts the product cart from the request body, so lock it down before production.
Handle webhooks
import { Webhooks } from "@dodopayments/nextjs";
import { recordPayment, syncSubscription } from "~/lib/billing";
export const POST = Webhooks({
webhookKey: process.env.DODO_PAYMENTS_WEBHOOK_KEY!,
onSubscriptionActive: async (payload) => syncSubscription(payload.data),
onSubscriptionRenewed: async (payload) => syncSubscription(payload.data),
onSubscriptionOnHold: async (payload) => syncSubscription(payload.data),
onSubscriptionCancelled: async (payload) => syncSubscription(payload.data),
onPaymentSucceeded: async (payload) => recordPayment(payload.data),
});The handler verifies the webhook signature headers and returns 401 on a bad signature. Create the endpoint under Developer > Webhooks, select the events you handle, and copy its signing secret into DODO_PAYMENTS_WEBHOOK_KEY. Keep syncSubscription idempotent so retried deliveries are safe.
Test webhooks locally and add the customer portal
Forward real test-mode events to localhost with the Dodo CLI:
dodo login
dodo wh listen --forward-to http://localhost:3000/api/webhook/dodo-paymentsFor self-serve plan changes, invoices, and payment methods, send users to the hosted Customer Portal. The adaptor's CustomerPortal handler does not authenticate the caller (anyone with a customer ID gets that customer's portal), so put it behind your auth and pass only the signed-in user's Dodo customer ID.
Using Better Auth? The @dodopayments/better-auth plugin can create a Dodo customer at sign-up, expose authClient.dodopayments.checkoutSession(), open the portal, ingest usage, and verify webhooks. It adds a dodoCustomerId column to your user table, so run the Better Auth CLI to update your schema after adding it.
Charging for usage? Create a meter in the dashboard and send events to /events/ingest (up to 1,000 per request) with a deterministic event_id, which Dodo uses as the idempotency key so retries never double-bill (usage-based billing guide).
Dodo Payments in TurboStarter
TurboStarter Core Kit ships Dodo Payments as a first-class web billing provider. You switch to it by changing two exports in packages/billing/web/src/providers and setting three environment variables (DODO_PAYMENTS_API_KEY, DODO_PAYMENTS_WEBHOOK_KEY, DODO_PAYMENTS_ENVIRONMENT). From there, the kit already handles:
- Checkout through the server-side Dodo SDK, with each billing variant
idmapped to a Dodoproduct_id - Webhooks at
/api/billing/webhook/dodo-paymentsthat sync the full subscription lifecycle and one-off payments to your database - Customer portal sessions created server-side for the current customer, so users manage plans, invoices, and payment methods on Dodo's hosted portal
- Discount codes passed from your billing config to Dodo checkout
- B2C or B2B billing, with either a user or an organization as the paying customer
Because billing sits behind a provider-agnostic API, the same pricing table, plan gating, and billing summary work whether you run Dodo, Stripe, or Polar. That is the practical answer to the payout risk above: if a provider stops working for you, you change exports and product IDs, not your app. The Next.js Polar SaaS boilerplate and Next.js Stripe starter kit pages show the same stack on the other providers.
One limit to know: the kit's metered usage provider notes currently cover Stripe, Lemon Squeezy, and Polar. If usage-based billing on Dodo is central to your product, plan to call Dodo's event ingestion API directly or extend the provider.
FAQ
Yes. Dodo Payments is a Bengaluru-based merchant of record founded in 2023, backed by a $1.1M pre-seed round from Antler, 9Unicorns, and Venture Catalysts, with public docs and frequent releases since its v1.0 launch in February 2025. Its Trustpilot score is 3.6 from 114 reviews as of October 2026, with complaints focused on account closures and held payouts. Read the merchant acceptance and review policies before you launch.
As of October 2026: 4% + 40¢ for US cards and wallets, +1.5% for international payments, +0.5% for subscriptions and usage billing, +3% for PayPal and BNPL, and a flat 1.5% (capped at $15 or €15) for ACH and SEPA Direct Debit. Refunds cost $1, disputes $30, and payouts under $1,000 carry a $5 fee. There is no monthly fee.
Yes. Dodo is the legal seller of your product. It calculates, collects, and remits sales tax, VAT, and GST, issues invoices, and handles fraud screening, refunds, and chargebacks. You receive payouts net of fees and taxes.
Customers can pay from the 226 countries and territories on Dodo's payment acceptance list. Merchants can onboard if their government ID was issued in one of the 177 countries on the merchant acceptance list (plus 11 grandfathered countries), which includes the US, UK, all EU members, India, Canada, and Australia. Eligibility follows the country that issued your ID, not where your company is registered.
Stripe is cheaper per transaction (2.9% + 30¢, plus 0.7% for Billing and 0.5% for Tax Basic), but you remain the seller and must register and file taxes yourself. If you want Stripe to be the merchant of record, Managed Payments adds 3.5%, which makes it more expensive than Dodo on a typical $29 plan.
For new accounts, Dodo's standard subscription rate (4.5% + 40¢) is lower than Polar Starter (5% + 50¢), and Dodo accepts merchants from more countries. Polar wins on flexible manual payouts, lower dispute fees, and paid plans that drop to 3.4% + 30¢ at higher volume. If you already have Polar's Early Member rate, the fees are identical.
Yes. Dodo supports subscriptions with trials, proration, add-ons, and seat-based pricing, plus usage-based billing through meters and event ingestion, and credit-based billing with rollover and overage. Subscription and usage charges carry the +0.5% billing fee.
Verdict
Dodo Payments is a good merchant of record for indie SaaS and AI products that sell globally, especially if you live somewhere Stripe and Polar payouts are hard to reach. On a typical $29/mo plan it is cheaper than Paddle, Lemon Squeezy, Polar Starter, and Stripe Managed Payments, and its developer tooling (SDKs, Next.js and Better Auth adaptors, CLI, meters) puts it on the shortlist for the most developer-friendly merchant of record, alongside Polar.
The tradeoffs are real: stacked surcharges for non-US subscriptions, higher dispute fees, a fixed payout cycle, and public reports of held balances after account reviews. Use Dodo Payments with your eyes open, keep your billing layer swappable, and re-check the pricing page before you commit, because these numbers change often. If you want Dodo, Stripe, and Polar wired into one Next.js codebase already, start with TurboStarter.
Deploy TurboStarter to Cloudflare Workers - complete guide
Learn how to deploy your TurboStarter Next.js SaaS to Cloudflare Workers with OpenNext, Hyperdrive, R2, Wrangler, and production-ready environment setup.
Drizzle vs Prisma in 2026 - which TypeScript ORM should you pick?
Drizzle vs Prisma for Next.js SaaS: schema, queries, migrations, serverless, and when each wins. Plus why TurboStarter ships Drizzle in production.



