Stripe Subscription Setup Fees in QuickBooks

A setup fee is one extra line on a Stripe subscription's first invoice. How to add it, keep it on its own QuickBooks product, and decide when it is...

Acodei Content Team · 11/11/2026 · 15 min read

You sell a $200 per month plan, and every new customer also pays a $500 onboarding fee. In Stripe that is one checkout, one invoice and one card charge for $700. Then the month ends, and somebody has to explain why revenue jumped by $700 for a customer whose plan is worth $200.

A setup fee is the simplest thing you can add to a subscription, and one of the easiest to book wrong. Stripe treats it as a one-time line on the first invoice and never mentions it again. QuickBooks receives whatever your sync sends it. In between sit three decisions: which product the fee is, which account that product points to, and whether the fee is revenue the day you charge it.

Keep the setup fee on its own line in QuickBooks. Acodei syncs each line of a Stripe invoice into QuickBooks Online and maps it to the product you choose. Start a free trial.

This post covers how Stripe attaches a setup fee to a subscription, what the first invoice and charge look like, what reaches QuickBooks, and the four places the fee causes trouble later: discounts, refunds, revenue timing and reporting.

A setup fee is a one-time line on the first invoice

Stripe has no special "setup fee" object. A setup fee is a one-time Price that gets added to the first invoice a subscription produces. There are three common ways to put it there.

Checkout. In a subscription-mode Checkout Session you can pass one-time Prices in line_items next to the recurring ones. Stripe's Checkout Session reference is explicit about where they go: "Line items with one-time Prices will be on the initial invoice only." It allows up to 20 recurring and 20 one-time line items per session.

The Subscriptions API. When you create a subscription directly, the add_invoice_items parameter takes a list of Prices that, in the words of the API reference, "will generate invoice items appended to the next invoice for this subscription." For a new subscription, the next invoice is the first one. Stripe's subscription invoices guide shows exactly this pattern under "Add an extra charge on a subscription's first invoice."

A pending invoice item. You can also create an invoice item on the customer before or after the subscription starts. Stripe's guide says these one-off items "are added to the next invoice created for this customer," and recommends the subscription parameter so the item attaches to the right subscription. This route is easy to get wrong: if the item is created after the first invoice has been finalized, it waits for the next renewal instead.

All three produce the same result on paper: an invoice with a recurring line and a one-time line, finalized together and paid with a single charge.

What the first invoice and charge look like

Take the opening example. A customer signs up through Checkout for the Pro plan at $200 a month with a $500 onboarding fee, paying by a US card on Stripe's standard pricing of 2.9% + 30¢.

First invoiceEach renewal
Pro plan, monthly$200.00$200.00
Onboarding fee (one-time)$500.00none
Invoice total and charge$700.00$200.00
Stripe fee$20.60$6.10
Net to your Stripe balance$679.40$193.90

A few things in that table matter for the books.

There is one charge, not two. The customer's card is charged $700 once. Stripe calculates one processing fee on the whole amount. Nothing in Stripe's fee splits it between the plan and the setup fee, so if you want to know the cost of collecting setup fees separately, that is an allocation you make yourself.

The fee only exists on one invoice. Stripe's Checkout reference says one-time items appear on the initial invoice only. The renewal on day 31 is a plain $200 invoice. Anything that reports on "a typical invoice" for this customer will be wrong for month one.

The first invoice finalizes immediately on card subscriptions. Stripe's guide says that when collection_method is charge_automatically, Stripe "immediately finalizes the initial invoice and charges the customer," so there is no one-hour draft window to add or fix a setup fee line. If you need that window, Stripe suggests starting the subscription through a subscription schedule, or setting trial_end a few seconds in the future, and both routes give the first non-zero invoice a one-hour draft period.

What reaches QuickBooks

How the $700 arrives in QuickBooks depends on whether you sync Stripe invoices as invoices or sync charges as sales.

