WooCommerce Payment Gateway Fees Explained for US Stores

Your WooCommerce payment gateway fees are not the number printed on the processor’s pricing page. That headline rate is one line of five or six, and the others — the international surcharge, the currency conversion, the dispute fee, the processing fee you do not get back when you refund an order — are what separate the rate you budgeted for from the number your bookkeeper actually sees.

Processor rate cards change, and reprinting one here would only guarantee it is wrong in six months. So this is the anatomy of a gateway bill instead: every cost line that appears on it, one fully worked example built from published US rates, and a snippet that turns your own WooCommerce order data into a real effective rate. Where a figure comes from a vendor I have taken it from that vendor’s own documentation and dated it, and where I could not confirm a price first-hand I have told you where to look rather than guessing.

The five things I judged each option on

  • Total cost per order, not the headline rate. A processor two tenths of a percent cheaper on cards can cost you more once disputes and refunds are counted.
  • Who holds your money, and for how long. Payout timing is a cash flow decision that gets treated as a footnote.
  • What the customer sees when it fails. A declined card is normal. A checkout with no payment method showing is a dead store.
  • How much of it lives inside WooCommerce. Every refund you have to issue in a second dashboard is a reconciliation error waiting to happen.
  • Exit cost. The question nobody asks until they need to. Saved cards and subscription tokens do not automatically follow you to a new processor.

The eight lines behind your WooCommerce payment gateway fees

Whichever processor you run, the bill is assembled from the same components. Read your own statement against this list and you will usually find two or three lines you did not know you were paying.

  1. The domestic card rate. A percentage plus a fixed amount per successful charge. The fixed part is the one small stores underestimate.
  2. The international card surcharge. Charged when the card was issued outside your country, not when the buyer is travelling.
  3. Currency conversion. Applies when the charge currency and your payout currency differ. Selling in USD only does not exempt you if your bank account is elsewhere.
  4. Dispute and chargeback fees. A flat charge per dispute, usually levied whether or not you eventually win.
  5. Refunds. You return the customer’s money; the processing fee normally stays with the processor.
  6. Payout timing and instant payouts. The standard schedule is free. Getting your money sooner is not.
  7. Monthly, gateway or hardware fees. Many online-only setups have none. Add a card reader or a legacy merchant account and this line reappears.
  8. Failed payment retries. Subscription stores pay the fixed fee on retries that eventually succeed, and lose the revenue outright on the ones that do not.

A worked example using published US rates

To make this concrete I need a rate card I can actually cite. WooPayments publishes its per-country fees openly, so I have used the US table below. These figures are from the WooPayments fees documentation and the WooPayments US page as of 6 September 2026. Check them before you rely on them — that is the point of this article.

Fee line (United States)Published rate
Cards, domestic2.90% + $0.30
Cards, international+1.00%
Currency conversion+2.00%
Dispute$15.00 flat
Affirm / Afterpay6.00% + $0.30
Instant payout1.50% of the payout amount
Card reader, per active reader per month$5.00 (active = 3 or more transaction attempts)
Setup and monthly fees for online paymentsNone

Now run a plausible store through it. The store numbers below are mine, chosen to be ordinary rather than flattering: 300 orders a month, an average order value of $65, so $19,500 in gross sales. Six percent of orders come from cards issued abroad, four percent get refunded, and two disputes land in the month.

  • Percentage: 2.90% of $19,500 = $565.50
  • Fixed: 300 × $0.30 = $90.00
  • International: 18 orders at $65 = $1,170, and 1.00% of that = $11.70
  • Disputes: 2 × $15.00 = $30.00
  • Refunds: 12 orders, $780 handed back. The roughly $26 of processing fees on those orders stays gone.

Total fees: $697.20. Revenue you actually keep after refunds: $18,720. That is an effective rate of 3.72% against a headline rate of 2.90% — 82 basis points of daylight, and none of it is a surprise once you know the lines exist. On $234,000 of annual sales that gap is a little over $1,900.

The fixed fee is the one that ambushes small baskets. On a $65 order, $0.30 is half a percent. On a $12 order it is 2.5% all by itself, pushing the effective rate past 5% before anything else is counted. If you sell low-priced items, your fee problem is a basket size problem, and no processor switch fixes it.

Choosing between the gateways US stores actually use

