How-to guide

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. 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. 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. 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. 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. 5

    Report usage from your product

    Send usage records with the featureUsageCreate mutation 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. 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.

Free trial

The RevOps expert your team never had.

Ask it anything about your book of business, and it answers from your live data. Point it at the renewal that needs a quote and it drafts one. All the digging, none of the digging.
  • 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
Try free for 30 days

No credit card required. Cancel anytime.

FAQ

Frequently asked questions

Why are seats billed in advance and usage in arrears on the same invoice?
Seats are known up front, so recurring charges bill at the start of each period. Usage isn't known until the period closes, so usage charges bill at the end. Bunny combines both on the account's billing day: next period's seats plus last period's usage, on one invoice.
Can the seat count itself be usage-based?
Yes. If you'd rather bill for the users a customer actually has than a committed number, make seats a usage-based charge with the Max, Last or Average calculation type and report the user count from your product. See per-seat pricing.
How do I include usage in the seat price and charge for overage?
Use tiered pricing on the usage charge with a first tier priced at zero. Usage up to the allowance is free and everything above it bills at the overage rate. See overage.
How does usage get into Bunny?
Through the API or SDK with 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.
What if some usage arrives after the invoice is raised?
Turn on draft invoices for the account while you bed in your reporting. If records were missed, add them, regenerate the invoice, check it and then release it to the customer.