Automotive Manufacturing Sales (EU)
Overview
A decade of European car sales at model, country, channel and month grain, built around the industry's hardest turn. Eight legacy European brands own the market in 2016: 112 models across eight vehicle classes, dealer networks, comfortable margins, a 2017 to 2018 peak. Then the decade takes it apart in the exact sequence the real industry lived: the 2020 collapse with its spring shutdown months, a half recovery through the 2021 chip shortage in which sellers stopped discounting and a few lines even pre-invoiced cars they could not ship, battery electric entrant brands arriving from 2021 at a rounding error and compounding month over month, a 2024 price war that cuts realised prices through rising discounts and list price actions, legacy volumes reaching their decade low in 2025 and 2026 at just over half the peak, and legacy balance sheets bending as electric transition capital spending outruns shrinking cash flow: revenue falls while net debt multiplies. Every aggregate reconciles exactly and the build re-verifies it: market share per country and month is computed from the sales lines, brand revenue equals the net revenue sum, and customer mix shares sum to exactly 100. Sales carry quantity, list price, discount, gross and net revenue by brand, model, class, powertrain, country, channel and customer segment. Built for market-share analytics, price-erosion and mix modelling, financial-distress signals, ETL pipelines and BI logic. The licence and disclosure sections state the provenance of the data.
Row Counts by Table
Counted from the files that ship, not estimated.
| Table | Rows |
|---|---|
| aut_monthly_sales | 610,059 |
| aut_market_share | 24,960 |
| aut_brand_financials | 110 |
| aut_customer_mix | 11,000 |
| aut_price_actions | 256 |
| aut_models | 112 |
| aut_brands | 12 |
| aut_divisions | 32 |
| aut_countries | 20 |
| aut_channels | 4 |
| aut_customer_segments | 5 |
Table Relationships
One parent record and seven child tables, each joined back on the same key.
Schema
Every table ships with typed columns, referential integrity, and documentation.
| Column | Type | Description |
|---|---|---|
| sale_id | varchar(16) | Sales line key. Primary key. |
| model_id | varchar(8) | The model sold. |
| brand_id | varchar(8) | The brand of the model, denormalised for direct filtering. |
| country_code | varchar(8) | The market the units were sold in. |
| channel_code | varchar(8) | The channel the units were sold through. |
| year_month | varchar(16) | Month of sale, 2016-01 to 2026-06. Import as text: spreadsheets convert values like 2024-03 to dates. |
| quantity | integer | Units sold. A few 2021 lines carry zero with non-zero revenue: chip-shortage pre-invoicing, deliberate. |
+6 more columns in aut_monthly_sales. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| share_id | varchar(16) | Share row key. Primary key. |
| country_code | varchar(8) | The market this share is measured in. |
| year_month | varchar(16) | Month of the share. Import as text. |
| brand_id | varchar(8) | The brand holding the share. |
| units | integer | Units the brand sold in the market that month, the exact sum of its sales lines. |
| unit_share_pct | numeric(6,2) | The brand share of all units in the market that month, in percent. Exactly reproducible from the sales lines. |
| Column | Type | Description |
|---|---|---|
| financial_id | varchar(8) | Financial row key. Primary key. |
| brand_id | varchar(8) | The brand. |
| year | integer | Reporting year. |
| revenue_eur | numeric(14,2) | Revenue in euro. Equals the exact net revenue sum of the sales lines for the year. |
| ebit_margin_pct | numeric(4,1) | EBIT margin in percent. Compresses to around zero for legacy brands by 2024. |
| net_debt_eur | numeric(15,2) | Net debt in euro. Multiplies for legacy brands after 2021; a few early rows use the opposite sign convention, stated in the next column. |
| debt_sign_convention | varchar(24) | net_debt_positive normally; net_cash_positive on the documented early rows of one brand, where a positive balance sheet is stored as a negative number. |
+4 more columns in aut_brand_financials. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| mix_id | varchar(16) | Mix row key. Primary key. |
| brand_id | varchar(8) | The brand the mix describes. |
| country_code | varchar(8) | The market the mix is measured in. |
| year | integer | Calendar year. |
| segment_code | varchar(16) | The customer segment of this share. |
| share_pct | numeric(5,1) | Share of the brand-country-year units in this segment, in percent. Shares sum to exactly 100. |
| Column | Type | Description |
|---|---|---|
| action_id | varchar(8) | Price action key. Primary key. |
| model_id | varchar(8) | The model the action applies to. |
| brand_id | varchar(8) | The brand, denormalised. |
| year_month | varchar(16) | Month of the action. Import as text. |
| action_type | varchar(24) | list_price_cut or incentive_campaign. |
| depth_pct | numeric(5,1) | Depth of the cut or campaign, in percent of list. |
| Column | Type | Description |
|---|---|---|
| model_id | varchar(8) | Model number. Primary key. |
| brand_id | varchar(8) | The brand of the model. |
| division_id | varchar(8) | The division that owns the model. |
| model_name | varchar(16) | Generated marketing name. One name is deliberately carried by two model ids with consecutive lifespans: a mid-life rename, unlinked. |
| class_code | varchar(16) | Vehicle class code: CITY, COMPACT, MIDSIZE, EXECUTIVE, SUV_C, SUV_L, SPORT or VAN. |
| class_name | varchar(32) | The vehicle class in words. |
| powertrain | varchar(16) | ICE, HEV or BEV. |
+4 more columns in aut_models. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| brand_id | varchar(8) | Brand number. Primary key. |
| brand_name | varchar(24) | Generated brand name. Collisions with real automakers are a build failure. |
| origin_type | varchar(24) | legacy_european or ev_entrant. The axis the whole dataset turns on. |
| home_country_code | varchar(8) | ISO 3166-1 alpha-2 home country of the brand. |
| founded_year | integer | Year the brand was founded. |
| eu_entry_year | integer | Year an entrant brand started selling in Europe. Empty for the legacy brands. |
| origin_description | varchar(48) | The origin type in words. |
+1 more columns in aut_brands. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| division_id | varchar(8) | Division number. Primary key. |
| brand_id | varchar(8) | The parent brand. |
| division_name | varchar(32) | Passenger vehicles, light commercial vehicles or financial services. |
| Column | Type | Description |
|---|---|---|
| country_code | varchar(8) | ISO 3166-1 alpha-2 market code. Primary key. |
| country_name | varchar(24) | Country name in English. |
| Column | Type | Description |
|---|---|---|
| channel_code | varchar(8) | Sales channel key. Primary key. |
| channel_name | varchar(32) | The channel in words. Entrant brands skew direct online. |
| Column | Type | Description |
|---|---|---|
| segment_code | varchar(16) | Customer segment key. Primary key. |
| segment_name | varchar(32) | The segment in words. |
Sample Data
A snapshot of real rows from the dataset (values are fully synthetic).
| sale_id | model_id | brand_id | country_code | channel_code | year_month | quantity | unit_list_price_eur | discount_pct | net_revenue_eur |
|---|---|---|---|---|---|---|---|---|---|
| SL0000001 | MD001 | BR01 | DE | CH-DLR | 2016-01 | 199 | 14000 | 6.3 | 2609828.9 |
| SL0000002 | MD001 | BR01 | DE | CH-FLT | 2016-01 | 118 | 14000 | 3.4 | 1595282.17 |
| SL0000003 | MD001 | BR01 | DE | CH-ONL | 2016-01 | 19 | 14000 | 5.4 | 251541.77 |
Version History
| v1.1.0 | 2026-08-18 | Monthly seasonality added to registrations. Sales were modelled at a flat monthly rate within each year, so every month of 2019 recorded the same volume and the only movement in the series was the 2020 shock. Registrations do not behave that way in Europe: March and September carry the plate changes and the quarter end push, June closes the half year, and August is the holiday trough. The twelve monthly factors sum to twelve, so annual volumes are unchanged to within a tenth of a percent, and the strongest month now runs about 1.8 times the weakest, which is where the European market sits. The 2020 collapse and its recovery are unchanged and now sit on top of the seasonal shape. |
Related Datasets
EV Battery Passport Degradation and Circularity Analytics Set (EU)
ManufacturingEU EV battery passport data linking materials, manufacturing, vehicle use, degradation, safety, second life, recycling and circular recovery.
Heavy Equipment BOM Structure (WW)
ManufacturingA heavy-equipment service parts catalogue with real bill-of-materials mechanics: six machine families, 39 variants, trees four to six levels deep with materialised paths, over a million item rows across 124,337 parts, serial-number effectivity, supersession chains with one documented loop, and a derived where-used table that reconciles exactly.
Manufacturing Production and Orders (ASIA)
ManufacturingAn Asian manufacturing panel: 18 sectors, 90 manufacturers, 468 plants across 12 economies, with monthly production at line grain, orders and backlogs, shipments, an exact inventory identity, employment and producer prices from 2016 to mid 2026 across the decade's full cycle.