Ask three systems in a dealership how many kilometres a car has driven and you can get three answers. The DMS says one number. The service record says another. The advert you published last week says a third. None of them is lying. They were updated at different times, from different inputs, by different people.

That gap is the core problem of vehicle data management. Not a shortage of data - there is too much of it - but a shortage of agreement. A single source of truth is the discipline of turning many partial, conflicting records into one record you can actually trust and act on.

This is how to build one.

What "single source of truth" really means

A single source of truth is not one giant database where everyone dumps everything. It is one canonical record per vehicle that every system reads from and that reconciles the inputs behind the scenes.

The canonical record for a car answers a fixed set of questions with a single, current value each:

  • Identity - VIN, registration, make, model, model year, variant
  • Specification - engine, gearbox, drivetrain, fuel type, fitted options
  • History - mileage over time, ownership changes, service events, damage, import status
  • Commercial - purchase cost, asking price, days in stock, valuation

The point is not that the data lives in one place physically. The point is that there is one authoritative answer per field, and everyone knows where it is. Your advert, your valuation model, and your salesperson on the floor all read the same mileage.

Why vehicle data fragments in the first place

Before you can consolidate, it helps to know why the mess exists. Vehicle data fragments for structural reasons, not careless ones:

  • Different sources own different fields. The manufacturer knows the build spec. The registry knows ownership and technical approval. The workshop knows service history. The market knows price. No single source has the whole picture.
  • Sources update on different clocks. A registry might refresh monthly. A market feed refreshes hourly. Your own DMS updates the moment a mechanic closes a job.
  • Sources use different formats and vocabularies. One calls it "diesel," another "compression ignition," a third uses a code. One stores mileage in kilometres, another in miles.
  • The same car gets re-entered. A trade-in is typed in by hand, then matched (or not) to an existing record, then matched again when it appears on a marketplace.

None of this disappears. A single source of truth does not eliminate the sources - it sits above them and resolves them.

A practical model for consolidation

Building the canonical record is a pipeline. Four stages.

1. Ingest every source as-is

Pull each source in without flattening or "cleaning" it first. Keep the raw value, the source name, and the timestamp. This sounds obvious, but the common mistake is to overwrite - to let the newest import silently replace whatever was there. Once you do that, you have destroyed the evidence you will need later to resolve a conflict.

Treat ingestion as append, not overwrite. You are collecting claims, not yet deciding which one wins.

2. Resolve to a single vehicle identity

Every incoming claim has to attach to the right car. The VIN is your strongest join key, but it is not always present, not always typed correctly, and not always the only identifier in play. Registration numbers change across borders. Records get duplicated.

So entity resolution is its own step: match incoming records to existing vehicles using VIN first, registration second, and a confidence-scored fallback (make + model + first-registration date + last-known mileage) where identifiers are missing. Records you cannot confidently match should land in a review queue - not be force-merged into the nearest lookalike.

3. Normalize to a canonical schema

Now you map every source's vocabulary onto one shared schema. Fuel types collapse to one controlled list. Units convert to one standard. Free-text trim names map to canonical variants. Dates land in one format.

The goal is that "the same thing" always looks the same, regardless of which source it came from. This is what makes the next step - reconciliation - possible at all. You cannot compare two mileage values if one is in miles and one is in kilometres.

4. Reconcile conflicting claims into one canonical value

This is the heart of it. When two sources disagree, something has to decide the winner. Don't make that decision implicit ("last write wins"). Make it an explicit, written rule per field.

Conflict resolution: rules that hold up

A good reconciliation policy is specific to the field, because different fields have different "best sources."

  • Mileage should generally trust the most recent reading from a trusted source, and it should respect monotonicity: mileage almost never goes down. A new claim lower than the last recorded reading is a red flag, not a value to accept silently.
  • Specification should trust the manufacturer build record over a marketplace advert, because adverts are written by humans optimizing for clicks.
  • Ownership and technical status should trust the official registry over self-reported data.
  • Price has no single truth - it is a range - so the canonical "value" field should carry an estimate with a confidence interval, not a false-precision single number.

Three principles make these rules durable:

  1. Source priority, not recency, by default. Newer is not always better. A fresh advert claiming a spec the factory never built should lose to the factory.
  2. Plausibility checks before acceptance. Mileage that drops, a fuel type that does not exist for that engine, a model year that contradicts the VIN - these get flagged, not absorbed.
  3. A human queue for genuine ties. When two trusted sources disagree and neither rule resolves it, escalate. Do not let the system invent a confident answer.

Why field-level lineage is non-negotiable

Here is the part teams underestimate. It is not enough to store the winning value. You have to store why it won - which source it came from, when, and what it beat.

That is field-level lineage: every field in the canonical record carries its own provenance. Mileage came from the workshop system, timestamp included. Spec came from the manufacturer record. Price estimate came from the model run on a given date.

Lineage pays off in three concrete moments:

  • When a number is questioned. A customer or an auditor asks where a figure came from. You can answer in seconds instead of reverse-engineering a guess.
  • When sources disagree. Instead of a silent overwrite, you see both claims, both timestamps, both sources - and the rule that chose between them.
  • When a source goes bad. If a feed starts publishing garbage, lineage lets you find every field it touched and reverse it, instead of wondering what got contaminated.

Without lineage, your single source of truth is just a confident-looking guess. With it, it is auditable.

What this unlocks

Once you have one canonical record per vehicle, reconciled and traceable, the things built on top finally become trustworthy:

  • Valuation improves because it runs on agreed inputs, not whichever number happened to be loaded last.
  • Inventory intelligence - days-to-sell, margin-at-risk, ageing stock - becomes reliable because every car is measured the same way.
  • Reporting stops contradicting itself, because every dashboard reads the same field.

The single source of truth is not a project you finish. It is infrastructure you maintain. But it is the difference between data you have and data you can act on.


This is exactly the layer VehIQ builds: a canonical vehicle record that consolidates fragmented European sources, reconciles conflicts with explicit rules, and carries field-level lineage on every value. It runs alongside your existing DMS - augmenting it, not replacing it - so the single source of truth is something you adopt, not a system you rip out and rebuild.