AI for Used Car Sales: Price Each Car Against Local Listings

Coding Liquids tutorial cover featuring Sagnik Bhattacharya for AI for Used Car Sales: Price Each Car Against Local Listings.
Coding Liquids tutorial cover featuring Sagnik Bhattacharya for AI for Used Car Sales: Price Each Car Against Local Listings.

Paste eight to fifteen close comparable adverts into an AI assistant and have it turn them into a sheet, one row per car. Let the sheet, not the chat, calculate the mileage adjustment. Adjust for condition in dollars, set a floor, a range and an advertised price, then cross-check one valuation guide before the car goes live.

The assistant is good at the clerical part: reading messy advert text, putting it into columns and flagging cars that do not match yours. It is poor at knowing what a car is worth, because it has no live market data and will give a confident figure anyway. So you supply the adverts, the sheet does the sums and you make the call. One caveat shapes every step below: adverts show asking prices, and cars rarely sell at them.

Follow me on Instagram@sagnikteaches

Describe the car on one card, then fix the rules for a comparable

Before collecting anything, write the car down the way a buyer would search for it. Fill the card in standing at the car, not from a decoder or an old advert. Every number that follows uses the car below, and all figures are illustrative.

Connect on LinkedInSagnik Bhattacharya
FieldEntry for this car
Model, generation, yearCompact hatchback, 2020 model year, same generation as the adverts you will compare
Trim and engineMid trim, 1.5 petrol
GearboxAutomatic
Mileage62,400
OwnersTwo
Service historyStamps for the first two services only
KeysOne
TyresFront pair about 3 mm of tread, rears fine
Marks6 cm scuff on the rear bumper

What the card leaves out matters as much as what it holds: what you paid and what you have spent on the car. Those stay in your own sheet, for reasons covered further down.

Subscribe on YouTube@sagnikteaches

Next, decide what counts as a comparable, in writing, before you see a single advert. Otherwise you will let in the ones that flatter your price. These are the rules I would start with. Change the thresholds to suit your stock.

  1. Same model generation, and a model year within one year of yours.
  2. Same engine and gearbox. An automatic and a manual of the same car can sit hundreds of dollars apart, so never mix them.
  3. Same trim. One step up or down is allowed only if you flag it and adjust for it.
  4. Mileage within about a third of yours: 41,600 to 83,200 for this car.
  5. Seen in the last 14 days. A comparable is a snapshot of today's market, and the market moves.
  6. A real price on the advert, not "call for price".
  7. Not an advert that has sat unsold for 90 days or more after repeated price cuts. It shows what buyers refuse to pay, not what they pay.
  8. Same repair history: skip cars with disclosed accident damage unless yours has some too.
  9. Seller type recorded on every row, dealer or private, because you will compare the two later.

Choose the sites and the distance from where your own buyers come. Look at where your last twenty buyers travelled from and use that radius, rather than whatever a listing site sets by default.

Collect adverts by hand, and keep your costs out of the chat

Open the two or three sites your buyers use and copy the full text of each close match into one document, with the link above it and the date you saw it. Copy the description, not a summary. The details that move a price, such as "one key", "price reduced" or "serviced regularly", sit in the small print. Twelve to fifteen adverts is plenty for one car.

Resist building a scraper. The terms of many listing sites forbid automated collection, and they differ from site to site. Reading a dozen adverts yourself is the safe version of the same job. If you ever want data at scale, read each site's terms first and take advice.

Some assistants can browse for you. If you try it, make the assistant return every advert's link and its price exactly as written, then open three at random and check them. An assistant that cannot open a page may fill the gap with a plausible number, and you would not know which row it came from.

Keep the document. It is your record of what the market looked like on the day you priced the car, which helps when a buyer asks why a price moved.

Decide now what stays out of the chat. Adverts are public, so pasting them is fine. Your purchase price, reconditioning costs and minimum margin are not, and neither is anything about the person who traded the car in. The sheet does the arithmetic on costs, so the assistant never needs them. If you use a personal account, check the model-training switch in its privacy settings, or use a business plan, which the main providers do not train on by default. The fuller list of customer data never to paste in is worth printing for the office.

Turning pasted adverts into rows: a prompt and what comes back

One prompt turns the pile into a table. The trick is to keep the advert's own words beside the cleaned-up number, so a wrong parse is visible. Here it is with four of the fourteen adverts pasted in.

