Glossary
Stripe Billing Meter
A billing meter is the Stripe object that defines what usage gets counted and how those events are aggregated into the single quantity that appears on an invoice line.
Also called: billing meter, meter event, default_aggregation, usage-based billing meter
Definition
Usage-based billing splits into three objects that people routinely treat as one. Meter events report raw usage as it happens. The meter defines what is being counted and how those events collapse into a total. The price converts that total into money. Stripe puts it compactly: "Meters specify how to aggregate meter events over a billing period. Meter events represent all actions that customers take in your system (for example, API requests). Meters attach to prices and form the basis of what’s billed."
The meter is the middle step, and it is the one that is invisible on the finished invoice. An invoice line for metered usage shows a quantity and an amount. It does not show which events produced that quantity, or which rule turned thousands of them into one number. That rule lives on the meter, and it was chosen once, by whoever configured billing.
That is why a meter belongs in a bookkeeping glossary despite being an engineering object. When a usage bill is disputed, the reflex is to check the invoice, then the price. Neither will explain the discrepancy, because neither contains the aggregation rule. The same stream of events, run through a meter set to sum rather than last, produces a materially different amount, and nothing on the customer-facing document records which one applied.
Stripe has since moved its own recommendation. The Billing Meters approach is now described as "appropriate only if you are already billing customers via Billing Meters today", with Metronome recommended for new integrations, including "adding usage-based pricing to existing flat-rate subscriptions". Meters remain in place and documented for accounts already on them, which is most accounts that metered anything before 2026.
Key points
- +Defines what is counted and how events aggregate; the price then converts the total into money.
- +Three aggregation formulas: sum of values, count of events, or the last value reported.
- +After configuration, nothing can be changed except the display name.
- +An event name can only be used by a single meter.
- +Usage corrections have a 24-hour window and cannot fix a finalized invoice.
- +The aggregation rule is not visible anywhere on the invoice it produced.
Sum, count and last are three different bills from the same events
Stripe supports three aggregation formulas, and the difference between them is the difference between revenue figures rather than a technical preference.
**Sum** bills "based on the sum of all usage values for the billing period". **Count** bills "based on the count of all usage for the billing period". **Last** bills "based on the most recent usage event’s value for the billing period".
Run one month of events through each. A customer reports usage forty times, with values that add to 9,000 and a final reading of 300. Under sum the billable quantity is 9,000. Under count it is 40. Under last it is 300. The event stream is identical in all three cases.
The choice usually encodes a real commercial model. Sum fits consumption that accumulates, such as tokens processed or gigabytes transferred. Count fits per-action pricing where the size of each action does not matter. Last fits a subscription priced on a level rather than a flow, such as seats provisioned or storage held, where you are billing for the state at the end of the period rather than everything that happened during it.
The failure mode is a model change that never reaches the meter. A business that moves from per-request pricing to per-token pricing has changed from count to sum, and if the meter still counts events, the invoice is wrong in a way that looks like a pricing bug and is actually an aggregation setting.
The configuration is frozen once the meter exists
This is the constraint that makes the rest of the page consequential, and Stripe states it without qualification: "After you configure the meter, you can’t make any changes aside from the display name."
The aggregation formula, the event name, the payload keys and the ingestion mode are all set at creation and permanent thereafter. A meter created with the wrong formula cannot be corrected. The remedy is a new meter, a new event name, a price pointed at it, and a migration of every subscription using the old one.
Two details make that migration more awkward than it first sounds. Event names are exclusive: "You can only use an event name with a single meter", so the replacement meter cannot quietly adopt the name your application already sends. And a meter deactivated to stop the confusion goes to inactive status, where Stripe states "No more events for this meter will be accepted" and the meter "cannot be attached to a price", so the old and new meters have to coexist through the transition.
For the books, the practical consequence is that a metered price is not a setting anyone can adjust mid-period to fix a billing complaint. If a customer is being billed on the wrong basis, the correction is a credit note against the invoice that was issued, not an edit to the mechanism that issued it.
Raw or pre-aggregated, and the events that overwrite each other
A second permanent choice decides whether two events for the same moment both count.
Under **raw** ingestion, the default, Stripe handles "all meter events as standalone events. Multiple events sent for the same timestamp don’t overwrite each other. The aggregation includes the multiple events."
Under **pre-aggregated** ingestion, set to hourly or daily buckets, "Stripe only uses the most recently received meter event in that time interval. A newer event sent within the same hourly or daily window overwrites the previous one. The meter event timestamp in UTC dictates the hour and day boundaries."
The overwrite behaviour is deliberate and useful, because it makes a retry idempotent: an application that resends a daily total after a network failure does not double-bill. It is also the source of a quiet undercount when the mode does not match how the application actually reports. A system sending genuine incremental usage several times an hour into a meter configured for hourly pre-aggregation keeps only the last of each hour and silently discards the rest.
The UTC detail is worth holding onto for period-end work. Bucket boundaries follow UTC regardless of where the business or its customers sit, so an hourly meter’s last event of a day is decided by UTC midnight and not by local close.
Correcting usage has a 24-hour window, and finalization closes it
Stripe provides a meter event adjustment to cancel incorrectly recorded events, and it is bounded in a way that matters for month-end.
"You can only cancel events sent to Stripe within the last 24 hours." Beyond that, the events stand.
And the harder limit: "If you cancel usage that’s included on a finalized invoice, we won’t update the invoice or issue a corrected invoice for the canceled usage. We don’t support billing adjustments for canceled usage on a finalized invoice sent to a customer."
So once the invoice is finalized, the usage behind it is settled as far as Stripe is concerned, and any correction becomes an accounting exercise rather than a billing one. In practice that means a [credit note](/glossary/stripe-credit-note) against the issued invoice, which is the instrument built for reducing something already recorded.
There is a second correction route with its own quirk. You can record negative quantities to offset bad data, but "if the overall cycle usage is negative, Stripe reports the invoice line item usage quantity as 0". A correction larger than the usage it corrects does not produce a negative line. It produces a zero, and the excess simply disappears rather than carrying anywhere.
One more timing note that causes false alarms rather than errors: "Stripe processes meter events asynchronously, so aggregated usage in meter event summaries and on upcoming invoices might not immediately reflect recently received meter events." An upcoming invoice checked immediately after a usage push can legitimately look short.
What the meter looks like as an object
The meter itself is small, which is part of why it gets overlooked.
**Display name** is "The meter’s name", capped at 250 characters, and Stripe notes it is "Not visible to the customer". It is the only field that can be edited later. **Event name** is "The name of the meter event to record usage for", capped at 100 characters, and is what your application sends with each event so the right meter picks it up.
**Default aggregation** carries the formula. **Value settings** and **customer mapping** are the payload key overrides: value settings names "the key in the event payload that refers to the numerical usage value", defaulting to `value`, and customer mapping names "the key in the event payload that refers to the Customer ID", defaulting to `stripe_customer_id`.
**Event time window** is the raw or pre-aggregated choice, null for raw and otherwise `day` or `hour`. **Status** is active or inactive, with the deactivation timestamp recorded in status transitions.
The customer mapping field is the one worth checking when usage lands on nobody. If an application sends its own internal identifier under a key the meter is not looking for, the events are accepted and attach to no customer, so the invoice is short and nothing errors.
How a metered line reaches QuickBooks
Acodei’s product documentation does not cover meters, meter events or usage aggregation, and this entry does not claim otherwise. What it does document is the line, and a metered charge arrives as a line like any other.
When a Stripe invoice is finalized, Acodei creates a QuickBooks invoice reproducing every line item, and tax lines, as the account’s mapping settings allow. Each line uses the product returned by Multiple Product Mapping if that is enabled, and the default product otherwise.
So a usage line maps by the same rules as a flat subscription line, and the aggregation that produced its quantity is upstream of anything the sync sees. If a metered amount looks wrong in QuickBooks, the invoice in Stripe is the place to confirm it, and the meter is the place to explain it.
For how a metered charge picks its QuickBooks product, see which QuickBooks item a metered line maps to.
Want to see this on your own Stripe data?
Start a free trialFrequently asked questions
What is a Stripe billing meter?
A billing meter is the object that defines what usage is counted and how the individual events aggregate into the single quantity billed for a period. Stripe describes meters as specifying "how to aggregate meter events over a billing period", with meters attaching to prices to "form the basis of what’s billed". The meter sits between the raw events your application reports and the amount that appears on the invoice line.
What aggregation formulas can a meter use?
Three. Sum bills "based on the sum of all usage values for the billing period". Count bills "based on the count of all usage for the billing period". Last bills "based on the most recent usage event’s value for the billing period". The same stream of events produces different billable quantities under each, so the formula is a pricing decision rather than a technical one.
Can I change a meter’s aggregation after creating it?
No. Stripe states that "after you configure the meter, you can’t make any changes aside from the display name". Correcting an aggregation formula means creating a new meter with a new event name, since "you can only use an event name with a single meter", pointing a price at it, and migrating the subscriptions that used the old one.
How do I fix usage that was recorded incorrectly?
Within 24 hours you can cancel the events with a meter event adjustment. After that, or once the invoice has finalized, you cannot: Stripe states that if you cancel usage included on a finalized invoice, "we won’t update the invoice or issue a corrected invoice for the canceled usage". At that point the correction belongs in a credit note against the issued invoice. Recording negative quantities is the other route, but if overall cycle usage goes negative Stripe reports the line quantity as 0.
Why is my metered usage lower than what my application sent?
Check the ingestion mode and the customer mapping. A meter configured for hourly or daily pre-aggregation keeps only the most recently received event in each bucket and overwrites the rest, which undercounts an application sending genuine increments several times an hour. Separately, events whose payload does not carry the customer key the meter expects attach to no customer and never reach an invoice. Usage can also lag briefly, since Stripe processes meter events asynchronously.
Should new integrations still use billing meters?
Stripe now recommends Metronome for new usage-based integrations, describing the Billing Meters approach as "appropriate only if you are already billing customers via Billing Meters today". Meters remain documented and supported for accounts already using them, which covers most businesses that set up usage billing before 2026.
Does Acodei read Stripe meters or usage data?
Acodei’s product documentation does not cover meters, meter events or usage aggregation, so there is no documented behaviour to describe. What is documented is that a finalized Stripe invoice creates a QuickBooks invoice reproducing every line item and tax lines as your mapping settings allow, with each line using the product from Multiple Product Mapping if enabled and the default product otherwise. A metered line maps by the same rules as any other line.
What customers say about running Stripe through Acodei