With Acodei's Invoice Sync on, a finalized Stripe invoice becomes a QuickBooks Invoice that reproduces every line item and tax line, as your mapping settings allow. When the invoice is paid, Acodei creates the payment and applies it to that invoice. So the first invoice arrives as a two-line QuickBooks Invoice for $700, followed by a $700 payment that closes it. Acodei never adds Stripe fees to invoices, because that would change the total. The $20.60 fee is recorded separately, according to your fee settings.

With charges synced as sales receipts, the charge becomes a Sales Receipt whose line items come from your product mapping: each Stripe line resolves to a mapped QuickBooks product, and unmapped lines use your default product. By default the Stripe fee is a negative line on the same receipt, netting it to what entered your Stripe balance. With fees as expenses, the fee posts as a separate expense and the receipt stays gross.

Either way, the question that decides whether your books are right is which QuickBooks product each line lands on. If both lines land on your default product, QuickBooks shows $700 of sales on one income account, and the setup fee disappears into your subscription revenue.

Give the setup fee its own Stripe product

Splitting the two lines in QuickBooks starts in the Stripe catalog. Make the onboarding fee its own Stripe Product with a one-time Price, rather than a one-time Price hanging off your Pro plan product.

The reason is how product mapping matches. Acodei's Multiple Product Mapping checks your rules from top to bottom and uses the first one that matches, and its documentation says Stripe Product Mapping "is the only mapping type that allows for mapping multiple line items separately on one transaction in QuickBooks." That is exactly the situation a setup fee creates: one transaction, two lines that belong in different places.

Stripe Product Mapping comes in three forms: all Prices of a product, a value threshold, and a single Price ID. With the setup fee as a separate product, a product-level rule is enough. If you keep the setup fee as a Price on the same product as the plan, you need a Price ID rule, which Acodei's docs describe as the most specific option, applied only "when a charge or invoice contains this exact Price ID." It works, but every new setup fee amount is a new Price and needs a new rule.

Two other rule types are worth avoiding for this job:

  • Metadata rules read metadata from the charge, PaymentIntent, invoice or subscription. All of those are shared by both lines, so a metadata rule cannot send the plan and the setup fee to different products.
  • Transaction value rules match on the gross amount. A discount or a price change breaks the match, and Acodei's own troubleshooting notes point you to Product ID mapping instead.

On the QuickBooks side, create a product or service called something like "Onboarding fee" and point it at the account you want the fee to land in. Acodei's guide to creating a product in QuickBooks also says to set mapped products to non-taxable, because QuickBooks' own tax calculation can disrupt the synced amounts. Tax calculated by Stripe syncs through Acodei's tax settings instead.

Set the rule up before the first customer signs up. Mapping rule changes apply to future transactions only, so a setup fee that already synced to the default product stays there until you fix it. Acodei's guidance is to resync from the Data Feed rather than edit synced records by hand in QuickBooks.

Is the setup fee revenue the day you charge it?

This is the decision that matters most, and it is an accounting policy, not a software setting. Some setup fees pay for real work delivered at the start, such as a migration, a configuration project or a training session. Others pay for nothing the customer receives on its own and are really part of the price of the subscription. Revenue standards treat those two cases differently, so decide which one yours is with your accountant, once, and write it down.

What Stripe does by default is worth knowing either way. Stripe's Revenue Recognition methodology treats each invoice line item as its own performance obligation and amortizes it over the line's period. For a line with no period, it says: "If you don't set a period on an invoice line item, Revenue Recognition recognizes the full amount on the invoice line item when the invoice is finalized." A subscription line gets its period from the subscription automatically. A setup fee added as a one-time Price usually has none. So unless you change it, Stripe's own revenue reports treat the whole $500 as earned on day one.

If your policy is to spread the fee, you have two options in Stripe: set a period on the invoice item when you create it (the invoice item API says the period is used to recognize and defer revenue when Revenue Recognition is enabled), or use Revenue Recognition rules or data import to override the default.

