
Social Advertising Engine for a Laser Aesthetics Chain
Let's Connect
Overview
What we built
A 48-location laser hair removal chain was paying more for every lead as it grew. We rebuilt its social advertising around each metro, and the cost of a booked consultation fell from $102 to $58.
In plain terms: the chain advertised to every city from one national Meta account, with one shared budget and the same adverts everywhere. A clinic in a brand-new metro and a long-established flagship were treated identically. As the business expanded, the cost of each lead doubled in eighteen months, and because browser-side tracking kept losing data, the ad platform never learned which leads actually turned up for a consultation. The team was spending more each month and could not see what was working.
We rebuilt the programme city by city. Each metro received its own campaign structure with a budget set by local clinic capacity, server-side tracking fed consultation outcomes from the CRM back to the ad platforms, and a monthly testing cadence produced localised ad variants from a central creative library. Within five months the cost per booked consultation fell from $102 to $58 across all metros, the show rate on social leads rose from 34% to 47%, and new metros now reach target lead cost in 3 weeks on average instead of roughly 12.
The Problem
Lead costs doubling with expansion
The chain had grown to 48 locations on the strength of its clinics, but its social advertising had not grown with it. Every market, from the newest opening to the busiest flagship, was served by a single national Meta account with one shared budget and identical creative. Media naturally pooled wherever the algorithm found cheap clicks, not where clinics had appointment capacity to fill, and local teams had no lever to pull when their diaries ran empty.
Expansion made the cracks visible. Each new metro entered the same undifferentiated campaigns, competing with established markets for budget while showing adverts written for nobody in particular. Over eighteen months the cost per lead doubled, and every launch became a slow, expensive grind as the account tried to learn a new city with no dedicated structure behind it.
Measurement compounded the problem. Browser-side tracking losses meant a large share of conversions never reached the ad platform, and the signal that did arrive stopped at the lead. Whether that lead actually attended a consultation lived only in the CRM, so the platforms optimised toward form fills, including the ones who never showed up.
One national account
Every metro shared a single Meta account, one budget and identical creative, so spend flowed to cheap clicks rather than to the clinics that needed bookings.
Blind to outcomes
Browser-side tracking losses hid conversions from the platform, and consultation attendance never left the CRM, so campaigns optimised toward leads who often never showed.
Slow metro launches
Each new market piggybacked on national campaigns with no dedicated structure, so launches took roughly 12 weeks to reach a workable lead cost.
Generic creative
Identical adverts served every market, with no local proof points and no testing cadence, so fatigue set in and there was nothing fresh to rotate.
What it was costing them
Cost per lead doubled in eighteen months and was still climbing, every new metro burned budget for weeks before finding its footing, and clinic diaries filled with leads who never attended. The chain was funding growth with media spend that got less efficient with each opening, and leadership could not tell which markets, audiences or adverts deserved the next dollar of budget.
The Solution
Metro-level social ad engine
We rebuilt the programme as a metro-level engine rather than patching the national account. Each market received its own campaign structure with budgets set by local clinic capacity, so spend followed appointment availability instead of the algorithm's path of least resistance. Lookalike and retargeting audiences were rebuilt per metro, seeded from local data rather than a national blend.
The measurement fix came next. Server-side Conversions API tracking replaced fragile browser-side signals, and CRM consultation outcomes flowed back to the ad platforms, so optimisation targeted people who attend consultations, not just people who fill in forms. That single change redefined what the campaigns were learning from: every attended consultation became a training signal, and wasted spend on audiences prone to no-shows began to fall away.
Creative moved to a monthly testing cadence. A central library supplied concepts, each metro localised them, and winners rolled out across markets while fatigued variants retired. A launch playbook then standardised how the engine enters a new city: structure, budgets, audiences and creative are set up the same way every time, so new metros start from a proven template rather than from scratch.
Key decisions
Budgets follow clinic capacity
Each metro's budget is set by local appointment availability, so media spend fills real diary space instead of pooling wherever clicks are cheapest.
Optimise to attended consultations
CRM outcomes flow back through the Conversions API, so the platforms learn from consultations that actually happened rather than from raw form fills.
Server-side over browser-side
Tracking moved server-side to survive browser signal loss, restoring the conversion volume the platforms need to optimise reliably in every market.
Central library, local variants
One creative library feeds every metro, each market localises the concepts, and a monthly cadence keeps fresh variants testing while fatigued ones retire.
A repeatable launch playbook
Every new metro launches with the same structure, audiences and creative sequence, turning market entry from an experiment into a routine.
Measurable Impact
What changed after launch
The metro engine paid back quickly. Within five months the cost per booked consultation dropped from $102 to $58 across all metros, and the consultation show rate on social leads improved from 34% to 47% once CRM outcomes fed optimisation. Leads stopped being an end in themselves: the campaigns now chase people who turn up.
Expansion changed character too. New-metro launches now reach target lead cost in 3 weeks on average, down from roughly 12, because every launch starts from the playbook rather than from a blank account. Creative testing throughput grew 3× to more than 30 localised ad variants per month, giving each market a steady supply of fresh, locally relevant adverts.
Account structure
One national Meta account with a single shared budget
Metro-level campaigns with budgets set by clinic capacity
Consultation cost
Cost per lead doubled in eighteen months
Cost per booked consultation down from $102 to $58
Optimisation signal
Browser-side tracking, blind to consultation attendance
Server-side CRM outcomes, show rate up from 34% to 47%
Market entry
Roughly 12 weeks to reach workable lead cost
Target lead cost in 3 weeks with a standard playbook
Headline results
Cost per booked consultation dropped from $102 to $58 across all metros within five months
New-metro launches reached target lead cost in 3 weeks on average, down from roughly 12 weeks
Consultation show rate on social leads improved from 34% to 47% once CRM outcomes fed optimisation
Creative testing throughput grew 3× to more than 30 localised ad variants per month
Tech & Tools Used
What powered the build
Every tool below earned its place in this engagement. Here is the part each one played.
Meta Ads Manager
Runs the metro-level campaign structures at the heart of the engine, with per-market budgets, audiences and creative rotations managed from one place.
Meta Conversions API
Carries consultation outcomes from the CRM back to Meta server-side, so campaigns optimise toward people who attend consultations rather than raw form fills.
TikTok Ads Manager
Extends the metro engine to TikTok, running localised creative variants against the same per-market structure and budget logic as the Meta campaigns.
Google Tag Manager (server-side)
Hosts the server-side tagging layer that replaces fragile browser tracking, collecting conversion events reliably before routing them to each ad platform.
Google Analytics 4
Provides the neutral view of landing-page behaviour and lead journeys across metros, cross-checking what the ad platforms report about their own traffic.
HubSpot CRM
The system of record for consultation bookings and attendance, feeding the outcome signals that drive optimisation and the show-rate reporting.
Looker Studio
Presents the per-metro performance dashboards, showing lead cost, booked consultations and show rates side by side for every market.
Zapier
Connects HubSpot to the tracking layer automatically, moving consultation outcomes into the conversion pipeline the moment they are recorded, without custom engineering work.
Figma
Houses the central creative library, where concepts are designed once and localised into per-metro ad variants for the monthly testing cadence.
Ready to Build your Med Spa & Aesthetics Business with Social Media Advertising
Ask Byte
Ask Byte
Typically replies instantly
just Now
Hi! I'm OrganByte's assistant. How can I help you today?
AI-generated content may be incorrect

