Generate an e-commerce test dataset

This worked example generates 1,000 synthetic orders for testing an ingestion or analytics pipeline. It uses Ground's rule-based engine, a fixed seed and explicit distributions. Download the data and specification to inspect the output or reproduce it locally.

By the Ground team · 1,000 rows · 10 columns · Seed 991

Open this example in Ground →

The same specification, row count and seed, in your own editable copy. Sign in to save it; preview is free and normal credits apply to exports.

Download the actual output

No signup required. All records are synthetic. The manifest contains file sizes and SHA-256 checksums so you can verify your copy.

Start with a clear request

This request describes the intent. The downloadable specification records the exact settings used to generate the files.

Create 1,000 e-commerce orders with unique order IDs, customer names and emails, products, quantities, long-tailed prices and order dates. Use delivered, shipped, processing, returned and cancelled statuses with weights 78, 10, 5, 5 and 2. Leave about 12% of ratings missing. No AI-written reviews.

Inspect the first eight rows

These are the first rows of the downloadable files. CSV preserves decimal formatting; JSONL carries native numbers, booleans and nulls.

First eight generated rows
Order IDProductQuantityUnit priceStatusRating
ORD-100001Bespoke Metal Keyboard1212.27delivered4
ORD-100002Awesome Wooden Chicken4238.94delivered3
ORD-100003Generic Silk Pants451.73delivered3
ORD-100004Tasty Gold Shirt2128.25shipped2
ORD-100005Unbranded Rubber Fish3185.03delivered5
ORD-100006Recycled Concrete Table2144.09delivered5
ORD-100007Soft Wooden Shoes236.53returned5
ORD-100008Refined Steel Mouse323.32shipped4

Check the measured output

These counts are calculated from the full downloadable dataset. Probability settings describe sampling rates, so observed percentages can differ.

Unique order IDs
1000
Missing ratings
115 / 1,000 (11.50%)
Status: delivered
767 / 1,000 (76.70%)
Status: shipped
106 / 1,000 (10.60%)
Status: processing
56 / 1,000 (5.60%)
Status: returned
50 / 1,000 (5.00%)
Status: cancelled
21 / 1,000 (2.10%)

Use it in your workflow

  1. Download the CSV and load it into a disposable test table.
  2. Check the unique order IDs, numeric types and allowed statuses before exercising your pipeline.
  3. Verify that blank CSV ratings are treated as missing; the JSONL version encodes them as null.
  4. Run your own aggregations and assertions. Save this artifact when you need an exact regression fixture.

Understand the schema

  • Order ID: sequence
  • Customer: faker
  • Email: faker
  • Product: faker
  • Category: faker
  • Quantity: integer
  • Unit price: number
  • Ordered at: date
  • Status: category
  • Rating: category, missing probability 0.12

Verify the download yourself

Download the verification script. It uses Python's standard library to download the files, verify their checksums, count records and check unique identifiers. No account or extra package is required.

curl -fsS https://useground.dev/examples/verify-example.py -o verify-example.py
python3 verify-example.py ecommerce-test-data

Recreate the dataset through the API

With a Ground account and API key, send the downloaded specification in the spec field to create a dataset. Then start an export with the returned dataset ID. This uses normal export credits (1 for one export of this rule-based example). See the API reference for job polling and download.

# Requires curl and jq. Set GROUND_API_KEY to your own API key.
curl -fsS https://useground.dev/examples/ecommerce-test-data/spec.json -o spec.json
jq '{spec: .}' spec.json > request.json
curl -fsS https://useground.dev/api/datasets -H "Authorization: Bearer $GROUND_API_KEY" -H "Content-Type: application/json" --data-binary @request.json

# Replace DATASET_ID with the id returned above.
curl -fsS https://useground.dev/api/jobs -H "Authorization: Bearer $GROUND_API_KEY" -H "Content-Type: application/json" -d '{"datasetId":"DATASET_ID","format":"jsonl"}'

The files were regenerated and checked against the specification before publication. Keep the downloaded fixture when you need exact long-term output: future engine versions can change generated values. The manifest records the seed and an engine-source fingerprint.

Limitations

This is a designed simulation, not a model fitted to a merchant's production data. Product and department values are independently generated, and each row is an order rather than a line item. No tax, inventory, returns workflow or accounting totals are modeled. Extend the schema for those tests.

Build your own version

Open this example in Ground to adapt this exact specification, or use the API and Python SDK. Read the workflow guide and Ground versus a Faker script to choose an approach.