Stripe Amounts QuickBooks Product Mapping Cannot Reach

Acodei's mapping engine matches on six properties, and every one of them belongs to a line item. Several real amounts on a Stripe invoice are not line...

Acodei Content Team · 8/22/2026 · 13 min read

Your Stripe invoice came to $247.83, of which $26.43 was shipping. You go looking for the shipping figure in QuickBooks and cannot find one broken out. So you go looking for the mapping rule that failed, and you cannot find that either, because there is no rule to fix.

That is not a misconfiguration. It is a category error, and it is worth understanding once rather than rediscovering it every quarter.

Acodei's product mapping engine matches on six things. Every one of them is a property of a line. But several real amounts on a Stripe invoice are not lines at all. They are top-level fields on the invoice object, or they are lines that Stripe generates and prices itself, or they are amounts the integration is documented never to put on an invoice in the first place. For any of those, "which rule should match this?" has no answer, and the time you spend writing one is time spent on the wrong problem.

The right question is different, and it comes first: is this amount a line item at all? If it is, mapping is the mechanism. If it is not, there is a toggle, and the two are not interchangeable.

Start a free trial and see how your Stripe invoices break down in QuickBooks.

What mapping actually reads

Acodei documents six matching techniques. Reading them as a list of inputs rather than a list of features makes the limitation obvious:

  1. Description indicator. A substring match against the Stripe description field, documented as not case-sensitive. The field it reads depends on the transaction shape. For a charge not linked to an invoice, Acodei looks at the charge or payment description first, then the PaymentIntent. For a charge linked to a Stripe invoice, it reads the invoice line item description. For a Checkout session, the product description first, then the session line item description.
  2. Transaction value. A comparison against a user-defined number. Acodei documents this as comparing the gross amount, before fees, and as checking currency first: a $9.99 USD transaction only matches a rule set to USD 9.99.
  3. Stripe product with a pricing tier. Product ID plus price ID, so monthly and annual prices of one product can route separately.
  4. Stripe product without a pricing tier. All charges for that product route to one QuickBooks product regardless of price.
  5. Stripe metadata. Read in a documented order: payment or charge metadata first, then PaymentIntent, then invoice, then subscription.
  6. Stripe account. For businesses running multiple Stripe accounts, the account itself becomes the routing key.

Rules are evaluated top to bottom, and Acodei documents that evaluation stops at the first match. That ordering behaviour is the source of most mapping problems people actually have, and it is a different problem from this one.

Now look at what those six inputs have in common. A description. An amount with a currency. A product ID. A price ID. A metadata bag. An account ID. Five of the six are properties that live on a line item, and the sixth is a property of the whole connection.

The amounts that have none of those properties

Shipping

Stripe does not model shipping as a line item. It is the top-level amount_shipping field, which Stripe's API reference defines simply as "This is the sum of all the shipping amounts", plus a shipping_cost object holding "the details of the cost of shipping, including the ShippingRate applied on the invoice".

The clearest proof that it sits outside the line collection is Stripe's own definition of subtotal: "Total of all subscriptions, invoice items, and prorations on the invoice before any invoice level discount or exclusive tax is applied." Three things are enumerated. Shipping is not among them.

So there is no product ID, no price ID, no line description and no line-level metadata for a shipping amount. Five of the six techniques have nothing to read. The sixth, transaction value, would be matching against the amount of the whole charge rather than the shipping portion of it, which is not the same thing at all.

Acodei's lever here is an admin toggle, Enable Shipping Cost Tracking, documented as breaking out Stripe shipping as its own line, with the stated dependency that it needs a designated "Shipping" product and relies on the Stripe shipping field. There is a fuller treatment in Stripe shipping in QuickBooks, including the tax side, which is genuinely unresolved.

Prorations

Prorations are the interesting case, because they are lines. They still cannot be reached, for two separate reasons.

The first is that Stripe writes their descriptions, not you. A proration line arrives with generated text in the shape of "Unused time on Silver plan after 01 Sep 2020". A description rule written against your product name will not match it, because your product name is not what is in the field.

The second is that Stripe calculates proration amounts by time elapsed rather than from a price in your catalogue, which means a transaction-value rule has no fixed number to match. There is no such thing as "the proration amount" to write a rule against.

