How to generate synthetic test data

By the Ground team

To generate useful synthetic test data, specify the schema, relationships, edge cases and volume your application needs. In Ground, describe those requirements, inspect 25 sample rows, refine them, and export a reproducible dataset for your test environment.

Specify behavior as well as columns

A pipeline can accept every row and still fail on the data it encounters in production. Start with the behavior you want to exercise: skewed amounts, missing optional fields, unusual statuses, large volumes or repeated events for one entity. State which values should agree within a row.

Ground supports numeric distributions, weighted categories, booleans, dates, identifiers, sequences and formulas. AI-written text can add descriptions or messages conditioned on other values. Keep the first fixture small enough to inspect before scaling it up.

Example request

Generate 50,000 e-commerce orders. Include order ID, customer name, email, city, state, ZIP, amount, status and order date. Use a long-tailed amount distribution, 5% returned orders and 8% missing optional notes. Keep each customer's location fields consistent.

Review and preserve your fixture

Ground shows a 25-row preview. Refine the request or click a cell to explain a mismatch. Every revision can be undone, and the exported dataset starts with the rows you approved.

Designed datasets use a saved specification and seed. Rule-based values are deterministic for that specification and seed, making failures easier to investigate. Keep the exported artifact when you need an exact fixture containing AI-written text; generating text again can produce different wording.

  1. Check types and required fields against the consuming system.
  2. Inspect dependent fields together, such as location and postal code.
  3. Use a small export for integration tests before running a large load test.
  4. Save the fixture, specification and seed alongside the test scenario.

For source-based fixtures, upload one table or several related tables. Ground detects keys and links, generates new parent and child rows, and exports related tables together. Verify referential integrity and the distribution of child counts in the system consuming the output.

An uploaded dataset is also useful when a test depends on production-shaped distributions. Ground learns those patterns and can focus generation on a segment. For deliberate invalid inputs, maintain a separate fixture with the exact validation failures you need; realistic generation alone is not a complete negative-testing strategy.

Move the workflow into code

Use Ground's API or Python SDK to create datasets, start exports and download results from scripts. Export CSV for table-oriented tools, JSON Lines for record-oriented ingestion or Parquet for analytical pipelines. The API reference documents requests and export polling.

Budget load tests separately from fixture generation: Ground generates the file, while your own test runner controls request rates and assertions. Review pricing for row credits and any additional AI-text usage.

Common questions

Can I generate test data without copying production records?

Yes. Describe a dataset from scratch without uploading production data. If you learn from a source dataset instead, review Ground's privacy controls and report before using or sharing the generated output.

Can I generate millions of test rows?

Ground supports up to 10 million rows per dataset. AI-written text has lower export limits and additional usage costs. Start with a small fixture and check the Generate menu before scaling.

Try it with your own dataset

Start building for free, estimate your usage or use the API and Python SDK.

Review the public benchmarks and security and privacy controls when evaluating Ground for your team.

Related guides