“If you're testing out all the different Stripe/QuickBooks integration apps right now, let me save you some time. This one is the best one by far.”
“Works well and is really helpful for massive transactions. The support is really fast and helpful. 100% recommended.”
Related reading
- Stripe invoice line item
- Billing credits, and the metered lines they can apply to
- Stripe proration
- Stripe invoice item
More glossary terms
- Undeposited Funds
- Stripe Balance Transaction
- Available vs Pending Balance
- Stripe Dispute
- Stripe Fee
- Stripe Balance Adjustment
- QuickBooks Credit Memo
- Stripe Tax
- QuickBooks Tax Code
- Stripe Reserve
- Stripe Tax Rate
- Stripe Fee Credit
- Stripe Credit Note
- QuickBooks Product/Service Item
- Stripe Payout
- QuickBooks Sales Receipt
- QuickBooks Bank Deposit
- QuickBooks Transfer
- Stripe Authorization Hold
- QuickBooks Refund Receipt
- QuickBooks Payment
- QuickBooks Expense
- QuickBooks Journal Entry
- Stripe Financial Account
- Holding Account
- Accounts Receivable
- Bank Feed
- Deferred Revenue
- Stripe PaymentIntent
- Stripe Checkout Session
- Stripe SetupIntent
- Stripe PaymentMethod
- Stripe Charge
- Stripe Refund
- QuickBooks Invoice
- QuickBooks Class Tracking
- QuickBooks Location Tracking
- QuickBooks Project
- QuickBooks Closing Date
- Stripe Invoice Line Item
- Stripe Proration
- Stripe Invoice Status
- Stripe Shipping Rate
- Stripe Transfer
- Stripe Mandate
- Stripe on_behalf_of
- Stripe Invoice Item
- QuickBooks Estimate
- Stripe Invoice Payment
- Stripe Invoice Payment Settings
Ready to try Acodei?
Connect Stripe to QuickBooks Online in minutes and let the fees, refunds, and payouts land where your accountant expects them.