
WooCommerce subscriptions and memberships turn one-off buyers into recurring revenue – and in my experience they are the single most valuable upgrade that most stores and service businesses never build. A shop selling coffee, supplements or pet food is leaving money on the table without a subscribe-and-save option; a consultant invoicing the same retainer manually every month is doing a robot’s job; a coach or publisher with good content is sitting on a membership that would pay the bills more reliably than any launch. The tooling on WordPress is mature and affordable – the hard part is doing the billing, the legal side and the retention mechanics properly, because a recurring model that leaks failed payments and annoys people at cancellation is worse than no recurring model at all.
This guide is a developer’s honest walkthrough: which recurring models fit which businesses, how the confusingly overlapping plugin categories (subscriptions, memberships, courses) actually map to problems, the billing fundamentals everyone underestimates – gateways, dunning, proration, pausing – the EU and German legal specifics in plain language, content protection, churn metrics, performance, and when a plugin stack is enough versus when custom work pays. I have built and rescued subscription and membership setups for stores and agencies in Germany, the UK and the US over 12+ years of WordPress work, so the numbers and trade-offs below come from real projects, not marketing pages.
Table of contents
- The recurring revenue models – and which businesses fit each
- Subscriptions vs memberships vs courses: the plugin clusters explained
- The billing engine: gateways, tokens and failed payments
- Proration, upgrades, pausing and cancellation flows
- EU and German specifics: the cancel button, VAT and invoices
- Protecting members-only content properly
- Churn and the metrics that actually matter
- Performance: caching and cron on subscription sites
- When a plugin stack is enough – and when custom development pays
- Migrating existing subscribers from another platform
- A launch plan for adding subscriptions to an existing store
- Frequently asked questions
The recurring revenue models – and which businesses fit each
“Subscriptions” is one word covering at least six different business models, and picking the right one matters more than picking the right plugin. The main shapes I build:
- Replenishment subscriptions. The customer consumes the product and needs more on a schedule: coffee, supplements, pet food, razors, printer ink, cosmetics. This is the easiest model to add to an existing WooCommerce store because the product already exists – you are only adding a delivery rhythm and a discount. It lives or dies on flexible scheduling (skip, pause, change frequency), because nobody’s consumption is perfectly regular.
- Box or curation subscriptions. The seller chooses the contents each cycle: snack boxes, book clubs, seasonal produce. Higher perceived value, higher operational load – you need a monthly curation and fulfilment process, and churn is typically higher than replenishment because novelty wears off.
- Digital memberships and content paywalls. Access to articles, videos, templates, a community or a tool for a monthly or annual fee. Near-zero marginal cost per member, so margins are excellent, but the content treadmill is real: members pay for what is coming, not just what exists.
- Online courses with recurring access. Either a one-off course price plus a membership for ongoing material, or an all-access subscription to a course library. This is where the plugin categories overlap most, and I unpick it in the next section.
- Service retainers billed automatically. Maintenance plans, SEO retainers, design hours, bookkeeping – anything you currently invoice monthly by hand. Moving retainers onto automatic recurring billing is the least glamorous and highest-return move on this list: no more chasing invoices, and the card on file quietly removes the monthly “should we continue?” decision. Agencies and B2B sellers should also look at my WooCommerce B2B and wholesale guide, because retainers and wholesale ordering often share one customer portal.
- Recurring donations. Non-profits and creators: small monthly amounts, donor-managed, with proper receipts. Technically identical to subscriptions, legally lighter in some respects, and worth doing on the same billing rails.
Most stores should start with a hybrid: keep one-off purchase as the default and add a subscribe-and-save option on the products people genuinely reorder. Forcing subscription-only on a product people want to try once first is the fastest way to kill conversion.

