Skip to Content
Use case · Billing and ERP

Usage billingwhere everyinvoice linetraces back

We designed and are building a rating and billing engine in Odoo for a usage-based business. It loads the month’s usage, prices every record against the customer’s own rate card and runs the billing through to draft invoices and finance exports, in place of the spreadsheets and older system that did it before.

12 features47 user stories in the buildEvery figuretraceable to the usage rows behind it
USAGE RECORDSCustomer A1 240 unitsCustomer B8 000 unitsCustomer C3 310 unitsCustomer A2 050 unitsCustomer D960 unitsCustomer B6 500 unitsCustomer C4 120 unitsCustomer A1 780 unitsCustomer B7 900 unitsSpreadsheet????Priced by handLegacy systemMonth-end built from exportsRate cardsCustomer AR 0.35Customer BR 0.40Customer CR 0.52RatingengineMonthly billing runIllustrationUsage ratedagainst each rate cardAll usage rows pricedDraft invoicesCustomer AR 1 774.50DraftCustomer BR 8 960.00DraftCustomer CR 3 863.60DraftLine traced to 3 usage rowsFinance exportReady for the accounting system
The problem

Month-end billing, done by hand

When you bill on usage, someone has to pull the month’s records, match each one to the customer’s rates and turn the result into invoices. That work tends to live in exports, spreadsheets and an older system, and it lands on one or two people in the first days of every month.

Usage pulled by hand

Each month someone exports usage from every source, cleans the files and pastes them into the billing sheet.

What it costsThe first working days of the month go on getting the data in, and invoices go out later than they should.

Rates in a spreadsheet

Every customer’s agreed rates sit in a tab, with the exceptions in a cell comment or in someone’s head.

What it costsOne wrong cell bills a customer at the wrong rate for a whole month before anyone sees it.

One person who knows the sheets

The formulas, lookups and workarounds make sense to the person who built them.

What it costsWhen they’re on leave or move on, month-end waits or gets guessed.

Invoices you can’t explain quickly

A customer asks why their bill went up, and the answer is spread across three exports and a formula.

What it costsFinance spends hours rebuilding the number, and the invoice sits unpaid until it’s settled.

Totals typed in twice

The billing totals are re-keyed into the accounting system by hand.

What it costsTypos become differences between billing and the ledger that someone has to reconcile later.

New pricing means new formulas

Every new price plan or custom deal adds another formula or another tab to the sheet.

What it costsSales starts to avoid custom pricing because billing can’t keep up.

Usage billing is simple arithmetic repeated thousands of times, and doing it by hand once a month puts your revenue in a file only one person can check.

Before and after

Month-end billing, with the engine

Flip the switch to see the billing month before and with the engine.

BeforeWith the system
  • Usage exported by hand from every sourceUsage records loaded into the ERP, every billable event in one place
  • Each customer’s rates kept in a spreadsheet tabEach customer’s rate card held in the system and applied by the engine
  • Usage priced with formulas someone has to checkEvery usage record priced against the right rate card before anything is invoiced
  • Month-end built by hand from exported dataA monthly billing run that produces draft invoices for finance to review
  • Invoice queries answered by digging through filesEvery figure on an invoice traces back to its usage rows
  • Finance re-keys totals into the accounting systemFinance exports from the same run, with the accounting system issuing the final invoices

Usage priced in spreadsheets, month-end built from exports and invoice totals that are hard to explain.

One monthly billing run, with every line traced to its usage.

How it works

From usage records to draft invoices, step by step

Click through each step to see what the engine does.

01Load the usage
02Price it against the rate card
03Run the month
04Export and trace
Step 01

Load the usage

Usage records are loaded into Odoo, so every billable event for the month is held in one place before anything is priced.

Step 02

Price it against the rate card

Each customer has their own rate card. The rating engine prices every usage record against the right one before anything is invoiced.

Step 03

Run the month

The monthly billing run turns a month of rated usage into draft invoices. Finance reviews them and posts them.

Step 04

Export and trace

The same run produces the exports and reports finance needs, and the accounting system issues the final invoices. Any figure on an invoice can be followed back to the usage rows that made it up.

What we built

Six parts of one billing engine

01

Usage ingestion

Loads usage records into Odoo so every billable event is held in one place.

02

Rate cards

Each customer has their own rates, which the engine applies when it prices their usage.

03

Rating engine

Prices each usage record against the right rate card before anything is invoiced.

04

Monthly billing run

Turns a month of rated usage into draft invoices for finance to review and post.

05

Finance exports and reporting

Produces the exports and reports finance needs, with the accounting system issuing the final invoices.

06

Audit trail

Every figure on an invoice can be followed back to the usage rows that made it up.

Hover over a card for more.

What changes

Month-end, once the engine runs the billing

Finance

Month-end starts with draft invoices to review and post, built by the billing run from the month’s rated usage.

Whoever ran the sheets

Rates live on rate cards in the system, so the billing run doesn’t wait for the one person who knows the formulas.

Your customers

When a customer queries a bill, finance opens the line and shows them the usage rows behind it.

Your accounting system

The figures arrive as an export from the same run, and it issues the final invoices. Nobody types the totals in twice.

IllustrationCUSTOMERWhy is our bill higher this month?Invoice line, Customer BUsage chargesR 8 960.008 000 unitsR 3 200.006 500 unitsR 2 600.007 900 unitsR 3 160.00FINANCEHere are the usage rows behind that line.

A customer queries a bill, and finance opens the line.

Questions

What finance teams ask about a billing engine

How we’d start

  1. 1DiscoveryYour usage sources, your rates and where your invoices end up.
  2. 2First releaseThe core rating and billing run, checked by your finance team.
  3. 3Build outReports, exports and the edge cases, added once the core run is trusted.
Do we have to replace our accounting system?

No. In this build the accounting system still issues the final invoices. The engine prices the usage, runs the billing and hands finance the exports.

Every customer is on different pricing. Will that fit?

Yes. Each customer has their own rate card and the engine prices their usage against it. New pricing for a customer is set up on their rate card.

Can finance check the numbers before anything goes to a customer?

Yes. The billing run produces draft invoices, and finance reviews and posts them. Every figure on a draft can be traced to the usage rows behind it.

Our usage comes from more than one system. Where would we start?

With a discovery call. We’d map where your usage comes from, how it’s priced today and where invoices end up, then agree what the first release covers.

We don’t run Odoo. Is this still for us?

This engine is built in Odoo 19 Enterprise. If you run something else, tell us what it is and we’ll say plainly whether it makes sense to build the billing there or next to it.

Built with

Odoo 19 EnterprisePythonPostgreSQLSage
Quick check

Sound like your business?

Tick what sounds familiar.

You bill customers on what they use, at different rates per customer.
Your usage pricing runs on spreadsheets, scripts or an old system.
Month-end billing takes days and depends on one or two people.
Customers query invoices and it takes time to show where the numbers came from.
Finance re-keys billing figures into your accounting system.
of 5 ticked

0 to 1 ticked

Your billing is probably simple enough to run as it is. Keep an eye on it as your pricing gets more varied.

2 to 3 ticked

Parts of your billing are costing you time and trust each month. It’s worth looking at which steps could run on their own.

4 to 5 ticked

This is the problem we’re solving with this engine. Let’s talk about your usage data, your rates and where your invoices end up.

Talk it through with us
Let's talk

Is month-end billing still a manual job?

Tell us where your usage data comes from and how you price it, and we’ll show you how a billing run in Odoo would handle it.

Let's Connect

Interested in building a smarter, more connected operation? Contact us to discuss how AI can support your business goals.