Sample dataset · CC0
Survey data, including the comments.
Eight columns of survey response over six months. The NPS group is derived from the score with the standard cut points, satisfaction correlates with it rather than being drawn separately, and about half the responses carry a free-text comment with punctuation in it.
8 columns · 100 or 1,000 rows as a file · up to 1,000,000 rows generated here · CSV, JSON, JSONL, Excel, Parquet
Take a file
The comment column is why this file is worth downloading rather than generating. Open the raw CSV in a text editor and look at how the quotation marks are escaped.
| Format | Small | Standard |
|---|---|---|
| CSV | 100 rows (8.5 KB) | 1,000 rows (81.3 KB) |
| JSON | 100 rows (18.9 KB) | 1,000 rows (186.6 KB) |
| JSONL | 100 rows (18.6 KB) | 1,000 rows (183.7 KB) |
| Excel | 100 rows (18.1 KB) | 1,000 rows (106.4 KB) |
| Parquet | 100 rows (3.7 KB) | 1,000 rows (16.5 KB) |
More responses, same phrases
Larger sizes draw from the same comment pools, so the text repeats. The value at scale is the score distribution and the blank rate, not the variety of the prose.
The first eight rows
The first eight rows of the 1,000-row file. Look at the comment column in the raw CSV, not just here.
| response_id | submitted_at | segment | region | nps | nps_group | satisfaction | comment |
|---|---|---|---|---|---|---|---|
| RSP-000001 | 2026-01-06T00:00:00Z | Team | ANZ | 5 | Detractor | 3 | Too slow with big files, gave up |
| RSP-000002 | 2026-01-06T04:19:12Z | Self-serve | ANZ | 9 | Promoter | 4 | |
| RSP-000003 | 2026-01-06T08:38:24Z | Enterprise | North America | 4 | Detractor | 2 | Too slow with big files, gave up |
| RSP-000004 | 2026-01-06T12:57:36Z | Churned | ANZ | 2 | Detractor | 1 | |
| RSP-000005 | 2026-01-06T17:16:48Z | Trial | APAC | 7 | Passive | 3 | Good, but I wanted "save my settings" |
| RSP-000006 | 2026-01-06T21:36:00Z | Enterprise | APAC | 7 | Passive | 3 | Good, but I wanted "save my settings" |
| RSP-000007 | 2026-01-07T01:55:12Z | Churned | EMEA | 5 | Detractor | 3 | Crashed on my file, twice |
| RSP-000008 | 2026-01-07T06:14:24Z | Enterprise | EMEA | 4 | Detractor | 2 |
Eight columns, and what each one holds
| Column | Type | What it holds | Example |
|---|---|---|---|
| response_id | text | RSP-000001 upward. | RSP-000001 |
| submitted_at | timestamp | Submission time in UTC, ascending through the file. | 2026-01-06T00:00:00Z |
| segment | text | Which audience the respondent came from. | Team |
| region | text | One of five regions. | ANZ |
| nps | integer | Would you recommend us, 0 to 10. | 5 |
| nps_group | text | Detractor, Passive or Promoter. Derived from nps with the standard cut points, so the grouping is never wrong. | Detractor |
| satisfaction | integer | Five point satisfaction score. Correlates with nps rather than being drawn independently. | 3 |
| comment | text | Free text. Roughly half are blank, and the rest include commas and embedded quotation marks on purpose. | Too slow with big files, gave up |
What it models
An anonymous product survey export: a timestamp, three segmentation columns, two scores, one derived grouping and a free-text field. It is the shape a survey tool emits when you ask for a CSV, right down to the fact that the most valuable column is the one that is hardest to process.
The window is six months, ascending. Segments run from Trial through Enterprise and include Churned, which is the segment whose scores you most want to look at separately and the one most survey dashboards quietly average into everything else.
The comment column is the interesting one
Roughly half of responses have a comment and the rest are blank, which is a realistic response rate for an optional free-text question. The comments that exist are drawn from pools keyed to the score, so promoters say promoter things and detractors say detractor things, and a sentiment analysis run against this file produces a result that correlates with the numeric score rather than noise.
More usefully for testing, several comments contain a comma and several contain embedded quotation marks, which are escaped by doubling as RFC 4180 requires. A parser that mishandles doubled quotes will produce visibly mangled text on those rows, and it is the sort of defect that only shows up on real data and is therefore usually found in production.
Derived scores that cannot drift
nps_group is computed from nps using the standard cut points: 9 and 10 are promoters, 7 and 8 are passives, and 0 through 6 are detractors. Because it is derived, the two columns can never disagree, so the file is a valid reference for testing an NPS calculation. Compute the net score yourself, promoters minus detractors as a percentage of responses, and there is one right answer.
satisfaction is correlated with nps rather than drawn independently, which means a crosstab of the two is diagonal-ish rather than uniform. That is what makes it usable for demonstrating a correlation coefficient on ordinal data, and it is another thing most generated survey data gets wrong by drawing every column from its own distribution.
What people use it for
- Testing a CSV parser against embedded quotation marks escaped by doubling.
- NPS calculations, against a derived group column that cannot be wrong.
- Text processing and sentiment work, on comments that correlate with the score.
- Crosstabs of two correlated ordinal columns.
- Handling an optional free-text field that is blank about half the time.
Open it somewhere useful
The validator and a JSON conversion are the two that show what the comment column really contains.
License, and the people in it
This dataset is dedicated to the public domain under CC0 1.0. Put it in a course, a paid product, a test suite, a bug report, a screenshot, a conference talk or a book. There is nothing to ask for, nothing to sign and no attribution required. A link back is welcome and is not a condition.
No respondent is a real person and no comment is a real thing anybody said. There are no names, no email addresses and no identifiers beyond a sequential response id, which is how a well-run anonymous survey export should look.
Questions people ask about this file
How are the quotation marks inside comments escaped?
By doubling, which is what RFC 4180 specifies. A comment reading customer said "send it twice" appears in the file as a quoted field with each internal quote written twice. Parsers that handle this correctly return the original text; parsers that do not return something visibly mangled, which makes this a quick and honest test.
Is nps_group ever wrong?
It cannot be. It is computed from the nps value on the same row using the standard cut points, 9 and above for promoters and 6 and below for detractors, so the two columns are consistent by construction. A test asserts it across 500 rows. That makes the file a valid reference for checking your own NPS implementation.
Why is the comment blank on half the rows?
Because free-text questions are usually optional and most people skip them. Around 48 percent of rows have a comment here. Any text analysis built on this column is therefore analyzing a self-selected subset, which is the same caveat that applies to every real survey and is worth having in the data rather than only in the footnote.
Do the comments match the scores?
Yes. Comments are drawn from three pools keyed to the NPS band, so promoters are positive, passives are lukewarm and detractors complain. That makes the file usable for a sentiment analysis demonstration where the expected answer is known, rather than one where the model is scored against random text.
More sample data
All twenty datasets · Messy files and every other format · Build your own schema