Here's the problem in one sentence: the tools that measure ads assume the sale happens on a webpage. In a gym, it almost never does. Someone clicks an Instagram ad, fills out a trial form, comes in for a class three days later, thinks about it over the weekend, then joins at the front desk on Tuesday while chatting with the person who taught their class. By the time money changes hands, the ad click is four steps and a browser session in the past — and every off-the-shelf pixel has long since lost the thread.
So the first thing we built wasn't a dashboard. It was an identity that refuses to let go of that first click.
Tag on arrival, not on checkout
The standard model waits for a conversion event on the website and tries to match it back to an ad. We flipped it. The moment anyone lands from an ad, we capture the click and attach it to a durable visitor record — before they've done anything. From then on, the job isn't "attribute the sale," it's "keep matching this human to that record as they move through the real world." Four steps:
When a visitor arrives from a paid link, we read the ad identifiers and store them in a first-party visitor record that isn't tied to a single browser tab or a short-lived cookie.
The trial form asks for an email and phone — the same details the front desk will use later. That's the join key. The visitor record and the lead become the same person, on purpose.
When that email or phone signs a membership at the counter, over the phone, or on a walk-in, the sale is written against the same record — so the ad click is still attached at the exact moment money is collected.
We send the confirmed membership back to Meta and Google via their Conversions APIs, so their algorithms optimize on members who actually paid — not just people who clicked.
Why this only works if you own the whole stack
This is the part that convinced us to build the entire platform instead of a marketing add-on. Attribution that survives to the sale requires the sale to happen inside the same system that saw the click. If booking, POS, and check-in are three separate vendors, there's no single record for the tag to ride on — the click dies in the gap between tools, which is exactly why the current stack can't answer the cost-per-member question.
Because Kuviro runs booking, billing, POS, and front-desk check-in on one ledger, a front-desk sale and an Instagram click are events on the same timeline. Nothing has to be reconciled across vendors after the fact. The connection was never broken in the first place.
What it produces
Once the loop is closed, the output is the number owners have never reliably had: true cost per member, by campaign — counting the sales that happened at the counter, not just the ones that happened online. That's the number the whole product is built to protect, and it's why we started here instead of with a prettier calendar.
The 30-second version
- Ad tools assume the sale happens on a webpage; in a gym it happens at the front desk, days later.
- We tag visitors on arrival and bind identity at the trial form's email/phone — the same key the front desk uses.
- The sale is written against that same record, so the ad click is still attached when the card is swiped.
- Confirmed memberships are reported back to Meta and Google so they optimize on real members.
- It only works because one system owns booking, POS, and check-in — no gaps between vendors for the click to die in.
Curious what your real cost-per-member is?
We rebuild honest attribution as part of a free 15-minute demo — and show you which ads are actually producing paying members.
Book a demo