They had tried Facebook before. It had not worked.
Zip Moving & Storage is a licensed moving company that serves the major cities of the US Southeast, Northeast and Midwest, every kind of move and storage you can think of. They had grown fast since 2014 on a mix of real experience and a willingness to use modern tools, and they were not short of ambition.
They came to us with a specific frustration. Their leads leaned heavily on Google, social media, Yelp and the usual sources, and they wanted a new one: more high-quality leads, at a lower cost per lead. They had tried Facebook in the past and it had not delivered, so they were skeptical, but open to one more proper test.
The brief looked narrow on paper: test Facebook, and target three states, Maryland, Atlanta and DC. Underneath it we set up something much wider, the conversion tracking, the analytics and the account structure that the rest of the funnel would later run on, because a "just try some Facebook ads" engagement that skips the measurement is how money disappears.
A cold account, tight geography, and a season working against us.
We started from scratch. No historical data, a brand-new pixel that needed weeks of traffic before it could find the people most likely to convert. The first months of any new account are for collecting signal, not for hitting targets, and we set that expectation up front: we would need to cooperate closely for the first two to three months while the account learned.
The targeting made it harder. The client needed specific zip codes and metro areas covered, so we were optimizing toward small audiences from day one. Tighter audiences mean a trickier setup and less room for the algorithm to breathe, which is workable, but unforgiving.
And moving is brutally seasonal. People move in summer, not in December, so a cold account launched in the autumn was walking straight into the slowest part of the year. The honest challenge was to keep delivering, and keep the client believing, through a quiet season while the algorithm was still finding its feet.
- Honest tracking, built from zero
- High-quality leads, not just cheap ones
- A cold account through the slow season
Track it, rebuild it, then test without mercy.
We did the boring thing first and built the measurement. Then we launched Facebook clean, fought through a near-death December, found the breakthrough, and spent the next year and a half compounding it: better audiences, better creative, and a relentless focus on the leads that actually booked.
a Tracking and analytics, first
Before we spent a dollar on reach, we built the measurement. Google Tag Manager went in across the site, with every important action defined as a macro or micro conversion and sent back to where it was needed: the Facebook pixel and Google Analytics. We set up the core goals, the quote-form completion and the phone call, and tracked them page by page, so we could see which landing pages actually turned a click into a lead.
Then we mapped the moments that actually matter to a moving business, not a generic template: a quote request, a "track my move", a search for movers by location, a partner code, a review, a payment. We tracked the whole journey, not just the form submit, so we could optimize toward the booking that pays, not the click that flatters.
Later we audited their move to GA4, fixed its referral-exclusion and data-retention settings, cleaned up the tag manager, and tightened the conversion tracking end to end. The foundation was the point: get the data honest, and every later decision inherits that honesty.
Every quote tracked to the booked job, not just the form-fill, so every decision after this ran on numbers we trusted.
b Facebook, from a standing start
With tracking live, we launched. The structure was deliberately simple and controllable: separate acquisition and remarketing campaigns for each of the three states, Maryland, Atlanta and DC, so creative and messaging could be tuned market by market. We led with the two services that mattered most to them at the time, local and long-distance moving, on a modest and equal budget per state.
The first month did its job: it set a baseline and it pointed the right way. The client was happy with the direction, but the limits were obvious immediately. The audiences were too small and the budget too rigid to give the algorithm room, and the cost per lead sat above what they were aiming for. We already knew the structure had to change.
So we made the first round of cuts on the evidence: we agreed to drop DC and concentrate on Maryland and Atlanta, set long-distance aside on profitability and put the budget behind local moving, and built out a set of business-related interests that converted, movers, moving companies, transportation and moving, each in its own ad set so we could read them cleanly.
A clean three-market launch and a first-month baseline, with a clear read on exactly what had to change.
c December nearly killed it, then January saved it
Then came December, the dead of the moving off-season, and it bit hard. Cost per lead spiked to about 57% above the launch month. The client was understanding, they knew we were still in the learning phase, but they were also clear: if it did not improve the next month, they would shut Facebook down. They would not pour money into a channel that did not pay. Fair enough.
So we stopped tinkering and did the big rebuild. We merged the ad sets that had worked into one strong audience per campaign, so the budget and the algorithm were not spread thin across a dozen tiny ones. We added lookalike audiences built off their actual booked customers and past converters, telling Facebook to go find more people like the ones who had already paid. And we layered in remarketing for everyone engaging with their growing Facebook page.
January answered. Cost per lead dropped to about 30% below where we had started, leads jumped, and the lift confirmed the thesis: the lookalikes brought better people and the merge let the budget concentrate. The algorithm had finally learned who the right customer was, through the conversion objective. We kept that structure for the rest of the engagement.
Cost per lead down about 30% from the launch month by January, the month the account was supposed to be switched off.
d Quality over quantity: forms that look cheap, leads that do not book
With the account stable, we tested the obvious next idea: native Facebook Lead Generation forms, the ones that fill in inside the app. They are a common choice for this kind of business and they look cheaper per lead.
They were not better. We reworked the form questions every way we could, and the conclusion held: the native forms brought lower-quality leads, a higher cost per booked lead, and a worse rate from lead to booked job than driving people to the website did. A lead that never books is the most expensive lead there is.
So we kept sending traffic to the site, where the qualifying questions, type of move, type of service, the moving-from and moving-to zip codes, a date, did the filtering before a human ever picked up the phone. Quality always mattered more to us than the headline lead count, because the only number that pays is a booked move.

