How to transpose survey results from question-per-row to respondent-per-row
- Step 1Export the survey results as CSV — Download from SurveyMonkey, Qualtrics, Typeform, or Google Forms. If your tool offers both 'responses' and 'summary/matrix' views, the matrix view is usually the question-per-row layout you want to flip.
- Step 2Remove header banners and the second header row first — Qualtrics writes two header rows (question text + import IDs) and SurveyMonkey sometimes adds a sub-header row. Because the flip transposes every row, those become extra junk columns. Strip them with csv-cleaner or csv-row-limiter so the file has exactly one header row before transposing.
- Step 3Drop the file onto the tool — The transpose runs automatically on load — there are no settings. There is no 'detect orientation' step and no toggle; the tool always flips rows to columns. The delimiter is auto-detected, so you do not need to tell it the export format.
- Step 4Verify orientation from the stat cards — Check
Rows before/Columns beforeagainstRows after/Columns after. If your source had 20 question rows and 50 respondent columns, expect20 → 50rows and50 → 20columns. If the numbers already matched your target, the source didn't need flipping. - Step 5Read the preview — first column is your old header — The preview shows the first 10 rows of the transposed output. The first column holds your original header labels. There is no traditional header row afterward; each output row is one respondent's data, labelled by its first cell.
- Step 6Download and load into your analysis tool — Output downloads as
<name>.transposed.csv. Import into SPSS, Tableau, Excel, or pandas. The file is plain UTF-8 without a BOM, so if accented respondent names look wrong in Excel, re-save asCSV UTF-8or pre-clean with csv-cleaner.
Before and after: a Likert survey transpose
A question-per-row export (left) and the respondent-per-row result (right). The flip is one-for-one — no recoding, no aggregation.
| Aspect | Source (question-per-row) | Output (respondent-per-row) |
|---|---|---|
| Grid shape | 6 rows × 51 columns (header + 5 questions, 50 respondents) | 51 rows × 6 columns |
| First row / first column | Header: Question, R001, R002, ... R050 | First column: Question, R001, R002, ... R050 |
| A Likert answer | Row Q1 satisfaction, 4, 5, 3, ... | Q1 satisfaction heads a column; 4 sits in the R001 row |
| Open-text answer | "Great service, very fast" (quoted, contains comma) | Carried across verbatim, still quoted |
| Skipped question | Empty cell or N/A | Empty / N/A preserved exactly |
Common survey-export shapes and whether to transpose
Not every export needs flipping. Most response exports are already respondent-per-row; the matrix / summary views are the ones to transpose.
| Export view | Typical orientation | Transpose? |
|---|---|---|
| SurveyMonkey 'All responses' CSV | Respondent-per-row already | No — already correct |
| Qualtrics legacy / matrix view | Questions across rows in some pivots | Yes, if questions are down the rows |
| Hand-built summary tab | Often question-per-row for readability | Yes |
| Google Forms responses sheet | Respondent-per-row (timestamp first) | No — already correct |
| Aggregated count table (per option) | Options as rows, questions as columns | Depends on the chart you need |
Free vs Pro limits for survey files
CSV Transposer is a Pro tool. Free-tier processing is capped; Pro raises the ceilings.
| Limit | Free | Pro |
|---|---|---|
| Max file size | 2 MB | 100 MB |
| Max rows processed | 500 | 100,000 |
| Practical note | ~hundreds of respondents in a typical survey | A 100k-respondent file flips to 100k columns — beyond spreadsheet limits |
Cookbook
Real survey shapes and how the raw flip handles them. Respondent IDs anonymised.
Likert matrix: questions down → respondents down
ExampleA summary export with each question as a row and each respondent as a column becomes the respondent-per-row table your analysis tool expects. Each Likert value stays exactly as recorded.
Input (question-per-row): Question,R001,R002,R003 Satisfaction,4,5,3 Ease of use,5,4,4 Would recommend,5,5,4 Download (.transposed.csv): Question,Satisfaction,Ease of use,Would recommend R001,4,5,5 R002,5,4,5 R003,3,4,4
Open-text answers with commas survive (when quoted)
ExampleFree-text responses frequently contain commas. As long as the source CSV quotes them, the parser keeps them as one cell and the flip carries the whole answer across intact.
Input: Question,R001,R002 Feedback,"Fast, friendly, would return","Too slow" NPS,9,4 Output: Question,Feedback,NPS R001,"Fast, friendly, would return",9 R002,"Too slow",4
Skipped questions stay blank, not zero
ExampleA respondent who skipped a question has an empty cell. The transposer never fills or interpolates — blanks stay blank, so your missing-data analysis remains honest.
Input (R002 skipped Satisfaction): Question,R001,R002 Satisfaction,4, Ease of use,5,3 Output: Question,Satisfaction,Ease of use R001,4,5 R002,,3
Two header rows must be cleaned first
ExampleQualtrics exports a second row of import IDs under the question text. If you transpose without removing it, that row becomes a junk second column. Strip it before flipping.
Input (BAD — second header row left in):
Question,R001,R002
{ImportId:QID1},,
Satisfaction,4,5
Transpose pollutes the output with the ID row as column 2:
Question,{ImportId:QID1},Satisfaction
R001,,4
R002,,5
Fix: remove the {ImportId} row with csv-cleaner first,
then transpose.Multiple-choice 'select all' is NOT split by the flip
ExampleIf a single cell holds several selected options, transposing just moves that cell — it does not split it into columns. Use a splitter for that.
Input: Question,R001 Channels,"Email, SMS, Push" Transpose moves the combined cell as-is: Question,Channels R001,"Email, SMS, Push" To break 'Email, SMS, Push' into separate columns, use csv-column-value-splitter, not the transposer.
Errors and edge cases
Real errors and silent failures sourced from each platform's own documentation. Match the wording to the row, fix what the row says to fix.
Two header rows (Qualtrics import IDs)
By designQualtrics writes the question text on one row and {ImportId:...} on the next. The flip transposes both, so the ID row becomes a junk column. Remove it first with csv-cleaner or csv-row-limiter so the file has a single header row before transposing.
Multiple-choice 'select all' in one cell
Not splitA cell containing Email, SMS, Push is a single value to the transposer — it is moved, not divided. If you need each option as its own column, run csv-column-value-splitter before or after the flip. The transpose has no splitting capability.
Duplicate respondents not merged
Not aggregatedIf the same respondent appears twice (a known survey-tool quirk on partial submissions), the flip produces two columns/rows for them — it never deduplicates. Use csv-deduplicator before transposing if you need one record per respondent.
Unquoted comma in a free-text answer
Parse riskIf an open-text answer contains a comma but was not quoted in the source (a malformed export), it is read as two cells and the row shifts. The transpose then faithfully carries the misalignment across. Fix the source quoting or run csv-cleaner first; the transposer cannot repair an already-broken row.
Embedded line break in a long answer
Preserved if quotedA multi-line open-text answer is handled correctly only if it is RFC-4180 quoted in the source (the parser respects quoted newlines). If the source left it unquoted, the parser sees an extra row and everything shifts. Properly quoted multi-line answers transpose cleanly into a single cell.
Ragged rows from skipped questions
PaddedWhen some question rows have fewer answer cells than others, the transposer pads every short row to the widest row with empty strings before flipping. The result is rectangular, with empty cells where answers were missing — expected behaviour, not corruption.
100k respondents → 100k columns
Spreadsheet limitPro allows up to 100,000 rows. A 100k-respondent question-per-row file would transpose into 100k columns, exceeding Excel's 16,384-column ceiling. For very large surveys, do the analysis in pandas / R rather than transposing into a spreadsheet.
Free-tier cap exceeded
BlockedFree processing stops at 2 MB and 500 rows; the transposer is a Pro tool. A survey with long open-text fields can exceed 2 MB even with modest respondent counts. Upgrade to Pro (100 MB / 100,000 rows) or split with csv-row-limiter and transpose slices.
Likert values are not recoded
ExpectedThe transposer does not map Strongly agree → 5 or reverse-score anything. It only moves cells. If your export has text Likert labels and you need numeric codes, do the recode in your analysis tool (or with csv-find-replace) — the flip leaves labels exactly as written.
Source already respondent-per-row
ExpectedMost response exports (Google Forms, SurveyMonkey 'All responses') are already in the correct orientation. Transposing them flips you into question-per-row, which you probably don't want. Check the stat cards first; if the source already matches your analysis tool's expectation, skip the transpose.
Frequently asked questions
Will this work for every survey export format?
It works on any CSV — it just flips rows and columns. But not every export needs flipping. SurveyMonkey 'All responses', Google Forms, and Typeform exports are usually already respondent-per-row, so transposing them would make the orientation wrong. The transposer is for the cases where questions are down the rows and respondents across the columns (matrix/summary views or hand-built tabs).
Do I lose any response data when transposing?
No. The flip is lossless — every cell value, including long open-text answers, blanks for skipped questions, and N/A markers, is carried across unchanged. Only the row/column orientation changes. The tool never rounds, recodes, or drops cells.
Does it split multiple-choice 'select all' answers into columns?
No. A cell holding Email, SMS, Push is moved as a single value. To break one cell into several columns, use csv-column-value-splitter. The transposer has no splitting logic — it only changes orientation.
My Qualtrics export has two header rows — what do I do?
Remove the second row (the {ImportId:...} line) before transposing, otherwise it becomes a junk column in the output. Use csv-cleaner or csv-row-limiter to leave exactly one header row, then flip.
Will it recode my Likert scale to numbers?
No. The transposer does not map labels to values or reverse-score items. Strongly agree, 4, N/A — whatever is in the cell stays in the cell. Do recoding in SPSS, Excel, pandas, or with csv-find-replace afterward.
What happens to respondents who skipped questions?
Their empty cells stay empty after the flip — the tool never fills, zero-pads, or interpolates missing data. If question rows have different lengths because of skips, short rows are padded to the widest row, so the output grid is rectangular with blanks preserved.
Can it merge duplicate respondents?
No — there is no aggregation or deduplication. If a respondent appears twice, you get two columns/rows for them. Run csv-deduplicator first if you need one record per respondent before flipping.
How do the stat cards help me check orientation?
They show rows and columns before and after. The values always swap (rows-after equals columns-before). If your source had 30 question rows and 200 respondent columns, you'll see 30 → 200 rows and 200 → 30 columns — confirming the flip went the direction you intended.
Can I transpose a file with hundreds of respondents?
Yes, within the limits. Free tier caps at 2 MB / 500 rows; this is a Pro tool, and Pro raises that to 100 MB / 100,000 rows. The catch is that respondents become columns after the flip, and spreadsheets cap at 16,384 columns — so for very large surveys, analyse in pandas/R instead of opening the transposed file in Excel.
Are respondent names and free-text answers uploaded?
No. Parsing and transposing run entirely in your browser via PapaParse. Names, emails, and open-text answers never reach a server. If signed in, only an anonymous run counter (no content) is recorded for your dashboard.
The transposed file looks garbled in Excel — why?
The output is UTF-8 with no BOM, and Excel-on-Windows may default to Windows-1252, corrupting accented names. Import via Data → From Text/CSV and choose UTF-8, save as CSV UTF-8, or pre-clean with csv-cleaner. The transposer does not add a BOM.
What are the steps to get my survey ready before transposing?
A common pre-flight: drop banner/double-header rows with csv-cleaner, deduplicate partial submissions with csv-deduplicator, then transpose. If you also need to split combined 'select all' cells, run csv-column-value-splitter afterward. Each tool does one job, so chain them in the order your analysis needs.
Privacy first
Processing runs locally in your browser with PapaParse. No file is uploaded — only metadata counters are saved for signed-in dashboard stats.