Automotive Manufacturing Sales (EU)

AUTSLS951· 647K records · 11 tables · v1.1.0 · Updated 2026-08-18
Manufacturing Industrial Manufacturing Dataset API
CSV JSON SQLautomotivevehicle-salesmarket-shareev-transitionmanufacturingeuropeeutime-series

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.

TableRows
aut_monthly_sales610,059
aut_market_share24,960
aut_brand_financials110
aut_customer_mix11,000
aut_price_actions256
aut_models112
aut_brands12
aut_divisions32
aut_countries20
aut_channels4
aut_customer_segments5

Table Relationships

One parent record and seven child tables, each joined back on the same key.

70%
Loading diagram

Schema

Every table ships with typed columns, referential integrity, and documentation.

aut_monthly_sales· Rows: 610,059
ColumnTypeDescription
sale_idvarchar(16)Sales line key. Primary key.
model_idvarchar(8)The model sold.
brand_idvarchar(8)The brand of the model, denormalised for direct filtering.
country_codevarchar(8)The market the units were sold in.
channel_codevarchar(8)The channel the units were sold through.
year_monthvarchar(16)Month of sale, 2016-01 to 2026-06. Import as text: spreadsheets convert values like 2024-03 to dates.
quantityintegerUnits 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.

aut_market_share· Rows: 24,960
ColumnTypeDescription
share_idvarchar(16)Share row key. Primary key.
country_codevarchar(8)The market this share is measured in.
year_monthvarchar(16)Month of the share. Import as text.
brand_idvarchar(8)The brand holding the share.
unitsintegerUnits the brand sold in the market that month, the exact sum of its sales lines.
unit_share_pctnumeric(6,2)The brand share of all units in the market that month, in percent. Exactly reproducible from the sales lines.
aut_brand_financials· Rows: 110
ColumnTypeDescription
financial_idvarchar(8)Financial row key. Primary key.
brand_idvarchar(8)The brand.
yearintegerReporting year.
revenue_eurnumeric(14,2)Revenue in euro. Equals the exact net revenue sum of the sales lines for the year.
ebit_margin_pctnumeric(4,1)EBIT margin in percent. Compresses to around zero for legacy brands by 2024.
net_debt_eurnumeric(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_conventionvarchar(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.

aut_customer_mix· Rows: 11,000
ColumnTypeDescription
mix_idvarchar(16)Mix row key. Primary key.
brand_idvarchar(8)The brand the mix describes.
country_codevarchar(8)The market the mix is measured in.
yearintegerCalendar year.
segment_codevarchar(16)The customer segment of this share.
share_pctnumeric(5,1)Share of the brand-country-year units in this segment, in percent. Shares sum to exactly 100.
aut_price_actions· Rows: 256
ColumnTypeDescription
action_idvarchar(8)Price action key. Primary key.
model_idvarchar(8)The model the action applies to.
brand_idvarchar(8)The brand, denormalised.
year_monthvarchar(16)Month of the action. Import as text.
action_typevarchar(24)list_price_cut or incentive_campaign.
depth_pctnumeric(5,1)Depth of the cut or campaign, in percent of list.
aut_models· Rows: 112
ColumnTypeDescription
model_idvarchar(8)Model number. Primary key.
brand_idvarchar(8)The brand of the model.
division_idvarchar(8)The division that owns the model.
model_namevarchar(16)Generated marketing name. One name is deliberately carried by two model ids with consecutive lifespans: a mid-life rename, unlinked.
class_codevarchar(16)Vehicle class code: CITY, COMPACT, MIDSIZE, EXECUTIVE, SUV_C, SUV_L, SPORT or VAN.
class_namevarchar(32)The vehicle class in words.
powertrainvarchar(16)ICE, HEV or BEV.

+4 more columns in aut_models. The full schema ships with the download.

aut_brands· Rows: 12
ColumnTypeDescription
brand_idvarchar(8)Brand number. Primary key.
brand_namevarchar(24)Generated brand name. Collisions with real automakers are a build failure.
origin_typevarchar(24)legacy_european or ev_entrant. The axis the whole dataset turns on.
home_country_codevarchar(8)ISO 3166-1 alpha-2 home country of the brand.
founded_yearintegerYear the brand was founded.
eu_entry_yearintegerYear an entrant brand started selling in Europe. Empty for the legacy brands.
origin_descriptionvarchar(48)The origin type in words.

+1 more columns in aut_brands. The full schema ships with the download.

aut_divisions· Rows: 32
ColumnTypeDescription
division_idvarchar(8)Division number. Primary key.
brand_idvarchar(8)The parent brand.
division_namevarchar(32)Passenger vehicles, light commercial vehicles or financial services.
aut_countries· Rows: 20
ColumnTypeDescription
country_codevarchar(8)ISO 3166-1 alpha-2 market code. Primary key.
country_namevarchar(24)Country name in English.
aut_channels· Rows: 4
ColumnTypeDescription
channel_codevarchar(8)Sales channel key. Primary key.
channel_namevarchar(32)The channel in words. Entrant brands skew direct online.
aut_customer_segments· Rows: 5
ColumnTypeDescription
segment_codevarchar(16)Customer segment key. Primary key.
segment_namevarchar(32)The segment in words.

Sample Data

A snapshot of real rows from the dataset (values are fully synthetic).

sale_idmodel_idbrand_idcountry_codechannel_codeyear_monthquantityunit_list_price_eurdiscount_pctnet_revenue_eur
SL0000001MD001BR01DECH-DLR2016-01199140006.32609828.9
SL0000002MD001BR01DECH-FLT2016-01118140003.41595282.17
SL0000003MD001BR01DECH-ONL2016-0119140005.4251541.77

Version History

v1.1.02026-08-18Monthly 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