This is the working session, written down. Follow it from 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.
Worth doing now. An unverified Intuit email makes the QuickBooks connection fail with no useful explanation, and unpicking it mid-setup takes about six minutes of tab archaeology.
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.
If you land on a screen with dates, payees, and running balances, you are in the bank register, not the chart of accounts. Click “Chart of accounts” in the left nav again to get back out.
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.
Income accounts in the chart of accounts. The indented rows are sub-accounts of Program Income.
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:
“You can only have one account of this detail type.”
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 |
The catch-all account, filled in. QuickBooks previews where it will sit in your Profit and Loss on the right.
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.
When you hit Save, QuickBooks may ask “Want to lock parent account?” That is asking about the parent (Program Income), not the account you are creating. Locking a parent stops anyone posting directly to it, which is tidy but optional. Say No unless your bookkeeper specifically wants it — and never lock the catch-all itself.
The goal is that no dollar ever lands here. If one does, that is not a failure — it is the system telling you a program needs mapping.
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.
If “Connect to QuickBooks” fails without explaining why, it is almost certainly the unverified Intuit email from the prerequisites. Fix: open a new tab → intuit.com → account settings → Verify email → check your inbox → click the link → return to Acodei → close the error → Try again → refresh. Then go back to the Acodei tab and refresh that too.
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
This is the question most people get wrong. The prompt reads like it is asking for your bank account. It is not. Select your clearing account from Step 2.
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.
If the account names in the dropdown do not match what you see in QuickBooks — you will sometimes see numbered labels like “1030” instead of the name — check the account number against your exported chart of accounts. Do not guess.
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.
Two warnings. Check the account is not nested under Fundraising — nonprofits; this affects your functional expense reporting. And check it is not already in use for something else, like regatta payment processing.
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:
“We don’t really want to have multiple program incomes for each race or each regatta. We want to be sure that each one hits its correct column.”
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.
If the export throws an error, close the dialog and try again. It usually works the second time.
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.
US clubs: mark your QuickBooks products nontaxable. Sales tax is handled separately, and taxable products here will double up.
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
Go back to the mapping screen and add its rules. Nothing does this for you, and nothing warns you. Until it is mapped, that revenue lands in your catch-all. Make this a checklist item in whatever process your club uses to launch 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
A synced payment in QuickBooks. Note the two fee lines, the Stripe payment ID in Reference no., and Deposit To pointing at the clearing account.
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
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.
A note on unpaid registrations. Only completed payments reach QuickBooks. If someone has registered but not paid, that sits in CrewLAB and never appears in your books. For most clubs that is fine, because registration requires payment. But if your club fronts regatta entries and collects from families afterward, you have real accounts receivable — and that needs a manual month-end journal entry, reconciled against CrewLAB’s unpaid list. Worth agreeing a policy with your board before your first year-end.
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 [email protected]. We will walk through it with you — and if you get partway and stall, tell us where. That is how this guide gets better.



