Test like production — without production copies.
Sanitize and hand-built fixtures hide the edge cases that break releases. Generate schema-aware rows that keep joins honest, then drop them into staging or CI.
Profile the shape, then fill the suite.
Watch the agentic dashboard read the schema and synthesize rows. This is how lower environments get fresh data without a prod dump.
Faker passes green. Production still fails.
Independent mock tables break joins. Over-sanitized staging hides the distributions that trigger real bugs. A shared spreadsheet is not a CI dataset.
- Rule-based fixtures miss rare states and cross-table relationships
- Prod dumps are slow, blocked, or both — so staging drifts
- Tests need on-demand rows you can regenerate, not a static extract
Refresh staging without a prod dump.
Lower environments lag because copying prod is slow or forbidden. Profile the schema you must honor, generate fresh rows, and keep staging honest without the dump.
- Schema-aware generation matches the contract your app already expects
- On-demand datasets instead of a spreadsheet edited last quarter

Keep the joins that mocks break.
Independent fake tables pass green and fail in traffic. Generate multi-table graphs with valid foreign keys so tests exercise real relationships.
- Primary and foreign keys stay consistent across the table graph
- Learned distributions — not Faker noise that hides edge cases
from dataxid import Table
accounts = Table(
pd.read_csv("accounts.csv"),
primary_key="account_id",
)
transactions = Table(
pd.read_csv("transactions.csv"),
foreign_keys={"account_id": accounts},
)synthetic = dataxid.synthesize_tables({
"accounts": accounts,
"transactions": transactions,
})
# auto-assigned PKs
synthetic["accounts"]
# sequential rows, valid FKs
synthetic["transactions"]Pin known keys, fill the rest.
CI fixtures need fixed IDs and realistic surrounding rows. Condition on the columns you already know; impute the gaps without rewriting the whole table by hand.
- Hold known values fixed while the model completes the row
- Fill nulls for incomplete fixtures without inventing a second dataset
Condition on known values
Fix the columns you already know and let the model complete the rest.
conditions = pd.DataFrame({
"income": [">50K"] * 1000,
})
synthetic = model.generate(
conditions=conditions,
)Impute missing cells
Fill nulls with model predictions while every non-null cell stays put.
model = dataxid.Model.create(data=df)
filled = model.impute(
df,
trials=3,
pick="mode",
)Same engine in CI.
Call the SDK from a pipeline job when you need a fresh dataset on every run — not only from the dashboard.
pip install dataxidimport dataxid
import pandas as pd
dataxid.api_key = "dx_..."
df = pd.read_csv("data.csv")
synthetic = dataxid.synthesize(data=df, n_samples=1000)Refresh a lower environment today.
Generate your first test dataset on the free tier.