We checked · Method

How we check trade business websites

By the makeasite team · · As of Oct 18, 2026, 5:10 PM ET · 6 min read

On this page
  1. Who is counted?
  2. Which businesses are left out?
  3. How is each website checked?
  4. What are the 12 checks?
  5. How is the score calculated?
  6. What counts as “no working website”?
  7. What are the sample-size rules?
  8. When were sites scored?
  9. What are the limits?
  10. How do you handle privacy?
  11. What’s in the CSV?
  12. Can I reproduce or correct a number?
Short answer

makeasite.co checks public trade business websites with an automated checker that names itself and obeys robots.txt. Each working site gets 12 weighted checks scored 0, 1 or 2, giving a score out of 100. We publish only totals across at least 30 businesses, hide counts under 5, and never name a business.

Who is counted?

  • Businesses: local home-service trades; this release covers 27 of them: appliance repair, carpet cleaning, concrete, deck builders, drywall, electricians, fence, flooring, garage doors, gutters, handyman, house cleaning, hvac, junk removal, landscaping, locksmiths, movers, painters, pest control, plumbers, pool service, pressure washing, remodeling, restoration, roofers, tree service, window cleaning.
  • Where the list comes from: the open map dataset Overture Maps Places (release 2026-09-23.1), plus businesses our team researched by hand from public pages. Every business must come from an open dataset or be confirmed by its own website. We don’t use other listing sites as a source.
  • Where: the Atlanta–Sandy Springs–Roswell, GA metro area (CBSA 12060). Each listing’s ZIP code is matched to its county with the U.S. Census 2020 ZIP-code (ZCTA) to county file, and counties to metro areas with the federal (OMB) July 2023 definitions. A ZIP that spans counties goes to the county holding most of its land. A listing with no ZIP is placed by its city name, but only where at least 90% of same-named listings that do have a ZIP fall in one metro.
  • Duplicates: a business found twice counts once. We match on phone number, website domain, or the same name in the same town.
  • What the sample is: businesses visible in open map data, not a census of every business. Very small or brand-new businesses that aren’t in open data are under-counted.

Which businesses are left out?

  • National chains and franchises.
  • Businesses we couldn’t confirm from an allowed source.
  • Unchecked: sites we couldn’t read, for example behind a bot wall, blocked by robots.txt, built entirely in JavaScript, or a first failure we haven’t confirmed yet.
  • Website unknown: businesses with no website on any source we may use. We don’t look them up through search engines, Google Maps or Yelp.

Unchecked and unknown businesses are left out of both the count and the base. They’re never counted as “no website”. That makes our no-website share a conservative lower bound.

