Mollie
Dutch PSP purpose-built for European e-commerce, with native iDEAL, Bancontact, SEPA, and 30+ local methods in a single integration.
Pick Mollie when you sell to European consumers from an EEA/UK/Swiss company and want clean per-method pricing, fast iDEAL/SEPA/Bancontact support, and a simpler API than Stripe — as long as you can tolerate an opaque risk team and plan a second provider as backup.
◆ Simple
20+ countries (EEA + UK + Switzerland)
1.8% + €0.25 (EEA cards) · €0.32 iDEAL
Mollie B.V. is an Amsterdam-headquartered payment service provider founded in 2004 and regulated by De Nederlandsche Bank (DNB) under PSD2. It focuses exclusively on European merchants (EEA + UK + Switzerland) and offers 30+ payment methods through a single Payments API — with particularly strong first-party support for iDEAL, Bancontact, SEPA Direct Debit, Klarna, and BLIK that Stripe historically underserved. Mollie is a pure PSP, not a Merchant of Record — merchants keep tax and invoicing responsibility but benefit from transparent per-method pricing, no lock-in contracts, and no monthly fees on the online tier.
Last full audit: April 15, 2026
Trust Score Breakdown
Account Stability
58/100Weakest dimension. Trustpilot and merchant forums throughout 2025–2026 show a recurring pattern of accounts placed under review with payouts blocked, sometimes for 6+ months, often with vague 'chargeback risk' or PSD2/AML justifications and limited communication. Multiple reports of brand-new accounts being suspended within the first few weeks of processing. Mollie cites legal obligations, but the opacity and duration of holds is a material stability concern — particularly for new merchants without an established processing history.
Developer Experience
82/100Clean, modern REST API with excellent documentation and official SDKs for PHP, Node.js, Python, Ruby, .NET, Go, and Java. Sandbox mirrors production, test-mode keys are profile-scoped, and the Payments API design is notably simpler than Stripe's for basic flows. Mollie Components handle PCI-sensitive card entry with minimal friction. The ecosystem is smaller than Stripe (fewer third-party integrations, no equivalent to Stripe Apps), and the webhook 'fetch-status' pattern trips newcomers, but once understood it's a net positive for security.
Payout Reliability
75/100Default schedule (Tuesdays, Fridays, and the first business day of the month) is reliable and free for up to 5 payouts/month. On-demand payouts arrive the next business day at no extra cost. Revenue Day Payouts option available in newer accounts. Trust caveat: when the risk team places an account under review, payouts are frozen for the duration — which Trustpilot threads show can stretch from weeks to over a year. For the large majority of non-flagged merchants, payouts are predictable and on time.
Support Quality
62/100Standard support (dashboard chat, email) is rated as responsive and helpful for everyday integration questions — developers in 2025 Capterra and G2 reviews highlight first-language EU support as a strength. The risk/compliance team is a different story: multi-week or multi-month waits for appeal responses, generic boilerplate replies, and little escalation path for merchants with funds frozen. Developer-community support (Discord, GitHub SDK repos) is active and high-quality.
Track Record
80/100Founded 2004 in Amsterdam; licensed Payment Service Provider regulated by De Nederlandsche Bank (DNB) under PSD2 and FCA-registered in the UK. Processes billions of euros annually, achieved unicorn status in 2020, and serves hundreds of thousands of merchants. Long operational record with no solvency or regulatory incidents. The April 2025 user-agreement update and fee adjustments caused merchant pushback but no systemic issues. Smaller and more Europe-concentrated than Stripe, PayPal, or Adyen — a strength for EU focus, a limit for global scaling.
Transparency
78/100Per-method pricing is publicly displayed with specific numbers — no volume-only dark pricing and no surprise platform fees. Public status page, documented SLAs, changelog for API versions. However, three items dent the score: the non-refundable transaction fee on refunds, the €19 chargeback fee that is not returned if you win the dispute, and the 1% currency-conversion margin on payouts — all documented but underplayed vs. the headline 'no hidden fees' marketing. The opaque risk-team communication is the largest transparency gap.
Availability Matrix
| Region | Countries | Currencies | Payout Timing |
|---|---|---|---|
| Europe (Sellers) — EEA + UK + Switzerland | Austria, Belgium, Czech Republic, Denmark, Finland, France, Germany, Greece, Hungary, Ireland, Italy, Luxembourg, Netherlands, Norway, Poland, Portugal, Romania, Slovenia, Spain, Sweden, Switzerland, United Kingdom (20+ countries). Merchant must be a registered business with a business IBAN in one of these countries. Some countries have a minimum sales volume requirement for onboarding. | EUR (primary), GBP, CHF, DKK, NOK, SEK, PLN, CZK, HUF, RON. Merchants receive payouts in EUR, GBP, or CHF depending on their country. | Default: Tuesdays and Fridays plus the first business day of each month. Configurable in dashboard (daily, weekly, monthly). On-demand payouts arrive next business day. Revenue Day Payouts option available. No payout fee for first 5/month. |
| Global (Buyers) | Customers can pay from anywhere worldwide — Mollie accepts payments from USA, Canada, Australia, and non-European countries even though the merchant itself must be European. Payment-method availability varies by buyer country (e.g. iDEAL is Netherlands-only on the buyer side; Bancontact is Belgium-only). | 25+ settlement currencies supported on the buyer side; merchant receives conversion into their payout currency at 1% above mid-market rate. | N/A (buyer side) |
| NOT Available (Sellers) | United States, Canada, Australia, and all countries outside EEA + UK + Switzerland. Merchants registered in these countries cannot sign up as sellers — use Stripe, PayPal, or a regional alternative instead. | N/A | N/A |
Feature Snapshot
One-time Payments
Core product — Payments API creates a payment, redirects the customer to the selected method, and notifies your webhook on status change. Supports 30+ methods via a single integration.
Subscriptions / Recurring Billing
Subscriptions API schedules recurring charges at regular intervals. Requires a 'first' mandate payment (SEPA Direct Debit or credit card) to capture customer consent, then uses sequenceType='recurring' for subsequent charges. No built-in UI — you manage the plan structure.
Hosted Checkout
Mollie Checkout is a fully hosted, mobile-optimised payment page. Server creates a payment, redirects the customer to _links.checkout.href; Mollie handles method selection, 3DS, and PCI. No frontend code required.
Embedded / Custom Checkout
Build-your-own checkout: Mollie Components (drop-in card fields) + server-side Payments API lets you craft a fully branded checkout while Mollie still handles PCI-sensitive card entry.
Payment Links
Payment Links API (and dashboard) generate shareable URLs / QR codes that open a Mollie-hosted checkout for a fixed amount. Useful for invoicing, email sales, in-chat payments.
Marketplace / Split Payments (Mollie Connect)
Mollie Connect for Marketplaces supports split payments via a routing array on the Payments API — distribute funds to multiple connected seller accounts in one transaction, keep an application fee, schedule rolling payouts. Currently EUR and GBP only; no multi-currency conversion for splits.
Platform / SaaS Connect
Mollie Connect for Platforms enables SaaS providers to onboard sub-merchants with their own Mollie accounts and take an application fee. Distinct from Marketplaces flow.
Invoicing
Dashboard invoicing + Invoices API. Merchants can issue invoices with Mollie-generated payment links; Mollie does NOT act as Merchant of Record for tax — the seller remains responsible for VAT/tax collection and filing.
Refunds
Full and partial refunds via Refunds API or dashboard. Critical gotcha: the original transaction fee is NOT returned on refund — merchants eat the per-payment fee on every refunded transaction.
3D Secure / SCA
Dynamic 3D Secure — Mollie applies 3DS2 automatically based on risk and PSD2/SCA requirements. Frictionless challenge embedded in checkout when possible; redirect when the issuer requires it.
Fraud Prevention
Risk engine evaluates each transaction and applies Dynamic 3D Secure, velocity checks, and issuer responses. Configurable risk profile per profile_id. Less sophisticated than Stripe Radar but included at no extra cost.
Multi-Currency Support
Accepts payments in 25+ currencies; buyers can pay in their local currency. Merchants receive payouts in EUR, GBP, or CHF (depending on country), with a 1% currency-conversion margin. No native multi-currency settlement account.
Webhooks
Webhook URL per payment. Mollie sends only the payment ID in the POST — your server MUST call GET /v2/payments/{id} to read the current status (critical Mollie-specific gotcha). Webhook must be public HTTPS; Mollie retries on failure but does not retry indefinitely.
In-Person Payments (POS)
Mollie offers in-person card readers in select EU markets with a €20/month Pro plan or pay-as-you-go. Supported countries are narrower than the online merchant list — verify before committing.
Tax Collection & Remittance (MoR)
Mollie is a PSP, NOT a Merchant of Record. Merchants are responsible for collecting and remitting VAT/GST/sales tax themselves. If you want MoR-style tax handling, use Paddle, Lemon Squeezy, or FastSpring instead.
Dunning / Smart Retry
Subscriptions API retries failed recurring charges on a basic schedule, and emails customers about failed SEPA direct debits. No ML-driven recovery comparable to Stripe Smart Retries or Paddle Retain — third-party tools like Stunning/Churnkey are often used for dunning on Mollie.
Pricing Breakdown
Security & Compliance
Integration Prompt
✂
Copy & use this 7390-char integration prompt
Production-ready prompt for Claude / GPT / Cursor — handles setup, security, webhooks & gotchas
Copy & use this 7390-char integration prompt
Production-ready prompt for Claude / GPT / Cursor — handles setup, security, webhooks & gotchas
You are integrating Mollie as a Payment Service Provider into a [Django / Next.js / etc.] application.
## Key Concept: Mollie is a PSP, not a Merchant of Record
Mollie is a regulated European Payment Service Provider (not an MoR). That means:
- YOU are legally the seller — you collect and remit VAT/GST/sales tax yourself (use OSS/MOSS for EU digital goods).
- YOU issue invoices to your customers (Mollie has invoicing helpers but you own the liability).
- YOU must be a company registered in the EEA, UK, or Switzerland with a business IBAN — US/CA/AU/etc. merchants cannot sign up.
- Your buyers, however, can be anywhere in the world.
## Setup
1. Sign up at mollie.com, complete business verification, and obtain:
- `MOLLIE_API_KEY` — profile-scoped. Starts with `test_` (sandbox) or `live_` (production). Pulled from the dashboard under Developers > API keys.
- `MOLLIE_PROFILE_ID` — the profile the key belongs to.
2. Store in environment variables — NEVER commit keys or hardcode.
3. Install the official SDK: `pip install mollie-api-python` (or `npm i @mollie/api-client`, `composer require mollie/mollie-api-php`, etc.).
## Recommended Integration: Hosted Checkout Redirect
The simplest and most robust flow. Your server creates a payment, redirects the user to Mollie's hosted page, then confirms via webhook.
```python
from mollie.api.client import Client
mollie_client = Client()
mollie_client.set_api_key(os.environ['MOLLIE_API_KEY'])
payment = mollie_client.payments.create({
'amount': {'currency': 'EUR', 'value': '29.00'}, # always a string, two decimals
'description': 'Pro Plan - April 2026',
'redirectUrl': f'https://yourdomain.com/orders/{order.id}/return',
'webhookUrl': 'https://yourdomain.com/webhooks/mollie',
'metadata': {'order_id': str(order.id), 'user_id': str(user.id)},
# Optional: restrict to one method
# 'method': 'ideal',
})
# Save payment['id'] on your Order; then redirect:
return redirect(payment.checkout_url)
```
When the buyer returns to `redirectUrl`, do NOT trust the return as payment confirmation — the user may have closed the tab, refreshed, or been redirected before payment completed. Always confirm via the webhook.
## Webhook Handling (CRITICAL — Mollie-specific gotcha)
Mollie's webhook POSTs **only the payment ID** — no status, no amount, no signature. Your server MUST re-fetch the payment over HTTPS using your API key to get the real status. This is deliberate: it prevents anyone from faking webhooks to mark orders paid.
```python
# Django example
@csrf_exempt
@require_POST
def mollie_webhook(request):
payment_id = request.POST.get('id')
if not payment_id:
return HttpResponseBadRequest()
# Fetch the authoritative status from Mollie
payment = mollie_client.payments.get(payment_id)
order = Order.objects.get(mollie_payment_id=payment_id)
if payment.is_paid():
# Idempotent — safe to call multiple times
fulfill_order(order)
elif payment.is_failed() or payment.is_canceled() or payment.is_expired():
mark_order_failed(order)
# 'open' and 'pending' -> nothing yet, Mollie will ping again
return HttpResponse(status=200) # Always 200 or Mollie retries
```
### Webhook rules
- Webhook URL must be publicly reachable over HTTPS. Localhost requires a tunnel (ngrok, cloudflared) — Mollie does NOT retry indefinitely.
- Mollie retries failed webhook deliveries, so your handler MUST be idempotent. Check payment status before fulfilling; never assume this is the first call.
- Do not rely on the buyer hitting `redirectUrl` — always trust the webhook + API fetch as the source of truth.
- Return 200 fast (under 15s). Offload heavy work to a queue.
## Subscriptions / Recurring
Mollie subscriptions require a "first payment" to capture the mandate. Sequence:
```python
# 1. Create a Customer
customer = mollie_client.customers.create({
'name': user.name,
'email': user.email,
})
# 2. First payment with sequenceType='first' — customer completes checkout
first_payment = mollie_client.payments.create({
'amount': {'currency': 'EUR', 'value': '29.00'},
'customerId': customer.id,
'sequenceType': 'first',
'description': 'First payment to authorise monthly subscription',
'redirectUrl': 'https://yourdomain.com/subscribe/confirm',
'webhookUrl': 'https://yourdomain.com/webhooks/mollie',
})
# 3. After first payment is paid, create the subscription
subscription = mollie_client.customer_subscriptions.on(customer).create({
'amount': {'currency': 'EUR', 'value': '29.00'},
'interval': '1 month',
'description': 'Pro Plan - monthly',
'webhookUrl': 'https://yourdomain.com/webhooks/mollie',
})
```
Recurring payment methods are limited to SEPA Direct Debit and credit card. iDEAL cannot recur directly — Mollie converts the iDEAL mandate into a SEPA Direct Debit for subsequent charges.
## Payment Methods — Mollie's Strength
Mollie's biggest selling point is native European method support. With one integration you accept:
- **Cards**: Visa, Mastercard, Amex, Cartes Bancaires
- **Bank-based**: iDEAL (NL), Bancontact (BE), SEPA DD, SEPA Bank Transfer, Bacs (UK), Pay by Bank (open banking)
- **Wallets**: Apple Pay, Google Pay, PayPal
- **BNPL**: Klarna (Pay Later, Slice It, Pay Now)
- **Local**: BLIK + Przelewy24 (PL), EPS (AT), TWINT (CH), Trustly (Nordics), Wero
You can let Mollie display all enabled methods (default), or force a specific one via `method: 'ideal'`.
## Security Best Practices
- Never handle raw card data — use Mollie Components or the hosted checkout so card fields render inside Mollie's PCI scope.
- Store `payment.id` and `subscription.id` alongside your internal records, never card details.
- Enforce HTTPS for your webhook endpoint.
- Use idempotent webhook handlers. Mollie retries.
- Re-fetch payment status from the API inside the webhook — never trust the POST body for authoritative status.
- Keep API keys in env vars; rotate if leaked.
- Use `test_` keys for all development; test webhook flow with a tunnel.
## Testing
- Use the test mode API key (`test_...`) — test mode has a separate dashboard and doesn't touch real money.
- Force specific payment statuses with the test-mode Webhook Simulator (Dashboard > Developers > Simulator).
- Test the full subscription lifecycle: first payment → webhook → subscription create → recurring charge → failed renewal → cancellation.
- Test with a tunnel (ngrok) so Mollie can reach your local webhook.
## Common Gotchas
- **Webhook ID-only payload**: ALWAYS fetch via API to read status. Forgetting this is the #1 Mollie bug.
- **Amounts are strings** in Mollie JSON (`'29.00'` not `29.00`). They must be a string with exactly two decimals for most currencies.
- **Refunds don't return the transaction fee** — bake that into your refund cost model.
- **Chargeback fee is non-refundable** (€19 for cards, €10 for SEPA DD) even if you win the dispute.
- **Split payments (Connect) are EUR/GBP only** — no multicurrency splits.
- **iDEAL can't directly recur** — it converts to SEPA DD for subsequent charges, so the mandate UX differs from cards.
- **Test vs live** — each mode has a separate API key and data. You cannot migrate test payments to live.
- **If your account is placed under review, payouts freeze** — keep KYC docs current and diversify providers early.
Replace [Django / Next.js / etc.] with your stack. Follows PCI DSS best practices and handles common edge cases.
Common Pitfalls
8 itemsEEA / UK / Switzerland only — no US, Canada, Australia sellers
Mollie only onboards merchants registered in the European Economic Area, the UK, or Switzerland. If your company is incorporated in the US, Canada, Australia, LATAM, Asia, or anywhere else, you cannot use Mollie — even if all your customers are European. Mitigation: if you need an EU-native PSP but are incorporated outside the EEA, consider Stripe (global) or setting up an EU entity first.
Webhook gives you only a payment ID — you MUST re-fetch the status
Unlike Stripe or Paddle, Mollie webhooks contain no status field, no amount, no signature — just an `id` POST parameter. Your server must call GET /v2/payments/{id} with your API key to read the real status. This is deliberate (prevents forged webhooks triggering fulfilment) but bites developers who treat the webhook body as authoritative. Mitigation: never parse the webhook body for status; always fetch via the API. Store Mollie's payment ID alongside your internal order record.
Transaction fee is NOT refunded when you refund a payment
If a customer pays €50 (you pay ~€1.15 in fees) and you refund the €50, you lose the €1.15 permanently. For high-refund-rate businesses (fashion, digital goods), this adds up fast. Stripe behaves similarly for EU cards but refunds the fixed €0.25 portion in some markets — Mollie does not. Mitigation: model the refund-adjusted effective cost per transaction, not the headline rate.
Risk team freezes with vague reasons and slow appeals
Trustpilot and merchant forums in 2025–2026 show a recurring pattern: accounts get placed under review with payouts blocked for weeks or months, sometimes funds held for a year+, citing generic 'chargeback risk' even when no chargebacks exist. Mollie cites PSD2/AML obligations but communication is often slow and terse. Mitigation: diversify payment providers early (run Mollie + Stripe in parallel); submit full KYC docs proactively; keep volumes steady through your trial period.
Chargeback fee is non-refundable even if you win the dispute
€19 per credit-card chargeback and €10 per SEPA Direct Debit chargeback are deducted from your balance, and Mollie does NOT return the fee if you successfully dispute the chargeback. Some banks also add €4.50 for failed SEPA transactions. For subscription businesses with frequent card-not-recognised chargebacks, this is a hidden tax. Mitigation: implement Dynamic 3DS aggressively, use clear statement descriptors, and consider SEPA mandate flows to reduce card chargebacks.
Not a Merchant of Record — you handle all VAT / tax compliance
Mollie is a pure PSP, not an MoR. You remain responsible for VAT registration (OSS / MOSS / per-country), tax collection, invoice issuance, and filing. For EU → EU digital goods sales this is manageable via OSS; for global sales or B2B supply chains it can be complex. Mitigation: if you want to offload tax compliance entirely, use Paddle / Lemon Squeezy / FastSpring instead and accept the higher fees.
Split payments (Mollie Connect) are EUR/GBP only
Mollie Connect for Marketplaces supports split payments via a routing array on the Payments API, but the split mechanism currently only works with EUR and GBP — there is no multicurrency conversion on splits. If your marketplace has sellers in Poland (PLN) or Sweden (SEK), you will need to handle FX outside Mollie or settle everyone in EUR. Mitigation: fix the marketplace's settlement currency to EUR/GBP, or use a platform-of-record model instead of marketplace splits.
Dunning / revenue recovery is basic — plan for third-party tools
Mollie's Subscriptions API retries failed charges but on a simple schedule with no ML-driven optimisation like Stripe Smart Retries or Paddle Retain. For high-MRR SaaS this can mean preventable involuntary churn. Mitigation: plug Stunning, Churnkey, or Recover into Mollie, or handle retry logic server-side with your own exponential backoff and customer-outreach flow.
Community Pulse
European developers overwhelmingly praise Mollie for its clean Dutch-rooted design ethos, transparent per-method pricing, fast onboarding, and strong first-party support for local payment methods (iDEAL, Bancontact, SEPA) that Stripe historically underserved. The Payments API is widely viewed as simpler than Stripe's for basic flows, and merchants appreciate the no-lock-in, no-monthly-fee model. The dominant complaint in 2025–2026 is the risk team: a recurring pattern on Trustpilot of accounts being placed under review with payouts blocked for weeks to a year, with sparse communication from Mollie during the review window. Secondary gripes include the non-refundable transaction fee on refunds, the €19 chargeback fee that stays even when you win the dispute, and the basic subscription/dunning capabilities compared with Stripe Billing. Consensus heading into 2026: Mollie is the easy winner for European SMBs selling to European consumers — especially Netherlands/Belgium/DACH retail and indie SaaS — but at scale many teams either add Stripe as a second provider or migrate once volumes exceed €50K/month.
Sentiment last updated: April 2026 · We summarize — never copy — community content. Links go to original threads.
Changelog
-
all
Initial gateway entry created with full audit — pricing, availability, features, security, pitfalls, community sentiment, and trust score all verified from scratch. Overall trust score: 73.
-
logo
Added brand logo (downloaded from Wikimedia Commons 'Mollie-Logo-Black-2023.png', CC BY 4.0, author: Mollie; resized from 1600x472 to 400x118 transparent PNG). Brightness check on opaque pixels: 0.0 (pure black wordmark) — logo_bg left empty so the default cream card contrasts naturally.
LearnWithHasan.com · Payment Gateway Index · No affiliate links · Builder-first