This is the working session, written down. Follow it top to bottom and you will end up with CrewLAB payments flowing into QuickBooks Online, correctly categorized, with a safety net for anything that is not. It covers the prerequisites that stall most setups, the exact field values to enter, the errors you are likely to hit, and how to confirm it actually worked.
Budget an hour. Ninety minutes if your chart of accounts is messy.
Before you start
Stop. Twenty minutes of the last two setup calls were lost to things on this list. Handle them first.
People
- Whoever holds the Stripe login. Often the club director, not the treasurer.
- Whoever has the two-factor authenticator app — in the room. Not down the hall. Not at home. Stripe and QuickBooks will both ask for a code mid-setup, and if that person is not reachable, you stop.
- QuickBooks admin access. Not view-only, not accountant-user.
Accounts
- Verify your Intuit email address before you start. Log in at intuit.com, find your account settings, and confirm your email shows as verified.
- Know whether your Stripe two-factor is SMS or an authenticator app. They are different, and people expect a text when it is actually a code-generating app.
Information
- Export your chart of accounts to Excel and have it open. (QuickBooks → Accounting → Chart of accounts → the export icon.) You will be looking things up constantly.
- Know which income account each of your programs should land in. Write it on paper before you touch anything.
- Know which bank account Stripe should deposit into. If you are a nonprofit with restricted and unrestricted accounts, this is the unrestricted operating account. Confirm the account number — restricted and unrestricted accounts often sit adjacent at the same bank with the same routing number.
Setup
- Close every browser tab you do not need. You will be juggling four: CrewLAB, QuickBooks, Stripe, Intuit. People lose track.
- If you are doing this on a call, share your whole screen, not a single tab. You will be moving between them.
Step 1 — Find your income accounts
In QuickBooks: Accounting → Chart of accounts.
You are looking for the accounts your program revenue should land in. Dues, program income, camps, regattas, merchandise.
There is no “show me only Income accounts” filter here — the dropdown above the table filters by things like balance sheet vs profit and loss, not by account type. Two ways to narrow it down:
- Type a name in the search box (try “income” or “dues”) — quickest if you roughly know what your accounts are called.
- Click the ACCOUNT TYPE column header to sort, then scroll to the Income block — best if you want to see everything you have.
Two things to note as you go.
Is the account nested under a parent? QuickBooks search results do not show hierarchy, which is genuinely annoying. To check: clear the search, then use Ctrl+F (Cmd+F on Mac) to find the account in the full list where indentation is visible. The chart of accounts is paginated, so if you do not find it, click Next and search the page again.
Is the account already being used for something else? More than one club has mapped fees to an account that turned out to be reserved for regatta processing.
Write your list down. You will need it in Step 5.
Step 2 — Set up your clearing account
This is where Stripe money sits between the charge and the bank deposit. You may already have one.
First: check whether you have one
Look through your chart of accounts for anything called Undeposited Funds, Clearing, or a previous platform’s name — “SportsEngine Clearing,” “TeamSnap Clearing.”
If you find one, use it. Do not create a second.
QuickBooks allows exactly one Undeposited Funds account per company file. If you try to create another you will get:
And if you try to work around it by making yours a sub-account of the existing one: “Can’t have a sub account.” QuickBooks does not allow sub-accounts beneath Undeposited Funds either. Both errors only appear when you hit Save, after you have filled in the whole form.
Reusing your existing account is also just better: one account to reconcile instead of two.
If you do not have one, create it
Accounting → Chart of accounts → New
Field | Value |
|---|---|
Account type | Other Current Assets |
Detail type | Undeposited Funds |
Name | Stripe Clearing |
Description | Payments received via Stripe, awaiting deposit |
Lock this account | Leave unchecked |
Three notes.
It is not a Bank account type, even though it behaves like one. Other Current Assets, detail type Undeposited Funds.
Do not put “CrewLAB” in the name. That Stripe account may outlive any particular platform, and renaming accounts later is a nuisance. “Stripe Clearing” or just “Clearing” ages better.
Do not lock it. A locked account cannot accept transactions, which defeats the purpose entirely.
Step 3 — Create your catch-all account
Every program you sell has to be mapped to a QuickBooks account. When someone on your team creates a new program and nobody maps it, that revenue needs a destination. Without a catch-all, QuickBooks dumps it into a generic Sales bucket where you will not notice until year-end.
So you build a deliberate landing zone instead — somewhere that is right neighborhood, wrong house.
Accounting → Chart of accounts → New
Field | Value |
|---|---|
Account type | Income |
Detail type | Service/Fee Income |
Name | Program Income — Uncategorized (CrewLAB) |
Description | CrewLAB payments not yet mapped to a program |
Sub-account of | Your main Program Income account |
Lock this account | Leave unchecked |
Three things to get right:
- Sub-account of Program Income, not a standalone account. Unmapped registration revenue is program income — it just is not sorted yet. Nesting it there means it rolls up correctly and nothing gets misstated while it waits.
- A brand new account. Do not reuse an existing one, especially not Program Income itself. If unmapped revenue mixes into an account that already has money in it, you cannot separate them afterward.
- Do not lock it. Locked accounts cannot accept transactions.
Step 4 — Install and connect Acodei
Acodei. Pronounced a-CODE-ee, spelled A-C-O-D-E-I. Write it down — you cannot search for it otherwise.
It is a purpose-built connector that sits between Stripe and QuickBooks and does the parts the free connector does not: payout reconciliation, per-transaction fee breakdown, and mapping each program to the right income account.
Install
Two paths, same result:
- From Stripe: Apps → Overview → search Acodei → Install
- From QuickBooks: Apps → search Acodei → Get app now
Or go directly to app.acodei.com and sign up. There is a free trial, so you can check the sync quality before paying.
Connect
Acodei walks you through an onboarding checklist:
- Connect to QuickBooks
- Connect to Stripe
- Account Configuration
- Advanced Settings (optional)
- Test and Connect
- Choose Plan and Checkout
- Historical Pull (optional)
You do not create a separate Acodei login with its own password — it authenticates through your existing Intuit and Stripe accounts.
This is per-organization, not per-person. Once it is connected, anyone with access to your club’s QuickBooks and Stripe is covered. Your colleagues do not need to install anything.
There are a lot of refresh buttons in this process. When something you just created does not appear in a dropdown, refresh both tabs before assuming it failed.
Intuit is QuickBooks’ parent company. Signing in with Intuit is signing in to QuickBooks.
Step 5 — Configure your accounts
In Acodei: Account Mapping.
Sync frequency
Real time.
Where Stripe payouts are deposited
Stripe holds the money before depositing it. QuickBooks needs an account that mirrors the Stripe balance, and the deposit into your real bank account gets recorded separately when it arrives. If you pick your operating bank account here, your reconciliation will not work.
Default sales account
Your catch-all from Step 3.
Default refunds account
The same catch-all. Same visibility logic — you want anything unmapped to be conspicuous.
Stripe fees
Toggle on “include Stripe fees as a line item on sales receipts.” Then point fees at an expense account for card processing fees.
Finding this account is the fiddliest part of the whole setup. Clear the search, use Ctrl+F to search the visible page, and click Next through the pagination if you do not find it. Worth the effort — better than creating a duplicate account you will have to merge later.
Customer sync
On, matched by email address. Email is what follows a member from CrewLAB through Stripe into QuickBooks. Matching by email preserves the billing history you already have on existing members.
Expect a couple of duplicates where someone registered with a different email. Merge them in QuickBooks afterward.
Class tracking
Yes, if your club uses QuickBooks classes. Most nonprofit clubs do — it is how you report by program or squad. Classes are assigned at the product level, which means they are configured in Step 6 rather than here.
Sales tax
Off, unless you sell merchandise through CrewLAB. Dues and registrations are not taxable. Merchandise usually is — if you are selling gear, talk to your accountant before turning this on.
Invoice sync
Off. Unpaid registrations do not sync regardless, so this does not do what its name suggests. See “What does not sync” below.
Step 6 — Map your programs
This is the actual point of the exercise. Everything before this was scaffolding.
The concept, in one line
CrewLAB program → Stripe product → QuickBooks product → income account + class.
One CrewLAB program becomes one Stripe product becomes one QuickBooks product. That QuickBooks product carries the income account and the class. Which is why you get program-level reporting without a separate GL account for every regatta.
A club treasurer’s worry, and the answer:
You will not. It is the same income account, a different product, which produces a different class.
Two rules before you map anything
Create products in CrewLAB, not in Stripe. CrewLAB is the source of truth. A product created directly in Stripe will not match anything in CrewLAB and has to be deleted and rebuilt.
One product per one-off event. A recurring program — “Youth Row, 3 days/week” — maps once and works for years. A regatta needs a new product each year, because “Portland 2026” and “Lake Las Vegas 2026” are different events that need different classes.
Get this wrong and here is what happens: someone pays for Lake Las Vegas, and it books to the Portland class. Two totally different races, one wrong report.
Get your Stripe product list
Stripe → Product catalog → Export products. That gives you the Product IDs (prod_…) you will map against.
Build the rules
In Acodei: Account Mapping → Product Mapping → enable Multiple Product Mapping. “Multiple Product Mapping” then appears in the left menu.
For each program, click Add New Mapping Type:
Field | What to enter |
|---|---|
Mapping type | Stripe Product Mapping → All Prices (Product ID Only) |
Stripe account | Only matters if you have more than one |
Transaction type | Sale — then repeat for Refund, then Fee |
Match criteria | The prod_… ID |
QuickBooks product | The matching product |
Three rules per program — Sale, Refund, Fee. Three programs means nine rules.
Use “All Prices (Product ID Only).” A Stripe product can have several prices under it — full pay, payment plan, discounted tier. This option covers all of them in one rule, which is what you want: full pay and payment plan for the same season are the same revenue.
Only use “With Stripe Price ID” if different prices under one product genuinely need to land in different accounts.
Rule order matters
Acodei reads your rules top to bottom and stops at the first match. Drag handle is the dots on the left. Most specific rules at the top. Broad rules — anything matching on description text — at the bottom. With clean Product ID rules there is no overlap and order will not bite you, but it will the moment someone adds a description-based rule.
Every time you add a program
Step 7 — Check it worked
Do not skip this. It is the step everyone skips, and it is the difference between thinking it works and knowing it does.
Run a test transaction
- Register for a program in CrewLAB and pay for it — use a real card, refund it after
- Wait a few minutes for the sync
- In QuickBooks: Sales → All Sales, sort by transaction date (not the default sort), filter to Last 7 days
Check five things
- The sales receipt exists, with the payer’s name and email
- It is a sales receipt, not an invoice — the payment already happened
- The gross amount is right, and Stripe and platform fees appear as separate lines
- It hit the correct income account — not your catch-all
- The class is correct, if you use classes
Check the reverse direction
Sales → Products and Services → click your product → More actions → Run report. You should see who bought it.
Check the clearing account
Accounting → Chart of accounts → your clearing account → View register. The charge should be there. When Stripe’s payout lands a day or two later, the balance should return toward zero.
Step 8 — Decide about historical data
Acodei can pull past Stripe transactions in.
Before you do: if those transactions are already in QuickBooks by another route — manual entry, a previous connector, bank feed matching — pulling history will double-book them.
Safest approach: pull a short range first, check it, then extend.
Once it is running: your monthly check
Fifteen minutes, four things.
1. Revenue. Run your Profit and Loss for the month — by Class if you use classes. The numbers should match your instinct for the month. If a program shows $400 when you would expect $4,000, something is mismapped.
2. The clearing account. It should trend to zero. Money in from charges, money out to your bank. A zero balance means everything is matched. A non-zero balance mid-month is normal — that is money Stripe is holding — but it should agree with your Stripe balance.
3. The bank. Did payouts land in the right account? Nonprofits: check this one properly. Restricted and unrestricted accounts often sit adjacent at the same bank with nearly identical numbers, and a month of registration income landing in the restricted account is a real problem to unwind.
4. The catch-all. It should be empty. If something is in it, a program was created without being mapped — find the transaction, add the mapping rules, recode it. That is the account doing its job.
What does not sync
The honest list. Better to know now than find out in October.
- Unpaid registrations. Only completed payments. See above.
- New programs are not mapped automatically. Create a program, and someone has to map it before the first sale. Nothing warns you — that is what the catch-all is for.
- Products created in Stripe. They will not match CrewLAB and have to be deleted and rebuilt. Always create in CrewLAB.
- Price changes after someone registers. Plan pricing before you open registration.
- Charges with no product attached. One-off or manually created charges sometimes reach Stripe without a product, which means there is nothing to map. They fall to the catch-all regardless of how carefully you have mapped everything else.
If something goes wrong
Symptom | Likely cause | Fix |
|---|---|---|
“Connect to QuickBooks” fails with no explanation | Unverified Intuit email | Verify at intuit.com, then Try again and refresh both tabs |
“You can only have one account of this detail type” | You already have an Undeposited Funds account | Cancel and reuse the existing one |
“Can’t have a sub account” | QuickBooks does not allow sub-accounts under Undeposited Funds | Cancel and reuse the existing account |
A new account is not in the Acodei dropdown | Caching | Refresh both tabs. It usually appears on the second try. |
Cannot tell if an account is nested | QuickBooks search results hide hierarchy | Clear the search, use Ctrl+F on the full list, click Next through pages |
Stripe product export throws an error | Flaky | Close the dialog and try again |
Account names in the payout dropdown do not match QuickBooks | Stripe shows numbers, QuickBooks shows names | Check the number against your exported chart of accounts |
Test transaction landed in “Sales” | Multiple Product Mapping is not enabled, or nothing matched | Check the mapping list and rule order |
Test transaction has no class | Product is not carrying a class | Check the product mapping |
Money appears in the catch-all later | A program was created without being mapped | Add the mapping rules, recode the transaction |
Clearing account will not zero out | A charge or payout has not recorded | Compare Stripe’s payout report to the clearing register |
Payouts in the wrong bank account | Wrong account selected in Stripe | Stripe → Settings → Bank accounts and currencies → Edit. Transfer the funds, journal the correction. |
Tiny $0.53 / $0.85 charges | ACH bank account verification | Not revenue. Leave them or exclude them. |
Lines marked Incomplete or Canceled | Someone opened the payment page and did not finish | No money moved. Nothing to do. |
No “Add bank account” option in Stripe | Insufficient Stripe permissions | You need Administrator on the Stripe account |
Need help?
Email info@crewlab.io. We will walk through it with you — and if you get part-way and stall, tell us where. That is how this guide gets better.
Related: Stripe + QuickBooks Integration — how the accounting model works, which accounts you need, and what lands where.
