Not sure which Odoo apps you actually need? Start with a free diagnostic call Book a call →
Odoo Subscriptions

Recurring revenue that renews itself. Reconciles itself too, if you set it up right.

Odoo Subscriptions turns a sales order into a recurring contract — automatic renewal, automatic invoicing, prorated upgrades and downgrades, and a live MRR/churn dashboard sitting on top of the same database as your accounting. What it doesn’t do out of the box: metered usage on top of a flat plan, multi-currency billing that doesn’t drift, and revenue recognition that actually matches what your accountant needs to close the month. That’s the part we build.

Book a call → See what we configure
What Odoo Subscriptions does out of the box

One plan or fifty tiers. Same recurring engine.

Subscription contracts live in the same database as Sales, Invoicing and Accounting — a renewal isn’t a separate system pretending to talk to your ERP, it’s a sales order that repeats itself on schedule.

Recurring billing plans

Define pricing per plan — monthly, quarterly, annual, or custom periods — with per-product recurring prices and automatic tax application at each cycle.

Automatic renewal & invoicing

Contracts renew and invoice themselves on the scheduled date with no manual trigger. Renewal quotations, invoice generation and payment collection all run on cron, not on someone remembering.

Upgrade/downgrade proration

Mid-cycle plan changes prorate automatically — the customer is credited or charged the difference for the remaining period, calculated against the existing invoice cycle rather than restarting it.

MRR & churn dashboards

Native reporting breaks down MRR into new, expansion, contraction and churned revenue, with cohort and forecast views — the numbers a SaaS or services business actually needs to run the board meeting.

Dunning for failed payments

Failed automatic payments trigger a configurable retry schedule and reminder emails before a contract is flagged “to renew” or closed — the mechanism exists natively, tuning the sequence is where most installs stop short.

Customer self-service portal

Customers can view active plans, upgrade or downgrade, update payment methods and see invoice history from the portal — without a support ticket for every plan change.

Payment gateways & integrations we’ve configured

Recurring billing needs a recurring charge.

Odoo ships with Stripe, PayPal and Adyen connectors for automatic recurring payments. Regional gateways — especially in India — usually need the tokenised-mandate flow wired in by hand.

Stripe recurring payments & webhooks Razorpay subscriptions & e-mandates PayPal recurring billing UPI Autopay mandate registration Multi-currency plan pricing Accounting revenue recognition schedules Metered / usage-based add-ons Dunning email sequence customisation Tax engine sync (GST / VAT per cycle) CRM-to-subscription handoff

If your payment provider isn’t on Odoo’s default connector list, tell us which one — tokenised recurring-charge APIs follow a similar shape across gateways, and we’ve likely built something close already.

Where standard Subscriptions falls over

Flat plans work. Usage-based ones don’t, natively.

Un-configured Subscriptions

  • Every plan is flat-fee — there’s no native way to bill for actual usage on top
  • Multi-currency contracts drift because exchange-rate handling was never set at the plan level
  • MRR in the dashboard doesn’t match what accounting recognises as revenue that month
  • Dunning emails are the generic default copy, sent on the generic default schedule
  • Failed payments quietly churn customers who would have paid on a second attempt
  • Upgrades mid-cycle either double-charge or under-charge because proration was never checked against real invoices

Configured properly

  • Metered add-ons layered on top of the flat plan — usage recorded and billed at cycle close
  • Multi-currency plans priced and invoiced in the customer’s currency without manual FX correction
  • Revenue recognition schedule matched to accounting’s actual close process, not just the dashboard MRR figure
  • Dunning sequence tuned to your retry cadence, tone and grace period before suspension
  • Retry logic and smart-routing on failed cards reduce involuntary churn before it happens
  • Proration verified against real invoice runs before go-live, not assumed to work from the demo
What Entrophy builds on top

Standard Subscriptions, tuned to your billing model.

📊

Metered billing add-ons

Usage counters (API calls, seats, transactions, whatever your product meters) recorded against the contract and billed on top of the flat plan at cycle close — built as server actions since Odoo’s native model is flat-fee first.

Dunning email sequences

Custom retry cadence, reminder copy and grace-period logic before a failed-payment contract gets suspended — matched to your actual tolerance for chasing customers, not the default one-size schedule.

Stripe / Razorpay regional integration

Tokenised mandate setup for Indian UPI Autopay and e-NACH, alongside Stripe for international customers — so one subscription engine can bill both markets correctly.

Multi-currency plan logic

Pricing and invoicing per customer currency with exchange-rate handling that doesn’t silently drift between renewal cycles.

Revenue recognition sync

Recurring invoice schedules mapped to deferred-revenue accounting entries, so what the MRR dashboard shows and what the P&L recognises actually agree.

Self-service portal extensions

Plan comparison, add-on selection and usage visibility added to the customer portal beyond the default upgrade/downgrade/cancel options.

Illustrative pattern

A SaaS business whose MRR dashboard lied.

The scenario below is a representative pattern we design for — not a specific client engagement.

A subscription business runs flat monthly plans in Odoo, plus a per-seat add-on tracked in a separate spreadsheet because the native plan model doesn’t bill variable usage. Every month, finance manually adjusts invoices to add the seat overage, and the MRR dashboard shows a number nobody trusts because it only reflects the flat-fee portion.

The fix is a metered-usage layer bolted onto the existing subscription model: seat count recorded against the contract, billed automatically at cycle close, and rolled into the same MRR reporting. The spreadsheet disappears; the dashboard number becomes the number finance actually uses.

Spreadsheet seat billing
Manual invoice adjustment every cycle, MRR untrusted
BEFORE
↓ build metered-usage layer on the contract
Usage billed automatically
One MRR number, no manual reconciliation
AFTER
Autorenewal, invoicing & dunning on cron, not memory
1–3 wkstypical subscription configuration
0spreadsheets needed for usage billing once configured
30-daystabilisation on every engagement

Get your recurring billing actually recurring.

Tell us your plan structure, payment gateway and whatever’s currently tracked outside Odoo. We’ll scope a fixed-price configuration — billing, dunning, currency and reconciliation included.