Defense Manufacturing Sales (EU)
Overview
Ten and a half years of European defense industry sales at order-line grain. 36 manufacturers sell 2,352 products across nine market segments (ammunition, missiles, air defence, artillery, uncrewed systems, land vehicles, electronics, soldier systems, naval) to 195 government customers in 35 countries. Through 2021 the industry drifts: low single-digit growth, a 2020 dip, framework contracts and comfortable lead times. From February 2022 a major European security crisis re-arms the continent, and the dataset carries the whole mechanism, not just the headline: order intake multiplies fastest in ammunition, missiles and air defence while naval barely moves, eastern European customers re-arm hardest, urgent operational contracts appear beside the frameworks, a share of lines is priced far above list in the scramble, delivery lead times stretch against real capacity, and the monthly backlog table grows to a peak because deliveries cannot follow orders. Revenue is recognised on delivery, so company financials boom later than order books, exactly as the real industry's income statements behaved. The tables reconcile by construction and the build re-verifies it: product monthly sales are the exact sum of the order and delivery lines, backlog is exactly cumulative orders minus deliveries per company and market, and company revenue equals delivered value per calendar year outside two documented fiscal-year rows. Built for demand-shock analytics, order-book and capacity modelling, ETL pipelines and BI logic. The licence and disclosure sections state the provenance of the data.
Analytics
Four entries from the packaged tables, with the performance the dataset records for them. Every value below is read from the shipped files.
Row Counts by Table
Counted from the files that ship, not estimated.
| Table | Rows |
|---|---|
| def_sales_orders | 279,132 |
| def_deliveries | 302,767 |
| def_product_monthly_sales | 296,352 |
| def_backlog_monthly | 13,356 |
| def_contracts | 7,015 |
| def_products | 2,352 |
| def_companies | 36 |
| def_divisions | 106 |
| def_customers | 195 |
| def_markets | 9 |
| def_capacity_annual | 1,166 |
| def_company_financials | 396 |
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 |
|---|---|---|
| order_line_id | varchar(16) | Order line number. Primary key. |
| contract_id | varchar(16) | The contract this line calls against. |
| product_id | varchar(16) | The product ordered. |
| customer_id | varchar(8) | The ordering program. |
| order_month | varchar(16) | Month the order was placed, as year-month. Import as text: spreadsheets convert values like 2022-02 to dates. |
| quantity | integer | Quantity ordered, in the product's unit of measure. |
| unit_price_eur | numeric(12,2) | Agreed unit price in euro. A small share sits far above list: urgent premiums, deliberate. |
+4 more columns in def_sales_orders. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| delivery_line_id | varchar(16) | Delivery line number. Primary key. |
| order_line_id | varchar(16) | The order line this tranche delivers against. |
| delivery_month | varchar(16) | Month of delivery, as year-month. Import as text: spreadsheets convert values like 2022-02 to dates. |
| quantity_delivered | integer | Quantity delivered in this tranche. Tranches never exceed the ordered quantity in total. |
| delivered_value_eur | numeric(13,2) | Delivered quantity times the order line's unit price, in euro. |
| stock_calloff_flag | boolean | true on the roughly fifty lines delivered from vendor-held stock before their order month, false otherwise. The documented lead-time trap. |
| Column | Type | Description |
|---|---|---|
| pms_id | varchar(16) | Aggregate row key. Primary key. |
| product_id | varchar(16) | The product this row aggregates. |
| year_month | varchar(16) | Month of this aggregate, 2016-01 to 2026-06 with no gaps. Import as text: spreadsheets convert values like 2022-02 to dates. |
| qty_ordered | integer | Quantity ordered this month, the exact sum of the order lines. Zero months are real zeros. |
| qty_delivered | integer | Quantity delivered this month, the exact sum of the delivery lines. |
| order_value_eur | numeric(13,2) | Order value this month in euro, exact. |
| delivered_value_eur | numeric(13,2) | Delivered value this month in euro, exact. |
+1 more columns in def_product_monthly_sales. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| backlog_id | varchar(16) | Backlog row key. Primary key. |
| company_id | varchar(8) | The manufacturer whose open orders this row states. |
| market_code | varchar(16) | The market segment of the open orders. |
| year_month | varchar(16) | Month end this backlog is stated at. Import as text. |
| open_order_value_eur | numeric(15,2) | Open order value in euro: exactly cumulative orders minus cumulative deliveries. |
| currency | varchar(16) | ISO 4217 currency code. EUR throughout. |
| Column | Type | Description |
|---|---|---|
| contract_id | varchar(16) | Contract number. Primary key. |
| company_id | varchar(8) | The selling manufacturer. |
| customer_id | varchar(8) | The buying program. |
| contract_type | varchar(24) | FRAMEWORK or URGENT_OPERATIONAL. Urgent contracts appear from 2022. |
| signed_date | date | Date the contract was signed. |
| ceiling_value_eur | integer | Contract ceiling in euro. |
| currency | varchar(16) | ISO 4217 currency code. EUR throughout. |
+1 more columns in def_contracts. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| product_id | varchar(16) | Product number. Primary key; the sales material every line table references. |
| company_id | varchar(8) | The manufacturer of this product. |
| division_id | varchar(8) | The division that owns this product. |
| market_code | varchar(16) | Market segment of the product. |
| designation | varchar(16) | Invented designation code. Follows no real naming system; an accidental match with a real designation is coincidental. |
| product_name | varchar(56) | Designation plus a generic technical descriptor. One name is deliberately shared by two products at different manufacturers. |
| product_class | varchar(16) | PLATFORM, SUBSYSTEM or CONSUMABLE. |
+4 more columns in def_products. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| company_id | varchar(8) | Manufacturer number. Primary key; foreign key on every company-grain table. |
| company_name | varchar(40) | Generated manufacturer name. Collisions with real defense companies are a build failure. |
| country_code | varchar(8) | ISO 3166-1 alpha-2 country code. |
| founded_year | integer | Year the manufacturer was founded. |
| employee_band | varchar(16) | Coded workforce size band. |
| listed_flag | boolean | true when the company is stock-exchange listed, false otherwise. |
| specialisation | varchar(56) | The company's primary market in words. |
+1 more columns in def_companies. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| division_id | varchar(8) | Division number. Primary key. |
| company_id | varchar(8) | The parent manufacturer. |
| division_name | varchar(40) | Division name, one per market segment the company operates in. |
| market_code | varchar(16) | The market segment this division serves. |
| Column | Type | Description |
|---|---|---|
| customer_id | varchar(8) | Customer number. Primary key. |
| country_code | varchar(8) | ISO 3166-1 alpha-2 country code. |
| country_name | varchar(24) | Country name in English. |
| branch_code | varchar(8) | Armed-forces branch code: LAND, AIR, NAVAL, JOINT, GUARD, SOF or CIVIL. |
| branch_name | varchar(40) | The branch in words. |
| customer_type | varchar(24) | national_program or export_program. |
| program_office_code | varchar(16) | Invented procurement office code, country plus branch plus sequence. Never a real agency's identity. |
+1 more columns in def_customers. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| market_code | varchar(16) | Market segment key. Primary key. |
| market_name | varchar(32) | The segment in words. |
| default_unit | varchar(16) | Unit the segment's products are counted in. |
| market_description | varchar(120) | How hard the segment surges after the 2022 crisis and its typical delivery lead time. |
| Column | Type | Description |
|---|---|---|
| capacity_id | varchar(8) | Capacity row key. Primary key. |
| company_id | varchar(8) | The manufacturer. |
| market_code | varchar(16) | The market segment the capacity serves. |
| year | integer | Calendar year, 2016 to 2026. |
| capacity_value_eur | bigint | Annual output capacity stated as deliverable value in euro. Expands from 2024. |
| utilisation_pct | numeric(7,2) | Delivered value over capacity, in percent. Runs above 100 through the surge years; 2026 is annualised from the half year. |
| Column | Type | Description |
|---|---|---|
| financial_id | varchar(8) | Financial row key. Primary key. |
| company_id | varchar(8) | The manufacturer. |
| year | integer | Reporting year. |
| fiscal_year_end | varchar(8) | 12-31 for calendar-year rows. Two documented rows carry 03-31 and report April to March; a naive calendar join misreads them, on purpose. |
| revenue_eur | numeric(15,2) | Revenue in euro, recognised on delivery. Equals delivered value exactly for calendar-year rows. |
| order_intake_eur | numeric(15,2) | Order intake in euro for the calendar year. |
| order_book_eur | numeric(16,2) | Open order value at year end, in euro. |
+4 more columns in def_company_financials. The full schema ships with the download.
Sample Data
A snapshot of real rows from the dataset (values are fully synthetic).
| order_line_id | contract_id | product_id | customer_id | order_month | quantity | unit_price_eur | line_value_eur | urgent_flag |
|---|---|---|---|---|---|---|---|---|
| OL0000001 | CT00001 | DP000001 | CU0153 | 2016-09 | 4 | 349281.89 | 1397127.56 | false |
| OL0000002 | CT00002 | DP000001 | CU0160 | 2017-10 | 8 | 328623.23 | 2628985.84 | false |
| OL0000003 | CT00003 | DP000001 | CU0078 | 2018-07 | 19 | 287577.95 | 5463981.05 | false |
Version History
| v1.0.0 | 2026-08-11 | First release. 36 manufacturers, 2,352 products, 195 government customers, and monthly order, delivery, backlog, capacity and financial data from 2016-01 to 2026-06 around a 2022 demand shock. |
Related Datasets
Defense Ground Vehicle Industry Analytics Set (EU)
Defence & MilitaryA complete Europe analytical warehouse covering company, facility, vehicle product, contract, production, delivery, readiness, maintenance, programme cost, workforce, research, export-control, supply-risk and forecast data.
Defense Ground Vehicle Industry Analytics Set (US)
Defence & MilitaryA complete United States analytical warehouse covering company, facility, vehicle product, contract, production, delivery, readiness, maintenance, programme cost, workforce, research, export-control, supply-risk and forecast data.