Ask for the dataset.
Describe what you need. An agent profiles, generates and scores it — a table you can share when the real one can't leave.
- Free to start
- 100K rows/month
- Nothing to install
Train, generate, preview — in one pass.
The same loop every run: train on the shape, generate the rows, preview before anything downstream sees them.
| 1 | 29.85 | 29.85 | DSL | Month-to-month | No |
| 34 | 56.95 | 1,889.5 | DSL | One year | No |
| 2 | 53.85 | 108.15 | DSL | Month-to-month | Yes |
| 45 | 42.3 | 1,840.75 | DSL | One year | No |
| 11 | 29.6 | 346.45 | DSL | Month-to-month | No |
| 4 | 74.4 | 306.6 | Fiber optic | Month-to-month | Yes |
| 66 | 105.65 | 6,844.5 | Fiber optic | Two year | No |
| 22 | 89.1 | 1,980.2 | Fiber optic | Month-to-month | No |
| 10 | 49.55 | 475.3 | DSL | Month-to-month | No |
| 28 | 104.8 | 3,046.05 | Fiber optic | One year | Yes |
| 52 | 70.15 | 3,645.5 | DSL | Two year | No |
| 7 | 99.65 | 684.35 | Fiber optic | Month-to-month | Yes |
Showing 12 of 7,043 rows
Steer the mix, not just the row count.
Rebalance a category, close a bias gap, hold known values, fill the gaps — in the same conversation that built the table.
Make this 50/50
Override a skewed category until the mix is the one you asked for.
Before
Asked
Close the gap
Reduce a statistical parity gap across a sensitive attribute.
Keep what you know
Fix the columns you already have; the model completes the rest.
Fill the holes
Nulls become model predictions. Every non-null cell stays put.
A customer isn't a row.
It's a profile, a year of transactions, a handful of support tickets and every order they ever placed — four tables, held together by keys. That's the thing we generate.
Children learn their parents
Child rows are generated conditioned on the parent, so per-customer counts, ordering and timing carry over. That's the default here, not a flag you switch on.
Not a copy
Same shape, different values. Keys are assigned fresh and remapped, so nothing in the synthetic database points back at a real one.
customers
real4102
generated7
orders
spread over 12 months
real4102
generated7
transactions
salary on the 5th
real4102
generated7
tickets
mostly billing
real4102
generated7
synthesize_tables() · order resolved from your foreign keys · circular schemas rejected before training
Every generation comes with a report.
Fidelity and privacy are measured, not asserted. The same scores you can defend to a reviewer ship with every run.
Fidelity with breakdown
Univariate and bivariate fidelity, with a per-column breakdown.
Privacy you can audit
Distance to closest record, identical match share, and NNDR — then open the full instrument.
Open SynthEvalBring the data you have.
Upload a file, connect a database, or start with the sample dataset. Everything in your workspace is ready the moment you ask.
CSV upload
Drop a file in; it is a table you can synthesize right away.
PostgreSQL / MySQL
Connect a database and work with its tables directly.
Sample dataset
Start with a sample table and see the whole loop in a minute.
Start with your own dataset.
Free to start. Upload a file or try the sample.