Products and Services
Short version: a QuickBooks product or service item points at exactly one income account. 97153 can be delivered by a technician or by an analyst. So 97153 needs two items — 97153-TECH and 97153-BCBA — aimed at two different revenue accounts. Same for any code your payors let both levels render.
The constraint that drives the whole design
In QuickBooks Online, every product or service item has one income account. Not one per rate, not one per payor, not one that changes based on who did the work. One.
That constraint determines your item list. If you want revenue split by who delivered the service — and you do, because that is where margin lives — then every combination of procedure code and delivery level that can occur needs its own item.
For most codes this is trivial. 97155 is analyst work by definition. 97152 is technician work by definition. One item each, done.
Then there is 97153
97153 is adaptive behavior treatment by protocol, and the code descriptor puts it in the technician's hands under the direction of a physician or other qualified health professional. In practice, most payors also allow a BCBA to render it directly — when a technician calls out, during a transition, when clinical complexity requires it — usually with a modifier.
Here is why that matters, using contracted rates off a live Medicaid book, two managed-care plans under one funder, converted to an hourly figure at four units to the hour.
| Code | Rendered by | Plan A / hr | Plan B / hr |
|---|---|---|---|
| 97153 | Technician | $85.00 | $73.00 |
| 97155 | Analyst | $71.00 | $81.16 |
| 97156 | Analyst | $100.00 | $66.04 |
| 97151 | Analyst, assessment | $102.00 | $153.84 |
Contracted rates, one practice, one month, two plans under the same funder.
Analyst codes do not carry a reliable premium. On Plan A, an analyst hour of protocol modification bills fourteen dollars less than a technician hour of direct treatment. Meanwhile technician pay runs $25 to $33 an hour and analyst pay runs $75 to $110 — three to four times the cost.
Now apply that to 97153. When a BCBA covers a technician session the claim still bills at the 97153 rate, but the cost behind it is analyst cost. One hour, four units:
| Who delivers the hour | Pay | Plan A, $85 | Plan B, $73 |
|---|---|---|---|
| Technician, bottom of range | $25 | +$60 | +$48 |
| Technician, top of range | $33 | +$52 | +$40 |
| Analyst, bottom of range | $75 | +$10 | −$2 |
| Analyst, top of range | $110 | −$25 | −$37 |
Contribution before payroll taxes and benefits. Loaded, every figure drops another 10 to 15 percent.
A technician hour of 97153 clears $40 to $60 on either plan. The same hour covered by an analyst clears ten dollars at best and loses money at the top of the pay range on both plans. That is the leak, and it is invisible if both land in the same revenue account, because the revenue looks identical.
Two items, two accounts, and it shows up on the P&L as analyst-rendered revenue climbing while analyst labor climbs faster.
Naming convention
Use CODE-LEVEL. Nothing clever.
97153-TECH97153-BCBA
It sorts correctly, it is unambiguous in a dropdown, it reads the same way in a QuickBooks sales-by-product report as in a CentralReach billing export, and it maps cleanly. Do not put the rate, the payor, or the year in the item name. Rates change and payors multiply; the item list should not.
The full map
| CPT | What it is | Rendered by | QBO item | Income account |
|---|---|---|---|---|
| 97151 | Behavior identification assessment | Analyst / QHP | 97151-BCBA | Assessment Revenue |
| 97152 | Supporting assessment | Technician | 97152-TECH | Assessment Revenue |
| 0362T | Supporting assessment, destructive behavior | Technicians, QHP on site | 0362T-TECH | Assessment Revenue |
| 97153 | Treatment by protocol | Technician | 97153-TECH | Technician Rendered Revenue |
| 97153 | Treatment by protocol, analyst covered | Analyst / QHP | 97153-BCBA | Analyst Rendered Revenue |
| 97154 | Group treatment by protocol | Technician | 97154-TECH | Technician Rendered Revenue |
| 0373T | Treatment with protocol modification, destructive behavior | Technicians, QHP on site | 0373T-TECH | Technician Rendered Revenue |
| 97155 | Treatment with protocol modification | Analyst / QHP | 97155-BCBA | Analyst Rendered Revenue |
| 97156 | Family guidance | Analyst / QHP | 97156-BCBA | Analyst Rendered Revenue |
| 97157 | Multiple-family group guidance | Analyst / QHP | 97157-BCBA | Analyst Rendered Revenue |
| 97158 | Group treatment with protocol modification | Analyst / QHP | 97158-BCBA | Analyst Rendered Revenue |
Build only the codes you actually bill. An item list with eleven live items beats one with forty, thirty of which have never had a transaction.
Where the assistant analyst goes
If your payors credential BCaBAs or assistant analysts at their own rate, you have a third delivery level and a decision to make. Make it once, write it down, stop relitigating it.
Bucket by economics, not by the letters after the name. If the assistant is paid near technician wages and billing near technician rates, the revenue belongs in Technician Rendered and the labor in the technician COGS account. If they function as a supervisor at analyst-adjacent rates, put them on the analyst side. What you cannot do is split them one way in revenue and another way in payroll, because then the margin math stops meaning anything.
Setup details that matter
- Type: Service. Not Non-inventory, not Bundle. ABA services have no inventory and bundles will wreck your sync.
- Income account: set on every item, every time. An item with no income account silently lands in whatever QuickBooks defaults to, usually Sales, and you find it during a close.
- Sales price: leave it blank. Rates are payor-specific and change on their own schedule — look again at the table above. The rate belongs on the transaction line, driven by your billing data. Hard-code a price on the item and someone will eventually use it and invoice the wrong amount.
- Category: optional and cosmetic. It groups items in the picker. It does not affect the general ledger, so do not use it in place of the income account.
- Description: the plain-English service description. It is what shows on the invoice, and it is what makes an audit or a payor question a five-minute conversation.
Do not build one item per payor. It feels organized for about a month, and then you have 200 items, a sales-by-product report nobody can read, and a mapping table that breaks every time a plan is renamed. Payor detail belongs in the customer record. That is the next post.
How this connects to the sync
Qlarity groups CentralReach billing data by payor, procedure code, location and date of service, then writes it to QuickBooks. The procedure code plus the rendering level determines the item, and the item determines the revenue account. Get the item list right and the revenue split maintains itself — every sync, no monthly reclassing.
Get it wrong and you have a single lump of therapy income again, only now it arrives automatically.