Skip to content
Synthetic educational data

Inventory & Supply Chain Dataset

Practice inventory and purchasing analysis with a fictional operations dataset. Follow products, purchase orders, receipts, opening balances, and stock movements to explain how inventory changes.

Good for: inventory reconciliation, purchasing analysis, and operations reporting.

Download this dataset

Choose the version that fits your project. You do not need to download every file.

Preview the data

Explore a sample before downloading. Select a table to see its columns, row count, relationships, and what each row represents.

Suppliers

One row represents: One row per supplier.

Rows in this table
250
Connects to
Products, Purchase orders

This preview shows a sample, not the full download.

Sample rows from suppliers. This preview is not the full download.
supplier_idsupplier_namecountry_codelead_time_daysreliability_score
SUP0001Supplier 001CN380.925
SUP0002Supplier 002CA500.940
SUP0003Supplier 003US340.842
SUP0004Supplier 004CA110.973
SUP0005Supplier 005DE230.903

Suppliers data dictionary

Check identifiers, dates, numeric fields, and missing values before writing a query or building a chart.

ColumnWhat it meansData typeMissing valuesKey or requirement
supplier_idStable supplier key.text0Required
supplier_nameDisplay name.text0Required
country_codeSupplier country.text0Required
lead_time_daysExpected procurement lead time.integer0Required
reliability_scoreExpected on-time fraction.decimal0Required
View the full data dictionary

suppliers

One row represents: One row per supplier.

ColumnWhat it meansData typeMissing valuesKey or requirement
supplier_idStable supplier key.text0Required
supplier_nameDisplay name.text0Required
country_codeSupplier country.text0Required
lead_time_daysExpected procurement lead time.integer0Required
reliability_scoreExpected on-time fraction.decimal0Required

products

One row represents: One row per product.

ColumnWhat it meansData typeMissing valuesKey or requirement
product_idStable product key.text0Required
supplier_idPrimary supplier.text0Required
skuUnique stock keeping unit.text0Required
categoryInventory category.text0Required
unit_costProcurement unit cost.decimal0Required
reorder_pointTarget replenishment threshold.integer0Required

warehouses

One row represents: One row per warehouse.

ColumnWhat it meansData typeMissing valuesKey or requirement
warehouse_idStable warehouse key.text0Required
warehouse_nameDisplay name.text0Required
regionOperating region.text0Required
capacity_unitsNominal unit capacity.integer0Required

inventory_opening_balances

One row represents: One row per product and warehouse.

ColumnWhat it meansData typeMissing valuesKey or requirement
opening_balance_idStable key for the product and warehouse opening balance.text0Required
product_idStocked product.text0Required
warehouse_idStocking warehouse.text0Required
balance_dateOpening balance date; 2023-01-01 in v1.0.0.date0Required
opening_unitsUnits on hand before movements on the balance date.integer0Required

purchase_orders

One row represents: One row per purchase order.

ColumnWhat it meansData typeMissing valuesKey or requirement
purchase_order_idStable PO key.text0Required
supplier_idFulfilling supplier.text0Required
warehouse_idReceiving warehouse.text0Required
ordered_atOrder date.date0Required
expected_atExpected receipt date.date0Required
received_atActual receipt date.date873Nullable
statusreceived, partial, open, or cancelled.text0Required

purchase_order_lines

One row represents: One row per purchase-order line.

ColumnWhat it meansData typeMissing valuesKey or requirement
purchase_order_line_idStable line key.text0Required
purchase_order_idParent PO.text0Required
product_idOrdered product.text0Required
quantity_orderedUnits ordered.integer0Required
quantity_receivedUnits received.integer0Required
unit_costPO unit cost.decimal0Required

inventory_movements

One row represents: One row per product, warehouse, and inventory event.

ColumnWhat it meansData typeMissing valuesKey or requirement
movement_idStable movement key.text0Required
product_idMoved product.text0Required
warehouse_idAffected warehouse.text0Required
movement_atMovement date.date0Required
movement_typereceipt, sale, adjustment, or transfer.text0Required
quantity_changeSigned stock delta.integer0Required
purchase_order_line_idReceipt source line when applicable.text87,067Nullable
transfer_idShared identifier for the equal outbound and inbound rows of a warehouse transfer.text114,302Nullable

About the data

An inventory balance is easier to trust when you can explain the events that changed it. This synthetic dataset provides an operations scenario for tracing purchasing and stock movements rather than treating the ending balance as a standalone number.

Start by identifying which records describe commitments, which describe physical receipts, and which change recorded stock. Version 1.0.0 includes opening balances for every product and warehouse, signed movements, paired transfers, locations, and partial receipts.

