Skip to content

How to

Track med spa packages so the sessions-left number counts itself

Two Google Forms, one sheet and a formula: the front desk sees sessions left before a visit, and nobody types that number by hand.

Published · 7 min read

In short

Log each package sold and each visit used through two Google Forms into one sheet, and let a formula count the visits and show sessions left. Lock that column, give the front desk one tab to read, and settle the HIPAA question with Google before any client data goes in.

Why a typed-in balance drifts

Most package spreadsheets start the same way. Someone sells Package A, 6 sessions, types a 6 in a cell, and after the first visit someone else changes it to 5. Every visit after that depends on a person editing the right cell on a busy day.

The number drifts in quiet ways. Two people edit it on the same afternoon, or a visit goes in a notebook and never reaches the sheet. Then a client is sure they have two left, the sheet says one, and nobody can prove either.

The fix is to stop typing the balance at all. Record two plain facts, a package was sold and a visit was used, and let the sheet work out the rest. The steps below use Google Forms and Google Sheets, which you may already have, and close with the Airtable version. For the rest of your site, see websites for med spas.

Before you build: whose data goes in the sheet

A package tracker holds client names next to what they bought, so settle the privacy question first. Google says each Google Workspace customer is responsible for deciding whether HIPAA applies to them and whether they put protected health information in Google services. Google also says customers who have not signed a business associate agreement with Google must not put protected health information in Google Workspace.

If HIPAA applies to you, the agreement is accepted electronically by an administrator in the Google Admin console, under Account settings and then Legal and compliance. If you are not sure whether it applies, ask the person who handles compliance for your spa before the first real name goes in. The same question comes up for the forms on your website, and the answer carries over here.

Whatever the answer, keep the sheet thin. It needs the client's name, a phone number or client ID, the package, the count and the dates. Treatment notes, photos and anything clinical stay out of it.

Step 1: two forms at the desk, one sheet

Build two short Google Forms.

Form 1, Package sold, asks for:

  • Client name
  • Client phone or client ID
  • Package name, for example Package A, 6 sessions
  • Sessions bought, as a number
  • Date sold
  • Package code

The package code keeps two packages for the same client apart. Use something the desk can write the same way every time, like the client's initials plus the sale date. A client who buys Package A in March and again in June then has two codes, and each visit counts against the right one.

Form 2, Visit used, asks for:

  • Package code
  • Visit date
  • Staff initials

Now point both forms at the same file. In Google Forms you can choose where responses are saved, including an existing spreadsheet you pick. Create the response spreadsheet from Form 1, then set Form 2 to save into that same spreadsheet, so both forms feed one Google Sheets file. When responses are stored in a spreadsheet, Google Sheets puts them in a table on its own, so each sale or visit lands as a structured row.

Rename the two response tabs so you can tell them apart. In the examples below they are called Packages and Visits.

Step 2: a sessions-left column that counts itself

On the Packages tab, go to the first empty column to the right of the form answers. This column holds the balance, and one formula in its top cell fills the whole thing.

COUNTIFS in Google Sheets counts the rows that match one or more conditions, which is how the sheet counts the visits logged against one package code. ARRAYFORMULA lets one formula fill its results down many rows, so the balance covers every new package without anyone copying the formula down.

Here is an example, for a sheet where column E on Packages holds sessions bought, column G holds the package code, and column B on Visits holds the package code:

txt
={"Sessions left"; ARRAYFORMULA(IF(G2:G="", "", E2:E - COUNTIFS(Visits!B:B, G2:G)))}

The column letters in that line have to match your own sheet. Look at the top row of each tab, find which letter holds sessions bought and which holds the package code, and change E, G and B to those letters before you paste it.

Then test it. Submit Form 1 once with a made-up client and 6 sessions bought, then submit Form 2 twice with that package code. The new column should show 4. If it still shows 6, check that the code was typed the same way in both forms.

Step 3: lock the columns nobody should type in

Google Sheets lets you protect a sheet or a range so people cannot change its content. Use that on the balance column, so only you can edit it.

