How Accurate Are AI Repair Estimates Taken by Phone?

On this page
Most writing on ai auto repair estimate accuracy asks whether the model can do arithmetic. It can. The failures happen earlier, in the audio. A caller on a car speakerphone says "front brakes, 2018, the V6." The agent hears "rear," "2008" or "four-cylinder." Every number after that is right math on the wrong car.
This post is for product teams at shop management software companies. Your agent quotes for hundreds of independent shops, each with its own labor rate and quote policy. Shop-management platforms now ship voice agents inside the product. AutoLeap, for example, announced its AutoLeap AIR receptionist on April 28, 2026, for after-hours calls, lead capture and booking. Once an AI receptionist for auto repair starts giving an auto repair phone quote, a wrong number stops being a transcript bug. It becomes a pricing promise with your customer's name on it.
Below: the quote formula, a worked example of compounding errors and the estimate laws behind the wording. Then a Python test oracle, a caller-profile matrix and a production check against the final repair order.
What an AI phone quote is made of
Phone quote: a price range the agent speaks before anyone has seen the car. It is built from vehicle details, the requested job and the shop's own pricing rules.
Shops build a real estimate from a labor guide, which lists a labor time for each operation on each vehicle. Mitchell 1 says its ProDemand estimator draws on "5M labor times and 3.5M OEM parts" (Mitchell 1). Your agent should use the same inputs a service advisor would. The formula is simple:
quote_low = guide_hours x labor_rate + parts_low x parts_markup + shop_fees
quote_high = guide_hours x labor_rate + parts_high x parts_markup + shop_feesEach term depends on different slots. Guide hours depend on year, make and model, engine size and the operation. Parts ranges depend on the same vehicle plus the parts tier. The labor rate, parts markup, fees and diagnostic fee come from the shop's configuration. None of those come from the caller.

