Why the town matters
Google shows a different list of businesses to someone in Eau Claire than it shows someone in Chippewa Falls, 13 miles away, even for the same search. Each town's list is built from businesses whose own website says, in plain words, that they work there. If your website only talks about your home town, you're not on the list for the towns around it.
That's the whole reason local SEO exists for a contractor. A shop sells to whoever walks in. You drive to the customer, so you need to be on the list in every town you drive to, and each of those lists is its own job.
What local SEO is made of
The first is a page on your website for each service in each town: not a mention of the town on your home page, a page. It says what the job is, that you do it there, and what the work is like in that town, and it has your name and number on it.
The second is a Google Business Profile listing that matches your website: the same name, the same phone number, the same list of towns. The listing and the site have to say the same thing, name for name and number for number.
The third is reviews from real finished jobs, on your Google listing, not bought ones. Reviews are how Google, and the person searching, tell a business that's working from one that isn't.
Ads and listing fixes
Local SEO isn't ads. An ad puts you at the top for as long as you pay for it, and it's gone the day you stop. A page keeps working after it's written. There's no ad spend in any of this.
It isn't a directory listing service either. Being listed in a hundred directories doesn't put a page for Chippewa Falls on your site, and the page is the part that gets you on the Chippewa Falls list.
How long it takes
A new page starts from zero on Google and builds over the first few months. It varies by town and by trade. The page gets written, Google gets told about it, and it climbs over the months that follow.
The work doesn't stop when the pages are up. Towns get added, services change, the listing needs the same changes the site gets, and every finished job is a chance for a review. Local SEO is monthly work.
A concrete coating company we built for, out of River Falls, Wisconsin, got a page for every service in every town they drive to. In the same 81 days before and after we rebuilt their site, they came up on Google 5.9x more often and got 2.7x more visits, and they show up in 27 towns across Wisconsin and Minnesota.