Sample CSV files

Most sample CSVs you find online are the wrong size with the wrong columns. Here you pick both, and download the file a few seconds later.

Build a sample CSV →CSV format details

Build a sample CSV now

A sample from the real generator, with a fixed seed. The live version loads in a moment.

id,first_name,last_name,email,city,country,registered_at
1,Harper,Şahin,harper_sahin@example.com,Chiang Mai,Thailand,2026-06-26T15:45:06Z
2,Susan,Gonzalez,susan_gonzalez@example.org,Mombasa,Kenya,2022-10-28T23:26:27Z
3,Lucía,Lee,lucialee@example.com,Lviv,Ukraine,2025-08-20T18:49:03Z
4,Amira,Khan,amirakhan@example.test,Seoul,South Korea,2020-11-30T19:06:50Z
5,Marco,Thompson,marco.thompson55@example.net,Phoenix,United States,2020-08-14T14:15:31Z
6,Michael,Schulz,michael.schulz14@example.test,Frankfurt,Germany,2020-02-28T12:06:10Z

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.

FileRowsColumnsFormatSize
users-100.csv1009CSV9 KB
users-1000.csv1,0009CSV95 KB
employees-100.csv1008CSV9 KB
employees-1000.csv1,0008CSV93 KB
orders-100.csv1009CSV13 KB
orders-1000.csv1,0009CSV127 KB
sensor-readings-100.csv1008CSV10 KB
sensor-readings-1000.csv1,0008CSV95 KB

Sample user records — data dictionary

ColumnGenerator typeConfigured options
idrow_number{}
first_namefirst_name{}
last_namelast_name{}
emailemail_address{}
gendergender{"blank":5}
citycity{}
countrycountry{}
registered_atdatetime_iso{"from":"2020-01-01","to":"2026-09-05"}
is_activeboolean{}

Sample employee records — data dictionary

ColumnGenerator typeConfigured options
employee_idrow_number{"start":1000}
full_namefull_name{}
job_titlejob_title{}
departmentdepartment{}
salaryinteger{"min":38000,"max":180000}
hire_datedate{"from":"2020-01-01","to":"2026-09-05"}
office_citycity{}
manager_emailemail_address{"blank":10}

Sample e-commerce orders — data dictionary

ColumnGenerator typeConfigured options
order_iduuid{}
customerfull_name{}
productproduct_name{}
quantityinteger{"min":1,"max":5}
unit_priceprice{"min":5,"max":500}
currencycurrency_code{}
statuscustom_list{"values":"pending, paid, shipped, delivered, cancelled"}
ordered_atdatetime_iso{"from":"2020-01-01","to":"2026-09-05"}
tracking_codepattern{"format":"TRK-########-??"}

Sample IoT sensor readings — data dictionary

ColumnGenerator typeConfigured options
reading_iduuid{}
device_macmac_address{}
temperature_cdecimal{"min":-10,"max":45,"decimals":1}
humidity_pctinteger{"min":10,"max":100}
battery_pctinteger{"min":0,"max":100}
firmwarecustom_list{"values":"1.0.2, 1.1.0, 1.2.3, 2.0.0-beta"}
recorded_atunix_timestamp{"from":"2020-01-01","to":"2026-09-05"}
ipip_v4{}

These values illustrate schemas and import behavior, not real population or business distributions. Review nulls, units and date bounds before building assertions or charts.

Four starting points

The generator ships with schema templates that cover the shapes people usually want a sample file for. Open the generator, pick one, set the row count, download:

  • Users — id, name, email, city, signup date. The default import test.
  • Orders — order id, customer, product, quantity, price, status, date. Numeric and categorical columns together.
  • Employees — name, job title, department, hire date, salary. See employee sample data for the full breakdown.
  • Sensors — device id, timestamp, reading. A time series, useful with sequential dates.

Every template is a starting point rather than a fixed file — add, remove and rename columns before exporting.

What a small sample looks like

id,first_name,last_name,email,city,country,signup_date,is_active
1,Elena,Rossi,elena.rossi7@example.org,Lyon,France,2024-03-18,true
2,Marco,Schneider,marco_schneider@example.com,Hamburg,Germany,2024-07-02,true
3,Aisha,Yılmaz,aisha.yilmaz@example.net,Izmir,Türkiye,2025-01-27,false
4,Priya,Nair,priya.nair42@example.org,Osaka,Japan,2025-04-11,true

Note the third row: a non-ASCII city and surname in a UTF-8 file. That single row finds more import bugs than the other three combined, which is why it is worth keeping a sample file honest rather than tidy.

Choosing a row count

Sample size should follow what you are testing, and the common mistake is picking a round number that tests nothing:

  • 10–100 rows — reading the file by eye, checking column mapping, writing a parser test.
  • 1,000–5,000 rows — pivot tables, charts, anything where distribution matters.
  • 50,000–100,000 rows — import performance, pagination, memory behaviour, and finding the point where your UI stops being usable.

100,000 rows is the per-export ceiling. For more, export several times with different seeds and concatenate, stripping the header from every file after the first.

Making the sample awkward on purpose

A sample file that imports cleanly proves very little. The controls that make a file useful as a test:

  • Blank % on optional columns produces empty cells, so you find out whether your importer distinguishes empty string from null.
  • Text fields — a Sentence or Words column will eventually contain a comma, which forces quoting and exercises your parser properly.
  • Leading zeros — a Pattern field like 0##### is the fastest way to prove whether your pipeline treats identifiers as numbers.
  • Header row off — for testing an importer that expects positional columns.

Quoting follows RFC 4180: fields containing a comma, quote or newline are quoted, and embedded quotes are doubled. The CSV format page shows the anatomy.

Same file every time

Enter a seed and the download is byte-identical on every machine and every run. That is what makes a generated sample suitable for committing next to a test: the assertion can name a value in row 3 without the file drifting underneath it. Change the seed and you get a different file of the same shape, which is a good way to check a parser test passes for the right reason.

Other formats from the same schema

Nothing about the schema is CSV-specific. The same columns export as TSV when your data contains commas and tabs are cleaner, JSON for a frontend fixture, NDJSON for streaming tools, SQL for a seed script, or XML for an integration test.

Common questions

Are the sample CSV files really free?

Yes. No account, no signup and no row-count paywall — generation runs entirely in your browser, so there is no server cost to meter.

How large can a sample CSV be?

Up to 100,000 rows per export. For larger files, export several times with different seeds and concatenate them, removing the header from all but the first file.

Can I choose the columns?

Yes — that is the main difference from a static sample file. Start from a template or an empty schema and add any of the 93 field types, renaming columns to match your target.

Is the file UTF-8?

Yes. The export is UTF-8 and includes non-ASCII names and cities by default, which is deliberate — those rows are what expose encoding bugs.

Can I get the same file again later?

Enter a seed before exporting. The same seed and schema always produce a byte-identical file.

Last updated