How to connect your gym management software to your ads: 3 levels, from spreadsheet to API
Connecting your management software to your campaigns doesn't require any coding or switching tools. There are three levels of connection, and the first one can be set up this afternoon with a CSV export and an hour per month. That first level already gives you 80% of the value: knowing which campaign brings members who pay and which one brings people who cancel in month two. The other two levels automate and refine things, but they don't reveal anything the first one hasn't already shown you.
This matters because, as the central article in this cluster explains, cost per lead is a misleading metric: the "cheap" campaign can be the one with the worst revenue. The only way to see it is to cross two systems that currently don't talk to each other: the ads panel, which knows where each lead came from, and your management software, which knows who pays dues. Here's how, level by level.
Level 1: the monthly manual match
Zero new technology. One export, one spreadsheet and an hour on the 1st of every month.
The process. Export from your management software the sign-ups from the previous month: name, phone, email, sign-up date and membership fee. Export from Meta (and Google, if you use it) the leads from the same period with their source campaign. Match by phone number. Where there's a match, note the campaign in a "source" column. Where there isn't, check the "how did you hear about us" column from the sign-up form. If that column doesn't exist either, create it today in your sign-up process: it's the cheapest piece of advice in this entire article.
Each month, in addition to adding new sign-ups, check the previous months' entries: is this member still active? One column per month, yes or no. After three months you have retention by campaign. After six, accumulated revenue by campaign, that's the number that decides where your budget goes.
The real cost: one hour per month if your gym handles 20–40 leads monthly. Maybe two hours the first time, while you build the template. The limit is equally clear: it depends on someone actually doing it. The month that person is on holiday, you lose the data. And with more than 50–60 leads per month, manual matching starts to hurt.
Don't underestimate it, though. I've seen gyms with four-figure annual integrations making worse decisions than one running this spreadsheet, because the integration spits out data nobody looks at and the spreadsheet forces you to look at it once a month. The tool doesn't decide; you decide. The cheap spreadsheet with discipline beats the expensive API without it.
Level 2: consistent UTMs plus webhook to sheet
Level 1 has two weak points: the match is manual and the lead source is sometimes ambiguous. Level 2 attacks both without touching any API.
First piece: consistent UTMs on all your ads. Every link in every ad carries parameters that identify the campaign, ad set and ad. If you use Meta's native forms (lead ads), Meta already gives you the source campaign in the export; UTMs matter when the lead goes through your website. The rule is simple: fixed naming convention, decided once and written in a document. utm_campaign=summer-2026-launch-offer, not "new campaign 3 FINAL". The day you cross data, you'll appreciate every well-placed hyphen.
Second piece: the "how did you hear about us" field as structured data, not as a courtesy question. Dropdown with closed options (Instagram/Facebook, Google, a friend, walked past, other), mandatory on sign-up, saved in the management software. This covers the gap no UTM can fill: the member who saw your ad, didn't click, and walked in through the door.
Third piece: a webhook or a Zap that dumps each new lead into a spreadsheet in real time, already labelled with its source. Meta lead ads → Zapier (or Make) → Google Sheets is a 20-minute setup and around €20–30/month on a typical Zapier plan. The leads sheet fills itself; your monthly work is reduced to matching it against sign-ups, which is still manual but now takes 20 minutes instead of an hour.
Is the jump from level 1 worth it? If you're handling more than 40 leads a month or if the manual match has slipped two months in a row, yes. If your volume is low and discipline holds, level 1 serves you for a long time. Level 2 doesn't give you new information; it gives you the same information with less friction, and friction is what kills these systems.
Level 3: real API integration
Here the chain closes entirely on its own. Your management software's API talks to your ad platform (directly or through a middleware layer), and two things happen that the previous levels can't do.
The first: every sign-up and every payment gets attributed to its campaign automatically. Not "July sign-ups", but the November invoice of the member who joined in July via campaign X, added to campaign X's revenue on the day it's collected. The return-per-campaign table stops being a monthly exercise and becomes a dashboard that's always up to date. The metrics at every funnel stage are calculated automatically, with actual revenue as the final column.
The second, and this is the one that pays off most in the medium term: sign-ups and their value can be sent back to Meta as offline conversions. Meta stops optimising towards "people who fill in forms" and starts finding people similar to your paying members. This requires volume (dozens of events for the algorithm to learn) and months of patience, but the compounding effect on lead quality is real and you won't get it from any spreadsheet.
What to ask your management software provider before committing:
| What to ask | Why it matters | Specific question to support |
|---|---|---|
| API access with documentation | Read sign-ups and members from outside | "Do you have a public API? Where is the documentation and what does access cost?" |
| Payments export or endpoint | Attribute collected fees, not just sign-ups | "Can I query each member's payments via API or schedule an export?" |
| New member webhook | Trigger attribution at the moment of sign-up | "Can you notify an external URL every time a new member is created?" |
If support says yes to all three, the integration is viable. If they only say yes to the first, it's half viable: you can attribute sign-ups but not payments, and payments are the data that matters. If they say no to everything, you're not stuck: you're at level 1 or 2, which we've already seen work fine. Your choice of management software sets this ceiling more than any other technical decision at your gym, and it's a criterion almost nobody checks before signing a contract.
Who builds level 3? Either a technical person (in-house or freelance, one-time cost between €500 and €2,000 depending on the API), or a platform that already includes the integration built for your specific software. The buying criterion is one: that revenue by campaign updates without anyone having to remember to do it.
The two mistakes that ruin the connection
Both repeat so often they deserve their own section.
Mistake 1: building level 3 without having level 1 clean
The temptation is to skip the spreadsheet and "do it properly from the start". It fails predictably. If your sign-ups don't record the source, if nobody asks "how did you hear about us", if your campaigns are named "test 2 def", the API will automate garbage. Integration doesn't clean data; it moves it faster.
The right order: three months of level 1 as a minimum. In those three months you discover where your data breaks (mistyped phone numbers, walk-in sign-ups with no prior lead, unnamed campaigns) and you fix it in the process, which is where it has to be fixed. When the manual match adds up month after month, automating it is trivial and reliable. When it doesn't add up, automating it just gives you wrong numbers more frequently. There's an extra benefit: after three months of spreadsheets you know exactly what you want from the integration, and you negotiate with the provider from knowledge, not from a brochure.
Mistake 2: measuring sign-ups instead of collected payments
This is the subtle mistake, because it looks like you're done. You connect the systems, see "campaign A: 16 sign-ups, campaign B: 12 sign-ups" and declare A the winner. You've just reconstructed the CPL deception one level down.
A sign-up is an event; a payment is the business. A campaign that brings 16 members who stay 3 months generates less than half the revenue of one that brings 12 members who stay 14 months. If your connection stops at sign-up, you'll keep rewarding hook offers that fill the gym with short-term members. The column that settles the argument is accumulated payments by campaign, and to have it you need the payments data (level 3) or the monthly "still active" column (level 1). Either works. Neither is optional.
There's an honest caveat: payments take time to come in. A campaign launched in March won't show its real revenue until summer. In the meantime, sign-ups are your leading indicator and it's fine to watch them, as long as you remember they're provisional. The trap isn't looking at sign-ups; it's stopping there.
Where to start based on your situation
If you're not recording the source of your sign-ups today: start there, this week, before anything else. Mandatory field on sign-up plus monthly export. You're at level 0 and the jump to level 1 is the most profitable step on the whole ladder.
If you already have the spreadsheet running: add consistent UTMs and automated lead capture (level 2) when the manual workload starts to slip, not before. And start recording the accumulated payments column if you're still only measuring sign-ups.
If your software has an API and you're handling more than 50 leads per month: ask for the three things in the table above and build level 3, with offline conversions to Meta as the end goal. From there, the question stops being technical and becomes one of judgement: what decisions to make with the revenue data once you have it in front of you, that's where you actually win or lose money.
The connection is plumbing. Necessary, but plumbing. The value is in that Monday morning each month when you look at the table and move budget from the campaign that looked good to the one that is.