Glossary
Stripe Invoice Item
A Stripe invoice item is a charge recorded against a customer before any invoice exists to carry it, holding its own amount, period and pricing until the next invoice for that customer sweeps it up and turns it into a line.
Also called: invoiceitem, pending invoice item, unbilled charge, one-off charge
Definition
The name is most of the confusion. A Stripe invoice line item is a row on an invoice that already exists. A Stripe invoice item is the thing that exists first, sometimes for weeks, with nowhere yet to appear. Three of the same words in a different order, two different objects, and only one of them has a field that can be null where the invoice should be.
Stripe's description of the creation endpoint is the clearest statement of what the object is for: "Creates an item to be added to a draft invoice (up to 250 items per invoice). If no invoice is specified, the item will be on the next invoice created for the customer specified." That second sentence is the entire idea. You are not issuing a charge. You are leaving one where the next invoice will find it.
On the object itself, the field that tells you which state it is in is invoice, documented as "The ID of the invoice this invoice item belongs to" and nullable. Null means it is still waiting. Populated means an invoice has picked it up and it is now a line on that invoice.
For anyone keeping books, the consequence is a gap between two dates. There is the date the item was created, and there is the date of the invoice that eventually carries it. Only the second one has any prospect of reaching a ledger, because a ledger records invoices and payments, and until an invoice exists there is nothing to record. A charge added on the 3rd can land on a bill dated the 28th. Both of those are true at once, and the difference between them is the part people go looking for.
Key points
- +Stripe on creating one: "Creates an item to be added to a draft invoice (up to 250 items per invoice). If no invoice is specified, the item will be on the next invoice created for the customer specified."
- +The invoice field is nullable, documented as "The ID of the invoice this invoice item belongs to". Null is the unbilled state.
- +On subscriptions the sweep is automatic: left blank, "the invoice item will be added to the next upcoming scheduled invoice".
- +On standalone invoices it is not. The item "won't be automatically added unless you pass pending_invoice_item_behavior: 'include' when creating the invoice".
- +Scope it to one subscription and the rest ignore it: "scheduled invoices for subscriptions other than the specified subscription will ignore the invoice item".
- +A negative amount is allowed. Stripe: "Passing in a negative amount will reduce the amount_due on the invoice."
- +date is when the item was created, not when it was billed.
- +With Stripe Revenue Recognition enabled, "the period will be used to recognize and defer revenue".
- +Prorations arrive as invoice items with proration true, and discountable is "Always false for prorations".
- +Pending items sort to the top: Stripe lists "pending invoice items (including prorations) in reverse chronological order" ahead of subscription items.
- +Only drafts accept them: "You can only add invoice items to draft invoices and there is a maximum of 250 items per invoice."
The queue almost nobody looks at
Every Stripe account that has ever added a one-off charge to a subscription customer has a queue, whether or not anyone has opened it. It holds invoice items whose invoice field is still null.
Stripe does not present this as a queue, which is part of why it goes unnoticed. It presents it as a property of the object. The item exists, it has a customer, it has an amount, and the question of which invoice it belongs to has not been answered yet. Listing invoice items and filtering for a null invoice is how you see what is in there.
The reason to care is that an unbilled invoice item is money you have decided to charge and have not charged. It is not revenue, it is not a receivable, and it is not an error. It is a commitment sitting one step upstream of the first document your accounting system would recognise. If the queue is a day deep, nobody notices. If somebody added a charge against a customer whose subscription was cancelled the following week, it can sit there indefinitely, because the invoice that would have collected it is never created.
That is the failure mode worth knowing before you meet it: the item is not lost and nothing has broken, but no invoice is coming for it.
Two dates, and only one of them is the bill
An invoice item carries a date, which Stripe defines as the "Time at which the object was created". It also carries a period, an object with a start and an end, and Stripe is explicit about what that one is for: "When set to different values, the period will be rendered on the invoice", and if Stripe Revenue Recognition is enabled, "the period will be used to recognize and defer revenue".
So there are potentially three timestamps in play for a single charge, and they answer different questions. The date says when somebody decided to bill it. The period says what span of service it covers. The invoice date, which does not exist yet, will say when it was actually billed.
Most of the time nobody has to separate them, because the item is created and swept up in the same billing cycle and all three collapse to roughly the same week. The separation starts to matter at a period boundary. A charge created on the 28th of one month, against a service period in that month, billed on the invoice generated on the 1st of the next, is a genuinely ambiguous item to date, and the answer depends on whether your books run on cash or accrual and on what the period field says rather than what the created date says.
If you leave period unset, it defaults to the creation time on both ends, which is Stripe recording that it has no opinion about the service span. That is fine for a product sold on the spot and misleading for anything covering a stretch of time.
Subscriptions sweep, standalone invoices do not
This is the part that surprises people, and it is documented plainly enough that it is worth quoting rather than paraphrasing.
On a subscription, leaving the invoice parameter blank is all it takes. Stripe: "For subscription invoices, when left blank, the invoice item will be added to the next upcoming scheduled invoice." The next cycle picks it up with no further action.
On a standalone invoice, the same blank field does nothing of the kind. Stripe: "For standalone invoices, the invoice item won't be automatically added unless you pass pending_invoice_item_behavior: 'include' when creating the invoice." Create an invoice for that customer without that flag and it will be created without the pending item, which stays pending.
The practical shape of the mistake is a customer with no subscription, a one-off charge staged as an invoice item, and an invoice raised for them the following week that does not include it. Nothing errors. The invoice is correct for what it contains. The charge is simply still in the queue, and the natural conclusion, that the charge was somehow dropped, is wrong in a way that sends people looking in the wrong place.
There is a related scoping rule worth knowing if you run more than one subscription per customer. Set the subscription parameter and Stripe records the item against that subscription specifically: "When set, scheduled invoices for subscriptions other than the specified subscription will ignore the invoice item." Leave it blank and the next scheduled invoice takes it, whichever subscription generated that invoice.
Prorations are invoice items too
When a customer changes plan mid-cycle, the credit and the charge that result are not a special object type. They are invoice items, flagged as prorations, sitting in the same pending queue as anything you staged by hand.
Stripe marks them with a boolean, documented as whether the item "was created automatically as a proration adjustment when the customer switched plans", and applies one rule that catches people out: discountable is "Always false for prorations". A percentage-off coupon on the subscription does not reduce the proration the plan change generates.
This is why the pending queue on an active subscription account is rarely empty and rarely interesting. Most of what is in it is proration arithmetic that Stripe put there itself and will collect on the next cycle without anyone intervening. The items worth attention are the ones somebody created deliberately, because those are the ones that can have been staged against the wrong customer, or against a customer who has since stopped being billed.
Stripe also populates a proration_details block, and notes that it "is only populated for prorations created from subscriptions with billing_mode=flexible", so its presence is a signal about the subscription rather than about the item.
What it becomes once an invoice takes it
The moment an invoice picks the item up, it stops being an invoice item in any practical sense and becomes a line on that invoice, subject to everything that governs lines.
It also lands in a defined place. Stripe documents the sort order of an invoice's lines as pending invoice items including prorations in reverse chronological order first, then subscription items in reverse chronological order, then invoice items added after invoice creation in chronological order. That is why a one-off charge and a proration appear above the subscription charge on an invoice rather than below it, which reads as odd until you know the rule.
One more piece of Stripe vocabulary attaches here. If pending invoice items are the only reason an invoice was generated at all, Stripe records that on the invoice as a billing_reason of automatic_pending_invoice_item_invoice. Stripe lists that value among the possible enum values without giving it a separate description, so the honest reading is the name itself: an invoice that exists because items were waiting, rather than because a subscription cycled.
That value is the one reliable way, after the fact, to tell an invoice that was triggered by the queue from an invoice that would have been generated anyway.
Where an Acodei sync starts, and where it does not
Acodei's documented surface here begins at the invoice, and it is worth being exact about where that line falls.
When a Stripe invoice is finalized, Acodei creates a QuickBooks Invoice that its documentation says reproduces every line item, and tax lines, as allowed by the user's mapping settings. Each line uses the product returned by Multiple Product Mapping when that is enabled, and the default product otherwise. So an invoice item that has been swept onto an invoice arrives in QuickBooks as a line like any other, carrying a mapped product rather than a copy of the Stripe product. Invoice Sync is available on paid plans and is toggled per company under Account Mapping, in the Premium Features block.
What Acodei's product documentation covers is invoices and the lines on them. It does not document any handling of the pending stage, and none is claimed here. That is the accurate description of the boundary rather than a limitation: a pending invoice item is upstream of the first document the sync is defined against, and it has no invoice, no total and no payment, so there is nothing about it for a QuickBooks record to mirror yet.
The useful consequence for a bookkeeper is that the queue is a Stripe-side question. If you want to know what has been staged and not yet billed, the place to look is Stripe, not QuickBooks, and the time to look is before the close rather than after it.
The invoice is where the sync begins. See how finalized Stripe invoices become QuickBooks invoices.
Want to see this on your own Stripe data?
Start a free trialFrequently asked questions
What is a Stripe invoice item?
It is a charge recorded against a customer before an invoice exists to carry it. Stripe describes the creation call as making "an item to be added to a draft invoice", and adds that "If no invoice is specified, the item will be on the next invoice created for the customer specified". Until that happens the item's invoice field is null.
How is an invoice item different from an invoice line item?
They are different objects at opposite ends of the same timeline. An invoice line item is a row on an invoice that already exists. An invoice item is the charge that exists before any invoice does, waiting to be swept onto the next one. Once it is picked up it becomes a line on that invoice.
Why did my one-off charge not appear on the invoice I just created?
Most likely because the invoice was a standalone invoice. Stripe documents that "For standalone invoices, the invoice item won't be automatically added unless you pass pending_invoice_item_behavior: 'include' when creating the invoice." On subscription invoices the behaviour is the opposite: left blank, the item "will be added to the next upcoming scheduled invoice".
How do I find invoice items that have not been billed yet?
List invoice items and look at the invoice field, which Stripe documents as "The ID of the invoice this invoice item belongs to". Where it is null, the item has not been picked up by an invoice yet. That set is the pending queue.
Which date does an invoice item use?
It carries a date, defined as the "Time at which the object was created", and a period with its own start and end. The date is when the charge was staged, not when it was billed. If Stripe Revenue Recognition is enabled, Stripe states that "the period will be used to recognize and defer revenue", so the period rather than the created date is what drives revenue timing.
Are prorations invoice items?
Yes. A plan change mid-cycle produces invoice items flagged as prorations, which sit in the same pending queue and are collected on the next invoice. Stripe also documents that discountable is "Always false for prorations", so a subscription coupon does not reduce them.
Does a pending invoice item show up in QuickBooks?
Acodei documents its invoice handling as starting when a Stripe invoice is finalized, at which point it creates a QuickBooks Invoice reproducing every line item and tax lines as the mapping settings allow. The pending stage sits upstream of that: an unbilled invoice item has no invoice, no total and no payment attached to it. Acodei's documentation describes no handling of that stage, so treat the pending queue as something to check in Stripe.
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
- Stripe Proration
- Stripe Invoice Status
- Stripe billing_reason in QuickBooks
- The Stripe Amounts No Product Mapping Rule Can Reach
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
Ready to try Acodei?
Connect Stripe to QuickBooks Online in minutes and let the fees, refunds, and payouts land where your accountant expects them.