The sentence an assistant reads aloud
Picture the exchange. A homeowner in Arvada types “my furnace is blowing cold air, who can come this week and what will it cost” into Google AI Mode, Gemini or ChatGPT. The assistant pulls the map pack, reads three or four websites, checks reviews, and writes a short answer. For the business whose furnace page says “diagnostic visits in Arvada run $150 to $250, applied to the repair; most repairs land between $250 and $900; a replacement runs $4,500 to $9,000 depending on efficiency and ductwork,” the answer repeats those numbers with the business’s name next to them. For the business whose page says “every system is different, call us for a free estimate,” the answer says “pricing not listed; contact for a quote.”
Half the customers will not make that call. They asked an assistant precisely so they would not have to call four companies. The assistant has already given them a name and a number, and that name is not yours. Price is the top factor customers use to choose a home-service provider, at 62%, ahead of reviews at 51%, in Jobber’s 2026 Home Service Trends Report (1,050 U.S. owners surveyed December 2025). If the assistant cannot say your price, you are competing on the second factor against someone who has both.
This is not a prediction. It is the third stage of the four an assistant walks through before it will book a business, which we laid out in the AI readiness checklist: found, trusted, quoted, booked. When we run that checklist on Denver service businesses, the quoted stage is where the most established companies fail, because they have spent fifteen years believing that posting prices is a mistake. This post is the argument for changing that, with the 2026 evidence and a way to do it without turning a range into a contract.
What the 2026 studies actually found
The best data on how AI agents handle pricing comes from software, not plumbing, because that is where the researchers work. The behavior transfers; an agent reading a pricing page does not care what is being priced.
The Siteline benchmark (June 18, 2026). David Kaufman ran a simulated agent through 534 sessions trying to find monthly pricing and top features for 100 B2B software products. 65% of plans showed a price directly. 14% of products disclosed no pricing on any plan. 30% of sessions hit at least one access error, about a quarter of which were outright denials consistent with bot blocking, with Cloudflare’s default bot settings flagged as a common cause. The number that matters for a service business: sessions with access errors drew 58% of their content from third-party sources, against 12% for sessions without errors, and in 5% of runs the agent got its entire answer from somewhere other than the company’s site. JavaScript rendering was called the primary barrier; agents that do not run scripts cannot see a pricing table built client-side. It is a vendor benchmark and not peer reviewed; the author says so.
The Cloud 100 pricing study (July 29 to August 10, 2026). As reported in Kevin Payne’s Growth Guides piece of October 25, 2026, researchers collected 7,600 AI responses to pricing questions about the Cloud 100 companies across six engines. One company with no public pricing was quoted anywhere from about $100 to $2,400 per user per month, a 24-fold spread, with the figures drawn from forum threads. Company pricing pages appeared in about 46% of responses but were the first-cited source in only 12%; price-tracking sites were cited in 18.7% of answers, forums in 18.6%, review sites in 15.9%. A co-author works for an AI visibility vendor, which the piece discloses.
Read those two together and the mechanism is clear. When you do not publish a price, the assistant does not say “unknown” and stop. It goes looking, and it finds a Reddit thread from 2022, a lead-gen site’s “average cost in Denver” page, or a competitor’s range, and it attributes something to you that you never said. Silence is not neutral; it is outsourcing your price to strangers.
| Finding | Source and date | What it means for a Denver service business |
|---|---|---|
| 14% of products published no price; those answers came from third parties | Siteline benchmark, June 18, 2026 | A “call for a quote” page does not produce a blank; it produces someone else’s number |
| Sessions with access errors drew 58% of content from third-party sources vs 12% | Siteline benchmark, June 18, 2026 | A bot-blocked or script-rendered price is the same as no price |
| No public price: assistants quoted a 24-fold spread from forums | Cloud 100 study via Growth Guides, Oct 25, 2026 | The range you refuse to publish gets invented, wider and wrong |
| Pricing pages cited in 46% of answers, first in 12% | Cloud 100 study via Growth Guides, Oct 25, 2026 | Your page competes with directories and forums even when it exists; it has to be the clearest source |
| Price is the top provider-choice factor (62%), reviews second (51%) | Jobber 2026 report, 1,050 owners, Dec 2025 | An assistant that cannot state your price is working from your second-best signal |
| 68% of homeowners get more quotes when a price is higher than expected | Housecall Pro survey, Feb 25 to 26, 2026, 1,100+ homeowners | A published range sets the expectation before the visit, which is where the extra-quote behavior starts |
| 45% used an AI tool for a local recommendation, up from 6% | BrightLocal, Feb 11, 2026, 1,002 adults | The reader of your pricing page is increasingly software summarizing for a person |
The four objections, answered
“Every job is different.”
True, and a range says so. “$250 to $900 depending on the part” is a more honest sentence than “call us,” because it tells the customer what you already know: most repairs land in that band, and the part decides where. The customer is not asking for a quote. They are asking whether you are a $300 company or a $3,000 company, and whether to keep reading. Nobody in Denver has ever refused to hire a plumber because the website said a water heater install runs $1,800 to $3,500 and the real number came in at $2,900.
“Competitors will undercut us.”
Your competitors already know your prices; they hear them from every customer who got two bids. What they do not have is your page in the assistant’s answer. And the undercutting argument assumes the customer is choosing on price alone, which Jobber’s data says is the case for the plurality but not the majority. A range lets you set the expectation and then win on reviews, availability and the way the phone is answered. A blank hands the expectation to whoever posts the lowest number.
“The number becomes a promise.”
It becomes a promise only if you write it as one. “Diagnostic visits run $150 to $250” is a statement of what typically happens; “diagnostic visit: $150” is an offer. The section below is about the difference. What you should not do is publish a range and then quote outside it without explaining which variable moved; that is the thing that produces the one-star review, and the assistant reads those too.
“Our prices change.”
Then change the page. A range with a “last updated” date is more credible than a page that has not been touched since 2021, and an assistant that sees a date in 2026 trusts the number more than one with no date at all. If prices move seasonally (HVAC, landscaping, moving), say so in the sentence: “peak-season emergency rates run higher.” The range with the caveat is still a range.
“We do custom or hourly work.”
Then publish the unit and the typical total. A remodeler can say “most kitchen remodels we do in Denver run $45,000 to $90,000; cabinets and layout changes are the two biggest variables.” An attorney can say “initial consultations are $200 to $350 and most uncontested matters run $1,500 to $4,000 in total fees.” An electrician can say “service calls are $120 to $180 for the first hour and $95 to $140 per hour after.” None of those is a bid. All of them answer the only question the customer and the assistant are asking: roughly what does this cost, and is it in my range. The businesses that say “it is impossible to say” are usually the ones whose owner could answer within 10% in his sleep; he just does not want it in writing. The assistant treats “impossible to say” as a blank, and fills it.
One Denver-specific note. Our market has a wide spread between the cheapest and most expensive provider in most trades, because the metro mixes a dense urban core, affluent southern suburbs and a lot of new construction to the north and east. A published range tells the customer which part of that spread you occupy, which filters out the people who were never going to hire you and saves everyone a wasted estimate visit. The filtering is a feature. A business that wants every lead regardless of fit is a business that will spend its afternoons driving to Parker for jobs it loses on price.
How to write a range that is not a promise
A quotable range has five parts, in one or two sentences, in plain text. Writing it this way is what keeps it from being read as a fixed price by a customer, a competitor or a court.
- The service, named the way customers say it. “Furnace repair,” not “hydronic and forced-air diagnostics.” The assistant matches the customer’s words to yours.
- The typical band. “Most repairs in Denver run $250 to $900.” Use the band where 80% of your jobs land, not the full theoretical spread from a $90 capacitor to a $4,000 heat exchanger.
- The variable that moves it. “The part is the main variable; a blower motor sits at the top of that band.” One variable, two at most. This is the sentence that converts a number into information.
- The one thing outside the band. “If the heat exchanger is cracked we will talk about replacement instead, which runs $4,500 to $9,000.” Naming the exception is what makes the band believable.
- The words that make it a range. “Typically,” “most,” “depending on,” “we confirm the exact number on site before any work starts.” That last clause is the whole legal posture: a published range plus a written quote before work. It is also simply what good contractors do.
Here is what that looks like for three Denver trades, written so an assistant can lift any sentence and attribute it correctly.
Notice what none of them do: none states a single number, none promises a price, none uses the word “guarantee,” and each tells the customer the number will be confirmed before work. That is the entire discipline. It takes ten minutes per service to write, and it is the same sentence the person answering the phone should be saying when Google’s automated assistant calls to check your price.
Where the range has to live: page, schema, profile, phone
The sentence has to be in four places that agree with each other, because the assistant cross-checks and the readiness checklist’s check 9 (no contradictions) is the one that quietly kills otherwise good businesses.
The service page, in HTML
The range goes in the visible text of the service page, high on the page, in a paragraph or a short table, not in an image, a PDF or a widget that loads after a script runs. Siteline’s benchmark names JavaScript rendering as the primary barrier and bot blocking as the second; Kevin Payne’s five-step check includes reading your own page with scripts off and checking that robots.txt and the firewall are not blocking unknown visitors. The test is thirty seconds: view source on the page and search for the dollar sign. If the number is not in the source, the assistant cannot read it.
Structured data
Two pieces. First, Google’s LocalBusiness documentation (last updated September 8, 2026) lists priceRange as a recommended property: “a numerical range” or “a normalized number of currency signs,” with examples like “$10-15” and “$$$,” and it must be under 100 characters or Google will not show it. That is a business-level signal, not a per-service one. Second, for each service, a Service node with an Offer carrying a PriceSpecification with minPrice, maxPrice and priceCurrency, matching the visible sentence. The schema never replaces the sentence; it labels it. The full minimum set for an agent-readable service page is in the readiness checklist’s schema section.
The Business Profile and directories
Google Business Profile has no price-range field for most categories, but the Services section lets you attach a price or a “from” price to each service you list; use the bottom of your range as the from-price and keep it in sync with the page. Directory listings should carry the same services with the same names. A Colorado business can also keep a free listing on our sister directory CO Business List, where the category and service area are stated plainly, which is one more source agreeing with the others. Agreement across sources is the point; a directory that says “from $99” next to a site that says “$150 to $250” costs you more than either listing earns.
The phone
Whoever answers should have the same ranges on a card, because Google’s assistant now calls businesses to “confirm prices and availability” on a customer’s behalf (Google’s own help page wording), and a mismatch between the page and the phone is a contradiction the recording captures. The page sets the expectation; the phone confirms it; the written quote on site finalizes it. Three steps, one set of numbers.
A worked price page for a Denver trade
A pricing page does not have to be a page. For most trades the right structure is a short pricing block on each service page plus one overview page that collects the ranges, so a customer (or an assistant) asking “how much does X cost” lands on a page that answers exactly that. Here is the overview structure we use for an HVAC company in the Denver metro, with the numbers illustrative.
| Service | Typical range | Main variable | Outside the band |
|---|---|---|---|
| Furnace diagnostic visit | $150 to $250, applied to the repair | Time of day; after-hours runs higher | Holiday emergency calls |
| Furnace repair | $250 to $900 | The part; blower motors and control boards at the top | Cracked heat exchanger: replacement conversation |
| Furnace replacement | $4,500 to $9,000 | Efficiency rating and ductwork condition | Full duct replacement, add $3,000 to $6,000 |
| AC repair | $200 to $1,200 | Refrigerant type and the component | Compressor failure on an older unit |
| AC replacement | $5,500 to $11,000 | Tonnage, SEER2 rating, line-set condition | Heat pump conversions, priced separately |
| Maintenance plan | $18 to $30 per month | Number of systems | Commercial rooftop units |
Under the table: one paragraph that says every number is a typical range for the Denver metro as of the date shown, that the exact price is confirmed in writing before work begins, and what moves a job outside the band. Then a booking link with real times, because a customer who has just read a range they can live with is the most ready-to-book person on your site, and the readiness checklist’s stage four is about catching them there rather than sending them to a form.
Two formatting notes. Keep the table in HTML (not an image of a table). And date it: “Ranges reviewed October 2026.” Then actually review it quarterly, which is also when you re-sync the profile services and the phone card. The price page is the only page on most service sites that the owner can update in ten minutes and that an assistant reads every time.
Pricing pages that backfire
Publishing prices badly is worse than not publishing them, because it creates contradictions. The patterns we see in Denver audits:
- The teaser. “Furnace repair from $89!” with no range and a real average of $600. The assistant repeats $89; the customer feels baited at $600; the review says so; the next assistant reads the review.
- The pricing page that says nothing. A page titled Pricing in the navigation whose only content is “every project is unique, contact us.” This is the worst of both worlds: it signals to an assistant that a pricing page exists and then fails to deliver, and some assistants will summarize it as “pricing page provides no figures.”
- The PDF price list. Accurate, complete, invisible. Many agents do not open PDFs; those that do often cannot attribute what they find to the right service.
- The widget. A pricing calculator or table that renders only after a script runs. Looks great to a person, blank to an agent that does not execute JavaScript.
- The stale page. 2021 prices, no date. The assistant has no way to know, repeats them, and the first call is an argument.
- The contradiction. $150 to $250 on the service page, “$99 diagnostic” in a sidebar banner from a 2023 promotion, “from $120” in the profile services. Three numbers, zero trust.
- The price-match promise. “We’ll beat any quote.” Apart from being a commitment you may not be able to keep, it tells the assistant and the customer that your number is a starting point for a negotiation, which is the opposite of what a range is for.
The fix for every one of these is the five-part sentence: service in customer words, typical band, the variable, the exception, the confirm-before-work clause, dated, in HTML, repeated in schema, the profile and the phone card.
The 60-minute version
- List your top eight services in the words customers use.
- For each, pull the last 20 jobs and write down the band where 16 of them landed. That is your typical range.
- Name the one variable that moved the other four, and the one situation that is outside the band.
- Write the sentence using the five parts above. Ten minutes a service.
- Put it on the service page in HTML, above the fold or just below it, and on one overview page as a table with a date.
- Add the schema: priceRange on LocalBusiness (under 100 characters), an Offer with minPrice and maxPrice on each Service.
- Sync the profile services with the same names and from-prices, and any directory listings.
- Print the phone card.
- Test it. Ask an assistant what your service costs in your suburb. If it repeats your sentence with your name, you are done. If it repeats a forum or a competitor, you have found the gap.
If you would rather have the ranges written and the schema placed for you, that is a fixed-price task on the SEO à la carte menu, and the free audit will tell you first which of your pages an assistant currently quotes, and from where.
Want to know what the assistants say your prices are right now?
The free audit asks the major assistants what your top services cost in your area, shows you the answers and where they came from, and tells you which pages need the sentence. You keep the findings either way.
Get the free audit → Call 1-800-481-8638Questions readers ask
Should a service business publish prices on its website in 2026?
Yes, as ranges. AI assistants answer cost questions with whichever business published a readable range and mark the others as “pricing not listed” or, worse, quote a figure from a forum. Jobber’s 2026 report puts price as the top provider-choice factor at 62%. A range with the variable named is not a quote and does not commit you to a number.
Does publishing a price range legally commit me to that price?
We are not lawyers, and you should ask one about your trade, but a sentence written as a typical range (“most repairs run $250 to $900 depending on the part; we confirm the exact price in writing before work starts”) is a statement of what usually happens, not an offer at a fixed price. Avoid single numbers, avoid the word guarantee, and quote in writing on site.
What happens if I do not publish prices?
The assistant looks elsewhere. The Siteline benchmark (June 18, 2026) found sessions that could not read a company’s pricing drew 58% of their content from third-party sources; the Cloud 100 study (July to August 2026) found a company with no public price quoted across a 24-fold spread from forum threads. Silence gets filled by strangers.
How do I mark up a price range in schema?
Two places. priceRange on your LocalBusiness node as a short string under 100 characters (Google’s documentation, updated September 8, 2026, gives “$10-15” and “$$$” as examples). Per service, a Service with an Offer whose PriceSpecification carries minPrice, maxPrice and priceCurrency, matching the visible sentence on the page.
Can I put prices in a PDF or an image instead?
Not if you want an assistant to read them. The Siteline benchmark names JavaScript rendering as the primary barrier and bot blocking as the second; PDFs and images add the same problem. The range belongs in the HTML text of the service page, which you can confirm by viewing the page source and searching for the dollar sign.
How wide should a price range be?
Wide enough to hold about 80% of your real jobs for that service and no wider. A range from $90 to $4,000 is honest and useless; $250 to $900 with “the part is the main variable” and the heat-exchanger exception named is honest and quotable. Pull your last 20 jobs per service and use the band 16 of them fell in.
Does a published price range help local rankings?
Not directly; we have no evidence that priceRange or Offer markup moves map-pack position. It changes what an assistant and a customer can do with your listing once they find it: compare, trust and book. Ranking work is separate, and the two together are what turn visibility into jobs.
Sources
- PPC Land on the Siteline agent pricing benchmark (published June 18, 2026; 100 B2B products, 534 sessions)
- Kevin Payne, Growth Guides: AI-readable pricing page, the 5-step agent price read (October 25, 2026; reports the Cloud 100 study of July 29 to August 10, 2026)
- Google Search Central, LocalBusiness structured data: priceRange (last updated September 8, 2026)
- Jobber, Blue Collar Strong: 2026 Home Service Trends Report (1,050 owners, December 2025)
- Housecall Pro, 2026 Home Services Report (1,100+ U.S. homeowners, February 25 to 26, 2026)
- BrightLocal, Local Consumer Review Survey 2026 (February 11, 2026; 1,002 U.S. adults)
- Google Business Profile Help, About automated calls and texts from Google (price and availability confirmation calls)

