Original research / San Antonio service businesses

How 20 contractor websites present their contact paths.

We examined public pages from electrical, plumbing, HVAC and concrete businesses serving San Antonio. The questions were narrow: does the received page include a dial link or a contact-page link, and when a dial link displays a phone number, does that number match its own destination?

By Sparrow Group Study date

This is a convenience sample of 20 selected websites, with five per trade. It describes these pages at the recorded observation time. It is not an estimate of how common any finding is among contractors.

A phone number on a page and the destination behind it are separate details. A useful website check looks at both, then checks what a visitor can actually see. This study keeps those observations separate so that a link in a page’s code is not mistaken for proof of a usable customer journey.

Our perspective: Sparrow Group builds and maintains small-business websites. We recorded the selection and measurement rules before classifying contact-path outcomes. A page with no observed discrepancy is a valid result; the study does not require a problem to justify a website service.

01 / What was observed

Results for the selected pages.

All 20 selected pages returned inspectable HTML. 12 included a dial link, and 15 included a matching contact or request-page link. 2 of 53 comparable phone links displayed a number different from their own dial destination.

The practical lesson is to check the label and the destination of each contact choice separately. A number difference warrants confirmation with the owner or tracking provider; it does not establish a wrong destination. A page without a dial link may still offer a plain-text number, email, form or other contact method.

HTML observation window: October 29, 2026, 9:15:20–9:15:36 a.m. CDT (14:15:20–14:15:36 UTC). The selected-site denominator is 20. Each measure below also shows its own observed denominator; a page we could not inspect would remain unknown for that measure.

Received page code: site counts and same-link phone comparisons
MeasureObserved resultWhat the denominator means
Usable HTML received20 / 20 selected sitesA bounded, successful response containing page code suitable for this inspection.
At least one dial link in received HTML12 / 20 inspectable pagesSites, counted once each. 0 of the 20 selected sites remained unknown.
At least one same-site contact or request-page link15 / 20 inspectable pagesSites, counted once each. 0 of the 20 selected sites remained unknown.
Dial links with one comparable displayed US number53 links on 12 sitesIndividual links. Repeated links on a page can each enter this count.
Displayed number differed from its own dial destination2 / 53 comparable links, across 2 sitesOnly links eligible for a same-link comparison. This is not a count of proven wrong numbers.

“Dial link” means a link that asks a device to open its calling app. In the page’s code, its destination begins with tel:. A plain-text phone number is a different observation. A link labelled “Call now” may be a dial link without supplying a displayed number that this comparison can use.

Rendered-page review

All 20 entry pages were also visited in a browser at an actual recorded viewport of 390 × 844 pixels, in two passes. We withheld aggregate visibility and first-screen usability rates.

The first pass read the page’s layout and display settings; the second captured a screenshot before another read. Loaders, opacity transitions and changed link counts occurred between captures. That makes a snapshot an unreliable basis for declaring a link persistently unavailable. This follow-up method decision was recorded after initial observations; the received-HTML measures above remain the primary results.

A nonzero layout box, permitted display settings and geometric intersection with the first screen were recorded separately in private evidence. They do not account for every covering overlay or establish that a page has finished rendering. We did not open menus, change cookie choices or test on a physical phone.

02 / Keep unknowns visible

An unavailable observation stays in the study.

We did not replace a selected website because it blocked access, needed scripts to show content, returned an error, exceeded the body limit or timed out. The attempted sample remains 20. Availability for one measure does not automatically establish availability for another.

Access and missingness
Observation stateSelected sitesHow it was handled
Inspectable HTML20Included in the HTML-link measures, including pages with server warnings or links hidden by CSS.
Blocked, error, oversized, timeout or otherwise unavailable HTML0No selected page remained in one of these states after the recorded classification correction below. No site was replaced.

Anonymous observation record

Rows use anonymous study IDs. They omit company names, domains and phone numbers. The record distinguishes an observed absence from an unavailable observation.