QuickBooks needs the same decision expressed in accounts. Two common setups:

Recognized at once. Point the "Onboarding fee" product at an income account such as "Setup and implementation income." The $500 lands on the Profit and Loss in the month of the first invoice, on its own line, where nobody mistakes it for subscription revenue.

Spread over time. Point the product at a liability account such as "Deferred setup fees." Acodei's product guide confirms that the QuickBooks income account field "can also accept expenses or liabilities," and this is the same pattern the customer deposits guide uses for money you hold before you earn it. Then release the balance to income with a monthly journal entry. Over a 12-month period that is $41.67 a month on the $500 fee, with the last month absorbing the rounding. The deferred revenue entry covers the mechanics.

The second setup keeps the Profit and Loss honest, but someone has to post the release every month and adjust it when a customer leaves early. The revenue recognition post explains why Stripe's schedule and QuickBooks will rarely tie without that work.

Discounts reach the setup fee unless you stop them

Coupons on a subscription apply to the invoice, and the first invoice now has two lines. Stripe's credit notes guide puts the rule plainly: "Discounts apply proportionally to all of the line items on an invoice." Its example is a 10 USD fixed discount on ten 10 USD lines, which takes 1 USD off each.

So a "first month 50% off" coupon applied at signup takes $100 off the plan and $250 off the onboarding fee. The customer pays $350, not the $600 you may have intended. A 100% "first month free" coupon zeroes the setup fee entirely.

If the discount should only touch the plan, restrict the coupon. Stripe's coupon settings include "Apply to specific products" in the Dashboard and applies_to in the API, which "limits the items in an invoice that the coupon can apply to." Promotion codes inherit those product restrictions from their coupon. This is one more reason the setup fee should be its own Stripe Product: you cannot exclude it from a coupon if it shares a product with the plan.

How a discounted invoice is presented in QuickBooks, gross with a discount or net on each line, is covered in Stripe discounts in QuickBooks.

Refunding only the setup fee

Customers ask for the onboarding fee back more often than they ask for the plan back, usually because onboarding never happened. The clean way to do that in Stripe is a credit note against the setup fee line of the paid invoice.

Stripe's guide says a credit note on a paid invoice lets you "refund the payment, credit the customer's invoice balance, or record a refund outside Stripe," and recommends crediting specific line items "since it associates each credit with a line item." A credit note on the onboarding line with a refund to the card returns $500 to the customer and ties the reduction to the line it belongs to.

Two details catch people:

  • A discount carries into the credit. Stripe's guide notes that if a discount reduced a line, a credit note on that line credits the discounted amount. In the 50% example, a full credit of the onboarding line is $250, not $500. To credit the original amount, Stripe says to add a custom discount line to the credit note for the difference.
  • The Stripe fee does not come back. Stripe's refunds guide says its "processing fees from the original transaction aren't returned." The $20.60 charged on the $700 stays charged.

In QuickBooks, Acodei's Invoice Sync turns a Stripe credit note into a Credit Memo, linked to the invoice when possible and otherwise posted to the customer. A refund made directly on the charge, without a credit note, follows Acodei's refund handling instead. Mapping rules can be set per transaction type (sale, refund or fee), so decide where setup fee refunds should land when you build the sale rule. If you defer setup fees, a refund of an unearned fee should reduce the liability, not your income.

A setup fee on a subscription with a free trial

A trial complicates things. Stripe's trial settings apply to recurring items: its trials guide says "Non-recurring items aren't eligible for paid trials or discounted trial pricing." So a trial on the plan does not make the setup fee free, and a one-time item may be due before the trial ends.

Do not assume which invoice it lands on. Build the exact signup flow you use in a sandbox, put the customer on a test clock, and advance it through the end of the trial. Note which invoice carries the $500, when it is charged, and what your QuickBooks file receives. Ten minutes of that is cheaper than unwinding a quarter of setup fees that arrived somewhere other than where your policy says they should.

