Stripe Customer Deposits in QuickBooks: Book the Liability
A deposit or retainer taken through Stripe is a liability, not revenue, until the job is invoiced. How to set up QuickBooks, apply it to the final...
A landscape designer quotes a client $2,000 for a garden plan and asks for $500 up front through a Stripe Payment Link. The client pays on March 3. The design is delivered on April 10, the designer sends a Stripe invoice for the rest, and the client pays $1,500. Stripe shows two successful payments. If both reach QuickBooks as sales, March shows $500 of revenue for work that hadn't started, and if the April invoice is booked at its full $2,000, the job shows $2,500 of revenue for a $2,000 job.
A deposit is not revenue. Until the work is done, it's money you hold for the customer, and it belongs in a liability account. This post covers how to set that up in QuickBooks, the two ways to take the balance through Stripe and what each does to your books, what to do when a job is canceled, and a worked example that ties out to zero. If you'd rather have your Stripe payments reach QuickBooks already sorted by product, start a free trial.
Why a deposit is a liability
Intuit's help article on recording a retainer or deposit in QuickBooks Online states the principle directly: "The retainer or deposit is treated as a liability to show that, although your business is holding the money from a deposit or retainer, it doesn't belong to you until it's used to pay for services."
Stripe doesn't make that distinction. A $500 deposit taken through Checkout, a Payment Link or an invoice is an ordinary successful payment, the same as any sale. The split between "earned" and "held" has to happen in how the payment is recorded in QuickBooks.
This is the same logic as deferred revenue on a prepaid subscription, and a close cousin of a gift card sale. The difference is that a deposit belongs to one known customer and one known job, so it gets applied to one specific invoice rather than redeemed whenever someone turns up.
Set up the liability account and the deposit item
Intuit's method is two pieces of setup, done once.
1. A liability account. In the chart of accounts, create a new account with the account type Other Current Liabilities. Intuit's example uses the detail type "Trust Accounts - Liabilities" and a name like "Trust Liabilities". A name such as "Customer Deposits" works too, as long as your accountant agrees on the detail type. The account shows up on the Balance Sheet, not the Profit and Loss.
2. A deposit or retainer item. In Products and Services, create a Service called "Retainer" or "Customer Deposit". Intuit's key instruction: "From the Income account dropdown menu, select the liability account created in Step 1." Acodei's guide to creating a product in QuickBooks confirms the field takes it: "The income account field can also accept expenses or liabilities."
That item is the whole mechanism. A positive line on it adds to what you hold for customers. A negative line releases it.
Recording the deposit
When the $500 arrives, record it on the deposit item. Intuit gives two options:
- A sales receipt. "In addition to adding the retainer or deposit amount to the specified bank account, this increases the amount in your liability account."
- An invoice on the deposit item, paid later. Intuit notes the catch: "Cash basis reports will not reflect deposit/retainer as received until the invoice is paid in full."
With Stripe, the money usually arrives before anyone thinks about an invoice, so the sales receipt is the natural fit: the deposit is already paid, and a sales receipt records a sale and its payment together.
Stripe's fee is an expense now. Stripe's standard US rate is 2.9% + 30¢ per successful domestic card transaction, so a $500 deposit costs $14.80 to collect. That fee isn't held with the deposit. It belongs to the month you paid it. The liability is the full $500 you owe in work or refund, not the $485.20 that reached your bank.
Applying the deposit to the final invoice
When the work is done, you invoice the full job and subtract the deposit. Intuit's instruction: "On the last line of the invoice, in the Product/Service field, select the Retainer or Deposit item. Enter the retainer Amount as a negative to subtract it from the invoice."
The QuickBooks invoice for the garden plan looks like this:
| Line | Product/Service | Amount |
|---|---|---|
| Garden design | Design services (income) | $2,000 |
| Less deposit received March 3 | Customer Deposit (liability) | -$500 |
| Balance due | $1,500 |
That one document does three things. It books $2,000 of revenue, the full value of the job. It releases the $500 from the liability account. And it leaves $1,500 in accounts receivable for the Stripe payment to clear.
The hard part is that Stripe has to collect $1,500, not $2,000, and there are two ways to make that happen. They look the same to the customer and very different in your books.
Option 1: Invoice only the balance in Stripe
The simplest route is to send a Stripe invoice for $1,500, with a line such as "Garden design, balance after $500 deposit".
To the customer, that's clear. The risk is in QuickBooks. If the record that reaches QuickBooks is a $1,500 sale on your design product, you've booked $1,500 of revenue on a $2,000 job, and the $500 deposit sits in the liability account with nothing to release it. Every completed job leaves its deposit behind, and the liability grows month after month.
If you take the balance this way, add the release yourself when the job completes: debit Customer Deposits $500, credit design income $500. Or record the final invoice in QuickBooks with the two lines above and apply the Stripe payment to it. Either way, the test is the same: once the job is done, the customer's deposit should be zero.
Option 2: Credit the deposit to the Stripe customer balance
Stripe has a feature built for "you owe the customer money": the customer credit balance. When the deposit comes in, you create a credit adjustment of $500 on that customer. Stripe then applies it to their next invoice: "The credit balance automatically applies to the next finalized invoice to a customer."
The final Stripe invoice is written for the full $2,000. Stripe applies the $500 credit and charges the difference. Its Invoice object says the amount_due takes applied account credit into account, and "The charge that gets generated for the invoice will be for the amount specified in amount_due." The invoice's total stays at $2,000, and the card is charged $1,500.
This is the version that mirrors the QuickBooks invoice above, but it has two traps.
The credit is not money. Adjusting the credit balance moves no cash. It's a note in Stripe's ledger. The $500 already arrived as a separate payment on March 3. If that payment was booked as a sale, and the April invoice is booked at its $2,000 total, you've recorded $2,500 of revenue. The March payment has to land in Customer Deposits for this route to work, and the $500 applied credit on the April invoice has to come out of Customer Deposits, not out of revenue or accounts receivable.
You can't pick the invoice. Stripe says plainly: "You can't choose a specific invoice to apply the credit balance to." If the same customer has a subscription, or a small add-on is invoiced first, the $500 is consumed by whichever invoice finalizes next. Use this route for customers whose only Stripe invoice will be the final one for the job, or check the invoice before it finalizes.
Whatever tool or process records your Stripe invoices in QuickBooks, look at the first one that carries an applied credit balance. Confirm that revenue shows the full job, that $500 left Customer Deposits, and that only $1,500 hit the bank. The customer balance mechanics are covered in more depth in how the Stripe customer balance reaches QuickBooks.
When a job is canceled
Canceled jobs are where a deposit account earns its keep, because the money was never income in the first place.
Refunding the deposit. Refund the original Stripe payment. The refund reduces Customer Deposits, not sales. Stripe's refund documentation is clear that "Stripe's processing fees from the original transaction aren't returned," so the $14.80 stays in March's fees. Stripe also allows a partial refund if you keep part of the deposit for work already done.
Keeping the deposit. If your terms make the deposit non-refundable and the client walks away, the $500 has become yours. Move it out of the liability: debit Customer Deposits, credit an income account. Which income account, and whether a forfeited deposit is taxable where you are, is a question for your accountant. What counts as refundable depends on your contract and local law, not on anything in Stripe or QuickBooks.
Keeping part of it. Split the two: refund the portion you're returning through Stripe (which debits Customer Deposits for that amount), then move the remainder to income with the entry above.
A worked example
Here is the garden designer's job in full, using Option 1, with Stripe fees at 2.9% + 30¢ and no sales tax to keep the numbers clear.
March 3: $500 deposit through a Payment Link.
| Entry | Debit | Credit |
|---|---|---|
| Deposit received (sales receipt on the deposit item) | Stripe holding account $500.00 | Customer Deposits $500.00 |
| Stripe fee | Stripe fees expense $14.80 | Stripe holding account $14.80 |
March's Profit and Loss shows $14.80 of fees and no revenue from this job. The Balance Sheet at March 31 shows $500 owed to the client.
April 10: design delivered, $1,500 balance paid through a Stripe invoice.
| Entry | Debit | Credit |
|---|---|---|
| Final invoice, design line | Accounts receivable $2,000.00 | Design income $2,000.00 |
| Final invoice, deposit line (-$500) | Customer Deposits $500.00 | Accounts receivable $500.00 |
| Balance paid through Stripe | Stripe holding account $1,500.00 | Accounts receivable $1,500.00 |
| Stripe fee | Stripe fees expense $43.80 | Stripe holding account $43.80 |
Where everything ends up:
- Design income: $2,000, all in April, when the work was delivered.
- Customer Deposits: $500 in, $500 out, zero.
- Accounts receivable: $2,000 in, $2,000 out, zero.
- Stripe fees: $58.60, split across the two months the payments happened.
- Cash through Stripe: $2,000 collected less $58.60 in fees, $1,941.40 paid out to your bank.
The check that matters is the second line. At any month end, the balance in Customer Deposits should equal the sum of deposits on jobs you haven't invoiced yet. Keep a short list of open jobs and their deposits, and tie the account to it before you close the month. If the account is higher than the list, a completed job didn't release its deposit, which is the Option 1 failure. If it's lower, a deposit was booked as revenue on arrival.
A note for cash-basis books
If you report on a cash basis, a deposit recorded on a QuickBooks invoice (rather than a sales receipt) can leave a balance in accounts receivable on the cash-basis Balance Sheet. Intuit's article on resolving A/R and A/P balances on a cash basis Balance Sheet lists retainers as a known cause. They're "often entered using a product/service item that is reported under a liability account." Intuit's guidance is that "the balance can be left where it is. Such balances have no effect on the Profit and Loss report, which is the main focus of cash basis." If a cash-basis Balance Sheet shows an A/R balance you can't explain, check for deposit lines before you start hunting for missing payments.
Whether a deposit counts as income when received for tax purposes is a separate question, and the answer depends on your tax basis and jurisdiction. Your books can hold the liability either way. Ask your accountant how to report it.
Where Acodei fits
Everything above works by hand. The part a sync can take over is making sure each Stripe deposit lands on the deposit item, not your sales product, without anyone sorting it.
The cleanest setup is a dedicated Stripe Product, such as "Project deposit", used only for deposits. Acodei's Multiple Product Mapping matches Stripe transactions to QuickBooks products by rule, and one rule type matches on the Stripe Product ID. Rules are checked from top to bottom, and the first match decides the QuickBooks product and, with it, the account that product is linked to. A rule that sends "Project deposit" to the Customer Deposit item books every deposit to the liability account instead of your sales income. The feature overview shows the other rule types, including metadata and description matching.
Three documented details matter for deposits:
- Set the rule before the first deposit. Acodei doesn't version mapping rules. A changed rule takes effect for future transactions only, so deposits taken before the rule existed stay on whatever product they landed on until you correct them.
- Keep the deposit item non-taxable. Acodei requires every QuickBooks product used in its mapping to be marked non-taxable, with tax handled separately. The deposit item is no exception.
- Put the rule above broader rules. Because the first matching rule wins, a broad description rule placed higher, one whose text also appears on the deposit, would catch the deposit before the Product ID rule sees it.
Whichever route you use for the balance, run the first completed job end to end through the tie-out above before you trust it. To route your Stripe deposits to the liability account by rule, start a free trial.
Frequently asked questions
Is a customer deposit revenue in QuickBooks?
No. Until you do the work, the money is owed to the customer, either as work or as a refund. Intuit's guidance is to set up an Other Current Liabilities account and a service item whose income account is that liability, then record deposits on that item. Revenue appears when you invoice the finished job.
How do I apply a deposit to the final invoice in QuickBooks Online?
Invoice the full job, then add a last line on the deposit or retainer item with the deposit amount entered as a negative. Intuit's instructions say to "Enter the retainer Amount as a negative to subtract it from the invoice." That line releases the liability and reduces the balance due.
Should I invoice the balance or use the Stripe customer credit balance?
Both work. Invoicing only the balance is simpler in Stripe, but you must release the deposit from the liability account yourself when the job completes. The customer credit balance keeps the full job value on the Stripe invoice, but Stripe applies it to the customer's next finalized invoice automatically, and you can't choose which one.
Does a Stripe customer credit balance move money?
No. A credit adjustment is an entry in the customer's balance ledger in Stripe. The deposit money arrived as its own payment. When Stripe applies the credit to an invoice, it reduces the amount it charges, so the invoice total and the charge differ by the credit applied.
What happens to the Stripe fee if I refund a deposit?
It stays an expense. Stripe says its "processing fees from the original transaction aren't returned" when you refund. The refund itself reduces your customer deposits liability, because the deposit was never booked as income.
Why does my cash-basis Balance Sheet show accounts receivable from a retainer?
If a retainer was recorded on a QuickBooks invoice using a liability-linked item, the cash-basis Balance Sheet can show a leftover A/R balance. Intuit lists retainers as a known cause and says such balances "can be left where it is," because they don't affect the Profit and Loss.
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
Advanced Product Mapping
Map Stripe products to QuickBooks with rule-based logic on product ID, price ID, metadata, and account. Set rule priority and extend mapping to refunds and fees.
Automated Invoice Sync
Bring Stripe invoices into QuickBooks and auto-apply payments and credit memos, with numbering, invoice matching, and quantity tracking to cut double-entry.
Multi-Currency Mastery
Sync Stripe transactions across currencies with automatic exchange rate handling and currency-specific customer records. Our team enables multicurrency on request, and zero-decimal currencies such as JPY are not supported.
Class Mapping
Map Stripe products to QuickBooks classes for scalable categorization and multi-entity reporting. Class tracking requires QuickBooks Online Plus or Advanced.
Historical Data Import
Backfill historical Stripe data into QuickBooks by month range. Preview volume and cost before syncing so reporting starts from a complete baseline.
How to Connect Stripe to QuickBooks Online
Connect Stripe to QuickBooks Online in minutes. Acodei links both accounts with secure OAuth and syncs payments, fees, refunds, and payouts automatically.
Reconcile Stripe Payments in QuickBooks
Reconcile Stripe in QuickBooks Online automatically. Acodei splits out fees, matches payouts to deposits, and keeps every charge audit-ready.
Get more operational finance guides like this one
We will only send high-value product and finance content.