That split matters for testing. Caller slots fail because of speech. Shop config fails because of setup, and one shop's config is not another's. If you run one agent across many shops, the setup half needs its own checks. Our guide to multi-tenant voice agent testing covers that side.
The phone quote also feeds downstream systems. The agent writes a lead or a draft estimate into the shop system. A service advisor may open that draft the next morning and trust it. A wrong axle on the draft becomes a wrong parts pull.
How one misheard slot compounds
Here is a worked brake job quote. All prices are illustrative assumptions for a fictional shop. They are not real labor times for any real vehicle.
Assume a labor rate of $160 per hour, a parts markup of 1.6x and $25 of shop fees.
| Caller said | Agent captured | Guide hours | Parts cost | Quoted range | Effect |
|---|---|---|---|---|---|
| Front brakes, pads only | Front, pads only | 1.0 | $45–$70 | $257–$297 | Correct |
| Front brakes, pads only | Rear pads and rotors, electronic parking brake | 2.1 | $205 | $689 | 2.3x too high |
| 2018, 2.0L four-cylinder | 2008, same model | 1.0 | $45–$70 | $257–$297 | Price looks right, part number wrong |
| Four-cylinder oil change | V6, synthetic oil | 0.5 | more quarts, higher grade | higher | Caller hears a higher price than the shop would charge |
| 225/65R17 tires | 225/60R17 tires | 0.8 | different SKU | close | Tire ordered will not match |
Look at row three. The year slot was wrong, but the price landed inside the range. A grader that only checks the total passes this call. The shop then orders pads for the wrong generation. The error is silent until the car is on the lift.
Row two is the opposite. The caller hears $689 for a $257–$297 job and hangs up. Shop owners already describe this pattern on human calls. In one AutoShopOwner forum thread, owners note that callers often say "okay, bye" after hearing a number.
Errors also multiply across slots. Suppose each of six slots is captured correctly 97% of the time. That is an illustrative assumption, not a measured rate. The chance all six are right is 0.97^6, or about 83%. Roughly one quote in six has at least one wrong slot.
Consistency is a second problem. The τ-bench paper by Yao et al. measured tool-using agents on repeated trials. In retail, pass^8 was below 25%. Fewer than one in four tasks succeeded on all eight attempts. A quote agent that is right on the first test call may be wrong on the fifth identical one.
Where quote errors start in the audio
Most quote errors are entity errors. Years, engine codes, axle words and tire sizes are short tokens. They carry no redundancy, so one wrong sound changes the meaning.
| Slot | Typical confusion | Price effect | What catches it |
|---|---|---|---|
| Model year | "oh-eight" vs "eighteen" | Wrong generation, wrong parts | Read-back plus VIN check |
| Engine | "V6" vs "V8", "two-point-oh" vs "two-point-five" | Labor and fluids shift | Confirm engine size explicitly |
| Axle | "front" vs "rear", "not the front" | Wrong operation, often 2x price | Confirm axle in its own turn |
| Job scope | "pads" vs "pads and rotors" | Parts cost triples | Ask, never assume rotors |
| Tire size | 225/65R17 vs 225/60R17 | Wrong SKU | Digit-by-digit read-back |
| VIN | 17 characters, letters and digits | Wrong decode | Optional; validate check digit |
Alphanumeric strings are a known weak spot. The SNuC corpus paper built 13,000 spoken alphanumeric identifiers because general ASR handled them poorly. Adapting a recognizer on that data improved accuracy. VINs and tire sizes are exactly this kind of string. Our post on STT entity accuracy shows how to measure entity error rate separately from WER.
The audio itself is hard. Many repair callers phone from the car, often over a Bluetooth speakerphone. The ICMC-ASR challenge at ICASSP 2024 recorded speech inside a moving car across 60 conditions. The baseline far-field system scored 26.24% character error rate. The winning team reached 13.16%. That data is Mandarin, so treat it as direction, not a number to copy. In-car speech remains a hard case even for tuned systems.
Pauses add a third risk. Koenecke et al. found about 1% of Whisper transcripts contained whole phrases that were never spoken. Hallucinations were more common with long non-speech gaps. A caller who says "hold on, let me check the sticker" creates exactly that gap.
Then there is caller uncertainty: "I think it's the V6, maybe." Or: "The front, or wherever the squeak is." A good agent records uncertainty as uncertainty. A weak one picks a value and prices it.
Ballpark vs firm quotes: what estimate laws expect
An auto repair phone quote is usually not the legal estimate. But it sets the expectation the legal estimate must later meet. The wording your agent uses decides whether a caller hears a range or a promise.
California. Under Business and Professions Code 9884.9, a dealer "shall give to the customer a written estimated price for labor and parts." That applies to each specific job. It adds that no charge may exceed the estimate without the customer's consent. Oral consent must be noted with date, time, the authorizer's name and the phone number called. The Bureau of Automotive Repair's Write It Right guide also requires a separate teardown estimate before diagnosis that needs disassembly.
Florida. Florida Statutes 559.905 applies the written estimate rules when repair work will exceed $100. The customer can request a written estimate, waive it or set a dollar cap.
Michigan. MCL 257.1332 requires a written estimate before repair work begins. An overrun of not more than "10% or $50.00, whichever is lesser" needs no new consent unless the customer asks.
Federal. The FTC's auto repair basics page tells consumers to ask for a written estimate. It notes that "State law may require this." Section 5 of the FTC Act prohibits "unfair or deceptive acts or practices." The FTC launched Operation AI Comply on September 25, 2024. Chair Lina Khan said "there is no AI exemption from the laws on the books." A quote the agent calls "guaranteed" and the shop cannot honor is the risk to design out.
This is not legal advice. Have counsel review quote wording for each state your shops operate in.
For testing, the law turns into wording rules you can check on every call:
| Rule | Pass example | Fail example |
|---|---|---|
| Say it is a ballpark estimate | "Usually between $257 and $297, final price after inspection" | "It's $257" |
| No guarantee words | "estimate," "range," "typically" | "guaranteed," "firm," "locked in" |
| Never authorize work | "The advisor will confirm before any work" | "I'll go ahead and approve that" |
| Disclose the diagnostic fee when the job is unknown | "Diagnosis is $X, applied per shop policy" | Quotes a repair for a noise |
| Upsell only as a possibility | "If rotors are worn, that adds about $Y" | Adds rotors to the quoted total |
The upsell boundary is the subtle one. Mentioning that rotors might be needed is honest. Folding rotors into the quote the caller did not ask for is the row-two failure above. And if your agent quotes a ballpark estimate for a noise or warning light, it is guessing. Pawlik Automotive explains why it won't give phone estimates: an alternator call turned out to be a loose battery terminal. Your agent should route those to a diagnostic appointment instead.
Build a test oracle from the labor guide and shop config
An oracle is code that computes the correct answer for a test call. Here it recomputes the quote from the slots the caller actually spoke, plus the shop's config. The agent's spoken range is then graded against it.
This differs from the oracle in our lawn and cleaning quote post. That one prices by area and frequency. Auto repair prices by vehicle configuration and labor-guide operation. The vehicle slots are where it breaks.

