Dummy Data Generator
Generate realistic fake test data including names, emails, addresses, and custom schemas for development and testing
Updated
What is the Dummy Data Generator?
Generate realistic, production-quality fake data for development, testing, and prototyping. Built for developers who need more than random strings—this tool creates contextually coherent data where emails match names, addresses follow real patterns, and nested structures maintain logical relationships.
Why Developers Choose This Tool
Realistic Data Relationships: Unlike simple random generators, emails are derived from generated names, addresses contain valid city/region combinations, and phone numbers follow proper formatting patterns.
Visual Schema Builder: No JSON templates to memorize. Add fields through an intuitive interface, nest objects and arrays visually, and see your structure take shape in real time.
Multiple Export Formats: Generate once, use everywhere. Export as JSON for APIs, CSV for spreadsheets, SQL for database seeding, or TypeScript for type-safe development.
Live Preview: See exactly what your data looks like before generating thousands of records. One-click preview updates instantly as you modify your schema.
Built-In Data Types
| Category | Types |
|---|---|
| Identity | First name, last name, full name, email, phone |
| Location | Full address, city, country, ZIP code |
| Business | Company name, job title |
| Technical | UUID, URL, IP address, hex color |
| Numeric | Integer, decimal with custom ranges |
| Temporal | Date, ISO datetime |
| Content | Lorem ipsum (configurable length), custom enums |
| Structure | Nested objects, arrays with typed items |
Smart Features
- Schema Templates: Start instantly with pre-built User, E-commerce, Blog, and API Response schemas
- Schema Persistence: Save and reload your custom schemas via localStorage
- Batch Generation: Generate up to 10,000 records with streaming performance
- Smart Arrays: Define array length and item types—arrays of primitives or complex objects
- Validation: Real-time schema validation catches duplicate keys, invalid identifiers, and type misconfigurations before generation
How it works
The tool operates entirely client-side with no external API dependencies. All data generation uses deterministic random algorithms seeded by Math.random(), ensuring fast performance even for large datasets.
Data Generation Pipeline
1. Schema Definition
Your schema defines the structure and types of data to generate:
interface Schema {
name: string; // Used for filenames and TypeScript interfaces
rootType: "object" | "array"; // Top-level structure
fields: FieldConfig[]; // Field definitions
}
Each field specifies:
- Key: Property name (validated as JavaScript identifier)
- Type: One of 22 built-in generators
- Constraints: Min/max for numbers, options for enums, length for arrays
2. Context-Aware Generation
The generator maintains a context object during record creation, enabling smart relationships:
// When email field generates, it checks context:
const firstName = context.firstName || randomFirstName();
const lastName = context.lastName || randomLastName();
const email = `${firstName}.${lastName}@gmail.com`;
This ensures email matches firstName and lastName when those fields exist in the same record.
3. Type-Specific Generators
| Type | Implementation | Data Source |
|---|---|---|
| Names | Weighted random selection | Curated pools: 100+ first names, 50+ last names |
| Addresses | Composite generation | Street number + name from pools + city/region/ZIP |
| Emails | Context-aware + domain pools | gmail, yahoo, outlook + company domains |
| UUID | RFC 4122 v4 | crypto.randomUUID() pattern |
| Numbers | Math.random() with bounds |
Configurable min/max, integer/float |
| Dates | Timestamp range sampling | 1970 to present |
| Lorem | Shuffle of classic pool | 64-word Latin base text |
4. Nested Structure Handling
Objects recursively generate child fields with isolated context:
const author = {
name: generate("fullName"), // "Sarah Johnson"
email: generate("email"), // Uses author context: "sarah.johnson@..."
};
Arrays generate N items using the child field configuration:
// Array of 5 UUIDs
tags: [uuid, uuid, uuid, uuid, uuid];
// Array of 3 objects
comments: [
{ id: uuid, text: lorem, date: isoDate },
{ id: uuid, text: lorem, date: isoDate },
{ id: uuid, text: lorem, date: isoDate },
];
5. Format Transformation
After generating raw JavaScript objects, the tool transforms to your selected format:
JSON: JSON.stringify() with optional 2-space indentation
CSV: Recursive flattening with dot-notation keys:
// { user: { name: "X" } } becomes column "user.name"
// Arrays JSON-stringified: "[1,2,3]"
SQL:
- Escape single quotes (
' → '') - NULL for null/undefined
- Proper boolean literals (TRUE/FALSE)
- One INSERT statement per record
TypeScript:
- Schema introspection → type mapping
- Nested objects → inline interfaces
- Arrays → typed arrays
- Optional properties (all fields optional for flexibility)
6. Performance Optimization
| Record Count | Strategy |
|---|---|
| 1-100 | Synchronous generation |
| 101-1000 | setTimeout yield to prevent UI blocking |
| 1001-10000 | Chunked generation with progress (future enhancement) |
Storage & Persistence
Saved schemas store in localStorage as serialized JSON:
interface SavedSchema {
id: string; // field_{timestamp}_{random}
name: string; // User-provided label
schema: Schema; // Deep-cloned configuration
createdAt: string; // ISO timestamp
}
Storage quota: ~5MB typical limit (thousands of complex schemas).
Validation Rules
Before generation, schemas undergo strict validation:
| Rule | Error Message |
|---|---|
| Empty key | "Key is required" |
| Invalid identifier | "Key must be a valid identifier" |
| Duplicate keys | "Duplicate key 'X'" |
| Min > Max | "Min cannot be greater than max" |
| Empty enum options | "Enum type requires at least one option" |
| Negative array length | "Array length cannot be negative" |
| Excessive array length (>1000) | "Array length cannot exceed 1000" |
| Missing table name (SQL) | "Table name is required for SQL export" |
| Count < 1 or > 10000 | Bounds error with clear limits |
Examples
Generate User Profiles
Create realistic user profiles with names, emails, and addresses for testing a user management system
E-commerce Product Data
Generate product catalog data with prices, SKUs, and categories for an online store
Nested API Response
Create complex nested JSON structures with arrays and objects for API testing
SQL Database Seeding
Generate SQL INSERT statements to populate a customers table
TypeScript Interface
Generate TypeScript type definitions from your data schema
Frequently asked questions
What is dummy data and why do I need it?
What is dummy data and why do I need it?
Dummy data is realistic-looking fake information used during software development and testing. You need it when real user data is unavailable, inappropriate (privacy concerns), or insufficient for testing scale. Common use cases include: populating UI prototypes with realistic content, testing database queries with varied data patterns, load testing APIs with substantial payload volumes, and developing features before production data exists.
Is the generated data truly random?
Is the generated data truly random?
The data is pseudorandom using JavaScript's Math.random() with curated pools for realism. Names draw from 100+ common first names and 50+ last names. Addresses combine real city names with plausible street patterns. While not cryptographically random (not suitable for passwords), the distribution and combinations appear realistic for testing purposes. For identical schemas, results differ on each generation.
Can I generate relationships between fields?
Can I generate relationships between fields?
Yes. The generator uses context-aware generation where fields can reference previously generated values in the same record. If you include firstName, lastName, and email fields, the email automatically derives from the generated names (e.g., john.smith@gmail.com). This works for any field order—the generator resolves dependencies automatically.
What is the maximum number of records I can generate?
What is the maximum number of records I can generate?
The tool supports 1 to 10,000 records per generation. This limit balances practical use cases with browser performance constraints. For larger datasets, generate multiple batches or consider server-side tools. Generation time scales roughly linearly: ~100ms for 100 records, ~2s for 10,000 records depending on schema complexity.
Why does my email not match the first and last name?
Why does my email not match the first and last name?
This occurs when fields use inconsistent key names. The generator recognizes standard variants: firstName/first_name, lastName/last_name. If you use non-standard keys like fname or firstname, the email generator cannot find the context values and falls back to random generation. Use the built-in field types or standard snake_case/camelCase naming for automatic relationship detection.
How do I create arrays of objects?
How do I create arrays of objects?
Use the Array field type, set your desired length, then click "Add Field" to define the array item structure. The child fields you add represent properties of each array element. For example, an orders array with id and total children generates: [{id: "...", total: 99.99}, {id: "...", total: 45.50}, ...].
Can I save my schema for later use?
Can I save my schema for later use?
Yes. Click Save Schema in the Options section, provide a name, and your configuration persists to browser localStorage. Saved schemas appear below the template buttons and survive page reloads. To delete a saved schema, click the trash icon next to its name. Export/import via copy-paste of the generated JSON is also possible.
Why is my CSV output missing columns?
Why is my CSV output missing columns?
CSV flattening uses dot notation for nested keys. A field user with child name becomes column user.name. Arrays JSON-stringify into single cells. If columns appear merged, your spreadsheet application may be interpreting commas incorrectly—ensure UTF-8 encoding and proper CSV parsing. For deeply nested data, JSON format preserves structure better than CSV.
How do I generate SQL for multiple tables?
How do I generate SQL for multiple tables?
Generate separately for each table with appropriate schemas, then combine the output. The tool generates INSERT statements only—no CREATE TABLE definitions. Include primary keys in your schema if you need to reference them for foreign key relationships. For complex multi-table seeding with foreign keys, generate in dependency order (parent tables first).
What is the difference between Date and DateTime types?
What is the difference between Date and DateTime types?
Date generates ISO 8601 calendar dates: 2026-07-25 (YYYY-MM-DD format). DateTime generates full ISO timestamps: 2026-07-25T10:00:00.000Z including time and timezone. Both sample from 1970 to present with uniform distribution. Use Date for birthdates, anniversaries, or calendar events. Use DateTime for created_at timestamps, event logs, or precise scheduling.
Can I customize the lorem ipsum word count?
Can I customize the lorem ipsum word count?
Yes. When selecting the Lorem Ipsum field type, a "Words" input appears. Specify any count from 1 to 1000. The generator repeats and shuffles a 64-word Latin pool to fulfill longer requests. Output always ends with a period and capitalizes the first letter for realistic sentence appearance.
Why does my enum field show null values?
Why does my enum field show null values?
Enum fields require at least one option. Ensure you've entered comma-separated values in the options field (e.g., active, inactive, pending). Empty options or malformed input (trailing commas, no values) triggers validation errors before generation. The tool randomly selects from provided options with uniform distribution.
How do I generate realistic phone numbers?
How do I generate realistic phone numbers?
The Phone type generates North American format: (XXX) XXX-XXXX with valid area codes (200-999). For international formats, use the Custom Enum type with your specific number patterns, or generate component fields (country code, area code, number) and combine with an Object type.
Can I import my existing JSON schema?
Can I import my existing JSON schema?
Direct import is not supported. However, you can manually recreate any structure using the visual builder: map JSON keys to field keys, determine appropriate types (string → lorem/enum/name depending on content pattern), and replicate nested objects with the Object type. For complex existing schemas, generate sample data in JSON format, then use the TypeScript export to get matching type definitions.
What happens if I exceed browser storage?
What happens if I exceed browser storage?
Saved schemas store in localStorage with a typical 5MB quota. Large schemas with many nested fields consume more space. If quota is exceeded, the tool shows a save error and suggests deleting older schemas. Generated data is never stored—only schemas—so large generations do not impact storage.
Is my data sent to any server?
Is my data sent to any server?
No. The Dummy Data Generator operates 100% client-side. All generation happens in your browser using JavaScript. No network requests are made, no telemetry is collected, and no data leaves your machine. This makes it safe for generating data with sensitive patterns or proprietary structures.
Why does the preview differ from full generation?
Why does the preview differ from full generation?
The Preview generates exactly 1 record with identical logic as full generation. Differences in appearance are due to: (1) pretty-printing toggle affecting JSON formatting, (2) root type (object vs array) changing wrapper structure, or (3) random variation between generations—click "Regenerate" to see new random samples. If structural differences appear, verify your schema hasn't changed between preview and generation.
How do I generate sequential IDs instead of UUIDs?
How do I generate sequential IDs instead of UUIDs?
Use the Integer type with appropriate min/max for your range. For true sequential generation (1, 2, 3...), the current version uses random integers. For strict sequences, generate with UUIDs then post-process with a script, or use Integer and sort after generation. UUIDs are preferred for test data as they reveal sorting/aggregation bugs that sequential IDs might mask.
Can I generate data in multiple languages?
Can I generate data in multiple languages?
Built-in pools are English-centric. For other languages: (1) use Custom Enum fields with your own name/address pools, (2) generate English data and transform externally, or (3) use the Lorem Ipsum type which uses Latin (language-neutral). Full internationalization of all data types is planned for future versions.
Related tools
More utilities you might find handy.
Barcode Generator - Free Code128 Creator Online
Generate Code128 barcodes online instantly. Create free printable SVG and PNG barcodes with custom sizes, colors, and text.
Dot Grid Generator
Generate printable dot grids for bullet journals, sketching, and calligraphy.
Gitignore Generator
Generate a custom .gitignore file for any tech stack, framework, or language.