[ Case study ]
Enrollments closed over phone and in person weeks after a website visit; the CRM captured the enrollment but not the source, so the chain had spent two years buying ads it could not connect to a single enrolled student.
CLIENT a nine-location language-school chain — FOCUS Carry source into the CRM automatically
Representative examplesEvery case study in this library is an illustrative composite of the kind of engagement we deliver — written to show our method and standards, not to name clients.
Nine locations teach evening and weekend language courses across a metro region, each with its own local campaigns, its own page in the shared site, and a front desk that closes the actual sale. Enrollments happen the way adult education always has — a visitor browses, thinks for days, then calls or walks in — and the deposit is taken by a person, not a checkout. The chain grew by acquisition, so each location inherited slightly different habits and slightly different vendor relationships. Marketing spend was decided annually per location by the owners, informed mostly by which manager argued hardest.
Enrollments closed over phone and in person weeks after a website visit; the CRM captured the enrollment but not the source, so the chain had spent two years buying ads it could not connect to a single enrolled student.
We proposed removing the front desk from the attribution problem entirely: campaign source attaches to the lead server-side when the form or call arrives, the CRM record inherits it, and staff never fill a field. Enrollment status flows back from the CRM into analytics, so a conversion means enrolled-and-deposited rather than form-submitted, and reporting runs multi-touch per location because a last-click view would just move the argument rather than settle it. The owners get one per-location path report that shows the whole journey from first campaign touch to deposit, which is the artifact the autumn budget conversation had been missing.
Just as important is what we ruled out, and why:
Forms and calls inherit campaign attribution into the CRM record server-side, so no staff behavior change is required for the data to exist.
Path reports with a per-location dimension settle the spend question with the whole journey, not the last ad.
Enrollment status flows back into analytics, so conversion means enrolled-and-deposited, not form-submitted.
Delivered by the growth pod — analytics specialist over 6 weeks, with working increments reviewed with the client every week.
Obstacle
The first release covered web forms only, and calls — the majority of leads at most locations — stayed invisible for a month before call capture shipped.
Handled: We rebuilt the missing month by joining the call logger's exports to CRM records server-side, backfilled source for that period, and moved call capture into every future release plan.
Obstacle
Two locations used an older CRM plugin that silently dropped the webhook's custom source field on records edited within the first minute.
Handled: We caught the pattern in a completeness check, moved the write to a post-save hook for those installs, and added a weekly source-completeness alert to the location dashboards.
The headline: every enrolled student traceable to campaign paths, reported per location — No attribution → enrolled-student attribution, read from CRM-to-GA4 match rate. A second check: lead records with complete source data at 68% → 91%.
The autumn budget conversation stopped being a negotiation of confidence and became a comparison of journeys. Owners could see that some locations' phones converted beautifully from campaigns their websites barely touched, and spend moved accordingly. Front desks noticed nothing — which was the point — and the marketing manager stopped hand-building a source spreadsheet that three people quietly disbelieved. Most tellingly, a location director who had resisted central reporting asked for her dashboard to be shown first at the owners' meeting, because for the first time it made her case for her.
The result was read from CRM-to-GA4 match rate against the pre-engagement baseline over the stated window, with a guardrail check on lead records with complete source data. Where platform-reported numbers and business outcomes differ, this record says which layer it is quoting.
What we would do differently
We would put the phone-call capture in the first release — calls were the majority of leads, and the form-first release left a month's hole in the attribution story.
[ Related service ]
[ Related builds ]
Page-view conversions quote eventsQuotes measurable as conversions end to end, on a migrated container with a signed-off tag inventory
Monday spreadsheet ritual one standing reportLeadership reviewing from the live report with definitions on record
[ Next step ]
Next case study