Importing a spreadsheet
If you bill somewhere other than TherapyNotes, how to lay out your own spreadsheet so Track 2 Pay can read it.
Last updated: July 19, 2026
Not on TherapyNotes? Track 2 Pay can read a spreadsheet you build yourself, as long as the column headings match what it expects. This is the Generic importer.
You only have to get the layout right once. After that, exporting the same report each period and uploading it is a two-minute job.
The rules
- The file must be XLSX. Not CSV, not PDF, not a Google Sheet link — download it as an Excel file first.
- The first row is the column headings.
- Each row after that is one session, appointment or charge.
- Headings must match exactly, including capitalization.
- Column order does not matter, and extra columns you do not need are ignored.
Required columns
Every row needs all five of these.
| Column heading | What goes in it |
|---|---|
Description |
What the session was — “Psychotherapy, 60 min” |
Provider Name |
The clinician’s name, spelled consistently |
Provider Type |
Their category — “Psychologist”, “Licensed Professional Counselor” |
Transacted At |
When the session happened, as a date and time |
Type |
The kind of record — “Appointment”, “Missed Appointment” |
Spell names consistently. “Dr. Maya Ellison” and “Maya Ellison” become two separate clinicians with two separate payouts. If your source system is inconsistent, clean it up in the spreadsheet before uploading, or use the
Provider Unique IDcolumn below.
Optional but recommended
| Column heading | What it does |
|---|---|
Provider Unique ID |
A stable identifier for the clinician — a staff number, an NPI. Use this and name spelling stops mattering. |
Transaction Unique ID |
A stable identifier for the session, from your source system. |
If you leave these out, Track 2 Pay generates identifiers from the content of each row instead — for a session, from its date, type, description and clinician; for a clinician, from their name and type. That works, but supplying your own is more robust, because it survives someone editing a description.
Payment columns
Payments go in columns named payment[...], with the payment’s name inside the
brackets. You can have as many as you need.
| Column heading | Becomes |
|---|---|
payment[Client Payment] |
A payment line called “Client Payment” |
payment[Insurance Payment] |
A payment line called “Insurance Payment” |
Keeping the client portion and the insurance portion in separate columns is strongly recommended. It reflects how the money actually arrives and lets each part be paid out on its own timing — the same way the TherapyNotes importer works.
Custom fields
Anything else you want to carry along — and possibly write pay rules against — goes in a bracketed column too.
| Column heading | Becomes |
|---|---|
tx.details[Service Code] |
A field called “Service Code” on the session |
tx.details[Location] |
A field called “Location” on the session |
pr.details[Department] |
A field called “Department” on the clinician |
Use tx.details[...] for things about the session, pr.details[...] for
things about the clinician.
These are not decoration. Anything you put in tx.details[...] can be matched
by a pay rule, so if you pay a different rate for a particular service code or
a particular site, put it in a custom field and you can write a rule for it.
See payout conditions.
A worked example
A sheet with these headings:
Description | Provider Name | Provider Type | Transacted At | Type | payment[Insurance] | payment[Client] | tx.details[Service Code]
and a row like this:
Psychotherapy, 60 min | Maya Ellison | Psychologist | 2026-06-15 14:00 | Appointment | 120.00 | 30.00 | 90837
produces one session on June 15 for Maya Ellison, with two payment lines totalling $150, carrying a Service Code of 90837 that your pay rules can match on.
Uploading it
Go to Transactions, click Import Transactions, and in the Imported From dropdown choose Generic rather than Therapy Notes Billing.
Everything else works exactly as described in importing from TherapyNotes — including the timezone question, the progress bar, and the New-versus-Updated summary at the end.
Set your default. If Generic is what you always use, set Default Importer on your account settings page and the dropdown will start on the right option every time.
Getting it right the first time
Test with a small file. Take five or ten rows, upload them, and look at the result in Transactions. Check that the clinician names came through, that the dates are the days you expect, and that the payment amounts are on separate lines.
Once it looks right, upload the full period. Nothing is wasted — a small test import becomes part of the real data, and re-importing the full file will simply update those same rows rather than duplicating them.
Related
Still stuck? Open the Help menu in Track 2 Pay and choose Support, or read how to get support.