The code below is simplified. Swap the dictionary for your real labor guide and parts lookups.
from dataclasses import dataclass
import re
@dataclass
class ShopConfig:
labor_rate: float # $/hour, per shop
parts_markup: float # e.g. 1.6
shop_fees: float # supplies + disposal
diag_fee: float
tolerance: float = 0.10 # +/- band on each end
@dataclass
class Slots:
year: int
model: str
engine: str
op: str # "front_pads", "rear_pads_rotors", ...
# Illustrative stand-in for a labor guide + parts catalog lookup.
GUIDE = {
(2018, "SedanX", "2.0L I4", "front_pads"): (1.0, 45, 70),
(2018, "SedanX", "2.0L I4", "rear_pads_rotors"): (2.1, 205, 205),
}
FIRM_WORDS = re.compile(r"\b(guarantee\w*|firm|locked in|exact price)\b", re.I)
def expected_range(s: Slots, shop: ShopConfig) -> tuple[float, float]:
hours, p_lo, p_hi = GUIDE[(s.year, s.model, s.engine, s.op)]
base = hours * shop.labor_rate + shop.shop_fees
return base + p_lo * shop.parts_markup, base + p_hi * shop.parts_markup
def grade(truth: Slots, captured: Slots, quoted: tuple[float, float],
agent_text: str, shop: ShopConfig) -> list[str]:
fails = []
for field in ("year", "model", "engine", "op"):
if getattr(truth, field) != getattr(captured, field):
fails.append(f"slot_mismatch:{field}")
lo, hi = expected_range(truth, shop)
t = shop.tolerance
if quoted[0] < lo * (1 - t) or quoted[1] > hi * (1 + t):
fails.append("out_of_band")
if FIRM_WORDS.search(agent_text):
fails.append("firm_language")
return failsThree design choices matter.
1. Grade slots before price. Row three of the worked example passes on price and fails on year. Slot checks catch it.
2. Compute from truth, not from the agent's capture. The expected range comes from what the scripted caller said. Otherwise a wrong capture produces a matching "expected" price.
3. Make tolerance a shop setting. Some shops round to the nearest $10. Others quote wide ranges on purpose. Michigan's 10%-or-$50 overrun rule is a useful reference for what counts as small. It governs final bills, not phone quotes.
The `quoted` tuple needs care too. Parse it from the agent's audio transcript and from the tool payload it wrote. If the two disagree, that is its own failure. Our guide to tool call accuracy covers payload-versus-speech checks.
Caller profiles that break phone quotes
A clean test call in a quiet office proves little. Repair callers phone from the road, from the shop lot, or with a kid in the back seat. Build a matrix of scenarios against conditions.
| Scenario | Quiet line | Road noise | Car speakerphone | Fast, interrupts | Unsure caller |
|---|---|---|---|---|---|
| Front pads only | 3 runs | 3 | 3 | 3 | 3 |
| Rear pads and rotors | 3 | 3 | 3 | 3 | 3 |
| Oil change, synthetic, V6 | 3 | 3 | 3 | 3 | 3 |
| Four tires with size | 3 | 3 | 3 | 3 | 3 |
| Check engine light | 3 | 3 | 3 | 3 | 3 |
| Caller corrects the year mid-call | 3 | 3 | 3 | 3 | 3 |
That is 6 scenarios × 5 conditions × 3 runs, or 90 calls. Three runs per cell exist because of the τ-bench consistency result. One pass tells you little.
How many calls do you need? Use the rule of three. If you see zero failures in n independent calls, the 95% upper bound on the failure rate is about 3/n. Ninety clean calls bound the rate at about 3.3%. To claim under 1%, you need about 300 clean calls. Size the suite to the claim you want to make.
Evalgent's caller profiles set accent, speech pace, interruption level, response delay, behavior, background noise and language. The simulator calls the agent over PSTN, SIP or WebRTC, the same paths real callers use. Verdicts are judged from the audio, not only the transcript. That matters when "front" and "rear" never reached the text correctly. For noise setup details, see testing STT under background noise.
How to test AI repair quotes before a change ships
This is the release gate for ai auto repair estimate accuracy. It runs on every prompt, model or flow change.
1. Freeze a shop config fixture. Pick three real shop setups with different labor rates, markups and quote policies. Store them as test fixtures.
2. Write ground-truth slots for each scenario. Year, model, engine size, operation and parts tier. Include one VIN scenario and one caller who changes an answer.
3. Compute expected ranges with the oracle. Use the same labor guide and parts lookup the product uses. Store the expected low and high per shop.
4. Run the matrix with caller profiles. Cover road noise, car speakerphone, fast talkers and unsure callers. Run each cell at least three times.
5. Grade slots, band and wording. Check every captured slot, the tolerance band, banned firm words, diagnostic fee disclosure and upsell placement.
6. Check the write-back. Compare the spoken quote with the draft estimate or lead record the agent created. They must match.
7. Block the release on regressions. Compare against the last passing run. Any new slot mismatch on the axle or year blocks the ship. Our guide to shipping prompt changes safely covers gating.
8. Repeat per new shop at onboarding. A new shop brings a new config. Rerun the oracle scenarios against its real settings before its calls go live.
The pillar guide on AI receptionists for auto repair shops covers the full call flow. Booking errors that follow a quote are covered in auto repair AI booking errors.
Monitor quotes against the final repair order
Pre-release tests cover the calls you imagined. Production shows the ones you did not. Tracking ai auto repair estimate accuracy in production needs ground truth. The strongest production signal is already in your product: the final repair order.
Join each quoted call to the repair order that followed it. Match on customer phone, vehicle and date window. Then compare more than price.

