Generate a whole database, not a pile of separate CSV files. Customers, orders, items, payments and shipments that reference each other, with totals that add up and dates in order, from your SQL schema or a plain-English description.
Free trial for every new account. No credit card.
-- Rule: an order's subtotal is the sum of its line items
SELECT COUNT(*) FROM orders o
JOIN (SELECT order_id, SUM(line_total) s FROM order_items GROUP BY order_id) x USING (order_id)
WHERE ABS(o.subtotal - x.s) > 0.011;
-- Result on the e-commerce dataset: 0 broken rows
-- Rule: every payment equals its order's total
SELECT COUNT(*) FROM payments p JOIN orders o USING (order_id)
WHERE ABS(p.amount - o.total_amount) > 0.011;
-- Result: 0 broken rows
Two of the 48 checks published with the free e-commerce dataset. Each one counts the rows that break a rule.
| dataset | tables | rows | rules that hold | get it |
|---|---|---|---|---|
| E-commerce database | 7 | 499,385 | 48 of 48 | Kaggle · GitHub |
| Dirty e-commerce data | 4 | 250,000 | 19 of 19 | Kaggle · GitHub |
| Card transactions with fraud labels | 5 | 500,000 | 29 of 29 | Kaggle · GitHub |
| SaaS subscriptions and churn | 6 | 249,113 | 31 of 31 | Kaggle · GitHub |
| Web analytics funnel events | 4 | 425,918 | 23 of 23 | Kaggle · GitHub |
| Hospital records | 6 | 300,000 | 32 of 32 | Kaggle · GitHub |
| App users with edge cases | 5 | 200,000 | 30 of 30 | Kaggle · GitHub |
| HR, workforce and attrition | 6 | 155,186 | 31 of 31 | Kaggle · GitHub |
| Smart meter readings | 3 | 500,000 | 20 of 20 | Kaggle · GitHub |
| Auto insurance policies and claims | 5 | 192,843 | 35 of 35 | Kaggle · GitHub |
| Fleet GPS tracking | 4 | 404,052 | 30 of 30 | Kaggle · GitHub |
| AI jobs and salaries | 3 | 510,000 | 26 of 26 | Kaggle · GitHub |
| Black Friday and Cyber Week sales | 1 | 408,000 | 23 of 23 | Kaggle · GitHub |
13 free public datasets, 4.6 million rows, 377 SQL rule checks: every one returns 0 broken rows. Download any of them and run the checks yourself.
Tables are generated in dependency order, so every foreign key points at a row that exists. Joins work, constraints load, and nothing is orphaned.
An order's subtotal is the sum of its items, the payment equals the order total, and running balances follow the transactions. The numbers agree from table to table.
Write rules in plain terms, such as "a cancelled order has no shipment" or "discharge comes after admission". The engine keeps them on every row, at any size.
232 data types and 222 built-in generators, one of the largest libraries of any test data generator, plus over 200 automatic links that keep fields in a row consistent: the city sits in the row's country, the email follows the name.
Real airport, ICD-10 and MCC codes; VINs, IBANs, card numbers and barcodes with valid check digits; real cities with matching postcodes and time zones; skewed prices and realistic status mixes instead of uniform noise.
Up to 500,000 rows in one run, with a fixed seed so the same plan gives the same data again. Download as a SQL script for PostgreSQL, MySQL, SQL Server or SQLite, or as CSV, Excel or JSON.
Describe your data in plain English, or upload your SQL schema for PostgreSQL, MySQL / MariaDB, SQL Server and SQLite.
Check the tables, columns and rules the AI proposes, and adjust anything you like.
Choose how many rows you need and download a ready-to-run SQL script, CSV, Excel (one sheet per table) or JSON.
A tool that generates several related tables at once, so the foreign keys match and the values agree across tables. Many generators produce one table at a time, which leaves you to stitch the files together and fix the keys yourself.
Every rule in your plan is kept on every row. As public proof, our 13 free datasets on Kaggle and GitHub (4.6 million rows) each come with one SQL query per rule, 377 queries in all, and every one returns 0 broken rows.
232 data types, 222 of them with their own built-in generator. That is one of the largest built-in libraries of any test data generator.
Values that look and behave like production data: real codes and places, identifiers that pass validation, realistic distributions, and business rules that hold across tables. The data is generated, not copied, so it is not a statistical twin of any real dataset and contains no real person.
Yes. Upload CREATE TABLE statements for PostgreSQL, MySQL, SQL Server or SQLite and your structure is kept; or describe the database in plain English and review the plan before generating.
From a few hundred rows for a test fixture up to 500,000 rows in one run, within your plan's monthly records.