Skip to main content
Recurring & Subscription Billing — A build-to-order Odoo module that automates recurring invoicing, renewals, proration, and  — 1/1Illustrative preview

A build-to-order Odoo module that automates recurring invoicing,

renewals, proration, and usage-based billing for subscription and service businesses.

ECOSIRE builds, installs, and supports it around your exact billing cycles.

What is Recurring & Subscription Billing?

A build-to-order Odoo module that automates recurring invoicing, renewals, proration, and usage-based billing for subscription and service businesses. ECOSIRE builds, installs, and supports it around your exact billing cycles. Built to order by ECOSIRE for Odoo 17, 18, 19 — indicative price from $999.00 USD; request a quote for a scoped proposal.

Key Features

Dedicated `subscription` model (`models.Model`) with plan, billing cycle, next-invoice date, and a `draft`/`active`/`paused`/`cancelled`/`expired` state machine
`ir.cron` scheduled action that scans due subscriptions and drafts `account.move` invoices idempotently — a re-run never double-bills
Configurable billing intervals: monthly, quarterly, annual, or custom day/month intervals with anniversary-date or fixed-close scheduling
Day-count proration on mid-cycle upgrades, downgrades, and plan swaps via `@api.depends` compute methods
Renewal handling with auto-renew, renew-with-notice, and manual-approval modes plus lead-time reminder cron
Cancellation flows: end-of-term wind-down versus immediate cancellation with automatic `account.move` credit note
Optional usage/metered billing lane — consumption records aggregate into each period's invoice line at close
QWeb reports for subscription summary, invoice, and pre-renewal notice, rendered in the customer's language
Record rules + `ir.model.access.csv` so account managers see only their assigned customers' subscriptions
Ties into native Odoo tax, multi-currency, fiscal positions, and payment providers — no parallel accounting
Analytic account and journal routing per plan for clean subscription-revenue reporting
Failed-payment / dunning hooks that flag overdue cycles and can pause the subscription after a configurable grace period
Full XML-RPC / JSON-RPC external API exposure for storefront, CRM, or portal integration
Supports Odoo 17.0, 18.0, and 19.0 on Community or Enterprise, packaged with a clean `__manifest__.py` and dependency list

Built to order, done for you

No DIY setup — a working app, built, installed and supported by ECOSIRE.

  1. 1

    You order

    Start with a one-time build price. We scope it with you at kickoff.

  2. 2

    We build & install

    ECOSIRE builds, configures and installs it on your Odoo.

  3. 3

    Go live + support

    You go live in about one working week, with two weeks of go-live support. Defects in the code we deliver are fixed free of charge.

Technical Specifications

Odoo Compatibility
Odoo 17, Odoo 18, Odoo 19
Editions
Enterprise & Community
License
Licence confirmation required
Python Requirement
Python 3.10+
Database
PostgreSQL 12+

About this Product

Subscription and service businesses lose money in the gaps between billing events: an invoice that should have gone out on the 1st but didn't, a customer who upgraded mid-cycle but was charged the old rate, a renewal that lapsed because nobody watched the expiry date. Odoo Community has no native subscription engine at all, and while Odoo Enterprise ships the sale_subscription app, teams frequently outgrow it — they need proration rules it doesn't model, metered/usage components it doesn't meter, dunning logic tuned to their payment providers, or a billing calendar that follows anniversary dates rather than a fixed monthly close. That is where a purpose-built module earns its place.

ECOSIRE builds a Recurring & Subscription Billing module tailored to your contracts and billing policy. At its core is a subscription model (models.Model) that carries the plan, billing cycle (monthly, quarterly, annual, or a custom interval), next-invoice date, and lifecycle state managed through a proper state machine (draft → active → paused → cancelled → expired). Recurring invoice generation runs off an ir.cron scheduled action (an automated action) that scans subscriptions whose next_invoice_date has arrived, drafts account.move records against the correct journals and analytic accounts, and advances the cycle — all idempotently, so a re-run never double-bills. Amounts on mid-cycle plan changes are handled by compute methods decorated with @api.depends, applying day-count proration so an upgrade on the 12th charges only the remaining period.

On top of the recurring core we build the pieces native Odoo makes you improvise: configurable renewal handling (auto-renew, renew-with-notice, or manual approval), cancellation with end-of-term versus immediate-with-credit-note options, and an optional usage/metered billing lane where consumption records aggregate into each period's invoice line. Access is locked down with ir.model.access.csv plus record rules so account managers see only their own customers' subscriptions, and every plan, invoice, and renewal is driven from clean backend views (XML) with QWeb subscription and renewal-notice reports. Because everything is standard Odoo accounting underneath, your existing tax, multi-currency, and payment-provider setup applies, and the whole engine is reachable over the XML-RPC / JSON-RPC external API for integration with a storefront or CRM.

This is a build-to-order engagement, not an instant download. We start with a short scoping call to map your billing cycles, proration policy, renewal rules, and edge cases, then build the module against your Odoo 17.0, 18.0, or 19.0 (Community or Enterprise) environment. Typical delivery is one working week from confirmed scope. You receive the installable source, deployment on a staging instance for UAT, and a defined post-go-live support window — no fabricated benchmarks, just a module built to bill your customers correctly.

What you get

  • Installable module source code (the exact `__manifest__.py`, models, views, security, and reports) built for your Odoo major version
  • Installation and configuration on your staging environment, including cron scheduling and journal/analytic setup
  • Technical documentation: data model, state machine, cron logic, proration formula, and extension points
  • End-user guide plus a live training session for your billing and finance team
  • UAT run on staging with sample subscriptions and a documented rollback plan before production go-live
  • Defined post-go-live support window for defect fixes and configuration adjustments
  • Git repository handover with commit history, branch strategy, and version-tagged release
  • Security review covering `ir.model.access.csv` entries and record rules for subscription data isolation