Staff still record every sale and every visit through the two forms, and the balance updates from those entries. If a number looks wrong, the cause is a missing or mistyped form entry. Find it in the Visits tab by its date and staff initials, and fix it there, not by typing over the balance.

Step 4: the one tab the front desk reads before a visit

Add a new tab and call it Desk. This is the only tab the front desk needs to open.

In cell B1, the desk types a client name. In cell A3, paste a formula that pulls that client's open packages. The FILTER function returns only the rows that meet the conditions you set, so it can show one client's packages that still have sessions left.

txt
=FILTER(Packages!B2:H, Packages!B2:B=B1, Packages!H2:H>0)

Same rule as before: in this example B is the client name column and H is the balance column on Packages, so change them to match your sheet. Then protect cell A3 and the area below it the way you did in Step 3, so nobody types over the results. Leave B1 open so the desk can type in it.

Before each visit, the desk types the name and reads the package code and the sessions left. After the visit, they fill in Form 2.

If you already use Airtable

The same idea works in Airtable with two linked tables, one for packages and one for visits. A count field counts the linked records on its own, and a rollup field updates as records are linked or unlinked, so a count field on the packages table keeps the used count without anyone typing it. From there, the balance is sessions bought minus that count.

The privacy question changes, though. Airtable's HIPAA page says HIPAA is available on its Enterprise Scale plan, and the customer has to sign Airtable's Business Associate Addendum. Plans change, so read that page again before you decide.

What to do

  • Open the sheet you use today and write down which columns the desk actually reads. Anything clinical stays out of the new one.
  • Ask whoever handles compliance whether HIPAA applies to your spa, and if it does, have your Google admin accept the business associate agreement in the Admin console before real names go in.
  • Build the Package sold and Visit used forms, and point both at one spreadsheet.
  • Paste the balance formula, fix the column letters, and test it with a made-up client.
  • Protect the balance column and the Desk tab formulas.
  • Enter each client's current packages through Form 1 once, with what they have left as sessions bought, then retire the old sheet.
  • When the desk outgrows a sheet, Your Wish Is Our Code builds custom apps, and you own the code and the accounts from the first day.

Sources

  1. Choose where to save form responses

    Google Docs Editors Help, read October 20, 2026

  2. COUNTIFS

    Google Docs Editors Help, read October 20, 2026

  3. ARRAYFORMULA

    Google Docs Editors Help, read October 20, 2026

  4. FILTER function

    Google Docs Editors Help, read October 20, 2026

  5. Protect, hide & edit sheets

    Google Docs Editors Help, read October 20, 2026

  6. HIPAA Compliance with Google Workspace and Cloud Identity

    Google Workspace, read October 20, 2026

  7. Count field overview

    Airtable Support, read October 20, 2026

  8. Rollup field overview

    Airtable Support, read October 20, 2026

  9. HIPAA at Airtable

    Airtable, read October 20, 2026

Common questions

Can Google Sheets show how many sessions a client has left on a package?

Yes. Log each package sold and each visit used through Google Forms into one sheet. A COUNTIFS formula counts the visits for each package so you can subtract them from the sessions bought, and ARRAYFORMULA fills that column for every new row, so nobody types the balance.

How do I stop staff from changing the sessions-left number by hand?

Protect the balance column and the formulas on the desk tab in Google Sheets so people cannot change their content. Staff still record sales and visits through the forms, which save into the same sheet, and the number updates from those entries.

Is it OK to keep med spa client package records in Google Sheets?

Google says each Workspace customer decides whether HIPAA applies to them. If it does and the sheet holds protected health information, Google says you need a signed business associate agreement first, which an administrator accepts in the Google Admin console.

Can I build the same package tracker in Airtable?

Yes. Link a visits table to a packages table and add a count or rollup field on the packages table, and Airtable keeps the used count as visits are linked. Airtable's HIPAA page says HIPAA is offered on its Enterprise Scale plan with a signed Business Associate Addendum.

The Friday note

One short email on Fridays with the week’s posts. Nothing else goes out, and one link takes you off the list.

Kept for this email only.Privacy

Tell us what you are working on.

A few lines about your business is enough to start. We reply with questions and a plain next step.