Those are the two techniques people reach for first, and neither can match a proration. Acodei documents no rule type that matches on whether a line is a proration at all, so there is no way to route prorations as a class even if you wanted to. There is a full definition in Stripe proration.

The applied balance

When a customer has credit sitting in Stripe, from an overpayment or a manual adjustment, Stripe applies it to reduce the amount due. Acodei documents that by default it includes that applied balance as a line item on the QuickBooks invoice, specifically so the record reflects the exact amount Stripe charged.

That line is manufactured by the integration. It has no Stripe product behind it, because it is not a sale of anything. It is a movement of the customer's own credit.

The lever is an admin setting documented as "Skip 'Applied Balance' as line item on Invoice". Acodei documents that enabling it makes the integration ignore the applied balance and create the invoice at the full gross amount, subtotal + tax, so that QuickBooks Accounts Receivable reflects the full value of the sale.

Notice that this is a genuine accounting choice rather than a formatting preference, and it is the kind of choice a mapping rule could never express. One setting produces an invoice matching what Stripe charged. The other produces an invoice matching what the sale was worth. Both are defensible. They are different numbers.

Stripe fees

Fees are the cleanest example, because here the documentation is categorical. Acodei states that Stripe fees are never added to invoices, with the reason given: doing so would mismatch the totals. They are handled through sales receipts, deposits or expenses according to your fee management rules instead.

So a fee is not an unmapped line. It is an amount that is documented never to appear on the invoice at all. No ordering of rules changes that, because rules are consulted for lines on a document the fee is not on.

Acodei documents two separate levers here rather than one. Record Fee as Purchase / Expense books fees as QuickBooks expenses, with the dependency that it requires a non-Undeposited-Funds payout method. Enable Fee Mapping allows fees to be mapped by account or product, and is documented as available on the new app only, with legacy ignored.

Discounts

Worth naming because it completes the pattern. Acodei documents an Enable Coupon Tracking toggle that posts coupons and discounts as a separate line item, with the dependency that a "Discounts" default product must be set. Again: a toggle plus a designated product, not a rule. There is more in Stripe coupons and discounts in QuickBooks.

The shape, once you have seen it five times

Every case above resolves the same way, and the resolution has three parts that always appear together:

  • A toggle, not a rule.
  • A destination that you configure rather than match. Where the integration manufactures a line Stripe never provided, it needs somewhere to put it: shipping cost tracking is documented as needing a designated "Shipping" product, and coupon tracking as requiring a "Discounts" default product. Fees have their own documented routes through expenses, deposits or sales receipts, and the applied balance is a line on the invoice rather than a product you nominate.
  • A dependency that is easy to miss until it bites. Shipping cost tracking relies on the Stripe shipping field being populated. Fee expensing requires a non-Undeposited-Funds payout method. Fee mapping is new-app only.

There is one constraint that cuts across all of them and is worth checking before you configure anything. Acodei documents that all QuickBooks products used in its mapping must be marked as non-taxable, because making them taxable in QuickBooks conflicts with the sales and payout math. That applies to your designated Shipping and Discounts products exactly as it applies to your revenue products.

What happens when nothing matches

For amounts that genuinely are lines, and where no rule matches, Acodei documents two possible outcomes rather than one. It either falls back to a single catch-all product, which is the basic product mapping approach, or it throws a sync error if the configuration disallows uncategorised items. The documentation is explicit that which of the two you get depends on your settings and environment, and that some accounts strictly forbid the fallback.

That distinction matters more than it looks. On a catch-all account the sync completes, and the amount lands on the catch-all product, so nothing announces itself until someone reads a P&L closely enough to notice a bucket growing. On a strict account the same line produces a sync error instead, which surfaces in the errors queue as "No matching product rule found". The second is louder and, for most finance teams, more useful.

One related trap, documented separately: if you archive a price in Stripe, the mapping rule pointing at it remains in place, and the next sync attempt from that archived price may fail. Stale rules do not clean themselves up.

Two more limits worth knowing before you plan around rules

Both are documented limitations rather than bugs, and both change what is worth attempting.

One rule per transaction, not per line. Acodei documents that it does not support matching multiple lines from the same transaction, so you cannot map product A, product B and product C to different lines and different amounts within a single sales receipt.

