Local SEO Case Study: A Handyman Business From 3 to 24 Top-Ten Keywords in Three Months
An anonymous local SEO case study with real numbers: what changed in three months for a handyman business with no search presence, and what did not.
This client is happy for the work to be shared but not the business name. The city, the suburbs, and anything that would let you find the profile in a search have been removed. Everything else is exactly as recorded.
The figures come from Google Search Console, an organic rank tracker, a Google Maps grid tracker, and the enquiry form on the client’s own site. Where a number is client-reported rather than measured, it says so. I have included the channel that did not perform as well as the one that did, because a case study where everything goes up and to the right is not much use to anyone trying to judge whether this would work for them.
Client snapshot
- Industry: handyman and property maintenance
- Size: team of five plus
- Service area at the start: an entire capital city metro area plus nearby interstate towns
- Engagement start: 29 April 2026
- Reporting window: 29 April to 30 July 2026, three months
- Scope: organic SEO and Google Business Profile, on a smaller retainer
- Prior SEO: none
The starting point
The business was doing well enough on word of mouth and repeat work, but it had almost no search presence. In the ten months before we started, the site averaged 31.6 clicks a month from Google. Not 31.6 a day. A month.
The site itself was the bigger problem. It sat on a cheap, low quality CMS, it was slow, and it did not ask anyone to do anything. Enquiries came in a few a week, and irregularly.
Rank tracking at the end of April, across 55 target keywords, found three keywords in the top ten out of 55 that mattered to the business.
There was also a Google Business Profile suspension to deal with, which matters more than it sounds and is covered further down.
The diagnosis
Two things were true at once, and they needed different treatment.
First, there was no digital footprint to optimise. This was not a case of a decent site held back by a technical fault. There was nothing to fix, so the work was construction, not repair. That changes the sequencing, because you build the asset before you try to promote it. Anyone selling a business like this an audit-led engagement is selling the wrong thing.
Second, the business wanted different work, not just more work. The owner wanted higher value jobs, decks, patios, door and window work, rather than an endless run of small callouts. Ranking for the single head term would have delivered volume of the wrong kind. The keyword set had to be built around the jobs the business actually wanted to quote on, which is the part of local SEO for tradies that gets skipped most often.
The listed service area was also sprawling. The profile claimed the whole metro plus interstate towns, well beyond where the business realistically works. We removed the outlying locations so the listed area sat around the base of operations.
It is worth being precise about that one, because it is easy to oversell. The drawn service area is not a ranking lever, the verified address is, which is the point we make at length in our guide on how service area businesses compete against pinned storefronts. We did not move the verified address here. We changed the list of locations, and Maps coverage widened over the same period. We cannot separate that from the suspension being resolved, the new pages going live, and the twice-weekly profile posts, all of which ran at the same time. Treat it as making the profile describe the business honestly, not as a lever we pulled.
What we did
The site was rebuilt on a fast static stack with enquiry forms that actually ask for the job. Then the search assets were built out in order:
- Service pages for the higher value work the owner wanted, not just a generic handyman page
- Location pages across the metro area, built out suburb by suburb rather than published in one dump
- One blog post a week, aimed at buyer questions rather than traffic for its own sake
- Google Business Profile posts twice a week, mirrored to the pages they support
- The Google Business Profile suspension resolved, then the outlying service area locations removed so the listed area matched where the business actually works
Two things we deliberately did not do on this retainer: advanced conversion tracking and AI search optimisation. Both are worth doing. Neither was the constraint in month one, and the retainer size meant choosing. The work should match the opportunity, and at that point the opportunity was pages that did not exist yet.
Results, 29 April to 30 July 2026
Organic rankings
Same 55 keywords, tracked from day one, compared like for like.
| Position band | 28 April | 29 July |
|---|---|---|
| Top 3 | 3 | 9 |
| Top 10 | 3 | 24 |
| Top 20 | 11 | 31 |
| Ranking anywhere | 22 | 34 |
Keywords in the top ten went from three to 24 in three months.
Individual movers, with the city name removed:
| Keyword | 28 April | 29 July |
|---|---|---|
| affordable handyman [city] | 15 | 3 |
| emergency handyman [city] | 15 | 3 |
| home repairs [city] | 24 | 4 |
| handyman [city] | 19 | 6 |
| handyman services [city] | 16 | 7 |
| hire a handyman [city] | 48 | 10 |
| property maintenance [city] | not ranking | 4 |
| flat pack assembly [city] | not ranking | 4 |
| sliding door repair [city] | not ranking | 4 |
| landlord property maintenance [city] | not ranking | 3 |
| NDIS handyman [city] | not ranking | 6 |
The bottom half of that table is the commercially interesting part. Property maintenance, landlord work, door repairs and NDIS work are higher value and more repeatable than a one-off odd job. That is the difference between ranking and ranking for the right thing, and it is why keyword research for a local business should start with the jobs you want rather than the terms with the biggest numbers.
Search Console
| Month | Clicks | Impressions |
|---|---|---|
| Ten months before start (monthly average) | 31.6 | not tracked |
| April 2026 | 38 | 970 |
| May 2026 | 60 | 1,729 |
| June 2026 | 56 | 2,285 |
| July 2026 | 120 | 7,053 |
Clicks up 3.2 times against April. Impressions up 7.3 times.
Site-wide click-through rate fell from 3.9% to 1.7% across the same period. That is not a problem yet, it is what happens when a lot of new pages start appearing at positions 8 to 20 before they mature. It does mean the next lever is titles, descriptions and position improvement on pages that are already visible, rather than more publishing. More content is not always the answer.
Enquiries
Form submissions went from a few a week, inconsistently, to an average of five a day across July. That figure comes from the enquiry form on the site, which we host.
Phone calls are not tracked. The owner reports a substantial number on top of the form enquiries, and we have no way to verify that, so we are not putting a number on it. It is also the single biggest gap in the reporting and the first thing to fix on this account.
What lagged
Google Maps did not move the way the organic side did, and it is worth being specific about why.
The profile had been suspended before we started. We resolved it, but a reinstated profile does not return to where it was. It rebuilds.
Three months in, the grid data shows it clearly.
| Keyword | Grid points in the top 20, 29 April | 30 July |
|---|---|---|
| handyman [city] | 72 of 175 | 137 of 175 |
| handyman [nearby town] | 65 of 175 | 142 of 175 |
| handyman near [nearby town] | 6 of 225 | 41 of 225 |
Coverage roughly doubled. The business now appears across most of the grid where it was invisible before. But share of local voice, the percentage of grid points where the business sits in the top three, is 0%. It was 1.1% in April. Average position improved from 18.2 to 16.9 on the main term.
In plain terms: they show up in a lot more places, near the bottom of the results in most of them. Movement is concentrated around the centre of operations and drops off past roughly six kilometres. That is normal for a profile rebuilding trust after a suspension, and it is normal for proximity in general, but it is not a result and we are not going to present it as one.
Organic carried the leads for this quarter. Google Maps visibility is still in progress.
What I would change
Three things, honestly.
The service area should have been cleaned up in week one, not after a couple of grid snapshots. Not because the polygon is a ranking lever, it is not, but because a profile claiming to serve towns the business does not service is a trust problem sitting in plain sight while you are asking Google to trust the profile again.
Conversion tracking should have gone in at the start even on a smaller retainer. Right now the best number in this case study, the enquiry volume, rests on form submissions alone, and a meaningful share of this client’s leads arrive by phone and are invisible. That is a reporting failure, not a client failure.
And the client is hands off to a fault. He provides almost no photos and no content input, which slows down the parts of local SEO that depend on real assets, particularly the profile. The flip side is that he gives us complete freedom to make decisions and get on with it, which is worth more than most clients realise. On balance it has been a good trade, but it does cap how fast the Maps side can rebuild.
What this shows
If a business has no search presence at all, the first quarter is construction work. You are not tuning anything, you are building the pages that should have existed years ago and then earning positions for them. Three months is enough to see whether it is working. It is not enough to finish.
The other point is about channel patience. Two channels started on the same day for the same business, and one produced leads in three months while the other is still rebuilding. If you have had a profile suspended, plan for that gap rather than being surprised by it.
Caveats and method
- Ranking figures compare the same 55 keywords tracked from day one. The tracked set was expanded to 70 keywords on 14 July, and those additions are excluded from every before and after comparison here.
- Two rank tracker snapshots, 7 June and 15 June, were scrape failures and are excluded.
- Search Console figures are complete calendar months, 1 to 31 July inclusive.
- Enquiry figures are form submissions only. Phone calls are not tracked.
- Grid figures are top 20 presence at each grid point, measured on a 175 point and a 225 point grid.
- Positions are quoted from the organic rank tracker, not Search Console average position.
- Results reflect this business, this city and this competitive set. They are not a forecast for anyone else.
Work with us
If your business has no real search presence and you want to know whether it is worth building one, we will look at your market and tell you honestly what the opportunity is worth before you commit to anything. No lock-in contracts, and you will get a straight answer about whether the work makes commercial sense.