How to bill seats and usage on one invoice
Put both charges on the same price list: a recurring charge measured in users for the seats, and a usage-based charge for what customers consume. On each billing day Bunny raises one invoice with the seats for the coming period, billed in advance, and the usage from the period that just ended, billed in arrears. Your product reports usage through the API, and Bunny does the rating.
Before you start
- A product and plan in the Bunny product catalog for the offering you're pricing.
- An API client, so your product can send usage records to Bunny.
How to do it in Bunny
-
1
Create a unit for seats and a unit for usage
In the product catalog, add a feature of kind Quantity for each thing you charge by, such as User and API call, and turn on Is a chargable unit. Note the code you give the usage feature; your product uses it when reporting.
-
2
Add the seat charge
On the plan's price list, add a charge with How it's billed set to Recurring, measured in User, billed every month (or quarter, six months or year). Use volume or tiered pricing, so the price is per user and the quantity comes from the quote.
-
3
Add the usage charge to the same price list
Add a second charge set to Usage-based, measured in your usage unit. Choose the Usage calculation type: Sum for events such as API calls, or Max, Last or Average for counts. Use tiered pricing with a free first tier to include an allowance, and raise the price decimals for sub-cent rates.
-
4
Sell the seats on a quote
Quote the plan with the number of users the customer is buying and apply it. Seat changes mid-term go through an amendment quote and are prorated to the end of the current period.
-
5
Report usage from your product
Send usage records with the
featureUsageCreatemutation or the Bunny SDK: the subscription, the feature code, a quantity and a timestamp. A record counts toward the billing period its timestamp falls in. You can also add records by hand in the usage records table. Bill runs start after 8:15 in the morning in the entity's time zone, so that's your cut-off for the period. -
6
Preview the combined invoice
Use Preview invoice from the account's
...menu to see the next invoice with seats and usage together. While you test your reporting, turn on draft invoices for the account so nothing is emailed until you've checked it.
Worked example: 25 seats plus API calls over an allowance
Fieldnote prices its platform at $40 per user per month, with 100,000 API calls a month included and $0.002 per call after that. Both charges sit on the Team Monthly price list:
- Users: recurring, monthly, volume pricing at $40 per user
- API calls: usage-based, Sum, tiered: 0–100,000 at $0, then $0.002 per call (3 price decimals)
Acme signs for 25 users, billed on the 1st of each month. Acme’s integration reports API calls as they happen, and October adds up to 180,000.
Bunny’s invoice of November 1 carries both lines:
| Line | Period | Calculation | Amount |
|---|---|---|---|
| Users | Nov 1–30, in advance | 25 × $40 | $1,000.00 |
| API calls | Oct 1–31, in arrears | (180,000 − 100,000) × $0.002 | $160.00 |
| Total | $1,160.00 |
In mid-November Acme adds 5 users with an amendment quote. The extra seats for the rest of November are prorated, and from December 1 the seat line is 30 × $40 = $1,200, next to whatever November’s API calls come to.
Go deeper
More how-to guides
Step-by-step answers to the billing and quoting jobs B2B SaaS teams ask about most. See all how-to guides.
- How to manage subscriptions and billing from ChatGPT or Claude
- How to co-term an add-on to an existing subscription
- How to set approval rules for sales discounts
- How to bill custom enterprise deals when your self-serve billing runs on Stripe
- How to prorate a mid-term upgrade on an annual SaaS contract
- How to sync SaaS invoices and payments to QuickBooks Online or Xero
- How to turn a signed quote into a subscription and first invoice
- How to quote and bill a multi-year ramp deal with annual price uplifts
- How to get MRR, churn and NRR from your Stripe data
- How to invoice enterprise customers by wire or ACH and match payments to invoices
The RevOps expert your team never had.
- Type "send upgrade quotes to all starter plan accounts" — done in seconds
- Know which renewals need you this month, while there is still time to do something about it
- Find every overdue invoice in one question, instead of one account at a time
No credit card required. Cancel anytime.
Frequently asked questions
Why are seats billed in advance and usage in arrears on the same invoice?
Can the seat count itself be usage-based?
How do I include usage in the seat price and charge for overage?
How does usage get into Bunny?
featureUsageCreate, or by entering records in the usage records table. Your product is responsible for sending each record once and in time for the bill run.