What one row represents
Varies by source table
Data covers
Start: 2023-01-01 · End: 2025-12-31
Dataset version
1.0.0
Release published
2026-09-05

How the tables connect

Generated from the same relationship metadata as the table documentation.

Productssupplier_idSupplierssupplier_id

many-to-one

Inventory opening balancesproduct_idProductsproduct_id

many-to-one

Inventory opening balanceswarehouse_idWarehouseswarehouse_id

many-to-one

Purchase orderssupplier_idSupplierssupplier_id

many-to-one

Purchase orderswarehouse_idWarehouseswarehouse_id

many-to-one

Purchase order linespurchase_order_idPurchase orderspurchase_order_id

many-to-one

Purchase order linesproduct_idProductsproduct_id

many-to-one

Inventory movementsproduct_idProductsproduct_id

many-to-one

Inventory movementswarehouse_idWarehouseswarehouse_id

many-to-one

Start your first analysis

Open a download, inspect the table, and answer one question. Each example identifies the file and dataset version it uses.

Start with Excel

Use the purchase-order-level workbook for a first purchasing and receipts analysis.

Download Excel
File used
inventory-supply-chain-v1.0.0-analysis.xlsx
Dataset version
1.0.0
File size
1.2 MB
  1. 01Open "inventory-supply-chain-v1.0.0-analysis.xlsx" and select the "Inventory & Supply Chain Datase" sheet.
  2. 02Place warehouse_region in Rows and quantity_ordered and quantity_received in Values.
  3. 03Add status as a filter and explain how open, partial, and cancelled orders affect the comparison.

What you can build

Finished output from this release

How do opening balances and signed movements reconcile to closing units by warehouse?

How do opening balances and signed movements reconcile to closing units by warehouse?

warehouse_idopening_unitsmovement_unitsclosing_units
W00165921312713541930567
W00266088011688631829743
W00366606712094771875544
W00465160612347151886321
W00565656712052141861781
W00665741312131931870606
View the checked SQL
WITH movement_totals AS (
  SELECT product_id, warehouse_id, SUM(quantity_change) AS movement_units
  FROM inventory_movements
  GROUP BY product_id, warehouse_id
)
SELECT b.warehouse_id,
       SUM(b.opening_units) AS opening_units,
       SUM(COALESCE(m.movement_units, 0)) AS movement_units,
       SUM(b.opening_units + COALESCE(m.movement_units, 0)) AS closing_units
FROM inventory_opening_balances b
LEFT JOIN movement_totals m USING (product_id, warehouse_id)
GROUP BY b.warehouse_id
ORDER BY b.warehouse_id;

Stock movement report

Summarize the movement types represented in the release by product, warehouse, and period.

Inventory reconciliation

Explain a closing balance using the opening balance and documented movements. Investigate any difference instead of silently replacing it.

Purchasing and receipts analysis

Compare purchase orders with receipts and state how partial receipts affect your totals.

Operations reporting model

Keep purchasing, receipts, and stock movements at explicit levels of detail before building shared metrics.

Questions about this dataset

Can I calculate inventory on hand?

Yes. Add signed stock movements to the documented opening balance for the product, warehouse, and date you are analyzing.

Can I evaluate supplier lead times?

Yes, within this fictional scenario. Use comparable ordered_at and received_at dates and state how open, cancelled, and partial purchase orders are handled.

Source, license, and versions

This dataset represents a fictional business. Its records and patterns were generated for education and testing. Use it to practice analytical methods, not to estimate real-world revenue, churn, conversion rates, or market conditions.

Before you interpret the results

  • This is synthetic educational data generated to model a fictional business. It does not represent a real company or establish industry benchmarks.
  • Synthetic movements simplify transfer pairing.
  • No lot, serial, or expiration tracking.
  • No PII is included.

Source, license, and version

Use the version number when sharing your work so others can reproduce it with the same files. Coverage dates describe the records; the release date describes when this package was published.

Maintainer
Analytics Engineering
License
CC BY 4.0
Version
1.0.0
Published
2026-09-05T16:52:53.735Z

Cite this dataset

Analytics Engineering. (2026). Inventory & Supply Chain Dataset (Version 1.0.0) [Data set]. https://www.analyticsengineering.com/datasets/inventory-supply-chain.

Found an issue?

Tell us which dataset, version, and file you used, and what you expected to happen. A small example helps us investigate.

Report a dataset issue →

Keep learning

Reconcile opening balances to receipts, transfers, sales, and adjustments before building operational metrics.

This exercise uses a smaller teaching example, not the full downloadable dataset.