Generate deterministic, linked, temporally coherent synthetic Person Objects.
Project description
ProfileFoundry
GitHub: selvamsriram/ProfileFoundry · Hugging Face dataset: srirxml/ProfileFoundry-Core-100K
ProfileFoundry is a Python package for generating structured, deterministic synthetic Person Objects. It is built for tests, demos, evaluations, and data pipelines that need realistic-looking people with internally consistent identity, address, employment, education, finance, health, contact, household, relationship, and event-history fields.
The generator supports eight locales and can emit single profiles, linked households, JSONL batches, or normalized parquet datasets.
Install
pip install profilefoundry
For development from a checkout:
pip install -e ".[dev,hf]"
Quick Start
Check that the installed package can generate every supported locale:
profilefoundry verify
Generate one profile as JSON:
profilefoundry person --locale US --seed 4321 --profile-seq 1
Generate a linked household. Household members share household IDs, addresses, family edges, emergency contacts, and spouse/parent/child/sibling references where applicable:
profilefoundry household --locale UK --seed 4321 --seq 7
Generate 1,000 flat JSONL profiles:
profilefoundry scale --n 1000 --locale CA --out /tmp/ca_profiles.jsonl
Generate 500 linked households as JSONL:
profilefoundry scale-households \
--n 500 \
--locale AU \
--seed 4321 \
--out /tmp/au_households.jsonl
Run validation on a small generated sample:
profilefoundry validate \
--n 300 \
--locales US,UK,IN \
--skip-hibp
Export a normalized multi-locale dataset with JSONL, parquet tables, a dataset card, and a manifest:
profilefoundry export \
--out /tmp/profilefoundry_core \
--n-per-locale 1000 \
--generation-date 2026-05-24 \
--exported-at 2026-05-24T00:00:00Z \
--skip-hibp
Time generation at multiple scales:
profilefoundry scale-smoke --locale US --sizes 1000,10000
What It Generates
Each Person Object includes:
- Stable IDs and deterministic generation metadata
- Identity fields such as name, date of birth, gender, nationality, and birthplace
- Current and historical addresses
- Contact details using reserved
profilefoundry.exampledomains - Education and employment records
- Household and family links
- Finance and health attributes
- Replayable non-credit event timelines
The same seed and pinned generation date reproduce the same generated content.
Dataset
The public 100K-profile dataset is available on Hugging Face:
srirxml/ProfileFoundry-Core-100K
The Hugging Face release includes canonical JSONL, a complete
person_objects.parquet viewer table, normalized relational parquet files,
a manifest with file hashes, validation reports, and leakage-audit summaries.
CLI Reference
| Command | Purpose | Example |
|---|---|---|
profilefoundry verify |
Generate one profile per supported locale as a smoke test. | profilefoundry verify |
profilefoundry person |
Print one deterministic Person Object as JSON. | profilefoundry person --locale US --seed 4321 --profile-seq 1 |
profilefoundry household |
Print one linked household as JSON. | profilefoundry household --locale UK --seed 4321 --seq 7 |
profilefoundry scale |
Generate flat JSONL profiles for one locale. | profilefoundry scale --n 1000 --locale CA --out /tmp/ca.jsonl |
profilefoundry scale-households |
Generate linked household members as JSONL. | profilefoundry scale-households --n 500 --locale AU --out /tmp/au_households.jsonl |
profilefoundry validate |
Run distributional, leakage, replay, and consistency checks. | profilefoundry validate --n 300 --locales US,UK,IN --skip-hibp |
profilefoundry export |
Write JSONL, parquet tables, manifest, and dataset card. | profilefoundry export --out /tmp/pf_core --n-per-locale 1000 --skip-hibp |
profilefoundry scale-smoke |
Time the generator at several sizes. | profilefoundry scale-smoke --sizes 1000,10000,100000 |
Python API
from datetime import date
from profilefoundry.generate.factory import make_person
from profilefoundry.linkage.orchestrator import iter_households
person = make_person(locale="US", profile_seq=1, global_seed=4321, today=date(2026, 5, 24))
print(person.model_dump_json(indent=2))
household = next(iter_households("US", n_households=1, global_seed=4321, today=date(2026, 5, 24)))
print([p.profile_id for p in household.persons])
Write a small JSONL file from Python:
from datetime import date
from pathlib import Path
from profilefoundry.generate.factory import make_person
out = Path("/tmp/us_profiles.jsonl")
with out.open("w", encoding="utf-8") as handle:
for seq in range(1, 101):
person = make_person(
locale="US",
profile_seq=seq,
global_seed=4321,
today=date(2026, 5, 24),
)
handle.write(person.model_dump_json() + "\n")
Validation And Reproducibility
ProfileFoundry ships with reference-data loaders, deterministic seed derivation, release report checks, and invariant tests for schema shape, age-gating, addresses, education, employment, household/family linkage, timeline replay, leakage checks, normalized export integrity, and reproducibility.
From a checkout:
python -m pytest tests/
python scripts/verify_reproducibility.py
python scripts/verify_hf_release_current.py
Limitations
These limitations describe the current package behavior:
- Generated profiles are adults-only; the generator does not emit children as standalone Person Objects.
- The core generator is structured-data only. It does not generate documents, biographies, messages, images, or other free-text content.
- Supported locales are
US,UK,CA,AU,NZ,IE,IN, andPH. - Full distributional validation is implemented for
US,UK,IN,CA, andAU;IE,NZ, andPHuse the same generation pipeline but have lighter validation coverage. - Family linkage is household-local. Cross-household extended-family edges are not generated.
- Emails use reserved
profilefoundry.exampledomains. They are suitable for test data and should not be treated as deliverable addresses. - Financial, health, education, and employment fields are synthetic approximations for testing and evaluation, not claims about real people.
- The package includes compact reference tables needed by the generator; richer upstream reference refreshes are handled by repository scripts, not at import time.
License
- Code and SDK: ProfileFoundry Citation License 1.0. Public uses and
redistributions must cite the ProfileFoundry paper when available, or this
repository until then. Machine-readable citation metadata is in
CITATION.cff. - Generated dataset: CC-BY-4.0.
- Embedded reference data retains its upstream license; see
data/reference/MANIFEST.md.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file profilefoundry-1.0.1.tar.gz.
File metadata
- Download URL: profilefoundry-1.0.1.tar.gz
- Upload date:
- Size: 161.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dcfc86933b0ca5a4931a95ab73462aaba82609877e45e347aca1a3ab6fc372cd
|
|
| MD5 |
4b77b2f96e45f544dea238d12d9fcc22
|
|
| BLAKE2b-256 |
72d43d7d42b03cd3321821c493ce9c9a4d2aa05213e2f63db14c605aac288a80
|
File details
Details for the file profilefoundry-1.0.1-py3-none-any.whl.
File metadata
- Download URL: profilefoundry-1.0.1-py3-none-any.whl
- Upload date:
- Size: 175.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d4ca4889facdcbded509e0e31abf40df861ded567d9034bedc2617255e4829d1
|
|
| MD5 |
304758c179dee33c59bc3af702ed6842
|
|
| BLAKE2b-256 |
1288636c80bef0adfbd18505aa79f23e2fdf90287990ce751930c4c33a091c82
|