Twenty selected sites; observation details
Study IDReceived HTMLDial / contact-page linksPhone comparison / review note
R01Inspectable4 dial / 0 matching page links4 comparable; 0 base-number differences
R02Inspectable8 dial / 12 matching page links7 comparable; 0 base-number differences
R03Inspectable6 dial / 5 matching page links4 comparable; 0 base-number differences
R04Inspectable0 dial / 0 matching page links0 comparable; 0 base-number differences
R05Inspectable3 dial / 2 matching page links1 comparable; 0 base-number differences
R06Inspectable4 dial / 4 matching page links4 comparable; 0 base-number differences
R07Inspectable3 dial / 3 matching page links3 comparable; 0 base-number differences
R08Inspectable0 dial / 2 matching page links0 comparable; 0 base-number differences
R09Inspectable8 dial / 4 matching page links3 comparable; 0 base-number differences
R10Inspectable0 dial / 5 matching page links0 comparable; 0 base-number differences
R11Inspectable6 dial / 4 matching page links6 comparable; 1 base-number differences, second read confirmed
R12Inspectable0 dial / 1 matching page links0 comparable; 0 base-number differences
R13Inspectable4 dial / 0 matching page links4 comparable; 0 base-number differences
R14Inspectable0 dial / 2 matching page links0 comparable; 0 base-number differences
R15Inspectable0 dial / 6 matching page links0 comparable; 0 base-number differences
R16Inspectable7 dial / 0 matching page links7 comparable; 1 base-number differences, second read confirmed
R17Inspectable5 dial / 3 matching page links5 comparable; 0 base-number differences
R18Inspectable0 dial / 0 matching page links0 comparable; 0 base-number differences
R19Inspectable0 dial / 7 matching page links0 comparable; 0 base-number differences
R20Inspectable6 dial / 8 matching page links5 comparable; 0 base-number differences

03 / A reproducible selection rule

Five official service-company domains per trade.

We used four initial discovery queries, one per trade, on October 29, 2026:

  • San Antonio electrical contractor
  • San Antonio plumbing contractor
  • San Antonio HVAC contractor
  • San Antonio concrete contractor

For each query, we retained the first five distinct eligible official company domains in the returned search-result order. Eligibility required a branded service-business website advertising the relevant trade and San Antonio service. A regional operator’s San Antonio page was eligible; where discovery supplied that page, it became the recorded entry page.

Returned discovery order is not a claim about Google rankings. This is a convenience sample, not a random or representative sample of San Antonio contractors. It can mix local firms and regional operators and can differ with the search service, date or query.

We excluded directories, social-only profiles, government lists, PDFs, supplier-only sites and lead aggregators without identifiable service-business ownership. We also excluded duplicate domains, Sparrow-owned or client examples and two previously investigated sites. Domains were checked across all four trades before the 20-site roster was frozen.

If an initial query yielded fewer than five eligible unique domains, the recorded protocol allowed only that trade’s specified supplementary query: “San Antonio electrician company official website”, “San Antonio plumbing company official website”, “San Antonio air conditioning company official website” or “San Antonio concrete company official website”. None was needed.

Selection, exclusions and entry-page choices were recorded before the contact-path audit. No site was chosen for having a suspected defect, and access difficulties after selection did not trigger a replacement.

04 / Two different views of a page

Received code and rendered pages answer different questions.

What the server returned

We requested each selected entry page anonymously over a verified secure connection. Each request had a 20-second timeout, a 2 MiB response-body limit and a bounded redirect chain. We recorded the final address, response status and type, observation time and a content fingerprint. Raw public HTML was retained privately as inspection evidence.

This pass did not run page scripts. It inspected the HTML delivered by the server for dial links, comparable displayed numbers and same-site links to a contact or service-request page. No linked contact pages were fetched. It did not follow a dial link, submit a form, make a call or enable third-party embeds.

For a contact-page match, the destination had to use the same hostname, ignoring an initial “www”, and the path or source label had to contain a whole-word match for contact, request, quote, estimate or schedule. In-page-only links and external booking services were excluded. This is a matching rule, not a complete inventory of every possible contact option.

Source labels were the anchor’s text after removing script, style, template and noscript content. CSS-hidden text remained. Image alternative text and accessible names were not substituted. This choice limits the phone comparison and differs from what a visitor or assistive technology may perceive.

Received HTML can include links that are hidden from visitors. A page can also add or change links after its scripts run. An absence in the received HTML therefore does not prove that the rendered page has no contact option.

What the browser showed

The separate rendered review used the page in a browser and recorded the actual viewport width. The target was 390 pixels; the actual width governs any description of the review. We inspected visible main-document dial links and contact paths without following calling or email links or submitting anything.

Content inside cross-origin embedded frames and unopened menus was outside the automated extraction. Any menu actually opened was noted. Consent overlays, challenges and rendering failures were preserved as limitations. The observed browser width alone does not establish usability on a physical phone.

05 / Compare each link with itself

A narrow rule for displayed phone numbers.

A link entered the phone comparison only when its human-readable label contained exactly one recognizable ten-digit US telephone number, or the equivalent with an initial +1 country code, and its own dial destination could be unambiguously normalized to a US number.

We removed ordinary spacing and punctuation and normalized an initial US country code. Extensions were kept separately; the main-number comparison does not establish extension routing. We compared the number displayed by that link with that same link’s destination, rather than assuming every link on the site should use a single main number.