We chose the booked job over the cheap form-fill, and built the funnel to qualify leads before anyone called.
e Test everything, then test it again
Facebook rewards fresh creative and punishes staleness, so we tested constantly and let the data settle the arguments. The biggest one was illustrations against photographs of real crews loading trucks and carrying boxes.
Real people won. The photo banners ran at about a 0.40-0.50% click-through rate against 0.20-0.30% for the illustrations. We had half-expected it from the branch and from competitor ads, but we wanted our own data to say it, not a hunch. Across the account we tested a dozen ad variations to find each winner, then kept rotating and replacing them so the algorithm always had a few strong options to choose between.

Photos of real crews beat illustrations on click-through, about 0.40-0.50% against 0.20-0.30%, proven on our own data.
f When the season hit, the work paid off
By spring, everything we had built was ready for the season. As moving demand picked up, the merged audiences, the lookalikes and the proven creative all compounded, and the account hit its stride: cost per lead fell to its floor, around a third of where we had launched, and the lead volume climbed to its peak.
It showed up market by market. Maryland and Atlanta broke out together, each pulling far more leads at a far lower cost than the months before, and the landing pages were converting clicks into leads at around 30%, higher still in the strongest market. The budget barely moved through any of it. This was efficiency, not extra spend.
From there the job was to hold it: keep lead quality up as the volume climbed, keep testing creative so nothing went stale, and keep the booked job, not the raw lead count, as the number that mattered.
In peak season, the lowest cost per lead of the whole run at the highest lead volume, around a 30% click-to-lead rate, all on a flat budget.
Same budget, a third of the cost, and better leads.
The headline is an efficiency story, which is the only kind worth telling. Across the first season the cost of a lead fell 73% from where we launched, and it did it on a budget that barely moved. Same money, a third of the cost per lead.
Volume followed. Monthly leads climbed 456% from the standing start to the peak of the moving season, without us reaching for more budget to buy them. Some weeks the cost per lead ran even lower than the monthly average.
And the leads got better, not just cheaper. At the peak the landing pages were converting clicks into leads at around 30%, because we optimized toward the booked move the whole way through, not the vanity count of form-fills. The quality held as the volume grew, which is the genuinely hard part.
Underneath all of it was the tracking. Because every quote was followed to the booked job and every action reconciled in analytics, we could move budget toward what actually paid, week after week, and keep Facebook honest about which leads were real.
The relationship ran on into 2023, with monthly reporting and a standing biweekly call. It wound down in the middle of that year for reasons that had nothing to do with performance: the client was going through big internal changes and pulled spend back across the board. We left the account strong, the season's structure still in place, the channel they had once written off now one of their best.
Give it time, test without mercy, and chase the booked job.
The first lesson is patience, and we say it to every client: a brand-new account needs time to develop and collect data, and the first three months are for learning, not for judging. The temptation to kill a channel in its slow season is exactly how good channels get abandoned one month too early. Zip Moving nearly did, in December, and January is the reason they did not.
Then, test without mercy and let the data, not opinion, pick the winners, because the platform keeps changing and last quarter's best ad is this quarter's fatigue.
And the one we believe most: chase the booked job, not the cheap lead. A native form that fills in fast but never converts is more expensive than a costlier lead that books. Track the whole funnel to the money, and optimize toward that.
That is what we do. We help lead-generation businesses grow through PPC, conversion tracking and analytics, and CRO, the three working together, so the spend pays and you can get back to running the company.
- Conversion tracking rebuilt from zero (GTM, GA4, goals)
- Quote-form and phone-call goals tracked page by page
- Separate acquisition and remarketing per market
- Lookalike audiences off booked customers
- Audience merging and interest-level optimization
- Relentless creative testing (real-crew photos beat illustrations)
- Conversion campaigns chosen over native lead forms
- City and zip-code level optimization
- Moving-specific micro-conversions and GA4 audit