Reporting: keep the fee out of your recurring numbers

Setup fees distort the numbers that matter most to a subscription business if they are mixed in with plan revenue. Stripe's own MRR ignores them, because MRR tracks recurring items only, which is one of the reconciling lines in why Stripe MRR and QuickBooks revenue disagree. If QuickBooks puts the fee on the same income account as subscriptions, your Profit and Loss shows a revenue spike every month you sign up new customers, and the gap between Stripe's MRR and your books looks like an error when it is not.

With the fee on its own QuickBooks product and account, the Sales by Product/Service report separates the two without any extra work, and the bridge between Stripe's recurring metrics and your books becomes one named line.

A setup checklist

  1. Decide the policy. With your accountant: is the setup fee earned at once or over the relationship? Write it down.
  2. Create the Stripe Product. Make the setup fee its own product with a one-time Price, not a Price on the plan product.
  3. Create the QuickBooks product. Point it at an income account or, if you defer, a liability account. Set it to non-taxable.
  4. Add the mapping rule. Map the setup fee's Stripe Product ID to the new QuickBooks product, above any broader rule, before the first signup.
  5. Restrict your coupons. Use "Apply to specific products" or applies_to so plan discounts do not reach the setup fee, unless you mean them to.
  6. Rehearse once. Run a signup, a renewal and a setup fee refund on a test clock, including a trial if you use one, and check what reaches QuickBooks.

Frequently asked questions

How do I add a setup fee to a Stripe subscription?

Create a one-time Price for the fee and add it to the subscription's first invoice. In Checkout, include the one-time Price in line_items alongside the recurring Price; Stripe puts one-time items on the initial invoice only. Through the API, pass the Price in add_invoice_items when you create the subscription.

Does Stripe charge the setup fee and the first month separately?

No. Both lines sit on the same first invoice and are paid with one charge. Stripe calculates one processing fee on the combined amount. Renewal invoices carry only the recurring line.

How do I record a Stripe setup fee in QuickBooks?

Record it on its own product or service, separate from the subscription. With Acodei, make the fee its own Stripe Product and add a Stripe Product mapping rule to a QuickBooks product for setup fees. Acodei's docs say Stripe Product Mapping is the only mapping type that can send two lines of one transaction to different products.

Is a subscription setup fee revenue immediately?

It depends on what the fee pays for, and it is a policy to decide with your accountant. Stripe Revenue Recognition recognizes an invoice line with no period in full when the invoice is finalized, which is how a one-time setup fee line usually arrives. To spread it, set a period on the invoice item in Stripe and book the fee to a liability account in QuickBooks, released to income each month.

Does a coupon discount the setup fee too?

Yes, unless you restrict it. Stripe applies discounts proportionally to all line items on an invoice, so a 50% first-month coupon also halves the setup fee. Limit the coupon with "Apply to specific products" in the Dashboard or applies_to in the API.

How do I refund just the setup fee?

Issue a credit note on the paid invoice, crediting only the setup fee line, and choose a refund to the payment method. If the line was discounted, the credit is the discounted amount. The Stripe processing fee on the original charge is not returned.

Where this leaves you

A setup fee is one extra line on one invoice, and Stripe handles it without complaint. The bookkeeping work is all in the decisions around it: a product of its own in Stripe, a product of its own in QuickBooks, an account that matches your revenue policy, and coupons that leave it alone. Get those four right before the first signup and every setup fee after it books itself.

Let each line land where it belongs. Acodei syncs Stripe invoices line by line into QuickBooks Online, with product mapping that keeps setup fees, plans and refunds on their own products. Start a free trial.

Share

Automate your Stripe to QuickBooks sync

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

14-day free trial · card required · cancel anytime

How Acodei handles this in your stack

Stripe QuickBooks Integration

See how Acodei syncs Stripe payments, fees, refunds, invoices, and payouts into QuickBooks Online automatically.

Or go straight to a capability

Get more operational finance guides like this one

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