| Metric | Definition | Suggested alert |
|---|---|---|
| Operation match | Quoted op equals the RO's primary op | Below 95% for a shop |
| Vehicle match | Quoted year and engine equal the RO vehicle | Any mismatch on year |
| Band hit rate | RO total for the quoted op falls inside the quoted range plus tolerance | Below 85% |
| Firm language rate | Calls with banned guarantee words | Above 0% |
| Diagnostic disclosure | Unknown-cause calls where the diagnostic fee was stated | Below 98% |
These thresholds are starting points, not industry standards. Tune them per shop.
Read the band metric carefully. A final bill above the quote is not always an agent error. The customer may have approved extra work after inspection, which estimate laws expect. Compare the quoted operation's line items only, not the whole ticket. Otherwise approved add-ons look like quote misses.
The vehicle match metric catches the silent failure from row three. If the RO shows a 2018 and the quote said 2008, the price may have matched by luck. The parts order did not. VIN decoding helps here, and our post on dealership service scheduling and VIN lookups shows how to check it.
Evalgent's production monitoring takes the call recordings you push, transcribes them, maps each call to a scenario and judges it. It flags tool-call failures, latency spikes and policy failures with fix recommendations. Custom metrics, such as firm language or diagnostic fee disclosure, run on every call. Joining that output to your repair orders closes the loop. Our guide to monitoring voice agents in production covers alert routing.
Frequently asked questions
How accurate are AI repair estimates taken by phone?
AI repair estimates taken by phone are as accurate as the slots captured. Errors come from mishearing the year, engine, axle or job scope, so ai auto repair estimate accuracy is a hearing problem first. A wrong axle can double a brake quote. A wrong year can leave the price right and the part wrong. Measure accuracy per slot.
Can an AI receptionist give repair quotes?
An AI receptionist for auto repair can give repair quotes for well-defined jobs like brake pads, oil changes and tires. It should say the price is an estimate pending inspection. For noises, leaks or warning lights, it should offer a diagnostic appointment instead. Each shop's labor rate and quote policy must drive the number, not a global default.
Is a phone estimate binding for auto repair?
A phone estimate is usually not the legal estimate. States such as California, Florida and Michigan require written estimates and set rules for consent before charges exceed them. The phone quote still sets the caller's expectation. Agents should avoid words like "guaranteed" or "firm." This is not legal advice; check each state's rules with counsel.
How do you calculate a brake job estimate?
A brake job estimate is labor-guide hours for the specific vehicle and axle, times the shop's labor rate. Add the parts cost times the shop's parts markup, then shop fees. Pads only and pads and rotors are different operations. Front brakes and rear brakes differ too, especially on cars with an electronic parking brake.
How to test AI quote accuracy before launch?
To test AI quote accuracy, script calls with known vehicle slots and compute the expected range from the labor guide and shop config. Run each scenario under road noise, speakerphone and fast-talker profiles, three times each. Grade every captured slot, the tolerance band, the wording and the record the agent wrote. Block releases on new slot mismatches.
Does California require a written estimate for car repair?
California requires a written estimate under Business and Professions Code 9884.9. The dealer must give a written estimated price for labor and parts for the specific job. No charge may exceed it without the customer's consent. Oral consent must be documented with date, time, name and phone number. A teardown for diagnosis needs its own estimate.
Should the AI quote a diagnostic fee?
The AI should quote a diagnostic fee whenever the cause is unknown, such as a noise or a warning light. It should state the fee from the shop's config and explain the shop's policy on applying it. Pricing a repair for an undiagnosed symptom is a guess. Track diagnostic fee disclosure as a metric on every relevant call.
How to compare AI quotes to repair orders?
To compare AI quotes to repair orders, join each quoted call to the repair order by phone number, vehicle and date. Compare the quoted operation and vehicle first, then price. Use only the quoted operation's line items, since approved add-ons are not quote errors. Alert when operation match or vehicle match drops for any shop.
The bottom line
AI repair quotes fail on hearing, not on math: one wrong year, engine or axle slot can double the price or quietly order the wrong part. Grade every slot against a labor-guide oracle before release, and compare every production quote with its final repair order after.
Related Articles

How to automate voice agent testing: synthetic callers vs manual QA
Learn how ai test automation replaces manual QA for voice agents. Compare synthetic callers vs human testers, with a 5-step framework to scale without hiring.
Read more
AI Agent Testing vs Voice Agent Testing: What General Tools Miss for Voice
AI agent testing measures text outputs. Voice agent testing measures behaviour through an acoustic pipeline. Five failure categories general tools miss.
Read more