A Whitley Bay roofer rang us in February with a specific complaint: he was getting plenty of traffic from the Google Business Profile and the local web design we'd shipped him in November, but his form fills were flat. Calls were fine. Forms were dead.
We instrumented Plausible, watched ten session recordings, and found the pattern in twenty minutes: people scrolled to the contact form, started typing, looked at the "areas we cover" paragraph two sections up, and bounced. The paragraph said "Tyneside and North Tyneside". His customers in Wallsend, Cramlington and Killingworth couldn't tell if they were in.
The fix: a 4-character postcode input
We added a single component above the form: a text input labelled "Enter your postcode to check coverage", with a button that returned one of three states:
- Green - "Yes, we cover NE26" with a "Get my quote" button that pre-filled the postcode field.
- Amber - "We cover this area for emergency call-outs only" with a tap-to-call link.
- Red - "We don't cover that postcode yet" with a one-line apology and a suggestion to ring anyway.
The "yes" path pre-filled the postcode into the contact form below. The "no" path was the killer feature - it stopped the wrong leads in their tracks instead of letting them fill in a form the client would have to politely reject 90 minutes later.
The A/B and the numbers
We ran two weeks A/B (half traffic saw the checker, half didn't). Baseline: 14 quote requests per week. With the checker: 31. The "no" rate was about 12% - those people self-selected out, which means the 31 we got were already pre-qualified.
The roofer's quote-to-job conversion went up too, from 38% to 51%, because the leads coming through were now in postcodes he could quote profitably. The checker didn't create demand. It just stopped friction from suppressing it, and stopped the wrong demand from arriving.
The data source (don't overthink this)
You don't need a Royal Mail PAF licence for a trade service-area checker. postcodes.io is free, open-source, and returns outward-code geometry in under 100ms. Combine that with a JSON file of the postcodes your client actually services and you've got a working checker in a couple of hours.
Our component does the postcode lookup server-side (a small TanStack server function) and caches it edge-side for 24 hours. Clients can update their coverage list themselves from the admin dashboard - we built a simple table editor so they can tick "yes I now cover Morpeth" without ringing us.
Why this only works for local web design for tradespeople
A national e-commerce site adding "check if we deliver to your postcode" feels generic. On a local trade site, the same input is a trust signal - it says "we are specifically a local business, and we know our patch". That framing is impossible to fake with a national agency template.
We ship this pattern on roofers, builders, plumbers and electricians where the service area genuinely matters. We don't add it for trades whose work is universal (a photographer happily drives 90 minutes for a wedding). The component only earns its place if a "no" is a real answer.
What we got wrong first
Version 1 used a Google Maps autocomplete dropdown for the postcode. Looked slick. Cost about £40/month in API calls once traffic picked up, and added 200KB of JavaScript that didn't pull its weight on mobile. We ripped it out and went back to a plain text input with regex validation. Speed went back up, costs went to zero, conversion went up another 8%.
The shortcut
If you want this on your site, every roofer site we ship now includes the checker by default. See our service-area page strategy for how this plugs into the wider local SEO picture, or browse the Built Local plan if you want it done for you.