One key per rule. Multi-key matching is documented as unsupported, so you cannot write a single rule requiring both a region metadata value and a product-type metadata value.

And one operational note that catches people during cleanup: mapping rules are not versioned, and a change takes effect for future transactions only. Fixing a rule does not repair what already synced. That is what the resync path is for.

When a rule does match, but matches wrongly

Everything above is about amounts no rule can reach. The opposite failure, where a rule matches and sends a charge to the wrong QuickBooks product, is a genuinely different problem with a different fix, usually rule ordering or a stale rule. If that is your symptom, why your Stripe charge went to the wrong QuickBooks product is the companion piece.

The diagnostic that separates them takes about ten seconds. Open the Stripe invoice and look at the line items. If the amount you are chasing appears as its own line there, you have a rule problem. If it does not appear as a line, and shows only in a total, you have a toggle problem, and no amount of rule writing will help.

FAQ

Why does my Stripe shipping charge not match any product mapping rule?

Because shipping is not a line item in Stripe. It is carried in the top-level amount_shipping field and a separate shipping_cost object, and Stripe's own definition of subtotal covers "subscriptions, invoice items, and prorations" without including it. Five of Acodei's six matching techniques read line-level properties that a shipping amount does not have. The documented lever is the Enable Shipping Cost Tracking admin toggle plus a designated Shipping product.

Can I write a mapping rule for Stripe fees?

No, and not because of rule ordering. Acodei documents that Stripe fees are never added to invoices, because that would mismatch the invoice totals. Fees are handled through sales receipts, deposits or expenses according to your fee management rules. The relevant settings are Record Fee as Purchase / Expense, which requires a non-Undeposited-Funds payout method, and Enable Fee Mapping, which is documented as new-app only.

Why does a description rule not match my proration lines?

Because Stripe generates proration descriptions rather than using your product name. They arrive in the shape of "Unused time on Silver plan after 01 Sep 2020", so a rule matching on your product name finds nothing. Proration amounts are calculated from elapsed time rather than a catalogue price, so transaction-value rules cannot match them either.

What is the applied balance line on my QuickBooks invoice?

It is the customer credit Stripe applied to reduce the amount due, which Acodei includes as a line item by default so the QuickBooks record reflects the exact amount Stripe charged. If you would rather Accounts Receivable show the full value of the sale, Acodei documents a "Skip 'Applied Balance' as line item on Invoice" setting that omits it and creates the invoice at the full gross amount.

What happens to a Stripe line that matches no mapping rule?

One of two things, and which one depends on your configuration. Acodei documents falling back to a single catch-all product, or throwing a sync error if the setup disallows uncategorised items. The documentation states the behaviour depends on your settings and environment. A sync error surfaces in the errors queue as "No matching product rule found".

Can one mapping rule match two conditions at once?

No. Acodei documents that multi-key matching is not supported, so a rule cannot require two metadata values together. It separately documents that matching multiple lines from the same transaction is not supported either, so one transaction resolves to one mapped product rather than a per-line breakdown.

Will fixing a mapping rule correct transactions that already synced?

No. Acodei documents that mapping rules are not versioned and that changes take effect for future transactions only. Correcting historical records is a resync operation rather than something the rule change does on its own.

Do my designated Shipping and Discounts products need any particular setup?

Yes, and it is the same requirement as every other product in your mapping. Acodei documents that all QuickBooks products used in its mapping must be marked as non-taxable, because taxable products in QuickBooks conflict with the sales and payout math. That applies to manufactured-line products exactly as it does to revenue products.

The point

Mapping rules are a routing mechanism for line items, and they are good at that. What they cannot do is reach an amount that is not a line item, and Stripe has several of those on an ordinary invoice: shipping in a top-level field, fees that never reach the invoice, credit balances that are not sales, and generated lines that are priced by elapsed time.

Recognising which kind of problem you have is most of the work. Lines get rules. Everything else gets a toggle and a designated product, and each of those has a dependency worth reading before you turn it on.

Start a free trial and see where each Stripe amount lands in your chart of accounts.

Share

Automate your Stripe to QuickBooks sync

Save hours every month. Acodei automatically syncs your Stripe transactions, invoices, and payouts to QuickBooks Online.

Get more operational finance guides like this one

We will only send high-value product and finance content.