I'd been building a quiz SaaS for about two months. Auth was working, the core product was tested, and I was finally ready to take payments. I created a Stripe account, filled in everything honestly, and submitted.
Two days later I got the email.
Account under review. Please provide business registration documents, GST number, and proof of address matching the registered business name.
I'm a solo developer. I don't have a registered company. I don't have a GST number because I haven't earned a single rupee from this product yet. The whole point was to validate the idea first and incorporate later if it worked.
I replied. Explained the situation. Asked what an individual creator without a company should do.
Four days of silence. Then a generic reply telling me to provide the documents or the account would stay restricted.
That was the end of my Stripe journey.
Why this happens to a lot of us
If you're building from India, Southeast Asia, parts of Latin America, or anywhere Stripe treats as higher risk, this is depressingly common. Stripe is excellent if you're a registered US business. It's a wall if you're a solo person in a country they're cautious about.
The frustrating part isn't even the rejection. It's the timing. You spend weeks building the product. You're finally ready to charge for it. Momentum is everything at that stage. Four days of waiting on Stripe support kills it. By day five I didn't even feel like opening the project.
I started looking at alternatives the same evening.
What I actually tried
Razorpay works in India but only for Indian customers. If you want to charge a teacher in the US or Europe, you're stuck.
Paddle looked promising. Merchant of Record, handles tax globally. But the application process was almost as heavy as Stripe and the minimum revenue thresholds made it feel like overkill for someone who hadn't made the first sale yet.
LemonSqueezy was solid. I almost went with it. Then I found Polar.
Polar
Polar is built specifically for indie developers and creators. The differences that mattered to me:
- Personal accounts work. No business registration required to start.
- They're a Merchant of Record, which means they collect VAT and sales tax on your behalf and remit it. You don't deal with global tax compliance at all. For a solo developer this is huge — I cannot tell you how much mental load this removes.
- Lower processing fees than Stripe.
- A customer portal is built in. Users can manage their own subscriptions, update payment methods, cancel, resubscribe. Zero extra code from me.
- The sandbox is genuinely usable. I built and tested the entire flow without ever putting in real card details or worrying about test mode quirks.
Sign up took ten minutes. I had a working sandbox checkout an hour later.
What the integration actually looked like
The webhook handling is where most payment integrations get messy. With Polar I had four events to care about:
-
subscription.createdandsubscription.updated— set the user's plan to pro, store the period end date -
subscription.canceled— mark cancel-at-period-end as true (user keeps access until paid period ends) -
subscription.revoked— flip plan back to free, clear the expiry
That's the whole subscription state machine. Three flags on the user row: plan, planExpiresAt, planCancelAtPeriodEnd. Webhook updates them. Server reads them when gating features. Done.
The auth side was easier than I expected because I was using BetterAuth, which has a first-party Polar plugin. Sign-up auto-creates the Polar customer. Checkout, customer portal, and webhook signature verification are all wired in. I wrote roughly 200 lines of billing-specific code total.
The honest tradeoffs
Polar isn't perfect. The dashboard is younger than Stripe's. The payment method coverage is narrower in some regions. If you're a US business with a finance team that wants every Stripe report under the sun, Polar will feel light.
But if you're a solo dev trying to ship and charge a few customers and not get blocked by paperwork you don't have, Polar is genuinely the right call. I wish I had found it before the Stripe detour.
What I built after
I rebuilt that whole auth and payments layer cleanly because by the third project I was tired of redoing it. Next.js 15, BetterAuth, Polar, Drizzle on Neon, Resend for email, Shadcn for the UI. Everything wired together so a new project starts from a working subscription flow on day one instead of week three.
I packaged it as a boilerplate. If you want to skip the part I just described and start from a setup that already works for non-US developers:
- Live demo: https://nextjs-better-auth-polar-neon-boil.vercel.app (login
admin@yopmail.com/Password123!) - Get it: https://9928452025183.gumroad.com/l/nextjs-saas-boilerplate
Either way — if you're hitting the same Stripe wall, try Polar before you waste another week on support emails.
Top comments (0)