Mock Data Generator — Realistic test data avatar

Mock Data Generator — Realistic test data

Pricing

from $0.008 / actor start

Go to Apify Store
Mock Data Generator — Realistic test data

Mock Data Generator — Realistic test data

Instantly populate your dev environment with realistic test data. Generate users, companies, products, addresses, emails, phone numbers — or define custom schemas with your own fields. Output JSON or CSV with up to 1,000 records at once. Perfect for prototyping, DB seeding, and API testing.

Pricing

from $0.008 / actor start

Rating

0.0

(0)

Developer

Perry AY

Perry AY

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Mock Data Generator 🎲

Realistic, configurable test data — users, companies, products, addresses, custom schemas

Every developer needs realistic test data — for prototyping UIs, seeding databases, generating API test payloads, or creating convincing demo environments. Manually crafting hundreds of records with realistic names, emails, addresses, and product data is tedious and inconsistent. Mock Data Generator produces structured, lifelike records using the Faker library, supporting five built-in record types and fully custom schemas with typed fields and range constraints.

Generate up to 1,000 records at a time in JSON or CSV format, with deterministic seeding so the same input always produces identical output across environments and CI runs. Batch mode lets you generate multiple record types in a single execution.


✨ Features

  • Five built-in record types — User, Company, Product, Address, and Custom — each with 10–15 realistic fields covering names, emails, phones, addresses, prices, ratings, and more

  • Custom schemas — Define your own record structure with 8 field types: string, integer, float, boolean, uuid, email, phone, and date; each field supports min/max constraints for numeric types

  • High volume generation — Generate up to 1,000 records at a time, suitable for database seeding, load testing, and large-scale API test data

  • Realistic data generation — Powered by the Faker library: names, company names, catch phrases, addresses, phone numbers, emails, URLs, and ISO dates all follow real-world distribution patterns

  • Deterministic output — Same input parameters produce identical output every time via MD5-seeded Faker initialization, enabling reproducible test data across environments and CI/CD pipelines

  • Multiple output formats — JSON for programmatic consumption (APIs, database inserts) or CSV for spreadsheet import, data analysis, and bulk loading

  • Batch mode — Generate multiple record types in a single run with independent configurations per batch, including different counts, formats, and custom schemas

  • Sequential IDs — Every record receives a unique, human-readable ID like usr_000001, prd_000042, or cst_000100 for easy cross-referencing

  • Comprehensive summaries — Every run appends a summary row with total records generated, per-type breakdown, and error count

🚀 Quick Start

Generate 10 User Records

{
"recordType": "user",
"count": 10,
"outputFormat": "json"
}

Response example (user record):

{
"record_type": "user",
"id": "usr_000001",
"name": "Sarah Johnson",
"email": "sarah.johnson@example.com",
"phone": "555-0123-4567",
"username": "sarahj",
"job": "Software Engineer",
"company": "Acme Corp",
"address": "123 Main Street, Springfield, IL 62701",
"city": "Springfield",
"country": "United States",
"zip_code": "62701",
"website": "https://www.sarahjohnson.dev",
"created_at": "2025-11-15T08:30:00+00:00"
}

Generate 50 Products as CSV

{
"recordType": "product",
"count": 50,
"outputFormat": "csv"
}

Custom Schema — Mixed Types

{
"recordType": "custom",
"customFields": [
{ "name": "id", "type": "uuid" },
{ "name": "score", "type": "integer", "min": 0, "max": 100 },
{ "name": "active", "type": "boolean" },
{ "name": "email", "type": "email" },
{ "name": "amount", "type": "float", "min": 10.0, "max": 999.99 }
],
"count": 20,
"outputFormat": "json"
}

Response example (custom record):

{
"record_type": "custom",
"id": "cst_000001",
"uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"score": 73,
"active": true,
"email": "user@example.net",
"amount": 456.78
}

Generate Company Records

{
"recordType": "company",
"count": 5,
"outputFormat": "json"
}

Response example (company record):

{
"record_type": "company",
"id": "cmp_000001",
"name": "Globex Corporation",
"suffix": "Inc",
"catch_phrase": "Synergizing enterprise solutions",
"bs": "Innovate next-generation platforms",
"email": "info@globexcorp.com",
"phone": "555-987-6543",
"address": "456 Oak Avenue, Portland, OR 97201",
"city": "Portland",
"country": "United States",
"zip_code": "97201",
"website": "https://www.globexcorp.com",
"industry": "Information Technology",
"employee_count": 1250,
"founded_year": 2012
}

