Metered Usage Billing from CSV or API for WHMCS
Import usage for any WHMCS service by CSV or a small API, price it with per-unit rate cards, and bill it on the client's next invoice.
What will the metered usage billing module do?
It bills usage that your own systems count. You define usage types with a unit and give each product a rate card: a price per unit for each type, per currency, with optional included units each cycle. Usage arrives per service, from a CSV file uploaded in the admin area or from your scripts posting records to a small API. When invoices are generated, the module totals each service's unbilled usage, prices it from the rate card, and adds it to the client's next invoice, one line per usage type with quantity, unit price and period.
It is built to order: you get the license key at purchase, once I have checked your account, and the download within 15 business days.
What does WHMCS already do, and what does this add?
WHMCS has usage billing built in, but only for metrics a provisioning module reports: cPanel, DirectAdmin, Plesk, or modules with metrics written into their code. Those metrics are priced per unit, by total volume or on graduated tiers, and added to the renewal invoice. Billable items, added by staff or the AddBillableItem API, reach the next invoice, but someone must work out the amount first. This module adds a way in for usage from any source, per service, with the pricing done for you.
What is included?
| Part | What you get |
|---|---|
| Usage types | Your own units, such as minutes, messages, requests, GB or kWh |
| Rate cards | Price per unit per product and currency, with included units |
| CSV import | Upload, preview with row errors, then import |
| API | Key-protected JSON endpoint for single records or batches |
| Duplicates | Rejected by your own record reference |
| Invoicing | Next renewal invoice, or a separate monthly usage invoice |
| Client view | Usage so far this period on the service page |
Who is it for?
Providers whose costs follow usage: VoIP and SMS resellers, API and SaaS platforms, GPU and compute rental billed from their own scheduler, colocation billed for power, and bandwidth measured by a network monitor. If what you sell is staff time, my Hourly Billing and Time Tracking module fits better.
What do you need, and what are the limits?
Requirements: WHMCS 8.13 or 9.x (I confirm your exact version at purchase), PHP 8.1 or newer, the standard WHMCS cron, and a system of your own that counts the usage.
Limits: the module bills what you send it and measures nothing itself. Pricing is per unit with included units; volume and graduated tiers stay with the native metrics. Usage that arrives after a renewal invoice is generated goes on the following one, so send records in time. Services on yearly cycles should use the monthly usage invoice.
It costs $99 once for a lifetime license with twelve months of updates and support, and a seven-day refund window. I check each account by hand, which can take up to 24 hours, before the license key is issued, and the download follows within 15 business days of purchase.
Key features
- Usage types with your own units
- Per-unit rate cards per product and currency
- Included units per billing cycle
- CSV upload with a preview and row-by-row errors
- Key-protected API for single or batch usage records
- Duplicate records rejected by your own reference
- Usage lines on the next renewal invoice or a monthly usage invoice
- Records editable until billed, then locked
- Usage so far shown on the client's service page
Why customers buy this module
- →Bill usage from any system, not only from control panel modules
- →No spreadsheet math before each billing run
- →Clients see usage as it builds, so invoices hold fewer surprises
- →The same record cannot be billed twice
Frequently asked questions
Why not use the usage billing WHMCS already has?
If the product runs on cPanel, DirectAdmin, Plesk or another module that reports metrics, the native feature may be all you need. This module is for usage those modules never see: minutes from a phone switch, messages from an SMS gateway, requests from your API or hours from your own GPU scheduler, on any product.
What does a CSV file need to contain?
One row per record: the service (its WHMCS service ID, domain or username), the usage type, the quantity, the date or period it covers, and your own reference so the same row is never imported twice. The import shows a preview, with any rows it cannot match, before anything is saved.
When will I get it, and what if you can't deliver?
It is built to order. I check your account by hand, which can take up to 24 hours, then issue the license key, and the download follows within 15 business days of purchase. If I do not deliver it in that time, you get a full refund. Once it is delivered, the store's 7-day refund window applies.
Technical specifications
- WHMCS
- 8.13 and 9.x (confirmed at purchase)
- PHP
- 8.1+
- Usage sources
- CSV upload and JSON API
- Pricing
- Per unit, with included units per cycle
- Availability
- Built to order, delivered in 15 business days
- License
- Lifetime, 1 year of updates and support included
- Delivery
- License key after a manual account check (up to 24 hours); download when built
- Refund window
- 7 days
Related modules
SM Reseller Hub: White-Label Reseller Platform for WHMCS
SM Reseller Hub lets your WHMCS clients resell hosting, servers, licences, SSL and domains under their own brand. They get a white-label store and client area on their own domain, a REST API for their own website and a reseller dashboard, while you keep control of prices, margins, payments and every customer.
Abandoned Cart Recovery Emails for WHMCS
I built this module to win back WHMCS orders that stall at checkout. It detects abandoned carts, sends an email sequence you write, can add a discount code, and reports which emails bring buyers back.
Bulk Edit and Mass Update Tool for WHMCS
An admin-only WHMCS module I built for changes too large to click through and too risky for raw SQL. Filter the records, preview the result, apply it as a background job, and reverse it later if needed.
