Mock Data Generator — Realistic test data
Pricing
from $0.008 / actor start
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
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, orcst_000100for 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
| Parameter | Type | Default | Description |
|---|---|---|---|
recordType | string | "user" | Type of data to generate: user, company, product, address, or custom |
count | integer | 10 | Number of records to generate (1–1000). Clamped to valid range. |
outputFormat | string | "json" | Output format: json for structured data or csv for spreadsheet-compatible output |
customFields | array | [] | Custom field definitions for the custom record type. Each field: {name, type, min?, max?}. Ignored for built-in record types. |
batchMode | boolean | false | Enable batch processing for multiple independent record generation jobs in a single run |
batchData | array | [] | Array of per-job input objects, each with its own recordType, count, outputFormat, and optionally customFields |
Custom Field Types Reference
| Type | Description | Min/Max | Example Output |
|---|---|---|---|
string | Random word | — | "synthesize" |
integer | Random integer in range | ✅ min / max | 73 |
float | Random float in range (4 decimal places) | ✅ min / max | 456.7800 |
boolean | True or false | — | true |
uuid | Random UUID v4 | — | "a1b2c3d4-e5f6-7890-abcd-ef1234567890" |
email | Realistic email address | — | "user@example.net" |
phone | Phone number (international format) | — | "+1-555-0123-4567" |
date | Random 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
| Field | Type | Description |
|---|---|---|
record_type | string | Always "user" |
id | string | Sequential ID: usr_000001, usr_000002, ... |
name | string | Full name (first + last) |
email | string | Realistic email address |
phone | string | International phone number |
username | string | Username derived from name |
job | string | Job title |
company | string | Company name |
address | string | Full address (one line) |
city | string | City name |
country | string | Country name |
zip_code | string | Postal/ZIP code |
website | string | Personal or work URL |
created_at | string | ISO 8601 timestamp |
Company Records
| Field | Type | Description |
|---|---|---|
record_type | string | Always "company" |
id | string | Sequential ID: cmp_000001, cmp_000002, ... |
name | string | Company name |
suffix | string | Legal suffix (Inc, LLC, Ltd, etc.) |
catch_phrase | string | Marketing catch phrase |
bs | string | Business jargon phrase |
email | string | Company email address |
phone | string | Phone number |
address | string | Full address (one line) |
city | string | City |
country | string | Country |
zip_code | string | Postal code |
website | string | Company website URL |
industry | string | Industry/sector |
employee_count | integer | Employee count (10–50,000) |
founded_year | string | Year founded |
Product Records
| Field | Type | Description |
|---|---|---|
record_type | string | Always "product" |
id | string | Sequential ID: prd_000001, prd_000002, ... |
name | string | Product name |
description | string | Short product description (up to 200 chars) |
price | float | Price in USD |
currency | string | Currency code (USD) |
category | string | Product category |
brand | string | Brand name |
sku | string | Stock keeping unit (8-char uppercase) |
in_stock | boolean | Stock availability (80% chance true) |
rating | float | Customer rating (1.0–5.0) |
reviews_count | integer | Number of reviews (0–5000) |
created_at | string | ISO 8601 timestamp |
Address Records
| Field | Type | Description |
|---|---|---|
record_type | string | Always "address" |
id | string | Sequential ID: adr_000001, adr_000002, ... |
street | string | Street address |
city | string | City |
state | string | State/province full name |
state_abbr | string | State abbreviation |
zip_code | string | Postal/ZIP code |
country | string | Country name |
country_code | string | Two-letter country code |
latitude | float | Latitude coordinate |
longitude | float | Longitude coordinate |
timezone | string | Timezone identifier |
full_address | string | Complete 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:
| Field | Type | Description |
|---|---|---|
_summary | boolean | Always true for the summary row |
total_records_generated | integer | Total number of records pushed to the dataset |
record_type_breakdown | object | Per-type counts (e.g., {"user": 10, "company": 5}) |
error_count | integer | Number 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(), andfake.random_int() - Product: Uses
fake.catch_phrase()for names,fake.text()for descriptions,fake.boolean()for stock status, andfake.random.uniform()for ratings - Address: Uses
fake.street_address(),fake.city(),fake.state(),fake.country_code(),fake.latitude(),fake.longitude(), andfake.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.
🔗 Related Tools
Check out other developer utilities by perryay:
| Tool | Description |
|---|---|
| JSON Studio | Format, validate, transform, and diff JSON data with 8 operation modes |
| QR Craft | Generate high-quality QR codes in PNG or SVG, batch up to 50 |
| UUID Lab | Generate UUID v4/v7, NanoID, Short ID, and ULID identifiers |
| Domain Intel | WHOIS, DNS, and SSL lookup for domain intelligence |
| Meta Mate | Extract Open Graph, Twitter Cards, and JSON-LD metadata |
| IP Geo | Multi-provider IP geolocation with ISP detection |
| URL Health | Check URL accessibility, redirects, and SSL health |
| PW Forge | Generate secure passwords with entropy calculation |
| TZ Mate | Convert timezones and check DST offsets |
| Regex Lab | Test and debug regular expressions online |
| Brand Monitor Lite | Track brand mentions across multiple URLs |
| Link Quality Analyzer | Detect broken links and audit link quality |
| Mock Data Generator | Generate realistic test data for development |
| HTML to Markdown | Convert web pages or HTML to clean Markdown |
| SSL Cert Inspector | Deep SSL/TLS certificate analysis with scoring |