Batch Mode — Multiple Record Types

{
"batchMode": true,
"batchData": [
{ "recordType": "user", "count": 5, "outputFormat": "json" },
{ "recordType": "company", "count": 3, "outputFormat": "json" },
{ "recordType": "product", "count": 15, "outputFormat": "csv" }
]
}

📋 Input Parameters

ParameterTypeDefaultDescription
recordTypestring"user"Type of data to generate: user, company, product, address, or custom
countinteger10Number of records to generate (1–1000). Clamped to valid range.
outputFormatstring"json"Output format: json for structured data or csv for spreadsheet-compatible output
customFieldsarray[]Custom field definitions for the custom record type. Each field: {name, type, min?, max?}. Ignored for built-in record types.
batchModebooleanfalseEnable batch processing for multiple independent record generation jobs in a single run
batchDataarray[]Array of per-job input objects, each with its own recordType, count, outputFormat, and optionally customFields

Custom Field Types Reference

TypeDescriptionMin/MaxExample Output
stringRandom word"synthesize"
integerRandom integer in range✅ min / max73
floatRandom float in range (4 decimal places)✅ min / max456.7800
booleanTrue or falsetrue
uuidRandom UUID v4"a1b2c3d4-e5f6-7890-abcd-ef1234567890"
emailRealistic email address"user@example.net"
phonePhone number (international format)"+1-555-0123-4567"
dateRandom date (YYYY-MM-DD)"2024-06-15"

📤 Output Format

Each generated record is pushed as a separate dataset item with fields appropriate to the record type:

User Records

FieldTypeDescription
record_typestringAlways "user"
idstringSequential ID: usr_000001, usr_000002, ...
namestringFull name (first + last)
emailstringRealistic email address
phonestringInternational phone number
usernamestringUsername derived from name
jobstringJob title
companystringCompany name
addressstringFull address (one line)
citystringCity name
countrystringCountry name
zip_codestringPostal/ZIP code
websitestringPersonal or work URL
created_atstringISO 8601 timestamp

Company Records

FieldTypeDescription
record_typestringAlways "company"
idstringSequential ID: cmp_000001, cmp_000002, ...
namestringCompany name
suffixstringLegal suffix (Inc, LLC, Ltd, etc.)
catch_phrasestringMarketing catch phrase
bsstringBusiness jargon phrase
emailstringCompany email address
phonestringPhone number
addressstringFull address (one line)
citystringCity
countrystringCountry
zip_codestringPostal code
websitestringCompany website URL
industrystringIndustry/sector
employee_countintegerEmployee count (10–50,000)
founded_yearstringYear founded

Product Records

FieldTypeDescription
record_typestringAlways "product"
idstringSequential ID: prd_000001, prd_000002, ...
namestringProduct name
descriptionstringShort product description (up to 200 chars)
pricefloatPrice in USD
currencystringCurrency code (USD)
categorystringProduct category
brandstringBrand name
skustringStock keeping unit (8-char uppercase)
in_stockbooleanStock availability (80% chance true)
ratingfloatCustomer rating (1.0–5.0)
reviews_countintegerNumber of reviews (0–5000)
created_atstringISO 8601 timestamp

Address Records

FieldTypeDescription
record_typestringAlways "address"
idstringSequential ID: adr_000001, adr_000002, ...
streetstringStreet address
citystringCity
statestringState/province full name
state_abbrstringState abbreviation
zip_codestringPostal/ZIP code
countrystringCountry name
country_codestringTwo-letter country code
latitudefloatLatitude coordinate
longitudefloatLongitude coordinate
timezonestringTimezone identifier
full_addressstringComplete address on one line

Custom Records

User-defined fields as specified in the customFields input parameter, plus record_type: "custom" and a sequential ID prefixed with cst_.

Summary Row

A _summary row is appended at the end with aggregate statistics:

FieldTypeDescription
_summarybooleanAlways true for the summary row
total_records_generatedintegerTotal number of records pushed to the dataset
record_type_breakdownobjectPer-type counts (e.g., {"user": 10, "company": 5})
error_countintegerNumber of generation jobs that failed

⚙️ Technical Details

Deterministic Seeding

