Inventory Management Dataset
Analyze stock levels and product movement with this ready-made inventory management dataset. It includes 35,239 rows across 4 tables, perfect for practicing SQL joins and Power BI dashboards. A free sample is available, with full download access costing credits.
At a glance
- 4tables
- 35,239rows
- 19columns
- Jan 2023 – Dec 2023date range
The 4 tables
preview and data dictionary per tableProducts products · table · 4,990 rows
Contains details about each product in the inventory.
Preview
| product_iduuid | product_namestring | categorystring | unit_pricedecimal |
|---|---|---|---|
| 66b3f91d-0c29-4e9a-a9ae-62a80f30fa59 | Galway Wool Sweater | Apparel | 25.11 |
| a4ee8f53-a304-4e37-8110-8d6e68be359c | Cork Linen Trousers | Apparel | 92.63 |
| 45b67f23-bd05-4a89-9105-87649a3bc78c | Belfast Cotton Shirt | Apparel | 26.41 |
| cc2d99b3-a547-4fee-99d0-b6560d88a9b9 | Wexford Denim Jacket | Apparel | 70.26 |
| e0cc11c1-38af-47a5-97a4-18ce7437bfd3 | Limerick Fleece Hoodie | Apparel | 54.48 |
| f6c8ed2d-e0f7-404a-82d7-4682ebc76fb2 | Dublin Puffer Vest | Apparel | 106.86 |
| ce166bbe-7798-4832-bc8b-a053932d69f4 | Galway Polo Shirt | Apparel | 31.87 |
| eaee956c-3c01-4e65-9456-e6763c4e5de4 | Cork Graphic Tee | Apparel | 18 |
| 3deb7aec-5fa3-4759-80d2-e38100f33e72 | Belfast Chinos | Apparel | 28.32 |
| b6b82e3a-8d39-47cd-936d-f52881a66fe6 | Wexford Tank Top | Apparel | 13.33 |
Data dictionary
| column | type | description | example | null % |
|---|---|---|---|---|
product_ | uuid | Unique surrogate identifier for each product catalog record.unique | 66b3f91d-0c29-4e9a-a9ae-62a80f30fa59 | 0% |
product_ | string | Standardized title of the product item including series or descriptive variant. | Galway Wool Sweater | 0% |
category | string | Broad commercial classification defining product type and pricing profile. | Apparel | 0% |
unit_ | decimal | Selling or valuation price in USD per unit for the specified product item. | 25.11 | 0% |
Warehouses warehouses · dimension table · 10 rows
Lists the different warehouse facilities.
Preview
| warehouse_idinteger | warehouse_namestring | locationstring |
|---|---|---|
| 1 | Distribution Center Beta | Los Angeles, CA |
| 2 | Omni-Fulfillment Epsilon | Atlanta, GA |
| 3 | Warehouse Alpha | New York, NY |
| 4 | Central Hub Gamma | Chicago, IL |
| 5 | Gulf Coast Depot Iota | Los Angeles, CA |
| 6 | Northeast Gateway Zeta | Seattle, WA |
| 7 | Pacific Coast Hub Theta | Seattle, WA |
| 8 | Midwest Terminal Eta | Phoenix, AZ |
| 9 | Southwest Distribution Kappa | Phoenix, AZ |
| 10 | Logistics Depot Delta | Dallas, TX |
Data dictionary
| column | type | description | example | null % |
|---|---|---|---|---|
warehouse_ | integer | Unique numeric identifier for the warehouse facility.unique | 1 | 0% |
warehouse_ | string | Descriptive facility name designating operational center or warehouse tier.unique | Distribution Center Beta | 0% |
location | string | Geographical city and state representation of the facility. | Los Angeles, CA | 0% |
Inventory levels inventory_levels · bridge table · 14,914 rows
Tracks the stock quantity for each product at each warehouse.
Preview
| inventory_iduuid | stock_quantityinteger | stock_statusstring | last_updateddatetime | product_iduuid | warehouse_idinteger |
|---|---|---|---|---|---|
| 1a3ba0c1-64b5-4ca4-b629-f1b6fc6746ba | 532 | optimal | 2023-10-02 14:58:26 | 42e3f324-0ab4-48a9-baa7-6d07268a67ac | 8 |
| dd913c4d-9e72-4343-9a12-60b22802a93d | 102 | optimal | 2023-09-20 07:44:34 | 5c91d471-f284-4609-8aaf-a394939c8ed2 | 8 |
| 0811cd7d-eddd-49ab-b1e5-ce373e368f66 | 178 | optimal | 2023-03-06 12:08:09 | 1d4a624e-98cb-4ecb-bd0e-2de54a453553 | 5 |
| 5cdadd50-fe78-417e-87d9-4458e64527a5 | 262 | optimal | 2023-12-06 06:51:57 | e6e0a540-5893-453f-8ce3-0fc5572be292 | 2 |
| 3d13b9c6-fc7b-4e20-a6ca-329dd9bd62ff | 216 | optimal | 2023-09-25 13:32:50 | 500cf7e1-343e-403f-81f7-1e2eda96d1b7 | 5 |
| 6d608c68-9651-480e-894e-aeaf4cd00238 | 321 | optimal | 2023-12-28 12:26:04 | ea9137f4-c319-4d1f-9922-6ac590eb6ef5 | 7 |
| 65f56e2e-1f13-4091-8418-71574f860e23 | 181 | optimal | 2023-12-04 14:35:57 | 653b2304-8150-406e-8efc-5a4a57d751f8 | 2 |
| 97ed11c2-65ca-45f3-b756-78a1fc27ce81 | 681 | optimal | 2023-07-04 14:04:43 | abc6006a-b24e-4c14-895e-e9724637cebb | 7 |
| 00ad9951-1a5d-47f9-b525-1e1551fb2c39 | 160 | optimal | 2023-12-11 22:32:59 | e639119a-85cc-42ff-99ee-6f5dd84575c1 | 6 |
| 4bba1263-0625-4909-a60d-1dc187c03064 | 443 | optimal | 2023-12-16 13:10:16 | 99eb5e72-9a96-45e3-a65f-6fd2b5be21f8 | 4 |
Data dictionary
| column | type | description | example | null % |
|---|---|---|---|---|
inventory_ | uuid | Unique identifier for the inventory level record. | 1a3ba0c1-64b5-4ca4-b629-f1b6fc6746ba | 0% |
stock_ | integer | Current quantity of the product on hand at the specific warehouse facility. | 532 | 0% |
stock_ | string | Operational categorization of stock level (out_of_stock, low_stock, optimal, overstocked). | optimal | 0% |
last_ | datetime | Timestamp indicating the last inventory audit, count cycle, or movement reconciliation. | 2023-10-02 14:58:26 | 0% |
product_ | uuid | Foreign key to products.product_id. | 42e3f324-0ab4-48a9-baa7-6d07268a67ac | 0% |
warehouse_ | integer | Foreign key to warehouses.warehouse_id. | 8 | 0% |
Transactions transactions · bridge table · 15,325 rows
Records all inventory movements (in and out) for products.
Preview
| transaction_idinteger | transaction_typestring | quantityinteger | transaction_datedatetime | product_iduuid | warehouse_idinteger |
|---|---|---|---|---|---|
| 1 | OUT | 1 | 2023-10-23 05:35:03 | 4dee7f0c-f8fb-47cb-a00b-b78afb7b03eb | 1 |
| 2 | OUT | 1 | 2023-05-15 14:10:06 | d89e52cf-be14-40b7-9c37-ec6f03f956ec | 1 |
| 3 | OUT | 4 | 2023-05-25 10:43:49 | 701af371-fd25-4564-b9e8-c0d8160309a5 | 10 |
| 4 | OUT | 1 | 2023-07-21 08:04:10 | 7cdf729b-5333-4560-ba5d-a3d2ec097999 | 1 |
| 5 | OUT | 38 | 2023-02-10 14:16:37 | db2245d9-ffcc-4e96-9ac8-baea98abe724 | 2 |
| 6 | OUT | 32 | 2023-12-21 09:45:20 | 68ed8b6f-e377-46f8-a7a2-4ff3629f66d6 | 5 |
| 7 | OUT | 14 | 2023-12-21 13:11:58 | 353d61d3-1b72-4ea3-98da-ce0adada0bef | 4 |
| 8 | OUT | 13 | 2023-03-25 12:38:26 | 9df2fefb-d008-4777-8b71-6ab11115b029 | 3 |
| 9 | OUT | 15 | 2023-12-07 13:33:16 | 7a06a096-a380-4b16-9a68-15c7b9d63403 | 9 |
| 10 | OUT | 5 | 2023-06-26 10:26:57 | 5257e8a3-ac25-410b-857f-2572d5dd18eb | 2 |
Data dictionary
| column | type | description | example | null % |
|---|---|---|---|---|
transaction_ | integer | Primary key identifier for the inventory movement record. | 1 | 0% |
transaction_ | string | Direction of inventory movement: IN (restock or return) or OUT (order fulfillment or transfer out). | OUT | 0% |
quantity | integer | The number of units moved in this transaction. | 1 | 0% |
transaction_ | datetime | Timestamp when the inventory movement occurred. | 2023-10-23 05:35:03 | 0% |
product_ | uuid | Foreign key to products.product_id. | 4dee7f0c-f8fb-47cb-a00b-b78afb7b03eb | 0% |
warehouse_ | integer | Foreign key to warehouses.warehouse_id. | 1 | 0% |
How the tables join
inventory_levels.product_id references products.product_idmany to one: each Inventory levels row points to one Products rowinventory_levels.warehouse_id references warehouses.warehouse_idmany to one: each Inventory levels row points to one Warehouses rowtransactions.product_id references products.product_idmany to one: each Transactions row points to one Products rowtransactions.warehouse_id references warehouses.warehouse_idmany to one: each Transactions row points to one Warehouses row
Questions to answer with it
Which products have the lowest stock levels across all warehouses?
tables: products, inventory_levels
What is the average daily movement (in/out) for high-demand products?
tables: products, transactions
How does inventory turnover vary by product category?
tables: products, inventory_levels, transactions
Identify products with stock below 50 units in any warehouse.
tables: products, inventory_levels
Starter SQL
run against this data before publishingTable names match the SQLite file and the SQL script.
Low Stock Products
SELECT p.product_name, SUM(il.stock_quantity) AS total_stock
FROM products p
JOIN inventory_levels il ON p.product_id = il.product_id
WHERE il.stock_status = 'low_stock'
GROUP BY p.product_name
ORDER BY total_stock ASC
LIMIT 20;Total Units Moved Per Product
SELECT p.product_name, SUM(t.quantity) AS total_units_moved
FROM products p
JOIN transactions t ON p.product_id = t.product_id
GROUP BY p.product_name
ORDER BY total_units_moved DESC
LIMIT 20;Average Stock Quantity by Warehouse
SELECT w.warehouse_name, AVG(il.stock_quantity) AS average_stock
FROM warehouses w
JOIN inventory_levels il ON w.warehouse_id = il.warehouse_id
GROUP BY w.warehouse_name
ORDER BY average_stock DESC
LIMIT 20;Product Stock Status Count
SELECT p.product_name, il.stock_status, COUNT(il.inventory_id) AS count
FROM products p
JOIN inventory_levels il ON p.product_id = il.product_id
WHERE il.stock_status != 'optimal'
GROUP BY p.product_name, il.stock_status
ORDER BY count DESC
LIMIT 20;Load it with pandas
import pandas as pd
# Unzip the CSV download first: one file per table
products = pd.read_csv("products.csv")
warehouses = pd.read_csv("warehouses.csv")
inventory_levels = pd.read_csv("inventory_levels.csv")
transactions = pd.read_csv("transactions.csv")
# Join inventory_levels to products
df = inventory_levels.merge(products, left_on="product_id", right_on="product_id", how="left", suffixes=("", "_products"))
print(df.groupby("category").size().sort_values(ascending=False))Using it in your tool
- Excel
- Load each table into a separate sheet. Use Power Query to join tables or XLOOKUP for lookups. Create a PivotTable on the inventory_levels sheet, with product and warehouse details, to analyze stock status and quantities.
- Power BI
- Create a star schema with a central fact table (inventory_levels or transactions) and dimension tables (products, warehouses). Set up relationships based on product_id and warehouse_id. Create measures for total stock, average stock movement, and inventory turnover.
- SQL
- Load the SQLite or SQL relational download. Use the defined keys and join paths (e.g., inventory_levels.product_id to products.product_id) to perform analyses. Ensure foreign key constraints are considered for accurate joins.
- Python
- Load CSV files into pandas DataFrames. Use DataFrame operations for joins, aggregations, and analysis. Libraries like pandas and matplotlib can be used for data manipulation and visualization.
Formats available
- CSV (zip)One CSV file per table, zipped
- Excel workbookOne worksheet per table
- SQLite databaseA ready-to-query database file with every table
- Parquet (zip)One Parquet file per table, zipped
- SQL scriptCREATE TABLE with primary and foreign keys, then INSERTs
- CSVA single CSV file
- JSONA single JSON file
How this data was generated
Synthetic data. Every row was generated: no real people, customers or companies are in this dataset.
Synthetic data generated by GoMask DataFactory from a relational blueprint: keys, links and rules are enforced in code, text columns are filled by a language model. No real people, companies or transactions.
- Data generated using GoMask DataFactory.
- Synthetic data mimics inventory management scenarios.
- Includes products, warehouses, stock levels, and transactions.
- Checked by an automated quality gate: unique keys, no orphan foreign keys, required columns filled, declared rules and date ranges (realism score 100).
Limitations
- The data is synthetic and does not represent real-world entities.
- Transaction details are limited to movement type, quantity, and date.
- Does not include customer or order information.
- Distributions and correlations are modelled, not measured from real records.
blueprint · inventory-management-dataset
Scale this dataset
Same tables. As many rows as you need.
Open the blueprint behind these 4 tables in Data Factory: keep the relationships, change a column, and generate it at the size you need.
- 200,000 rows
- 1,000,000 rows
- Tables
- products, warehouses, inventory_levels, transactions
- Licence
- yours to use, including commercially
- API slug
- inventory-management-dataset