Labels such as “Call now”, ambiguous labels with several numbers, service codes, non-US numbers, script-only calling actions and unparsed cases were excluded from the comparable-link denominator. Their exclusion is not a fault finding. 11 of the 64 dial anchors lacked one recognizable US-style displayed number and were excluded. The other 53 links were comparable. Geographic number allocation was not checked.

Both proposed base-number differences received a second read against independently captured browser label-and-destination pairs before inclusion. No extension difference was observed among the comparable links. A different destination was described as a difference, with no assumption that the business intended another number.

06 / The boundary of the evidence

A contact-path check has a limited scope.

  • The sample: twenty selected domains support descriptions of these observations. They do not establish a rate for all contractors, an industry ranking or a market-size estimate.
  • The moment: websites and tracking numbers can change. The record describes the page at the stated observation time.
  • The display: a link in received HTML is not proof of rendered visibility. A visible link is not proof that a visitor notices or understands it.
  • The destination: number equality does not show call connection, correct routing, staffing, response time or form delivery. Number inequality does not prove a wrong destination.
  • The customer: we did not observe customer behavior, conversions, accepted inquiries, revenue or lost leads. None can be inferred from these counts.
  • The review: we did not assess accessibility conformance or every device, browser, menu, embedded frame or page. No mobile-usability conclusion is made without a recorded relevant viewport, and a viewport check alone remains limited.

The findings provide no evidence that a particular website platform, agency or redesign produces better business results. They do not support promises about search or AI rankings. A targeted correction in an existing website may be sufficient when an owner confirms that a detail needs changing.

07 / A check you can repeat

Inspect your own next step.

You do not need this study’s tools to begin. Open your own website as a visitor, then work through the contact choices your business wants people to use.

  1. Start with your real contact details.

    Write down the intended phone numbers, any approved tracking numbers, the inbox that receives inquiries and who handles replies. Confirm these with the person responsible for the business.

  2. Look at the first screen and the menu.

    Use your phone and a computer. Check whether you can identify the service, area served and next step. Open the menu and look at the footer too. Note anything covered, unreadable or difficult to reach.

  3. Check each phone choice.

    On your own site, tap a phone link and inspect the number offered by the calling app before placing a call. Compare it with the number printed on the page and your approved list. Stop before calling unless you intend to make a test call. If you use tracking numbers, ask the provider to confirm the intended setup.

  4. Follow your contact-page links.

    Check that each contact or quote button opens the page you expect and that the instructions make sense. Treat message delivery as a separate check: arrange a test with whoever receives inquiries before sending one, then confirm it arrived.

  5. Record the change and repeat the visit.

    Keep the page address, device, date and intended correction. After an edit, repeat the same steps. Recheck when phone numbers, staff responsibilities or booking services change.

08 / Inspect the evidence and plan the work

Data and practical buyer resources.

Download the anonymous observation data (JSON, version 1.0). It includes all 20 rows, aggregate counts, definitions, observation times and limitations. The page’s results are rendered from that same dataset.

You can recalculate the totals from the anonymous rows. Source identities, the identity-to-row mapping, HTML copies and browser screenshots remain private. This download does not enable independent source-level replication. Anonymous row order does not encode the trade or discovery order. We publish no named fault ranking or company screenshot.

Decide who does the work

Website buyer guide

Compare doing the work yourself, professional help on a builder and a managed custom website, including targeted repairs.

Read the website buyer guide

Understand the scope

Sparrow’s website plans

Read the published allowances, billing, update responsibilities, ownership and cancellation terms.

Read website plan details

Use your own assumptions

Website cost calculator

Compare a real alternative quote and recurring costs over the same period. A cost comparison does not predict business returns.

Open the cost calculator

Study record and corrections

The protocol was recorded at 14:07:12 UTC on October 29, 2026, after initial discovery searches but before contact-path classification. The 20-site roster was frozen at 14:12:09 UTC. HTML requests ran sequentially; no replacements were made.

Version 1.0: before publication, we corrected our classifier after it mistook a normal background anti-bot script for a blocking interstitial. The same saved response was reclassified without refetching or replacing the site. We retained the original classification and correction privately. The rendered-review limitation and decision to withhold visibility rates were recorded after the initial browser observations.

If you find a calculation or method error, contact Sparrow Group with the relevant row or passage. This is Sparrow’s own research; no independent third-party validation is claimed.

Contact Us

Get in Touch

Tell us what your business does and what your website needs to do next. Explore our website design, SEO services and website plans, or send a project inquiry below.

Tell us about your project

This form requests a reply. To choose a meeting time, use the separate scheduling link.

Schedule time with me powered by Calendly