The open car database: every make and model, free to download
15,068 models across 934 makes, from official vehicle data in 18 countries. CSV, JSON, Parquet or SQLite, free under CC-BY 4.0.
If you came here looking for a car database you can actually download, put in your app and not worry about, this is it: every make and model we know about, in one file, free.
It's 15,068 models across 934 makes, covering cars, motorcycles, mopeds, vans, trucks and buses, reconciled from official government vehicle data in 18 countries. It's licensed CC-BY 4.0, so you can use it commercially as long as you credit it.
One honest thing first, because "car database" means two very different things: this is the make and model database, the list of what vehicles exist. It does not have engine specs, trims, prices or photos per year. If that's what you need, the section on what it doesn't have (further down) tells you where to go instead. If you need a clean, complete list of makes and models for a dropdown, a lookup table or a data pipeline, read on.
Download it
The links below are the release this site serves, 2026.10.3 (published on October 10, 2026), so the counts on this page match the file you download. Newer releases appear on GitHub first. Pick the format you like:
| Format | File | Size | Good for |
|---|---|---|---|
| CSV | vehicles.csv | 1.2 MB | Excel, Google Sheets, any database import |
| JSON | vehicles.json | 7.5 MB | Apps, the full nested record, with each country's rank |
| JSON (minified) | vehicles.min.json | 0.8 MB | Shipping to a browser |
| Parquet | vehicles.parquet | 0.3 MB | pandas, Polars, DuckDB, Spark |
| SQLite | catalog.sqlite | 9.8 MB | SQL queries, per-country availability and popularity tables |
Or from the command line:
curl -LO https://cdn.jsdelivr.net/gh/vehiclesdb/vehiclesdb@v2026.10.3/dist/vehicles.csv
Every file is also attached to the GitHub release, together with a manifest.json (version, counts per kind, sources) and ATTRIBUTION.md. No account, no form, no email.
Want it in Excel? Open vehicles.csv directly. Excel and Google Sheets both read it as is; pipe-separated columns like countries (de|gb|nl) split cleanly with "Text to columns" on |.
What's inside: the schema
One row per model. The CSV has these columns:
| Column | What it holds | Example |
|---|---|---|
kind |
One of car, motorcycle, moped, van, truck, bus |
car |
make_slug |
Stable id of the make | volkswagen |
make_name |
Display name | Volkswagen |
model_slug |
Stable id of the model within its make | golf |
model_name |
Display name | Golf |
body_types |
Body styles seen for the model, pipe-separated | hatchback|wagon |
countries |
Countries with official evidence of the model, ISO codes | ca|de|es|fi|gb|…|us |
regions |
Continents derived from the countries | as|eu|na|oc |
global_popularity_decile |
1 (top 10% most registered) to 10 | 2 |
mass_popularity_decile |
1 to 10 within its kind, ranked by registrations summed across the registers: the "how many exist" decile | 1 |
aliases |
Other names the same model goes by | Rabbit |
former_ids |
Old ids that now point here | car/volkswagen/vw-golf|… |
The canonical id of a model is kind/make_slug/model_slug, for example car/volkswagen/golf. Ids are stable: when a model is renamed or merged, the old id moves into former_ids instead of disappearing, so a foreign key you stored months ago still resolves.
The JSON carries the same records nested by make, plus each model's rank in every register that ranks it (country_ranks, e.g. {"gb": 2, "de": 1} for the Golf), and the SQLite file splits them into five tables: makes, models, availability (which source saw which model in which country), popularity (rank and decile per country) and meta.
Sample rows
Ten real rows from vehicles.csv, a few from each kind:
| kind | make | model | body_types | countries | decile | aliases |
|---|---|---|---|---|---|---|
| car | Toyota | Corolla | hatchback, wagon | all 18 | 1 | カローラ, Corolla Touring Sports |
| car | Tesla | Model 3 | sedan | 17 of 18 | 1 | |
| car | Dacia | Sandero | hatchback | ch, de, es, fi, gb, ie, il, lu, nl, no, ua | 2 | Renault Sandero |
| car | Volkswagen | Golf | hatchback, wagon | 17 of 18 | 2 | Rabbit, Golf Variant |
| car | Škoda | 105 | sedan | ch, fi, gb, nl | 8 | |
| motorcycle | Yamaha | MT-07 | au, ch, es, fi, gb, il, lu, nl, nz, th, ua | 1 | ||
| motorcycle | Honda | CBR600RR | ch, fi, il, lu, nl, th, ua | 3 | ||
| moped | Piaggio | APE50 | ch, fi, gb, lu, nl, nz | 7 | ||
| van | Ford | Transit | au, ch, de, es, fi, gb, il, lu, nl, no | 1 | ||
| truck | Scania | 114 | fi, nl, no | 7 |
A few things worth noticing. The Golf's US alias, Rabbit, is in there. The Škoda 105, a 1970s and 80s Czech saloon, is still in the Finnish, British and Dutch registers (and the Swiss canton of Thurgau's), so it's in the database. And the Dacia Sandero lists "Renault Sandero" as an alias, because that's what it's called in some markets.
Counts by kind
| Kind | Models | Makes |
|---|---|---|
| Cars | 5,541 | 315 |
| Motorcycles | 6,033 | 266 |
| Mopeds | 1,399 | 315 |
| Vans | 739 | 130 |
| Trucks | 947 | 95 |
| Buses | 409 | 94 |
| Total | 15,068 | 934 |
A make can appear under several kinds (Honda makes cars, motorcycles, mopeds and vans), which is why the per-kind make counts add up to more than 934.
Use it as a car dataset in pandas
If you're here for a car dataset for a notebook, the Parquet file is the quickest way in:
import pandas as pd
url = "https://cdn.jsdelivr.net/gh/vehiclesdb/vehiclesdb@v2026.10.3/dist/vehicles.parquet"
cars = pd.read_parquet(url)
cars["kind"].value_counts()
# motorcycle 6033
# car 5541
# moped 1399
# ...
# Every car model registered in Germany
in_germany = cars[(cars["kind"] == "car") & cars["countries"].str.contains("de")]
Or with SQL, straight against the SQLite file:
-- The ten most popular car models in the Netherlands
SELECT m.name, m.make_id, p.rank
FROM popularity p
JOIN models m ON m.id = p.model_id AND m.kind = p.kind
WHERE p.kind = 'car' AND p.country = 'nl'
ORDER BY p.rank
LIMIT 10;
A fair warning for machine learning projects: this is an identity table. It has no prices, mileage, fuel consumption or images, which is what most "car dataset" projects on Kaggle are about (price prediction, image classification). Where it shines is as the join table: normalise the make and model columns of a messy dataset to these ids, and suddenly two datasets that spelled "VW Golf" and "VOLKSWAGEN GOLF" differently line up.
Motorcycles, trucks and buses too
Most car databases stop at cars. This one has the same structure for every kind of vehicle the registers record. That makes it a motorcycle database (6,033 models) and a truck database (947 models) as well, with the same ids, the same columns and the same licence. Filter on kind and you're done.
Coverage is honest about where it comes from: motorcycle evidence comes from the registers that record motorcycles by model (Spain, Finland, the UK, Luxembourg, the Netherlands, New Zealand, Thailand and Ukraine), so a motorcycle sold only in the US may be missing.
What it doesn't have, and where to get it
So you don't waste an afternoon finding out:
- Engine specs, trims and dimensions per model year. Spec encyclopedias like auto-data.net and commercial feeds like CarAPI sell those.
- Prices and valuations. That's the business of KBB, Edmunds and the market-data vendors.
- Used-car listings (the "used car dataset" people train price models on). Kaggle has several, scraped from classifieds.
- VIN decoding. For US vehicles, the free NHTSA vPIC API decodes VINs.
What the paid side of VehiclesDB adds on top of this file is depth on the same ids: production runs, variants and reference links per model through the API, plus a resolver for messy strings.
Where the data comes from
Every model is built from official government data: vehicle registration data from the Netherlands (RDW), the United Kingdom (DfT), Spain (DGT), Germany (KBA), Finland (Traficom), New Zealand (NZTA), Luxembourg (SNCA), Ireland (CSO), Ukraine (the Ministry of Internal Affairs), Malaysia (JPJ), Thailand (DLT) and Argentina (DNRPA), plus the official fuel economy listings of the United States and Canada. A model only ships when at least two independent sources agree it exists, or when one source shows a fleet count no typo could produce. We publish the measured error rate instead of asking you to trust us.
Licence: CC-BY 4.0 and what attribution looks like
You can use the data for anything, including commercial products, as long as you give visible credit with a link. The simplest version:
<a href="https://vehiclesdb.com">Vehicle data by VehiclesDB</a>
The attribution page has ready-made snippets for apps, READMEs and academic citations (there's a Zenodo DOI). If you'd rather not show a credit, a paid plan from Scale up includes the waiver; the register notices in ATTRIBUTION.md apply either way.
Versions and updates
The dataset is versioned by date (YYYY.MM.PATCH) and rebuilt from the registers on a monthly schedule. New releases appear on GitHub; the version you're using is in manifest.json and in every API response, so you always know which snapshot an answer came from. Ids don't break between versions; that's what former_ids is for.
When the file isn't enough
Three things people usually need next:
- Your own data is messy. If you have a column of free-text vehicle names ("vw golf", "MERCEDES-BENZ | 300 TDT"), the resolve API maps each one to an id in this file, with a confidence and an audit trail. Every account gets 100 free credits, no card.
- You need it in a form. The make and model dropdown is this data behind one script tag, and it costs 0 credits.
- You want to browse first. Everything in the file is on the site, from the list of makes to every model page.