You are helping a used-car dealer build a pricing sheet. Below are adverts I copied by hand. Return ONE table row per advert with these columns:
ref | seller (dealer/private/unknown) | trim | gearbox | mileage_as_written | mileage_number | asking_price | days_listed | service_history_as_written | flags

Rules:
1. Use only what the advert says. If something is missing, write UNKNOWN. Never guess a trim, an owner count or a service history.
2. If mileage is written as "56k", set mileage_number to 56000 and add "approx" to flags.
3. Compare each advert with MY CAR. In flags, list every difference in generation, trim, engine or gearbox, and any mileage more than one third above or below mine. Write MATCH if there are none.
4. Do not estimate values, average anything or suggest a price. Those happen in my spreadsheet.

MY CAR: 2020 compact hatchback, mid trim, 1.5 petrol, automatic, 62,400 miles.

ADVERTS
[3] 2020 hatchback 1.5 petrol auto, mid trim. 52,300 miles, 2 owners, full service history, 12-month warranty. New rear tyres. $15,295. Dealer. Listed 9 days.
[5] Family hatch 1.5 auto 2020, 56k miles, 1 careful owner, serviced regularly. $14,550. Private seller. Listed 17 days.
[4] 2020 hatchback 1.5 petrol auto, TOP trim, panoramic roof, leather. 49,000 miles, full service history. $17,450. Dealer. Listed 3 days.
[7] 2020 hatchback 1.5 petrol manual, mid trim. 60,500 miles. $12,990. Dealer. Listed 14 days.

A typical reply looks like this (illustrative):

RefSellerTrimGearboxMiles as written, then numberAskingFlags
3dealermidauto52,300 miles, 52300$15,295MATCH
5privateUNKNOWNauto56k miles, 56000$14,550approx; trim UNKNOWN
4dealertopauto49,000 miles, 49000$17,450trim differs (top, not mid)
7dealermidmanual60,500 miles, 60500$12,990gearbox differs (manual, not automatic)

Four things to fix or check by hand before the table goes anywhere near the sheet:

  • Ref 5 has no trim. Open the advert, compare the wheels and equipment list with a mid-trim car, and fill it in. If you cannot tell, drop the row rather than guess.
  • Ref 5's history is a claim, not a fact. "Serviced regularly" is the seller's word. If the assistant had written "full service history" it would have upgraded a claim into a fact, so scan that column for anything firmer than the advert.
  • Spot-check three rows against the source. Pick them yourself. An assistant checking its own work tends to agree with it.
  • Ignore anything extra. If it volunteers an average or a "suggested price" despite rule 4, discard that part. Those numbers come from the sheet.

Fourteen adverts in, ten out: cleaning the set

The flags tell you where to look. You decide what goes. Four of the fourteen adverts break the rules from the first section.

RefMilesAskingSellerDecision and reason
449,000$17,450DealerDrop: top trim, a different car
760,500$12,990DealerDrop: manual gearbox
964,000$15,495DealerDrop: listed 94 days, cut twice, still unsold
1163,900$11,250DealerDrop: repaired accident damage, disclosed in the advert; yours has none

Is it worth the fuss over four adverts out of fourteen? The next section introduces a number called R², between 0 and 1, that says how much of the price spread mileage alone explains. On the ten clean adverts it is 0.98. Put any one of the four dropped adverts back on its own and it falls to 0.80 (top trim), 0.85 (manual), 0.81 (the stale one) or 0.63 (the repaired one). Put all four back and it is 0.52.

Here are the ten that stay, with the price each would have if it sat exactly on the mileage line worked out in the next section.

RefSellerMilesAskingOn the lineGap
1Dealer41,800$15,950$15,947+$3
2Private47,500$15,450$15,446+$4
3Dealer52,300$15,295$15,024+$271
5Private56,000$14,550$14,699-$149
6Dealer58,600$14,395$14,470-$75
8Private61,200$14,095$14,241-$146
10Dealer66,400$13,850$13,784+$66
12Private70,100$13,250$13,459-$209
13Dealer74,900$13,295$13,037+$258
14Dealer81,300$12,450$12,474-$24

Look at the gap column. Dealer rows sit above the line more often than private ones, because dealer prices usually carry preparation and often a warranty. You are selling as a dealer, so the dealer rows are your closest comparison.

