Skip to content
Keystone Practice export

Snapshot template: what each column means

Three files: one row per clinician, one row per clinician per pay period, one row per month.

This is our own format, and it is the one thing on this site you never have to guess about. If your practice software will not hand you something close to it, the other pages here are about turning what it does hand you into this.

Nothing in it identifies a client. That is deliberate: the format is built so that the file which answers a money question does not have to carry anybody's health information to do it.

Only the clinicians and periods files are needed to see per-clinician numbers. The monthly financials file is what lets the practice-level picture reconcile against your books.

Where these column names come from. These are our own columns, taken from the same definitions the import screen labels itself from. The sample files linked below are the format's reference copy.
Column by column

Every column in the file

clinicians.csv

One row per clinician. This is the roster: who they are and how they are paid.

Columns in clinicians.csv
ColumnWhat it holds
clinician_idDecides the moneyRequired. Clinician name or ID.
statusDecides the moneyRequired. Employment status. active, on leave, departing, or departed.
billing_rateDecides the moneyRequired. Billing rate ($/hr). What a clinical hour brings in for this clinician. If you take insurance, use what an hour actually collects on their panel mix, not the billed charge — contracted rates and write-offs mean those differ.
comp_modelDecides the moneyRequired. Pay model. How this clinician is paid: commission, fee-split, salaried, or hybrid (base + fee split).
comp_admin_rateOptional. Admin pay rate ($/hr). Commission model only: hourly pay for admin time.
comp_clinical_rateOptional. Clinical pay rate ($/hr). Commission model only: hourly pay for clinical hours above the threshold.
comp_clinical_threshold_hrsOptional. Clinical hours threshold. Commission model only: clinical hours per period before the clinical rate applies (default 6).
comp_fee_pctDecides the moneyOptional. Fee-split share. Fee-split model only: the clinician's share of their revenue (e.g. 0.40 = 40%). The split applies to whatever basis their contract names — billed or collected. If you take insurance, the safe norm is a share of collections.
comp_floor_rateOptional. Admin floor rate ($/hr). Fee-split model only: minimum hourly pay for admin time.
comp_annual_salaryOptional. Annual salary. Salaried model only: gross annual salary.
comp_base_annualOptional. Annual base. Hybrid model only: guaranteed gross annual base, paid on top of the fee-split share.
comp_split_thresholdOptional. Split threshold ($/period). Hybrid model only: per-period revenue the fee-split applies above (default 0 — split on all revenue).
er_payroll_tax_rateOptional. Employer payroll tax. Employer-side payroll taxes as a share of wages (default 7.65%).
k401_match_rateOptional. 401(k) match. Employer 401(k) match as a share of wages.
benefits_moOptional. Benefits ($/mo). Employer-paid benefits cost per month.
supervision_hrs_ppOptional. Supervision hrs/period. Supervision hours provided to this clinician each pay period.
supervision_rateOptional. Supervision rate ($/hr). Fully-loaded cost per supervision hour.
supervisorOptional. Supervised by. The name or ID of the clinician who supervises this one, exactly as it appears in the clinician column. Filling this in credits that supervisor for the supervision they provide, so their own numbers reflect the work. Leave it blank when the supervision comes from outside the practice.
admin_ratioOptional. Admin-to-clinical ratio. Admin hours per clinical hour (e.g. 1.5 = 1.5 admin hrs for every clinical hr).
target_hrs_per_periodOptional. Current target hrs/period. Clinical hours you expect this clinician to hit now; a ramping clinician's is lower than their goal.
fully_ramped_target_hrsOptional. Fully-ramped target hrs/period. Their steady-state caseload goal once fully ramped.

clinician_periods.csv

One row per clinician per pay period. This is what they did and what it brought in.

Columns in clinician_periods.csv
ColumnWhat it holds
clinician_idDecides the moneyRequired. Clinician name or ID.
period_startDecides the moneyRequired. Pay period start.
period_endDecides the moneyRequired. Pay period end.
clinical_hoursDecides the moneyRequired. Clinical hours. Billable clinical hours in the period.
admin_hoursOptional. Admin hours.
billed_revenueDecides the moneyRequired. Billed revenue. Revenue billed for this clinician in the period.
collected_revenueDecides the moneyOptional. Collected revenue. What actually landed in the bank for this clinician's sessions in the period, after payer adjustments, denials, and write-offs. For a private-pay practice it's close to billed; if you take insurance it's the number that matters, and your EHR's payments report already has it. When this column is filled in, the Snapshot computes that clinician's revenue from it directly.

financials.csv

One row per month. This is the practice-level total the per-clinician numbers reconcile against.

Columns in financials.csv
ColumnWhat it holds
monthDecides the moneyRequired. Month.
total_revenueDecides the moneyRequired. Total revenue.
total_expensesDecides the moneyRequired. Total expenses.
net_incomeDecides the moneyRequired. Net income.
The money

Which columns decide practice economics

Per-clinician economics need four things and no more: who the clinician is, how they are paid, how many clinical hours they held, and what those hours brought in. Everything else in the roster sharpens the picture rather than making it possible.

Honest limits

What this file cannot tell you

What will bite you

  • Revenue is per clinician per pay period, not per session. If your export is per session, it needs to be summed first, which is what the step that removes client data does on its way through.
  • Where a column is left blank, an assumption fills it, and the report says which assumption it used.
Use the file

Drop this exact file here

Drop this exact file in. Nothing in it identifies a client, so it goes straight into the free Snapshot. It runs in your browser and nothing is uploaded.

Sample files: clinicians.csv, clinician_periods.csv, financials.csv

All the export files we have written up · Last checked 2026-08-13