One thing worth knowing before you agonise over this choice: WooCommerce’s own documentation states plainly that Stripe is its payments partner, and signing up for WooPayments hands you a verification popup from connect.stripe.com. WooPayments also lists WooPay, Amazon Pay, Apple Pay, Google Pay and Link by Stripe among its express checkout options. So the decision between WooPayments and a direct Stripe account is not really a decision about card network economics. It is a decision about where the account relationship lives, who you email when a payout stalls, and how many dashboards you want open.

OptionBest forMain strengthMain weaknessWhere to check pricing
WooPaymentsStores that want payments, refunds and disputes inside wp-adminOne dashboard; fee table published per countryYou sit one step removed from the underlying Stripe account; instant payouts cost 1.50%woocommerce.com fees documentation
Stripe direct (WooCommerce Stripe Gateway)Teams that want the full Stripe toolset and API accessFraud rules, custom flows, everything Stripe ships firstTwo dashboards to reconcile; more of the setup is yours to ownstripe.com/pricing
PayPal (PayPal Payments extension)Stores where a real share of buyers insist on paying with PayPalBuyer trust and conversion on carts that would otherwise be abandonedDisputes and balance holds have historically been the least pleasant part of the ecosystempaypal.com business fees page
SquareShops with a physical counter and one shared inventoryIn-person and online under one accountOnline-only feature set trails the pure e-commerce processorssquareup.com pricing
Offline (bank transfer, cheque, invoice)B2B and high-ticket ordersNo percentage at allManual reconciliation, no fraud protection, slow to clearFree — it is built into WooCommerce

The table is deliberately not a ranking. For most US stores under a few hundred orders a month, any of the first four will be fine and the difference in annual fees is smaller than one good week of traffic. What is not small is the switching cost. Saved cards do not travel between processors unless both sides support a migration, and subscription tokens are worse — moving them is a project, not an afternoon. Pick on the operational fit, and then leave it alone.

Whichever you install, treat it like the load-bearing extension it is. A gateway plugin update that goes wrong takes the checkout with it, so run it through the same routine you would use for anything else: staging first, one plugin at a time, and a plan for updating plugins without breaking your website. Payments and shipping are the two places where store costs actually live, and it is worth reading how the WooCommerce shipping methods compare for US stores alongside this, because a free-shipping threshold set badly will cost you more per month than any gateway will.

Work out your own effective rate

Stop estimating. You need two numbers: gross sales for a month, and the total your processor deducted in that same month. The second comes off your processor’s statement. The first you can pull straight out of WooCommerce with a few lines of PHP.

Use wc_get_orders() rather than a raw SQL query. Orders may live in the legacy post tables or in the HPOS tables depending on your store, and wc_get_orders() reads correctly from either — a hand-written query against wp_postmeta will silently return nothing on an HPOS store. Save the following as effective-rate.php with the usual PHP opening tag on the first line, then run it with WP-CLI.

// Run with:  wp eval-file effective-rate.php

$gross = 0.0;
$count = 0;
$page  = 1;

do {
    $orders = wc_get_orders( array(
        'limit'        => 200,
        'page'         => $page,
        'status'       => array( 'wc-completed', 'wc-processing' ),
        'date_created' => '>' . ( time() - 30 * DAY_IN_SECONDS ),
    ) );

    foreach ( $orders as $order ) {
        $gross += (float) $order->get_total();
        $count++;
    }

    $page++;
} while ( count( $orders ) === 200 );

echo 'Orders: ' . $count . PHP_EOL;
echo 'Gross:  ' . number_format( $gross, 2 ) . PHP_EOL;
echo 'AOV:    ' . number_format( $count ? $gross / $count : 0, 2 ) . PHP_EOL;

The paging matters. Passing 'limit' => -1 on a store with tens of thousands of orders will hydrate every one of them into memory and hand you a fatal error instead of a number. Two hundred at a time is dull and it finishes.

Divide the processor’s total deductions by that gross figure and you have your real effective rate. Do it for three consecutive months before you draw any conclusion — one month with an unusual refund or a single dispute will mislead you badly. If the number is more than about a percentage point above your headline rate, the gap is almost always refunds, disputes or currency conversion, in that order.

The fee lines you can actually reduce