Mileage: formulas the sheet runs, not the chat

Mileage is the biggest adjustment and the easiest to get wrong by eye. Rather than guess what each 1,000 miles is worth, let the ten rows tell you. A spreadsheet can fit the straight line that best matches price against mileage, and the formulas below do it with no statistics on your part. Put seller type in column B, mileage in column C and asking price in column D, ten rows from row 2 to row 11.

What you wantFormulaResult here
Dollars lost per mile=SLOPE(D2:D11,C2:C11)-0.0879, about $88 per 1,000 miles
Where the line starts=INTERCEPT(D2:D11,C2:C11)19,623
How much mileage explains=RSQ(D2:D11,C2:C11)0.98
Price on the line at 62,400 miles=FORECAST(62400,D2:D11,C2:C11)$14,136
Gap to the line, in column G=D2-FORECAST(C2,$D$2:$D$11,$C$2:$C$11)the Gap column above
Average gap of dealer rows=AVERAGEIFS(G2:G11,B2:B11,"Dealer")+$83
Typical miss=SUMPRODUCT(ABS(G2:G11))/COUNT(G2:G11)$120

Read the results like this. In this set, every extra 1,000 miles takes about $88 off the asking price. A 62,400-mile car that behaves like the average comparable should ask $14,136. An R² of 0.98 says mileage explains nearly all of the price spread, so the set is clean. The typical miss of $120 is how far an individual advert strays from the line, which makes it your honest margin of error. Arguing over $50 is noise.

Dealer rows average $83 above the line, so a dealer-to-dealer figure is $14,136 plus $83, or $14,219. Fit a line to the six dealer rows alone and you also get $14,219. Here the two routes agree to the dollar. With real adverts expect them to differ by tens of dollars, and if they differ by hundreds, the set is telling you something.

The assistant's job is to write these formulas for your own column letters and explain each in one line. Ask it for formulas, never for the answer: assistants can slip on arithmetic across ten numbers, and a spreadsheet does not. Then check one row by hand. Intercept plus slope times mileage should reproduce the "on the line" figure for that row. If it does not, the usual causes are a range that includes the header row or a price stored as text.

One naming note. Microsoft's own page says Excel 2016 replaced FORECAST with FORECAST.LINEAR and keeps the old name for backward compatibility, while Google Sheets' function list carries both names. FORECAST works in either program, which is why it appears above; switch to FORECAST.LINEAR if you prefer the newer name. Also remember the line is a local average, so do not use it for a car far outside the mileage range of your comparables.

Condition in dollars: repair it or discount it, never both

The comparable adverts mostly describe cars in decent order with full paperwork. Your car has differences, and each one gets a dollar figure, not an adjective. One rule keeps the sum honest: a repair you will do before sale is a cost, and a flaw you will leave and disclose is a price adjustment. Counting one problem in both places charges the car twice.

ItemTreatmentAmount
Stamps for the first two services only; most comparables show full historyPrice adjustment, from your own experience of what buyers knock off-$250
One key; most comparables list twoPrice adjustment, set at a replacement key quote from your supplier-$200
6 cm rear bumper scuff, left alone and disclosed in the advertPrice adjustment, set at the repair quote of $160-$160
Front tyres at about 3 mmCost, not price: replace before sale, $280 added to your cost basis$0
Total price adjustments-$610

The amounts come from your quotes and your sales history, never from the assistant. What it can do is read your inspection notes and sort every item into two lists, "fix before sale" and "leave and disclose", with the amount cells blank for you to fill. It is also a decent second pair of eyes: ask it to point out anything in the notes that appears in neither list. For wording the disclosed items honestly in the advert, see the companion tutorial on honest listings and photo clean-up.

From adjusted price to floor, range and advertised price

Now the numbers combine. The market level for a dealer-sold car like this is the line price plus the dealer gap. Subtract the condition adjustments and you have the level at which comparable cars are asking. The typical miss gives the range around it.

LineWorkingAmount
Market level, dealer-sold$14,136 on the line plus $83 dealer gap$14,219
After condition adjustments$14,219 minus $610$13,609
RangeTypical miss of $120 either side$13,490 to $13,730
Cost basis$11,350 purchase, $560 reconditioning (tyres $280, service $190, valet $90), $140 auction and transport fees$12,050
FloorCost basis plus a $900 minimum margin$12,950
Advertised priceMiddle of the range, set at a price point$13,595
Room to negotiate$13,595 minus the $12,950 floor$645

