Skip to main content
Pricing7 min read

DuitNow QR vs Stripe Malaysia: when each one wins

DuitNow QR is Malaysia's instant-payment standard, operated by PayNet. Stripe Malaysia charges 3.4% + RM 1 per local card transaction. For a Malaysian SME doing fewer than 20 orders a day, DuitNow QR beats Stripe on cost, setup time, and operational simplicity. The exception matters too. Here's when each one wins.

The math at three order volumes

Pick a typical order value of RM 100 (close to the Malaysian SME e-commerce median per DOSM retail data). Run the fees at three volumes:

Orders / dayStripe MY fees / monthDuitNow QR fees / monthSavings
5 orders × RM 100RM 660RM 0RM 660
20 orders × RM 100RM 2,640RM 0RM 2,640
100 orders × RM 100RM 13,200RM 0RM 13,200

DuitNow QR is genuinely free for the merchant in most setups: instant settlement to your business account, no monthly minimum, no per-transaction fee for amounts under RM 1,000. The trade is friction at checkout. Customers scan, open their banking app, confirm. It works, but it's not one tap on Apple Pay.

When DuitNow QR wins

Low to moderate order volume

Below 20 orders a day, the Stripe savings dwarf the friction cost. Customers in Malaysia already know how to scan QR codes. Maybank, CIMB, Public Bank, Touch'n Go eWallet all support DuitNow QR natively. The scan is faster than typing card details on a phone.

You haven't finished Stripe Malaysia verification

Stripe Malaysia verification takes 1 to 3 weeks for new merchants, often longer for sole proprietors without SSM registration. If you're launching now and want to take orders this week, DuitNow QR works the day you open a Malaysian business bank account.

You sell to Malaysian customers only

DuitNow QR is Malaysia-only. If 100% of your customers pay in Ringgit, you don't need Stripe's 195-country reach. The marginal benefit doesn't justify the fee delta.

Your average order is small

On a RM 30 order, Stripe's flat RM 1 charge is 3.3% on its own, before the percentage fee. A coffee shop, a stationery store, anything with a sub-RM 50 average ticket is bleeding margin to Stripe that DuitNow recovers instantly.

When Stripe Malaysia wins

You sell internationally

Stripe accepts USD, SGD, AUD, GBP, EUR, and 130+ other currencies. DuitNow QR only accepts MYR. If even 5% of your customers pay in foreign currency, Stripe is non-negotiable.

Subscriptions or stored cards

Stripe stores card tokens and runs recurring billing. DuitNow QR is one-shot. For Care Plans, software-as-a-service, or any subscription model, Stripe is the right tool.

Order volume above 30 a day, fully online

At 30+ orders a day, the friction tax of QR scanning starts to outweigh the fee savings. Card payments convert at 90%+; QR conversion drops to around 60–70% in our experience (anecdotal across two Malaysian merchants, take with salt). The lost revenue from drop-off can exceed Stripe's 3.4% on what does convert.

You need automated reconciliation

Stripe webhooks fire on every successful payment. DuitNow QR settlement lands in your bank statement, which means manual reconciliation or an extra integration step. For a 5-orders-a-day operator, reconciling by eye is fine. For 50, it's a daily chore.

The hybrid I use on every Malaysian project

For most Malaysian SME projects I ship, the answer isn't either-or. It's both, sequenced by volume and customer:

  • Primary: DuitNow QR at checkout with a Touch'n Go business eWallet for instant ingestion. Zero fees on every Malaysian customer.
  • Manual backup: A static QR code linked to a Malaysian business bank account, displayed alongside the dynamic DuitNow QR. Customers who can't scan dynamic QR (uncommon, but happens with older banking apps) still have a path.
  • Stripe MY: Only enabled when international orders start landing, or when subscription products go live. Until then, Stripe verification can sit pending. No rush.

This setup recovers 2-4% gross margin on every Malaysian order without breaking anything. The trade is a confirmation page after checkout where the customer sees the QR, scans, confirms with you via WhatsApp screenshot. It's low-tech, it works, and it scales to roughly 20 orders a day before reconciliation becomes a pain point.

The pivot story behind this advice

I ran into this on thingit.store in early 2026. The original plan was Stripe Malaysia + FPX, the standard playbook. Stripe verification dragged through Day 6 of a 7-day launch window. With the soft-launch date locked, I pivoted to DuitNow QR + a Touch'n Go bank backup mid-build.

The flow looks like this: customer fills the address form, an order row writes to Supabase with status pending_payment, an email fires with an embedded DuitNow QR, the customer scans + pays + sends a WhatsApp screenshot. I verify in the bank app, run npm run order:advance to flip status to paid, and emails cascade through to delivered. Total payment-processor fees: zero.

Stripe verification finished four weeks later. By then DuitNow was handling every order cleanly, so Stripe stayed disabled. Six months in, it's still off. Saving roughly RM 300 a month on a low-volume catalog. The day international orders start landing, I'll enable Stripe in a single config flip.

Setup checklist for DuitNow QR

  1. Open a Malaysian business bank account (Maybank Business, CIMB BizChannel, Public Bank BizSMART). Sole-proprietor accounts qualify. Bring your IC and SSM certificate.
  2. Register for DuitNow QR Merchant through the bank or directly via PayNet's merchant onboarding. Same-day approval in most cases.
  3. Generate dynamic QR codes per transaction (preferred) or display a static QR for any amount. Most banks support dynamic via API; static works for hand-typed amounts.
  4. Add a confirmation page to your site that shows the QR + your business bank account number as a fallback. Include a WhatsApp link with a prefilled message: "Hi, paid for order #1234, screenshot attached."
  5. Set up a daily reconciliation routine: scan the bank statement morning + evening, mark orders as paid in your admin tool. For under 20 orders a day, 10 minutes a day total.

For higher volumes, integrate the bank's API or use a service like Billplz (Malaysian payment aggregator that wraps FPX + DuitNow + card payments with reconciliation hooks). Billplz charges roughly 2% per FPX transaction, which is cheaper than Stripe's 3.4% but not free like raw DuitNow. Pick based on volume and your tolerance for reconciliation work.

The bottom line

If you're a Malaysian SME launching now, default to DuitNow QR and stay there until international orders or subscriptions force the upgrade. Stripe is excellent infrastructure, but you don't need infrastructure when the simpler tool covers 100% of your customers at 0% cost. Ship the simpler one. Add Stripe when the volume earns it.

Want help wiring this up for your business? Send a brief and I'll quote a fixed price for a DuitNow-first checkout flow with a Stripe-ready toggle for when you scale. Most projects in this space ship in 7 to 14 days.

More questions?

Easier on a call than in a blog post.

Replying within 4 hours, weekdays