Most of the rate card is not negotiable for a store your size. These parts are yours to control.

  • Raise the basket, not the argument with your processor. Bundles, minimum order values and a free-shipping threshold all attack the fixed-fee problem directly. Going from a $12 average order to a $30 one does more for your effective rate than any processor will.
  • Fix involuntary churn. On a subscription store, expired cards are usually a bigger revenue line than fees. Card account updater services and a sane dunning schedule recover real money.
  • Cut disputes at the source. A recognisable billing descriptor, an order confirmation that arrives immediately, and tracking numbers on every shipment prevent most “I don’t recognise this charge” chargebacks. At $15 a dispute plus the goods, prevention pays quickly.
  • Turn instant payouts off unless you genuinely need them. 1.50% of every payout is an expensive overdraft. Standard payouts are free.
  • Avoid converting currency twice. If you sell into Canada or Europe, presenting local currency and settling into a matching account beats paying 2.00% on conversion, then a bank spread on top.

High-ticket B2B orders are the obvious exception

At 2.90% + $0.30, a $4,000 order costs $116.30 to accept on a card. For wholesale and trade customers who are used to paying by bank transfer anyway, that is money you are handing over for no benefit. WooCommerce already ships two offline methods — Direct bank transfer (BACS) and Check payments — under WooCommerce → Settings → Payments. Enable one, restrict it to the customer role or the order value that warrants it, and the fee is zero. Start there; it is free and it is already installed.

If you want something closer to a proper invoice flow around that, my own Invoice Payment plugin adds one. Disclosure: I build and maintain this plugin. Judged by the same criteria as everything else here, its weakness is that it is a small plugin with a modest install base rather than a mature accounting integration, so test it on staging before you point a four-figure order at it. For plenty of stores the core BACS method is genuinely enough, and I would rather you used that than installed something you do not need.

Whatever you enable, place a real test order through every active method before you call it done — including a refund, so you find out how that flow behaves before a customer does. This is exactly the kind of change where you want to test the site properly before it goes live.

Frequently asked questions

Does WooCommerce take a percentage of my sales?

No. WooCommerce core is free and takes no cut of your revenue. Every percentage you pay goes to the payment processor. WooPayments specifically publishes no setup fee and no monthly fee for online payments, and the same pay-as-you-go structure is normal across the major processors — the cost is per transaction, not per month.

Do I get the processing fee back when I refund an order?

Usually not. The WooPayments documentation states directly that transaction fees are not refunded when you issue a refund to a customer, and most processors work the same way. Practically, this means a refunded order costs you the full order value plus the fee you already paid on it — which is why a high return rate hits your effective rate harder than most owners expect. Check your own processor’s refund policy; a few do return the percentage but keep the fixed portion.

What counts as a good effective rate for a US WooCommerce store?

There is no single benchmark, because it depends almost entirely on your average order value, your refund rate and how much international business you do. The useful comparison is against yourself: measure it for three months, then check whether the gap between your headline rate and your effective rate is shrinking. A widening gap means refunds or disputes are climbing, and that is a merchandising problem showing up on a payments statement.

Can I add a surcharge to pass card fees on to customers?

Sometimes, and it is more constrained than plugin marketing suggests. Card network rules impose conditions on surcharging, several US states restrict or prohibit it, debit cards are commonly treated differently from credit, and your processor’s own agreement may forbid it outright. I am not a lawyer and this is not legal advice — check your merchant agreement and take proper advice for the states you sell into before you enable a surcharge plugin. Offering a discounted price for bank transfer is often the simpler route to the same outcome.

My payment gateway disappeared from checkout. What now?

Gateways vanish rather than error, which makes this look mysterious and rarely is. Check in this order: the gateway is still enabled under WooCommerce → Settings → Payments; the store is served over HTTPS with a valid certificate; API keys have not expired or been rotated; the cart total is not below or above a limit the gateway enforces; and the customer’s billing country is one the gateway supports. If all of those are clean, it is almost certainly an extension clash, and the fix is to isolate the plugin conflict methodically rather than deactivating things at random on a live store.

The short version

Measure your effective rate before you shop for a new processor. Most stores that go looking for a cheaper gateway are actually looking at a refund rate, a dispute problem or a $12 average order, and none of those follow a rate card. Once you know the real number, pick the gateway that fits how you work rather than the one that wins by a tenth of a percent, and spend the energy you saved on raising the basket instead.

Leave a Reply to This Post