The floor is the lowest price you would accept, and it comes from your costs and your needs, not from the market. The range comes from the market. When the two meet, you can choose. If the whole range sits above the floor, advertise inside the range. If the range sits below the floor, the problem is the purchase price, not the advert: wholesale the car, or accept a smaller margin on purpose.

Your own history sets the concession. Say your last twenty sales closed on average 2.5% under the advertised price. Then $13,595 expects to close near $13,255, a gross of about $1,205 on a $12,050 cost, comfortably above the $900 minimum. If you sell at fixed prices, there is no concession to plan for: advertise at the middle of the range, check that it clears the floor, and say "fixed price" in the advert.

A quick sum decides when a cut is worth making. Suppose a car costs you about $14 a day to hold, counting finance interest, insurance and lot space. A $200 cut then pays for itself on holding costs alone only if it brings the sale forward by 15 days or more ($200 divided by $14 is 14.3). A $60 cut needs under five days. Work out your own daily figure once and keep it on the sheet.

Cross-check one valuation guide before listing

The comparable adverts are your primary evidence. A valuation guide is the second opinion that catches a mistake in the first. Use whichever one you already have access to: a trade guide from a data provider, an auction house's price report, or a consumer-facing tool. Kelley Blue Book, for example, offers estimated values and a "Fair Purchase Price" on its consumer pages, while Black Book calls itself an automotive data and insights provider with vehicle values among its tools, and Cap HPI describes its business as vehicle data, valuations and checks. Most markets have an equivalent, and your finance partner or auction house can tell you which one they use.

Compare like with like. Your comparables are retail asking prices, so look at the guide's retail figure, not its trade or auction one, for the same spec and mileage. Then compare.

CaseGuide's retail figureYour market levelYours against the guideAction
A$13,800$13,6091.4% belowWithin tolerance: proceed
B$12,900$13,6095.5% aboveInvestigate before the car goes live

My starting tolerance is 5%, a rule of thumb rather than a standard. If the guide reports sold prices, expect your asking-based figure to sit a little above it, and learn your usual gap. Tighten or loosen the tolerance after you have compared the guide with your last twenty sales. In Case B, work down this list before you cut a price or doubt the comparables:

  1. Is the guide's trim, option pack and gearbox exactly yours?
  2. What date is the guide's valuation, and has the market moved since?
  3. Did you enter the mileage correctly in the guide?
  4. Are you comparing retail with retail?
  5. Are two or three of your comparables priced hopefully, a few hundred above where cars are really moving?

Often the cause turns up in the first two. When it does not, price towards the lower figure until a sale or two proves the higher one.

Five ways the numbers go wrong quietly

A figure from nowhere

Ask an assistant what a 2020 compact hatchback with 62,400 miles is worth, without giving it adverts, and it will answer with a confident number and no source. That is pattern memory, not this month's market. Use it for nothing, or at most a glance at the end to see whether you are wildly off.

A mixed set that still looks right

With all fourteen adverts in, the line gives $14,070 for our car, only $66 from the clean answer, so nothing looks wrong. But at 80,000 miles the mixed set says $12,193 against $12,588 clean, and at 45,000 miles it says $15,926 against $15,666. A messy set prices the car you tested correctly and misprices the cars at the edges. The R² of 0.52 is what gives it away.

One mistyped mileage

Take the 61,200 in row 8 and imagine a dropped digit in the parse turns it into 6,100. The slope flattens from about $88 to about $27 per 1,000 miles and R² collapses to 0.28. The line still prices our 62,400-mile car at $14,069, close to right, but a car at 80,000 miles would come out at $13,587 instead of $12,588, nearly $1,000 too high. This is why the prompt keeps the mileage as written beside the number, and why you check R² every time.

Asking prices read as sale prices

Everything above is built on what sellers hope to get. Your own concession history is the bridge to what cars fetch. Without it, a price set at the middle of the market range is really the start of a negotiation, and it tells you little about where the deal will close.

A market too thin to trust

For a rare model, a heavily modified car or an unusual specification, you may find fewer than six true comparables. Do not stretch the rules to reach ten. Say plainly that the market is thin, price from the guide plus your own judgement, and use the sheet only to see how few comparables there are and how wide their spread is.