Who this is for

SaaS & Software Subscription Operators

Businesses billing tiered plans on monthly and annual cycles who need reliable auto-renewal, mid-cycle proration on upgrades, and dunning that matches their payment providers — beyond what stock `sale_subscription` models.

Recurring-Service & Retainer Firms

Agencies, maintenance providers, and managed-service shops on fixed retainers or anniversary-date contracts who need scheduled recurring invoices, renewal-notice reports, and clean subscription-revenue reporting per client.

Usage-Based & Metered Billing Businesses

Utilities, hosting, and API/consumption vendors who bill a recurring base plus metered usage and need consumption records to aggregate accurately into each period's Odoo invoice.

Finance & Controllers on Odoo Community

Teams on Odoo Community with no native subscription engine at all who need a proper recurring-billing module wired into their existing accounting, tax, and multi-currency setup rather than a spreadsheet.

How Recurring & Subscription Billing Compares

CriterionECOSIRECustom BuildCompetitorOdoo Native
Recurring invoice engineIdempotent `ir.cron` drafting `account.move` on your cycleWhatever you build and debug in-houseFixed cron logic, limited cycle optionsNone in Community; `sale_subscription` only on Enterprise
Mid-cycle prorationDay-count proration via `@api.depends` to your policyHand-rolled, error-prone edge casesBasic or all-or-nothing prorationEnterprise-only, limited rule flexibility
Usage / metered billingOptional consumption aggregation into period invoiceSignificant bespoke buildRarely supported off the shelfNot supported
Renewal & cancellationAuto/notice/manual renew + end-of-term or credit-note cancelBuilt and maintained by youAuto-renew only, rigid optionsBasic renewal on Enterprise only
Fit to your billing policyScoped and built to your exact rulesFull control at full cost and riskYou adapt to its assumptionsTake it as shipped
Odoo version supportBuilt for your 17.0 / 18.0 / 19.0 targetYou own version compatibilityDepends on publisher's update cadenceTied to your Odoo edition and version
Support & ownershipPost-go-live window + full git repo handoverYour team carries all of itVendor support, no source ownershipStandard Odoo support channels
Delivery modelBuild-to-order, one working week from confirmed scopeLong, open-ended timelineInstant download, generic fitAlready in your instance (Enterprise) or absent

Frequently Asked Questions about Recurring & Subscription Billing

How long does delivery take?

This is a build-to-order module, not an instant download. Typical delivery is one working week from confirmed scope. The clock starts once we've agreed on your billing cycles, proration policy, renewal rules, and edge cases in the scoping call — complex usage-metering or multi-entity setups sit at the longer end.

Do I need Odoo Enterprise, or does this work on Community?

It works on both. Odoo Community has no native subscription engine, so this module is often the entire billing capability there. On Enterprise it can complement or replace `sale_subscription` when you've outgrown its proration, metering, or renewal logic. We target Odoo 17.0, 18.0, or 19.0 — tell us your version at scoping.

How does proration on mid-cycle changes work?

When a customer upgrades, downgrades, or swaps plans partway through a period, compute methods decorated with `@api.depends` apply day-count proration: the customer is charged only for the remaining days at the new rate, and any credit for the unused portion of the old plan is handled via a credit note or the next invoice, per the policy we agree on.

Will it double-bill if the cron runs twice or the server restarts?

No. The recurring invoice generation runs off an `ir.cron` scheduled action that is idempotent — it advances each subscription's `next_invoice_date` as it drafts the `account.move`, so a re-run or restart re-scans the same set and finds nothing due. This is a core design guarantee, not an afterthought.

Does it integrate with my existing accounting, tax, and payments?

Yes. Invoices are standard `account.move` records posted to journals you choose, so your existing tax rules, fiscal positions, multi-currency, and Odoo payment providers all apply. The engine is also exposed over the XML-RPC / JSON-RPC external API for storefront, CRM, or portal integration.

What kind of support and updates do I get after go-live?

Every engagement includes a defined post-go-live support window for defect fixes and configuration adjustments, plus the full git repository so your team owns the code. Version migrations (for example moving from Odoo 17 to 18) and new feature work are scoped separately — we'll quote them against the handed-over codebase.

Can it handle usage-based or metered billing?

Yes, as an optional lane. Consumption records are captured against each subscription and aggregated into that period's invoice line at close, so a recurring base fee and metered usage bill together on one invoice. We build the metering source and aggregation rule to match how your usage is measured.

Request a quote

Recurring & Subscription Billing

A build-to-order Odoo module that automates recurring invoicing, renewals, proration, and usage-based billing for subscription and service businesses. ECOSIRE builds, installs, and supports it around your exact billing cycles.

  • Dedicated `subscription` model (`models.Model`) with plan, billing cycle, next-invoice date, and a `draft`/`active`/`paused`/`cancelled`/`expired` state machine
  • `ir.cron` scheduled action that scans due subscriptions and drafts `account.move` invoices idempotently — a re-run never double-bills
  • Configurable billing intervals: monthly, quarterly, annual, or custom day/month intervals with anniversary-date or fixed-close scheduling
  • Day-count proration on mid-cycle upgrades, downgrades, and plan swaps via `@api.depends` compute methods

Request a Quotation

Tell us about your Recurring & Subscription Billing requirements and we'll send pricing, licensing options and a tailored proposal — usually within one business day.

No payment now. This sends a quote request to our team — we'll follow up by email with pricing and next steps.