// Attribution ·
Attribution doesn't fail at the ad. It fails at the stock number.
We checked 313 units in our own pipeline for a usable vehicle ID. Not one carried a VIN, and half sat under a placeholder — that is where attribution dies.
Daniel Melo · 8 min read
We audited every unit that has moved through our photo pipeline — 2,231 images, 313 cars, 13 lots, across 53 days — and asked the data one question: can we tell which physical car an image belongs to?
Across 305 distinct vehicle labels, zero were a VIN. Zero started with a model year. Forty-four were placeholder text like "test" or "exteriors." And 1,133 images — 50.8% of everything we processed — sat under the default label the upload form pre-fills.
That isn't a photography problem. It's the same gap that ends every attribution conversation at an independent lot in a shrug.
Attribution is a join, not a report
When a dealer says "I can't tell what's working," he usually thinks he has a reporting problem. He wants a better dashboard. What he actually has is a missing key.
Attribution is one operation: take a sale and walk it backwards to the first paid touch. To walk backwards you need the same identifier present at both ends — on the deal and on the click. Every tool in the stack stores something about the car. Almost none of them store the same thing.
| Where the car shows up | What that system stores | What it can join on |
|---|---|---|
| Facebook lead form | Name, phone, ad ID | Nothing about the vehicle |
| Listing-site lead | VDP URL, stock number | Stock number |
| Website inquiry | Page URL | The URL slug, if it has one |
| Phone call | Caller ID, tracking number | Source, not vehicle |
| Photo folder | "Car 1" | Nothing |
| DMS deal jacket | VIN, stock number | VIN |
Read that column on the right. The deal jacket knows the VIN. The ad knows the ad. Between them sits a shopper who looked at one specific truck, and no field anywhere records which truck it was.
So the report gets built on the only key that survives the trip — the source — and the answer comes back as "Facebook got 40 leads." Forty leads on what? If eleven of them were on the same aging Silverado, that's not a channel result, that's a pricing result wearing a channel's clothes.
The label is the cheapest thing you'll ever standardize
The finding that surprised us wasn't the missing VINs. It was the reuse.
Fifty-one labels appeared in more than one batch, covering 1,554 of 2,231
images — 69.7%. Nine labels showed up at more than one lot entirely. Six pairs
differed only by capitalization: cayenne and Cayenne are two rows in a
database and one car in the world.
A string that names more than one car is worse than no name at all, because it joins — it just joins wrong. You get a report, the report is confident, and it's describing a vehicle that doesn't exist.
None of this costs money to fix. A stock number is six characters, assigned once, at intake, by whoever writes the car up. The expensive part isn't creating it. It's that nobody enforces it downstream, so it exists in the DMS and nowhere a shopper or an ad ever touches.
What a per-unit view changes about the argument
Once the stock number rides along, the questions change shape. "Is Facebook working" becomes answerable at the only level where a used-car decision actually gets made — the car.
You stop asking which channel performs and start asking which units needed paid help to move, which ones sold on organic VDP traffic alone, and which ones ate three weeks of spend before anybody dropped the price. That's the same per-unit discipline behind what cost per car sold actually includes: a lot-level average hides the two cars that produced the month.
It also settles the Marketplace argument. A dealer told us he couldn't justify Marketplace because the leads aren't attributable. Half true — the platform hands you nothing. But if the listing carries the stock number and the response template asks which vehicle, you recover the join manually in about four seconds per lead. Unattributable isn't a property of the channel. It's a property of a workflow that never wrote the number down.
Worth a conversation? If you want the version of this built into your lot's actual stack rather than described in the abstract, book a call — that's the first thing we map.
Why the last-click debate is premature here
There's a real argument in advertising about attribution models — last click versus first touch versus some weighted middle. At a 40-unit independent lot that argument is a distraction, because it's an argument about how to divide credit among touches you're already recording.
You're not recording them. A shopper on a used car takes multiple passes across multiple sites before contacting anybody, and a typical independent stack logs maybe two of those with anything vehicle-specific attached. Refining the model before you have the key is polishing a window in a house with no walls.
Get the identifier flowing first. Give it ninety days. Then the modeling question becomes worth having, and you'll have enough joined rows to answer it with your own numbers instead of a vendor's benchmark.
The listing has to carry it too
One more place the chain breaks, and it's the one dealers control most directly: the VDP itself. If the stock number isn't visible on the page and in the URL, every inbound lead arrives stripped of context, and your team re-asks the shopper a question the website already knew.
That's connected to why a thin photo set caps conversion at 1% — the page is doing less work than it looks like it's doing. A VDP is both the sales asset and the measurement instrument. A page that can't identify itself can't be measured, and a page nobody can measure gets cut in the first budget review.
Same thing on the intake side. If a car takes five days to get merchandised, the clicks it eventually gets are attached to a week that already went by — which is the quiet cost in cars waiting on Thursday. The measurement layer we run starts here, not at the dashboard.
What to do Monday morning
- Pick the key and write it down. Stock number, not VIN — six characters, easy to say on a phone call. It goes on the intake sheet before the car gets photographed, and the person who writes the car up owns it.
- Push it into the two places a shopper touches. The VDP URL and the photo folder name. Those are the two ends of the join you're missing; everything else can wait.
- Add one field to your lead log: "which vehicle." Required, not optional. Do it manually for thirty days before buying anything that promises to automate it — you'll learn which sources genuinely can't supply it, and that list is shorter than vendors imply.
None of the three takes a purchase order. All three take somebody deciding that the number matters, which is the actual bottleneck.
// Straight answers
Stock number, for anything a human touches — leads, folders, URLs, phone calls. Seventeen characters is too many to read over the phone without an error, and shoppers won't type it. Keep the VIN where it belongs, in the DMS and the syndication feed, and let the stock number be the field that travels.
That's channel reporting, and it's useful for roughly one decision: whether to keep paying a vendor. It can't tell you which units needed paid support, which is the decision that actually moves gross on a used lot. Source-level reporting also degrades the moment one channel drives walk-ins it never gets credit for.
More so, not less. At 40 units, five cars can swing the month, and a lot-level average is mathematically incapable of showing you which five. The effort also scales with volume, not down — starting at 40 units means the habit is in place before the volume makes it painful to retrofit.
Then the first reply asks, and the answer gets logged. You'll find the genuinely anonymous share is small — most shoppers contact you about a specific vehicle and will say so unprompted. The leads that stay unattributed after one exchange are their own useful category, usually price shoppers working several lots at once.
About ninety days, or one full turn of your inventory, whichever is longer. Any less and you're reading noise from a handful of deals. Resist building reports in week two — the temptation to conclude early is what produces the confident, wrong numbers this post is about.