Public analytics tool

Synthetic Dataset Generator

A public Python tool that creates realistic, multi-table ecommerce datasets for analytics practice, SQL modeling, BI dashboards, data science experiments, data-cleaning exercises, and portfolio projects.

PythonSynthetic DataEcommerce AnalyticsSQL PracticeData ScienceStreamlitPortfolio Tool

All generated records are fully synthetic. They do not represent real customers, sellers, orders, companies, or market activity.

Project overview

Fresh, structured practice data for realistic analytics work

Most public datasets are overused, outdated, too simple, or poorly structured for original portfolio work. This generator creates modern, US-like synthetic ecommerce data with customers, sellers, marketplace listings, products, orders, payments, shipping, reviews, calendar data, metadata, and validation reports.

The goal is not to represent real ecommerce activity. The goal is to provide realistic synthetic data that analysts can download, study, load into SQL tools, and use as a foundation for their own projects.

The repository also includes an optional local Streamlit app for validated configuration, dataset generation, KPI and trend exploration, table downloads, marketplace analysis, validation review, and schema reference. Nothing is generated by this portfolio website.

01

Download a ready-made dataset

Choose one of four 10,000-order scenarios and download a pre-generated CSV ZIP directly from this page. No setup or Python environment is required.

Go to downloads

02

Generate a custom dataset locally

Clone the public repository to generate clean or intentionally dirty datasets through the CLI or local Streamlit app, with control over scenarios, size, seeds, dates, and configuration.

View local setup

Dataset contents

A relational ecommerce package, not a single flat file

Each generated package contains analytics-ready tables, an explicit seller-product catalog, field documentation, metadata, and validation results. Dirty-mode packages add a manifest describing the injected issue counts.

customers.csv

Synthetic customer profiles with state, city, region, segment, and lifecycle stage.

sellers.csv

Seller geography, quality, fulfillment capacity, selection weight, and churn state.

products.csv

Generic product categories with synthetic prices, weights, and dimensions.

seller_products.csv

The authoritative marketplace catalog, connecting sellers and products through seller-specific listings, prices, dates, and active states.

orders.csv

Ecommerce orders with timestamps, status, calendar fields, and scenario labels.

order_items.csv

Line-level listing, product, seller, price, discount, quantity, and allocated shipping details.

payments.csv

Payment methods, installments, and values reconciled to each order total.

shipping.csv

Distance bands, delivery estimates, actual delivery times, delays, and shipping cost.

reviews.csv

Review scores influenced by delivery delay, seller quality, scenario, and satisfaction risk.

calendar.csv

Reusable date attributes including ISO week, season, weekend, holiday, and promotion flags.

simulation_metadata.csv

Run configuration, record counts, provenance, and the synthetic-data disclaimer.

data_dictionary.csv

Machine-readable field definitions with types, descriptions, examples, and nullability.

validation_summary.json / .md

Machine-readable and human-readable results for schema, key, date, total, listing, and relationship checks.

dirty_data_manifest.json

Included only in dirty packages, with applied defect counts by category, table, and column without revealing exact affected rows.

Database design

Relational structure at a glance

The generated tables form a connected ecommerce model with explicit primary and foreign keys. Seller-product listings bridge the shared product catalog to sellers, while orders connect customers to items, payments, shipping, and reviews.

Entity relationship diagram for the generated ecommerce dataset, showing customers, orders, order items, seller-product listings, sellers, products, payments, shipping, reviews, calendar, data dictionary, and simulation metadata
Entity relationship diagram for the generated dataset. Select the image to open the full-size version.

Download sample datasets

Choose a ready-made 10,000-order scenario

These pre-generated CSV packages are the fastest way to start exploring the data. Each uses seed 42 and the default January 2024 through December 2026 date range.

Baseline

Standard synthetic ecommerce behavior with normal seasonality, seller activity, delivery performance, and review distribution.

Size
10,000 orders
Format
CSV ZIP
Seed
42
Date range
2024 to 2026
Download CSV ZIP

Holiday Spike

Synthetic ecommerce data with stronger Q4 demand, increased holiday pressure, slightly longer delivery times, and more satisfaction risk.

Size
10,000 orders
Format
CSV ZIP
Seed
42
Date range
2024 to 2026
Download CSV ZIP

Logistics Improvement

Synthetic ecommerce data where delivery performance improves, late deliveries decrease, and review outcomes are slightly better.

Size
10,000 orders
Format
CSV ZIP
Seed
42
Date range
2024 to 2026
Download CSV ZIP

Seller Churn

Synthetic ecommerce data where some important sellers become inactive partway through the period and revenue shifts to other sellers.

Size
10,000 orders
Format
CSV ZIP
Seed
42
Date range
2024 to 2026
Download CSV ZIP

The downloadable files are pre-generated sample datasets. For larger datasets, custom date ranges, different random seeds, or additional configuration, clone the public repository and run the generator locally.

Available scenarios

Business conditions that create visible analytical differences

Each scenario changes documented configuration values so analysts can compare demand, fulfillment, seller, and satisfaction outcomes.

Baseline

The reference scenario: normal seasonality, seller concentration, fulfillment performance, and review behavior.

Holiday Spike

