Employee sample data
A realistic HR dataset for dashboards, tutorials, pivot tables and database seeding — without lifting a single row from a real payroll system.
Generate employee rows now
A sample from the real generator, with a fixed seed. The live version loads in a moment.
employee_id,full_name,email,job_title,department,hire_date,salary 1,Yuki Moore,yukimoore@example.com,Data Analyst,Engineering,2021-07-28,128468 2,Lars Weber,larsweber@example.com,Mobile Developer,Legal,2023-09-29,71940 3,Mark Lopez,mark_lopez@example.invalid,Database Administrator,Research & Development,2021-05-27,107303 4,Omar Öztürk,omar.ozturk79@example.org,Business Analyst,Legal,2021-07-28,123277 5,Lisa Smith,lisa_smith@example.invalid,Account Executive,Operations,2026-07-02,80950 6,Arjun Ali,arjun_ali@example.test,Full Stack Developer,Legal,2025-08-09,164229
Ready-made files to download
Generated from the schemas below with a fixed seed and committed to the site, so a link to one of these files keeps returning the same bytes. They are public domain (CC0) — use them in a tutorial, a test suite or a course without asking. Need different columns, more rows or another format? Build it above.
| File | Rows | Columns | Format | Size |
|---|---|---|---|---|
| employees-100.csv | 100 | 8 | CSV | 9 KB |
| employees-100.json | 100 | 8 | JSON | 26 KB |
| employees-100.sql | 100 | 8 | SQL | 12 KB |
| employees-1000.csv | 1,000 | 8 | CSV | 93 KB |
| employees-1000.json | 1,000 | 8 | JSON | 259 KB |
| employees-1000.sql | 1,000 | 8 | SQL | 118 KB |
Sample employee records — data dictionary
| Column | Generator type | Configured options |
|---|---|---|
employee_id | row_number | {"start":1000} |
full_name | full_name | {} |
job_title | job_title | {} |
department | department | {} |
salary | integer | {"min":38000,"max":180000} |
hire_date | date | {"from":"2020-01-01","to":"2026-09-05"} |
office_city | city | {} |
manager_email | email_address | {"blank":10} |
These values illustrate schemas and import behavior, not real population or business distributions. Review nulls, units and date bounds before building assertions or charts.
The schema
An employee table that actually exercises a dashboard needs a mix of identifiers, categories, dates and numbers. This one takes about a minute to build in the generator:
Column Field type Options
------------------------------------------------------------
employee_id Row Number
full_name Full Name locale: any
email Email Address unique
job_title Job Title
department Custom List Engineering, Sales, Marketing,
Finance, HR, Support, Operations
hire_date Date from 2015-01-01, sequential
salary Integer min 38000, max 185000
is_active Boolean
city City
country Country
manager_id Integer min 1, max 40
performance Custom List Exceeds, Meets, Developing
employee_id,full_name,job_title,department,hire_date,salary,is_active 1,Elena Rossi,QA Engineer,Engineering,2015-02-14,71000,true 2,Marco Schneider,Account Executive,Sales,2015-04-03,64500,true 3,Aisha Yılmaz,Data Analyst,Finance,2015-06-21,79200,false
Choices that make the data useful
A few decisions separate a dataset that demos well from one that falls apart on the first pivot:
- Departments as a Custom List, not a random text field. Grouping and filtering only mean something if the same seven values repeat. Repeat a value in the list to weight it — listing Engineering three times gives you a realistically large engineering team instead of seven equal departments.
- Hire dates sequential. Set the Date field's order to sequential and headcount grows smoothly over time, which is what a hiring chart should look like. A random draw produces a jagged mess.
- Salary as an Integer with a real range. Anchor the minimum and maximum to your actual bands. If you want a realistic long tail rather than a flat spread, use the Number (Normal Dist.) field instead.
- Blank % on optional columns. Manager, end date and secondary email should be empty for some rows — the CEO has no manager, and a dashboard that assumes otherwise breaks on row one.
Manager hierarchies
A manager_id drawn at random points at an arbitrary row, which is fine for a shape test and wrong for an org chart — it will produce cycles, and some employee will manage themselves. For a real hierarchy, generate the managers first as a small export, then feed their IDs into a Custom List on the employee schema so every report points at somebody who exists and is senior. The two-pass technique is the same one used for foreign keys in the database guide.
Where this data goes
- Spreadsheets and BI. Export CSV, or TSV if you want to paste straight into a sheet. Watch employee IDs with leading zeros — see the Excel guide.
- HR product demos. Generate once with a fixed seed so every screenshot and every demo shows the same people.
- Database seeding. SQL export gives inserts plus an optional CREATE TABLE; PostgreSQL and MySQL notes cover bulk loading.
- Training material. A fixed seed means every student works with identical data, so an exercise answer is the same for everyone.
Why not anonymised real data
Anonymising a payroll export is harder than it looks. Salary, job title, hire date and department together re-identify people in a small company even with names stripped, and an HR dataset is exactly the kind of thing that should never sit in a demo environment or a public repository. Generating from scratch avoids the problem rather than mitigating it — there is nothing to re-identify. The methodology page covers what each field draws from.
Common questions
Is this real employee data?
No. Every value is synthetic — names are recombined from public-domain pools, emails use reserved documentation domains, and salaries are drawn from a range you set. Nothing derives from a real payroll system.
How do I get realistic department sizes?
Use a Custom List and repeat the values you want more of. Listing Engineering three times and HR once produces roughly a three-to-one split instead of an even spread.
Can I build a proper manager hierarchy?
Not in a single pass — a random manager_id creates cycles. Generate the managers first, then paste their IDs into a Custom List field on the employee schema.
How do I make salaries cluster realistically?
Use the Number (Normal Dist.) field rather than Integer. A uniform range gives you as many people at the top of the band as in the middle, which no real organisation looks like.
Can I use this dataset in a public tutorial?
Yes. The data is synthetic and safe to publish or commit. Use a fixed seed so every reader sees the same rows.
Related
- Sales sample data — orders, revenue and a time series.
- Excel sample data — pivot tables and clean imports.
- Random name generator — the people behind the rows.
- Database test data — seeding and foreign keys.
Last updated