Side-by-side comparison of 7 payment processing services. Transaction fees, subscriptions, marketplace payouts, Merchant of Record options, and real code examples.
The typical online card payment flow
Why developers need payment APIs
Recurring billing with plan management, trials, prorations, usage-based metering, dunning for failed payments, and self-service upgrade/downgrade flows.
One-time purchases with cart checkout, multiple payment methods (cards, wallets, BNPL), shipping address collection, tax calculation, and order management.
Split payments between platform and sellers, onboard sub-merchants, handle payouts, manage 1099 tax reporting, and route funds across multiple parties.
Accept 135+ currencies, handle multi-currency pricing, cross-border fees, local payment methods (iDEAL, Bancontact, SEPA), and automatic currency conversion.
Unified online and in-person payments with card readers, tap-to-pay, QR codes, and inventory sync between physical and digital storefronts.
Sell software, ebooks, courses, and digital assets. License key delivery, download fulfillment, global tax handling, and creator-friendly checkout pages.
Side-by-side comparison of payment processing services
| Feature | Stripe | Square | PayPal | Braintree | Adyen | Paddle | LemonSqueezy |
|---|---|---|---|---|---|---|---|
| Free Plan | ✅ Pay per tx | ✅ Pay per tx | ✅ Pay per tx | ✅ Pay per tx | ❌ Custom pricing | ✅ Pay per tx | ✅ Pay per tx |
| Per-Transaction Fee | 2.9% + $0.30 | 2.9% + $0.30 online 2.6% + $0.10 in-person |
2.99% + $0.49 | 2.59% + $0.49 | Custom (volume) | 5% + $0.50 | 5% + $0.50 |
| International Cards | 🟡 +1.0% | 🟡 +1.5% | 🟡 +1.5% | 🟡 +1.0% | ✅ Included in custom rate | ✅ Included | ✅ Included |
| Currencies | 135+ | USD, CAD, AUD, GBP, EUR, JPY | 100+ (25 holding) | 130+ | 150+ | 40+ | 30+ |
| Payment Methods | Cards, wallets, BNPL, bank, crypto | Cards, wallets, Cash App, Afterpay | PayPal, Venmo, cards, BNPL | Cards, PayPal, Venmo, wallets | 250+ methods globally | Cards, PayPal, wallets | Cards, PayPal |
| Subscriptions | ✅ Stripe Billing (full) | ✅ Subscriptions API | ✅ Subscription plans | ✅ Recurring billing | ✅ Tokenization + recurring | ✅ Built-in (MoR) | ✅ Built-in (MoR) |
| Invoicing | ✅ Stripe Invoicing | ✅ Square Invoices | ✅ PayPal Invoicing | ❌ | ✅ | ✅ | ✅ |
| Marketplace / Connect | ✅ Stripe Connect | ❌ | ✅ PayPal for Marketplaces | ✅ Marketplace (PayPal) | ✅ Adyen for Platforms | ❌ | ❌ |
| In-Person POS | ✅ Stripe Terminal | ✅ Square Terminal/Reader | 🟡 Zettle (separate) | ❌ | ✅ In-person terminals | ❌ | ❌ |
| No-Code Checkout | ✅ Payment Links | ✅ Square Online Checkout | ✅ PayPal Buttons | 🟡 Drop-in UI only | ❌ | ✅ Checkout overlay | ✅ Checkout overlay |
| Hosted Checkout Page | ✅ Stripe Checkout | ✅ Square Checkout | ✅ PayPal Checkout | ✅ Drop-in UI | ✅ Drop-in | ✅ Paddle Checkout | ✅ LS Checkout |
| Apple Pay / Google Pay | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| ACH / Bank Transfer | ✅ 0.8% (capped $5) | ✅ ACH debit | ✅ Bank transfer | ✅ ACH Direct Debit | ✅ SEPA, ACH, iDEAL | ❌ | ❌ |
| 3D Secure | ✅ Adaptive 3DS | ✅ SCA compliant | ✅ 3DS2 | ✅ 3DS2 | ✅ Dynamic 3DS2 | ✅ | ✅ |
Detailed breakdown of each payment service
Who handles tax compliance and liability?
| Factor | Self-Managed (Stripe, Square, PayPal, Braintree) | Merchant of Record (Paddle, LemonSqueezy) |
|---|---|---|
| Sales Tax / VAT | ❌ You calculate, collect, and remit | ✅ They handle everything |
| Tax Registration | ❌ You register in each jurisdiction | ✅ They are registered globally |
| Invoicing | 🟡 You generate compliant invoices | ✅ Auto-generated, tax-compliant |
| Chargeback Liability | ❌ You handle disputes and fees | ✅ They handle disputes |
| Processing Cost | ✅ 2.6-2.99% + $0.10-0.49 | ❌ 5% + $0.50 per transaction |
| Customization | ✅ Full control over checkout UX | 🟡 Limited to overlay/hosted pages |
| Payment Methods | ✅ Hundreds of methods available | 🟡 Cards + PayPal primarily |
| Best For | Businesses with existing tax infrastructure or US-only sales | SaaS/digital products selling globally without tax ops team |
Stripe Tax ($0.50/tx) and TaxJar can add tax automation to self-managed solutions, reducing the gap.
Get started with each payment provider
// Install: npm install stripe
const stripe = require('stripe')('sk_test_...');
// Create a Checkout Session (server-side)
const session = await stripe.checkout.sessions.create({
mode: 'payment',
payment_method_types: ['card'],
line_items: [{
price_data: {
currency: 'usd',
product_data: {
name: 'Pro Plan',
description: 'Monthly subscription',
},
unit_amount: 2999, // $29.99 in cents
},
quantity: 1,
}],
success_url: 'https://example.com/success?session_id={CHECKOUT_SESSION_ID}',
cancel_url: 'https://example.com/cancel',
});
// Redirect customer to session.url
console.log(session.url);
// Install: npm install square
const { Client, Environment } = require('square');
const client = new Client({
accessToken: 'YOUR_ACCESS_TOKEN',
environment: Environment.Sandbox,
});
// Create a payment link
const response = await client.checkoutApi.createPaymentLink({
idempotencyKey: crypto.randomUUID(),
order: {
locationId: 'YOUR_LOCATION_ID',
lineItems: [{
name: 'Pro Plan',
quantity: '1',
basePriceMoney: {
amount: 2999n, // $29.99 in cents (BigInt)
currency: 'USD',
},
}],
},
});
console.log(response.result.paymentLink.url);
// Install: npm install @paypal/paypal-server-sdk
const paypal = require('@paypal/paypal-server-sdk');
const client = new paypal.Client({
clientCredentialsAuthCredentials: {
oAuthClientId: 'YOUR_CLIENT_ID',
oAuthClientSecret: 'YOUR_CLIENT_SECRET',
},
environment: paypal.Environment.Sandbox,
});
const ordersController = new paypal.OrdersController(client);
// Create an order
const order = await ordersController.ordersCreate({
body: {
intent: 'CAPTURE',
purchaseUnits: [{
amount: {
currencyCode: 'USD',
value: '29.99',
},
}],
},
});
// Redirect to order.result.links[1].href (approval URL)
console.log(order.result.id);
// Create a recurring price
const price = await stripe.prices.create({
currency: 'usd',
unit_amount: 2999,
recurring: { interval: 'month' },
product_data: { name: 'Pro Plan' },
});
// Create Checkout Session for subscription
const session = await stripe.checkout.sessions.create({
mode: 'subscription',
line_items: [{
price: price.id,
quantity: 1,
}],
success_url: 'https://example.com/success',
cancel_url: 'https://example.com/cancel',
});
// Or create subscription directly for existing customer
const subscription = await stripe.subscriptions.create({
customer: 'cus_...',
items: [{ price: price.id }],
payment_behavior: 'default_incomplete',
expand: ['latest_invoice.payment_intent'],
});
// Install: npm install @paddle/paddle-node-sdk
const { Paddle } = require('@paddle/paddle-node-sdk');
const paddle = new Paddle('YOUR_API_KEY');
// Create a product and price in Paddle dashboard
// Then generate a checkout session:
// Frontend: embed Paddle.js
// <script src="https://cdn.paddle.com/paddle/v2/paddle.js"></script>
// Initialize and open checkout
// Paddle.Initialize({ token: 'YOUR_CLIENT_TOKEN' });
// Paddle.Checkout.open({
// items: [{ priceId: 'pri_...' , quantity: 1 }],
// customer: { email: 'user@example.com' },
// });
// Server-side: verify via webhook or API
const subscription = await paddle.subscriptions.get(
'sub_...'
);
console.log(subscription.status); // active, paused, canceled
console.log(subscription.nextBilledAt);
const express = require('express');
const stripe = require('stripe')('sk_test_...');
const app = express();
// IMPORTANT: use raw body for signature verification
app.post('/webhook',
express.raw({ type: 'application/json' }),
(req, res) => {
const sig = req.headers['stripe-signature'];
let event;
try {
event = stripe.webhooks.constructEvent(
req.body, sig, 'whsec_...'
);
} catch (err) {
return res.status(400).send(`Webhook Error: ${err.message}`);
}
switch (event.type) {
case 'checkout.session.completed':
// Fulfill the order
const session = event.data.object;
console.log('Payment succeeded:', session.id);
break;
case 'invoice.payment_failed':
// Handle failed subscription payment
console.log('Payment failed for:', event.data.object.customer);
break;
}
res.json({ received: true });
}
);
const crypto = require('crypto');
const express = require('express');
const app = express();
const WEBHOOK_SIGNATURE_KEY = 'YOUR_SIGNATURE_KEY';
app.post('/square-webhook',
express.raw({ type: 'application/json' }),
(req, res) => {
const signature = req.headers['x-square-hmacsha256-signature'];
const url = 'https://example.com/square-webhook';
// Verify signature
const hmac = crypto.createHmac('sha256', WEBHOOK_SIGNATURE_KEY);
hmac.update(url + req.body.toString());
const expected = hmac.digest('base64');
if (signature !== expected) {
return res.status(403).send('Invalid signature');
}
const event = JSON.parse(req.body);
if (event.type === 'payment.completed') {
const payment = event.data.object.payment;
console.log('Payment completed:', payment.id);
console.log('Amount:', payment.amountMoney.amount);
}
res.status(200).send('OK');
}
);
Estimated monthly processing fees by revenue volume
| Monthly Revenue | Stripe | Square (online) | PayPal | Braintree | Paddle (MoR) | LemonSqueezy (MoR) |
|---|---|---|---|---|---|---|
| $10K ~200 txns @ $50 avg |
$350 2.9% + $60 |
$350 2.9% + $60 |
$397 2.99% + $98 |
$357 2.59% + $98 |
$600 5% + $100 |
$600 5% + $100 |
| $50K ~1,000 txns @ $50 avg |
$1,750 2.9% + $300 |
$1,750 2.9% + $300 |
$1,985 2.99% + $490 |
$1,785 2.59% + $490 |
$3,000 5% + $500 |
$3,000 5% + $500 |
| $100K ~2,000 txns @ $50 avg |
$3,500 2.9% + $600 |
$3,500 2.9% + $600 |
$3,970 2.99% + $980 |
$3,570 2.59% + $980 |
$6,000 5% + $1,000 |
$6,000 5% + $1,000 |
| $500K ~10,000 txns @ $50 avg |
$17,500 2.9% + $3,000 |
$17,500 2.9% + $3,000 |
$19,850 2.99% + $4,900 |
$17,850 2.59% + $4,900 |
$30,000 5% + $5,000 |
$30,000 5% + $5,000 |
Estimates assume $50 average transaction, domestic US cards only. International cards, currency conversion, chargebacks, and instant payouts add additional fees. Adyen excluded (custom enterprise pricing). At $500K+/mo, all providers offer volume discounts on request. MoR fees include tax handling that would otherwise cost $100-500+/mo separately.
Quick decision guide based on your business type
Need recurring payments, plan management, trial periods, prorations, usage-based billing, dunning, and customer portal.
One-time purchases, multiple payment methods, cart checkout, shipping integration, and high conversion rates.
Split payments between sellers and platform, sub-merchant onboarding, payouts, and 1099 tax reporting.
Accept 200+ payment methods globally, handle multi-currency, local payment methods, and cross-border compliance.
Unified commerce across physical stores and online. Card readers, POS system, inventory sync, and team management.
Sell software, ebooks, courses globally without dealing with VAT/GST. Need simple checkout and license key delivery.
Frostbyte Wallet API supports 9 chains with 0.3% swap fees. Accept ETH, USDC, USDT, and more with a simple REST API. No monthly fees.
Try Frostbyte API →