The actor generates an MD5 hash from the concatenation of recordType, count, and a sorted JSON representation of customFields. This hash is used to seed the Faker random generator, ensuring that identical inputs always produce identical outputs. This is critical for:

  • Reproducible test data across CI/CD pipeline runs
  • Consistent database seeds across development and staging environments
  • Regression testing where input → output mapping must remain stable

Record Type Generators

Each built-in record type has a dedicated generator function that produces 10–15 realistic fields:

  • User: Uses fake.name(), fake.email(), fake.job(), fake.company(), fake.address(), fake.city(), fake.country(), fake.url(), fake.iso8601() and more
  • Company: Uses fake.company(), fake.catch_phrase(), fake.bs(), fake.company_email(), fake.year(), and fake.random_int()
  • Product: Uses fake.catch_phrase() for names, fake.text() for descriptions, fake.boolean() for stock status, and fake.random.uniform() for ratings
  • Address: Uses fake.street_address(), fake.city(), fake.state(), fake.country_code(), fake.latitude(), fake.longitude(), and fake.timezone()
  • Custom: Iterates over user-defined field definitions, dispatching to the appropriate Faker method for each field type

Volume and Performance

Generation is CPU-bound rather than network-bound. For 1,000 records of a single type, expect 3–10 seconds of processing time. Custom schemas with many fields may add marginal overhead. The apify-default-dataset-item charge event is fired per-record to cover dataset storage costs.

🎯 Use Cases

  • Frontend prototyping — Populate UI components, tables, dashboards, and data visualizations with realistic user and product data before backend API integration is complete

  • Database seeding — Fill development and staging databases with structured test data that mirrors production patterns, complete with realistic distributions across all columns

  • API testing — Generate varied payloads for integration tests, contract tests, and load testing; deterministic seeding ensures tests are reproducible across environments and CI runs

  • Demo environment creation — Create convincing demo data for sales presentations, trade show booths, and client walkthroughs with realistic company names, product catalogs, and customer records

  • Schema validation — Test data model boundaries by generating edge-case records: minimum/maximum values, different field combinations, and high-volume cardinality checks

  • Performance benchmarking — Generate large datasets (1,000 records) to benchmark database query performance, API response times, and rendering pipeline efficiency under load

❓ FAQ & Troubleshooting

Q: Are the generated records guaranteed to be unique? A: Each record gets a unique sequential ID, but the underlying Faker values (names, emails, etc.) follow probabilistic distributions — duplicates are unlikely but not mathematically guaranteed. For strict uniqueness, generate records with count set to your exact requirement.

Q: Why do I get the same records every time? A: That's by design. The actor uses deterministic seeding — the same input always produces the same output. Change any input parameter (recordType, count, customFields) to get different data. For truly random output across runs, change the count or add a field.

Q: Can I generate records localized to a specific country? A: The current implementation uses the default Faker locale (en_US), producing English-language data with US-format addresses and phone numbers. Localized locales can be added in future versions.

Q: What happens if I set count to 0 or a negative number? A: The count is clamped to the range 1–1000. A value of 0 or negative defaults to 1 record.

Q: Is custom schema a premium feature? A: Yes. Using recordType: "custom" triggers a premium charge event (custom-schema). Built-in record types (user, company, product, address) use the standard charge model without additional events.


Check out other developer utilities by perryay:

ToolDescription
JSON StudioFormat, validate, transform, and diff JSON data with 8 operation modes
QR CraftGenerate high-quality QR codes in PNG or SVG, batch up to 50
UUID LabGenerate UUID v4/v7, NanoID, Short ID, and ULID identifiers
Domain IntelWHOIS, DNS, and SSL lookup for domain intelligence
Meta MateExtract Open Graph, Twitter Cards, and JSON-LD metadata
IP GeoMulti-provider IP geolocation with ISP detection
URL HealthCheck URL accessibility, redirects, and SSL health
PW ForgeGenerate secure passwords with entropy calculation
TZ MateConvert timezones and check DST offsets
Regex LabTest and debug regular expressions online
Brand Monitor LiteTrack brand mentions across multiple URLs
Link Quality AnalyzerDetect broken links and audit link quality
Mock Data GeneratorGenerate realistic test data for development
HTML to MarkdownConvert web pages or HTML to clean Markdown
SSL Cert InspectorDeep SSL/TLS certificate analysis with scoring