Subscriptions vs memberships vs courses: the plugin clusters explained
The WordPress ecosystem has three overlapping plugin categories, and half the bad buying decisions I see come from confusing them. Plainly:
Subscriptions plugins bill people on a schedule
WooCommerce Subscriptions (about USD 239 per year at the time of writing) is the standard: it turns any WooCommerce product into a recurring one, handles renewals, retries, upgrades and the customer’s “My subscriptions” area. If you sell physical products on a schedule, this cluster is yours. Alternatives exist (Subscriptions for WooCommerce by WebToffee, SUMO, YITH), and they are cheaper, but the official plugin has the deepest gateway integrations and the most battle-tested renewal engine – for real revenue I rarely recommend saving USD 150 a year here.
Membership plugins control who can see what
WooCommerce Memberships (about USD 199 per year) restricts content and grants perks (member pricing, early access) based on a plan – but it does not bill anyone by itself. Pair it with WooCommerce Subscriptions and you get the classic paid membership: subscription bills, membership gates. Outside WooCommerce, MemberPress (from about USD 179 per year) and Restrict Content Pro (from about USD 99 per year) are complete standalone answers – billing plus content protection in one plugin – and for a pure content membership with no physical products I often recommend them over the two-plugin Woo stack, because there is less machinery to maintain. If the site is already a store, staying inside WooCommerce keeps one checkout, one customer account and one reporting surface, which usually wins.
LMS plugins structure learning
LearnDash (from about USD 199 per year) and LifterLMS (free core, paid add-ons that add up to USD 300+ per year in practice) give you courses, lessons, quizzes, progress tracking and certificates. They are not billing engines either – LearnDash typically pairs with WooCommerce or MemberPress for payment. The rule of thumb: if people need progress tracking and quizzes, you need an LMS; if they just need access to organised content, a membership plugin with a well-structured site is simpler and faster.
Here is the map I sketch for clients, in table form:
| Model | Plugin cluster | Gateway needs | Complexity |
|---|---|---|---|
| Replenishment / subscribe-and-save | WooCommerce Subscriptions | Tokenised cards, ideally SEPA/wallets | Low-medium |
| Box subscription | WooCommerce Subscriptions + shipping logic | Tokenised cards | Medium |
| Content membership | Woo Subscriptions + Memberships, or MemberPress / Restrict Content Pro | Tokenised cards, SEPA for DACH | Low-medium |
| Course library | LearnDash or LifterLMS + billing plugin | Tokenised cards | Medium-high |
| Service retainer | WooCommerce Subscriptions (often hidden products) | SEPA direct debit shines here | Low |
| Recurring donations | GiveWP or Woo Subscriptions | Cards + SEPA, low fees matter | Low |
Budget honestly: a serious membership stack costs USD 300-600 per year in licences before hosting. That sounds like a lot until you compare it with hosted platforms taking 5-10% of revenue forever.
The billing engine: gateways, tokens and failed payments
This is the part people underestimate, and it is where I spend most of my time on subscription projects. A subscription is only as good as its ability to charge the same customer again next month without them being present.
Gateways that genuinely support recurring
Automatic renewals require the gateway to tokenise the payment method: the card or bank mandate is stored at the gateway (never on your server), and the plugin charges the token on schedule. Not every gateway integration supports this well. My short list for European stores: Stripe (excellent tokenisation, SEPA Direct Debit, Apple/Google Pay, smart retries; roughly 1.5% + EUR 0.25 for EU cards), Mollie (popular in the Netherlands and DACH, strong SEPA and iDEAL support, per-transaction pricing with no monthly fee) and PayPal (customers trust it, but reference-transaction support has to be enabled on your account and its recurring behaviour is the least flexible of the three – treat it as an addition, not the backbone). For German and Austrian customers, offering SEPA Direct Debit alongside cards noticeably lifts sign-ups: many customers there simply prefer bank debit for anything recurring, and mandates do not expire the way cards do.
Manual renewals are a trap
If a gateway only supports “manual renewals” – the customer must come back and pay each cycle – your renewal rate will collapse. I have seen stores lose a third of subscribers per cycle this way. If your preferred local gateway cannot tokenise, that is a reason to change gateway, not to accept manual renewals.
Failed payments and dunning – where most revenue leaks
Cards expire, get reissued, hit limits. On a typical store, 5-10% of renewal charges fail on the first attempt, and involuntary churn – people who never chose to leave – is often a third or more of total churn. The fix is dunning done properly:
- A retry schedule. WooCommerce Subscriptions ships a sensible default (several retries spread over about a week, e.g. after 12 hours, 2 days, 4 days, 7 days); Stripe adds machine-learned “smart retries” on top, which try again when the charge is most likely to succeed. Turn these on and leave them on.
- Customer emails at each stage. “Your payment failed, update your card here” with a direct link to the stored-payment-method page recovers a surprising share – the customer usually wants the product; their card just changed.
- Card-expiry warnings before renewal. Stripe’s card-updater refreshes many reissued cards automatically; for the rest, a pre-renewal email beats a failed charge.
- A defined end state. After the final retry, suspend rather than instantly cancel, and send one human-sounding email. A suspended subscriber who fixes a card two weeks later is revenue; a hard-cancelled one is an acquisition cost.
On one German client’s replenishment store, tightening exactly this – SEPA as an option, smart retries, three dunning emails – recovered roughly 60% of failed renewals that were previously just dying silently. No new customers, meaningfully more revenue.
Proration, upgrades, pausing and cancellation flows
Retention is designed, not hoped for. Four mechanics matter:
Upgrades, downgrades and proration
Let people move between plans without cancelling. WooCommerce Subscriptions calls this switching, and you decide whether the price difference is prorated (fair, slightly confusing on invoices) or applied at the next cycle (simpler, my usual recommendation for consumer products). A member who downgrades is retained; a member who has to cancel-and-rebuy usually just cancels.
Pause and skip
For replenishment products this is the single biggest churn reducer I know. People do not stop drinking coffee; they have a full shelf. If the only options are “receive another box” or “cancel”, they cancel – and most never come back. A visible “skip next delivery” and “pause for a month” in the account area converts would-be cancellations into short gaps. Make both self-service and one click; anything that requires emailing support does not count.
Cancellation flows
Easy cancellation is EU consumer law (next section) and it is also good retention practice, which surprises people. A short exit flow – one optional “why are you leaving?” question plus one targeted offer (“pause instead?”, “switch to every 8 weeks?”, “drop to the smaller plan?”) – saves a real fraction of cancellations without dark patterns. The exit-survey answers are also the cheapest product research you will ever get: “too much product” means push skip harder; “too expensive” means test a lighter tier.
The account area is the product
Subscribers judge you by the “My subscription” page: can they change address, payment method, frequency, next date? If yes, they stay and stop emailing support. If no, every small life change becomes a cancellation risk. Budget real design and testing time here – it matters more than the marketing site.
EU and German specifics: the cancel button, VAT and invoices
If you sell to EU consumers – and most of my clients do – three legal points belong in the build plan, not in a post-launch panic.
The German Kündigungsbutton in plain language
Since mid-2022, German law requires that consumers who can sign up for an ongoing contract online must be able to cancel it online, via a clearly labelled cancellation button (commonly “Verträge hier kündigen”) reachable from the website, leading to a simple confirmation page – no login wall as the only path, no phone-call requirement, and the customer gets a confirmation of the cancellation. If you sell subscriptions to consumers in Germany, build this: a public cancellation page, a form identifying the contract, and an automated confirmation email. It is a few hours of development, and not having it invites warning letters (Abmahnungen), which cost far more.
VAT on digital services in one paragraph
Digital memberships, courses and downloads sold to EU consumers are taxed at the customer’s country rate, not yours; the One Stop Shop (OSS, successor to MOSS) lets you register in one member state and file a single quarterly return covering all of them instead of registering everywhere. Practically: use a VAT-capable tax setup in WooCommerce (the built-in EU VAT handling plus a plugin or service for evidence collection), price gross so checkout totals do not jump around, and hand the OSS filing to your accountant. This is configuration work, not custom development – but it must be configured before the first sale, not after.
An invoice per charge
Every renewal is a sale and, for business customers especially, needs a proper sequential invoice – German B2B customers will ask for it every single month if it is not automatic. A PDF invoice plugin (WooCommerce PDF Invoices & Packing Slips and its paid tier, or an integration with lexoffice/sevDesk for German accounting) attaches a compliant invoice to each renewal email automatically. Set it up once; never think about it again.