How is each website checked?

  • An automated checker visits only public pages, at most 2 per site: the home page plus one contact or quote page.
  • It identifies itself as makeasiteBot/1.0 (+https://makeasite.co; hello@makeasite.co).
  • It obeys each site’s robots.txt and sends at most one request per second to any one site.
  • It never fills in forms, never logs in and never contacts anyone.

What are the 12 checks?

Each check scores 0 (missing), 1 (partial) or 2 (pass). The weights add up to 100. Rubric 1.0.0.

The 12 website checks, their weights and scoring rules
CheckWeightWhat it meansPass (2)Partial (1)
Mobile-friendly15The page adapts to a phone screen.A mobile viewport plus a responsive layout signal.A viewport setting only.
Click-to-call14Customers can tap the number to call.A tap-to-call phone link anywhere on the page.A phone number shown as text only.
Speed (provisional)12The page loads quickly on a phone.A good Lighthouse mobile score in a lab test.A middling lab score, or our own fast response time (our timing can never pass).
Booking or contact form12Customers can ask for a quote without calling.A form or booking widget on the home page or one linked contact/quote page.Only a contact-page link or an email link.
HTTPS10The connection is secure.A valid certificate, and http redirects to https (or HSTS).A valid certificate, but the redirect is missing or untested.
Services listed10The site says what work the business does.3+ distinct services for the trade, or a services page.1–2 services named.
Reviews shown8Visitors can see what customers say.A review widget, review markup, or 2+ testimonials.A mention of reviews or a link to them elsewhere.
Freshness7The site shows signs of being kept up to date.The newest date on the site is from this year or last year.The newest date is 2–3 years old.
Google Business Profile link or map5The site links to the business’s Google profile.A link to the business’s own Google profile or review page.A generic map embed of an address.
Business schema3Search engines can read the business details.LocalBusiness structured data with name and phone or address.Incomplete business data, or a generic Organization only.
Title and description2The page has a real title and summary for search results.A descriptive title and a meta description of sensible length.One of the two.
Name and phone match2The site’s name and phone match the business listing.Both the phone and the name match.One of the two matches.

Anything below partial scores 0. Total weight: 100.

How is the score calculated?

A site’s score is the weighted share of the checks we could evaluate: each check adds its weight × (points ÷ 2), and the total is scaled to 100. A site gets a score only when checks worth at least 70% of the weight could be evaluated. Otherwise it’s marked incomplete and left out of the median.

The median score is the middle score among businesses with a working site. It includes the provisional speed check.

Speed is provisional. It comes from lab tests: Google PageSpeed Insights when its shared quota allows, otherwise Lighthouse run from one machine. When neither works, we use our own response time and page weight, capped at “partial”. Lab results vary by test location and run. In this release 101 of the 4,704 working sites had a lab test.

Two rule fixes on Oct 17, 2026 changed how sites score: click-to-call now counts a tap-to-call link anywhere on the page, and speed uses lab measurements where we have them. All sites were rescored under the corrected rules in one run that day, and any trend starts from that run.

What counts as “no working website”?

No site at all (confirmed by hand), only a Facebook page, only directory listings, a dead site or an expired domain, a parked domain, or an “under construction” page. A working site loads and is the business’s own. An expired domain counts as dead only when DNS and the domain registry both confirm it.

What are the sample-size rules?

  • We publish a percentage or median only when it rests on at least 30 businesses. Smaller groups aren’t published.
  • Any count under 5 is hidden, even inside a published row, so nobody can be singled out.
  • Every published figure shows its sample size (n). Headline shares also show a 95% range (Wilson interval).
  • “National” figures will mean several metros. Today we’ve checked only the Atlanta metro, so we label everything as Atlanta-area.

When were sites scored?

This release covers sites checked on Oct 17, 2026, frozen as of Oct 18, 2026, 5:10 PM ET with rubric 1.0.0. Only checks made at or before that moment are counted. Later rechecks don’t change these numbers; they go into the next release. Most fields are rechecked every 30 days, and history is kept, never overwritten.

What are the limits?

  • Expired domains count as no working website. Open map data still lists some businesses that have closed, and some that moved to a new web address. Both push the no-website share up.
  • Unknowns are left out, which pushes the share down. The two biases pull in opposite directions.
  • Automated, not human. We check a page’s code. Sites that block automated visitors, or are built entirely in JavaScript, are counted as unknown rather than scored low.
  • One point in time. Sites change after we check them.
  • No review data. Ratings and review counts from Google or other platforms aren’t used in any published number.

How do you handle privacy?

  • We store business facts only: name, trade, town, the publicly listed business phone and the website. Never owner names, email addresses or home addresses.
  • Published files hold totals only. No business is named, ranked or singled out.
  • If you own a business and want it left out of future checks, email hello@makeasite.co with your website address.

What’s in the CSV?

The aggregates CSV is free under CC BY 4.0. One row per published group. Blank means hidden by the sample-size rules or not measured for that row.

row_type
headline (the canonical figure), score_band (working sites per score band) or trade (one trade, only once signed off)
scope
home_service = all home-service trades combined; otherwise the trade
trade
Trade slug for trade rows; blank for the headline row
cbsa
Metro area code (12060 = Atlanta-Sandy Springs-Roswell, GA)
area
Metro area name. Atlanta-area only: this is not a national figure
as_of
The moment the figures were frozen (ET, ISO 8601)
n_judged
Businesses whose web presence we could determine (the base)
n_no_working_website
Businesses with no working website (blank if under 5 or not published for the row)
pct_no_working_website
Share of n_judged with no working website, %
n_working_site
Businesses with a working website
median_score
Median website checklist score (0-100) among scored working sites
pct_listed_domain_expired
Part of pct_no_working_website where the listed domain is no longer registered, %
pct_not_mobile_friendly
Share of working sites without a mobile viewport, %
pct_no_click_to_call
Share of working sites without a tap-to-call link, %
pct_no_https
Share of working sites without a working secure connection, %
pct_missing_hours_or_service_area
Share of evaluated sites missing hours, a service area, or both, %
n_hours_area_evaluated
Sites where both hours and service area could be read
scored_from
Earliest check date in the row
scored_to
Latest check date in the row
rubric_version
Version of the scoring rules
speed_status
provisional = speed comes from limited lab tests
score_band
For score_band rows: the 10-point checklist score band (90-100 includes 100); n_working_site is the count, '<5' when under 5
source
Attribution line (CC BY 4.0)

Can I reproduce or correct a number?

Every figure carries its as-of time and can be reproduced exactly from our records at that time, even after later rechecks. If you think a number is wrong, email hello@makeasite.co. We’ll check it and publish any correction with a date.

Map data: Overture Maps Foundation, overturemaps.org (Places release 2026-09-23.1). Places records carry their upstream licenses (CDLA-Permissive-2.0, Apache-2.0 or CC0).

makeasite.co builds websites for trade businesses. See the findings, our free guides, or the trades we build for.