Stronger Q4 and category demand add shipping pressure, increase delays, and create more negative review risk.

Logistics Improvement

Shorter transit times, lower shipping costs, and fewer late deliveries support better satisfaction outcomes.

Seller Churn

The highest-volume sellers deactivate during the period, and their demand redistributes across active sellers.

Use it locally

Clone the repository and generate locally

The generator runs entirely on your computer. Clone the public repository once, install its dependencies, and then use either the CLI or the optional visual app.

  1. 1

    Install the prerequisites

    Install Git, Python 3.11 or newer, and uv on your computer.

  2. 2

    Choose a local folder

    Open a terminal in the folder where you want to keep the project.

  3. 3

    Clone the public repository

    Run the git clone command shown here, then enter the new synthetic-dataset-generator directory.

  4. 4

    Install the project dependencies

    Run uv sync --extra dev from the repository root to create the environment and install the CLI.

  5. 5

    Generate your first dataset

    Run the baseline example or change the scenario, order count, seed, dates, and YAML configuration for your project.

Open Repository

Generate with the CLI

Reproducible scripted generation for automation and larger runs.

git clone https://github.com/ablancogcr/synthetic-dataset-generator.git
cd synthetic-dataset-generator
uv sync --extra dev
uv run synthetic-dataset-generator generate \
  --config config/default_config.yaml \
  --output data/output \
  --scenario baseline \
  --orders 50000 \
  --seed 42

Launch the local Streamlit app

A validated configuration editor, generator, and local dataset viewer. The editor changes only existing YAML keys, validates the complete file, and saves valid changes atomically. Files stay on the user's machine.

uv sync --extra dev --extra viewer
uv run streamlit run streamlit_app/app.py

Create a dirty-data training package

Adds reproducible nulls, missing days, malformed dates and types, negative values, and empty orders for cleaning practice.

uv run synthetic-dataset-generator generate \
  --config config/default_config.yaml \
  --output data/output \
  --scenario baseline \
  --orders 50000 \
  --seed 42 \
  --dirty
Clean packages are zipped only after validation passes. Dirty packages first validate a clean source, then verify that the configured defects survived CSV serialization and report expected_issues.

Example use cases

One dataset, several analytics project paths

The same relational package can support engineering, reporting, modeling, and end-to-end portfolio work.

Build a SQL analytics warehouse
Create a Looker Studio, Power BI, or other BI dashboard
Practice joins, aggregations, and dimensional modeling
Profile and clean intentionally dirty datasets
Build a customer satisfaction risk model
Predict late deliveries
Analyze seller concentration, catalog breadth, and listing prices
Create a complete analytics portfolio case study

Methodology

Interpretable simulation, not a black-box model

The generator uses a rule-based probabilistic simulation approach. It combines weighted sampling, statistical distributions, segment-based behavior, seller-specific catalogs, seasonality multipliers, scenario adjustments, stable seeds, optional dirty-data injection, and validation checks to create relational synthetic ecommerce data.

  • Weighted state and region assignment
  • Category-based product pricing
  • Seller-specific marketplace listings and listing prices
  • Customer populations that scale reproducibly with order volume
  • Seasonality and promotion periods
  • Seller quality and fulfillment capacity
  • Distance-band shipping logic
  • Delivery delay simulation
  • Review scores influenced by delivery performance and seller quality
  • Optional reproducible dirty-data injection for cleaning exercises
  • Validation checks for keys, dates, totals, listings, and relationships

Technical stack

A focused Python data-generation tool

The CLI and optional Streamlit interface stay local, reproducible, documented, and testable. This portfolio page only serves static download files and does not run the generator.

PythonpandasNumPyFakerPydanticPyYAMLStreamlitPlotlypytestruffuvCSVJSONMarkdown

Current MVP scope

What the project supports today

  • Local CLI and Streamlit dataset generation
  • Validated visual configuration editor
  • Four business scenarios
  • Clean and reproducible dirty-data modes
  • Multi-table CSV output with seller-product listings
  • ZIP packaging with clean or expected-issue validation status
  • Local dataset viewer with KPIs, trends, table exploration, and schema reference
  • Customer population scaling based on requested order volume
  • Synthetic metadata
  • Data dictionary
  • Validation summaries
  • Public GitHub repository
  • Static downloadable samples on this portfolio page

Future roadmap

Planned extensions and follow-on projects

  • More dataset domains beyond ecommerce
  • Larger downloadable sample datasets
  • Parquet export
  • SQLite export
  • BigQuery or PostgreSQL loading scripts
  • Additional documented scenarios and larger performance profiles
  • More advanced data science examples
  • A separate SQL analytics project built on the generated data
  • A separate customer satisfaction risk modeling project

The future SQL analytics and data science work will be developed as separate portfolio stages built on top of this generator.

Synthetic data disclaimer

Designed for learning and experimentation

These datasets are fully synthetic. They do not contain real customers, sellers, orders, companies, or market activity. They are intended for analytics practice, SQL projects, BI dashboards, data science experiments, and portfolio work. They should not be interpreted as real market data or used for operational business decisions.

Public repository

Inspect the methodology, configuration, validation, and source code

Clone the project to create a dataset that matches your own analytical question, or review the documented business rules before using a ready-made download.

View on GitHub