Protecting members-only content properly
Membership sites fail quietly when “protected” content is not actually protected. Three layers matter:
- Roles and capabilities, not page tricks. Membership plugins map plans to WordPress roles or their own access rules. Access checks must run server-side on every request – hiding menu links or blurring content with CSS protects nothing, because the URL still serves the content to anyone who has it. When I audit membership sites, CSS-hidden “premium” content that Google has already indexed is the most common finding.
- Downloads through a handler, not naked file URLs. A PDF sitting at /wp-content/uploads/guide.pdf is public forever once one member shares the link. WooCommerce’s downloadable products serve files through a permission check (use the redirect or X-Accel-Redirect/X-Sendfile method so the web server enforces it); membership plugins have equivalents. The test is simple: paste the file URL into a private browser window – if it downloads, it is not protected.
- Drip content. Releasing course or membership material on a schedule (week 1, week 2…) keeps members subscribed past the first month and stops the sign-up-download-everything-cancel pattern. WooCommerce Memberships, MemberPress and every LMS support dripping; the business decision is the schedule, and the developer’s job is making sure dripped items are also access-checked, not merely unlisted.
Churn and the metrics that actually matter
Recurring businesses run on three numbers, and you should be able to see all of them without a spreadsheet:
- MRR (monthly recurring revenue): the sum of all active subscriptions normalised to a month. The headline number; watch its trend, not its absolute value.
- Churn rate: the percentage of subscribers (or revenue) lost per month. Under 5% monthly is healthy for consumer subscriptions; split voluntary churn (cancellations – fix with retention mechanics) from involuntary churn (failed payments – fix with dunning), because the cures are different.
- LTV (lifetime value): average revenue per subscriber over their whole life, roughly average monthly revenue divided by monthly churn. LTV tells you what you can afford to spend acquiring a subscriber – the number that makes ads maths work.
Where to see them: Stripe’s dashboard gives gateway-side MRR and churn for free and is honest enough for a start. For proper WooCommerce reporting, Metorik (from around USD 50 per month) is the tool I install on almost every serious store – subscription retention curves, cohort analysis, dunning emails and revenue forecasting in one place. WooCommerce’s built-in analytics show orders, not subscription health; do not run a recurring business on them alone.
Performance: caching and cron on subscription sites
Two technical realities separate subscription sites from brochure sites, and both bite after launch if nobody plans for them.
Logged-in members bypass your page cache
Full-page caching – the thing that makes most WordPress sites fast – is skipped for logged-in users, and on a membership site your most valuable visitors are all logged in. Every member request hits PHP and the database. The answer is the same stack I use on high-traffic stores: a persistent object cache (Redis) so repeated queries are served from memory, fragment caching for expensive blocks, PHP 8.2+ with OPcache, and enough hosting headroom for your concurrent member count. If your membership site is slow only for members, this is why – and it is fixable; it is the core of my WordPress speed optimisation work on logged-in sites.
Renewals depend on cron – make it real
Subscription renewals, retries, expiry emails and drip releases all run on scheduled background jobs (Action Scheduler on top of WP-Cron). By default WP-Cron only fires when someone visits the site – fine for a busy store, dangerous for a quiet niche membership where a slow Tuesday can silently delay renewals. On every subscription site I set up a real server cron (disable WP-Cron’s page-load trigger with DISABLE_WP_CRON and hit wp-cron.php or run WP-CLI every minute or five). It is a fifteen-minute job that prevents the “why did nobody get billed last week?” phone call.
When a plugin stack is enough – and when custom development pays
The honest default: for a subscribe-and-save store, a standard content membership or automated retainers, the plugin stacks above are enough, and custom code would be overkill. I tell clients this regularly. Custom development starts paying when:
- Pricing rules outgrow the plugins. Build-your-own-box with dynamic pricing, tiered volume discounts on subscriptions, loyalty pricing that deepens with tenure – at some point you are fighting the plugin instead of configuring it, and a small custom plugin implementing exactly your rules is cheaper to own than a stack of half-fitting extensions. My post on when you need a custom WordPress plugin covers the decision logic.
- The member portal becomes a product. Custom dashboards, usage data, booking, document exchange – beyond the standard account pages, this is custom plugin development territory, and it is where memberships differentiate.
- Subscription events must sync elsewhere. New subscriber → CRM; renewal invoice → accounting (lexoffice, DATEV export); cancellation → email automation; churn risk → a Slack alert. Webhooks and REST endpoints make WooCommerce a good citizen here, and wiring them reliably – with retries and logging, not fire-and-forget – is exactly my API integration work.
The pattern that works: launch on the standard stack, learn from three months of real subscriber behaviour, then spend custom-development money on the specific friction the data shows. Custom-first subscription builds usually solve imagined problems.
Migrating existing subscribers from another platform
Moving a subscription business – from Shopify, Cratejoy, a SaaS membership platform or an old custom system – is genuinely harder than moving a normal store, and anyone who tells you otherwise has not done it. Products, customers and content move easily. The hard part is payment tokens and mandates: the stored cards that make renewals automatic live at the gateway, tied to the old platform’s account.
The realistic playbook: if both platforms use the same Stripe account, customers and payment methods can often be re-linked to the new subscriptions with careful mapping – this is the good case, and it is detailed work but no customer action is needed. If the old platform used its own gateway (Shopify Payments is the classic lock-in example), tokens cannot follow you; Stripe and most serious gateways support PAN migration between processors on request, but platform-locked gateways may not, and then the honest answer is a re-consent campaign: import subscriptions in a pending state and email customers to confirm their payment method, accepting that a slice will not complete it. SEPA mandates are somewhat more portable than cards in practice, which helps DACH stores. Plan the numbers soberly – a 10-20% loss on a forced re-consent is common – and weigh that against what the old platform’s fees cost per year. This lock-in is also worth reading about before you choose a platform in the first place; I cover it in my WooCommerce vs Shopify comparison.
A launch plan for adding subscriptions to an existing store
For an existing WooCommerce store, this is the sequence I run:
- Pick one pilot product with obvious reorder behaviour – your data already knows which product people buy repeatedly. Do not subscription-enable the whole catalogue on day one.
- Do the discount maths before choosing a number. Subscribe-and-save discounts are typically 5-15%. Check it against margin: on a EUR 24 product with EUR 10 landed cost, 10% off leaves healthy margin; on a low-margin product, 15% plus payment fees can quietly eat the profit the subscription was meant to create. The discount buys predictable revenue and higher LTV – price it like a purchase, not a gesture. And do not cannibalise: if 90% of buyers would have reordered anyway at full price, a deep discount just repriced your best customers – start smaller and test.
- Set up the machine: gateway with tokenisation (plus SEPA for DACH), retry rules and dunning emails, pause/skip in the account area, cancellation flow with the German cancel button if relevant, per-charge invoices, VAT/OSS configuration for digital goods.
- Polish the path to subscribe: the subscribe option belongs on the product page with the saving spelled out in euros, and the checkout must not add friction – the principles in my checkout optimisation guide apply doubly when you are asking for an ongoing commitment.
- Measure from week one: take-rate on the pilot product, first-renewal survival (the cycle where most churn happens), failed-payment recovery rate. Expand to more products once the pilot’s numbers hold.
Realistic costs and timelines
At my rate of EUR 15 per hour, typical ranges: adding subscribe-and-save to an existing store (plugin setup, gateway, dunning, account area, legal pages) is usually 30-60 hours – EUR 450-900 plus licences – live within one to two weeks. A content membership site (billing, protection, drip, member area, invoices, OSS setup) runs 60-120 hours, EUR 900-1,800, three to five weeks. A course platform or custom member portal with integrations is 120-250+ hours, EUR 1,800-3,750+, six to ten weeks. Licences add USD 300-600 per year on the Woo stack. Compare that one-off cost with a hosted platform’s percentage of every renewal, forever, and the payback period on doing it properly in WooCommerce is usually months, not years.
Need help building recurring revenue on WooCommerce?
I set up and fix subscription and membership systems as part of my WooCommerce development service – billing, dunning, EU compliance, member areas and the integrations around them – at EUR 15 per hour or a fixed price quoted within 24 hours. Have a look at my portfolio, or send me a message with what you sell and what you want to recur – I reply within 24 hours.
Frequently asked questions
What are WooCommerce subscriptions?
WooCommerce subscriptions are recurring products on a WooCommerce store – physical replenishment, memberships, retainers or donations – billed automatically on a schedule, usually via the WooCommerce Subscriptions plugin and a tokenising payment gateway like Stripe or Mollie.
Do I need WooCommerce Memberships and WooCommerce Subscriptions?
Subscriptions handles the recurring billing; Memberships handles who can access what. A paid membership on a WooCommerce site typically needs both, while standalone plugins like MemberPress or Restrict Content Pro do both jobs in one.
Which payment gateway is best for WooCommerce subscriptions in Europe?
Stripe is the strongest all-rounder (cards, SEPA, smart retries); Mollie is excellent for the Netherlands and DACH; PayPal works as an additional option but should not be the backbone. The non-negotiable is proper tokenisation for automatic renewals.
How do I reduce churn on a subscription store?
Add self-service pause and skip (the biggest lever for replenishment products), run proper dunning with retries and card-update emails for failed payments, and use a short cancellation flow with a pause offer. Track voluntary and involuntary churn separately.
What is the German cancellation button requirement?
German law requires that consumers who can subscribe online must be able to cancel online via a clearly labelled button leading to a simple confirmation process, with a confirmation sent to the customer. It applies to ongoing consumer contracts sold to Germany and takes only a few hours to implement.
How much does it cost to add subscriptions to a WooCommerce store?
A subscribe-and-save pilot on an existing store is typically EUR 450-900 in development at my rate plus roughly USD 300-600 per year in plugin licences; a full membership site runs EUR 900-1,800; custom portals and course platforms more.
Can I run a WordPress membership site and a shop on the same site?
Yes – that is one of WooCommerce’s strengths: one checkout, one customer account and one reporting surface for products, subscriptions and members, which is usually simpler to run than separate platforms.