Repricing a ten-car lot: milestones, not daily fiddling

A small lot of ten cars does not need a daily routine. Each car passes through the same milestones, and in any given week two or three of them are at one. A full pricing at purchase, with comparables copied by hand and the sheet built, is the slow job. Plan on about 40 minutes for the first few cars, and time yourself, because the figure depends on how fast you find adverts. Refreshing the same sheet later is quicker because the prompt, formulas and layout already exist.

Day on the lotWhat you checkWhat you may do
0Band complete, guide cross-checked, listing liveLog the advertised price, floor and the date of the comparables
7Photos, headline, description, views and enquiries where the site shows themFix the listing first. No price change yet
14Refresh the comparables and rerun the sheetIf you sit above the top of the new range, move to the middle
21Compare with the three closest comparables by handCut by an amount the holding-cost sum supports, never below the floor
30Decision dayWholesale it, relist with new photos, or hold at the floor with a written reason

Keep one line in the sheet per price change: date, old price, new price, reason. When you later ask the assistant to summarise a month of changes, that log is what it reads, and it makes patterns visible. Perhaps cars priced at the top of the range need a cut at day 14 every time, which is an argument for starting lower. For the surrounding lot routines, where a small independent lot should start with AI sets the pricing job in context, and trade-in enquiries before the appraisal covers the buying side, where the same sheet helps you decide what to pay.

What to compare once ten cars have sold

Judge it against your own history, not against a headline figure. Pull the last ten cars sold before you started and the first ten after, and compare these:

  • Days to sell. The simplest signal. Do not expect a dramatic change from a few weeks of cars.
  • Cuts per car. Fewer cuts suggest better starting prices, but only if days to sell has not slipped.
  • Gross against floor. No sale should close below the floor without a recorded reason.
  • Advertised against sold. The gap should sit near your concession figure. A much wider gap says the starting prices were too high, and every sale refines the figure.
  • Guide disagreements. How many cars triggered the 5% check, and what the cause turned out to be.

Ten cars is a small sample, and one unusual sale can distort it. The method will not beat an experienced buyer's instinct on an odd car. It earns its place on the ordinary stock that makes up most of a lot, by making the reasoning visible so a second person can check it. To keep the market view fresh between pricings, tracking competitors' prices and offers with AI covers the habit, and cleaning messy data helps when pasted adverts arrive in a worse state than these.

Questions dealers ask about AI used-car pricing

Can I just ask ChatGPT what a used car is worth?

Not on its own. An assistant without live data answers from patterns in its training, so the figure reflects a typical car in a typical month rather than this week's adverts. Give it the adverts you collected and ask it to organise them, run the sums in a spreadsheet and make the pricing decision yourself.

How many comparable adverts do I need?

Eight to fifteen close matches is a workable range. With fewer than six, one odd advert can swing the result. With more than fifteen you have usually let in cars that are not truly comparable. Match generation, engine, gearbox and trim first, then keep mileage within about a third of yours.

Should I price from asking prices or sold prices?

Most dealers can only see asking prices, and cars rarely sell at them. Track your own gap: compare your last twenty advertised prices with what each car actually sold for, and use that average concession in your price band. If an auction report or trade guide shows sold prices, use it as a cross-check.

Can I scrape listing sites for comparables?

Check each site's terms first, because many forbid automated collection and the rules differ site to site. Copying a dozen adverts by hand for your own pricing is a different thing and is quick enough for a small lot. For anything at scale, read the terms or ask the site about data access, and take legal advice if unsure.

Can the same sheet help me value a part-exchange?

Yes, worked backwards. The market level and range tell you roughly what the car should retail for once it is ready. Subtract your reconditioning estimate, the holding cost for your usual days to sell and your minimum margin, and you have the most you can sensibly offer. Quote a range until the car has been inspected, and check the guide's trade figure as well as its retail one.

Further reads

Sources: Microsoft Support function reference (SLOPE, FORECAST.LINEAR, RSQ); Google Docs Editors function list (SLOPE, INTERCEPT, FORECAST, RSQ); Kelley Blue Book, Black Book and Cap HPI product pages.

Want a pricing routine your whole lot can follow?

On a 1:1 call we'll look at how you price cars today, build the sheet and checks around your own stock and sales history, and decide which steps are worth automating.

Book a 1:1 call with me