How to map a pdf form's fields for spreadsheet export
- Step 1Open the field extractor — Go to the PDF Form Field Extractor. It runs in your browser; no form data is uploaded.
- Step 2Drop one copy of the form — Drag any copy of the form (blank works perfectly) onto the dropzone. The schema is the same for every copy. The tool runs immediately — there are no format or export options.
- Step 3Read the field map — The preview lists fields as
{ name, type, value }; the total count appears below. Thesenamevalues become your CSV column headers. - Step 4Download the JSON schema — Save the field list. This is your column blueprint — keep it next to your export script.
- Step 5Build the CSV header row from the names — Turn each field
nameinto a CSV column, in the same order. Decide how to encode each type (text as-is, checkboxes as TRUE/FALSE, radios/dropdowns as the chosen label). - Step 6Append one row per form's captured values — Capture each form's answers in a separate value-reading step, write them under the matching columns, one row per form, and open the result in Excel or Google Sheets.
From field map to CSV column
How each field type maps onto a spreadsheet column. The tool supplies the left two columns; you decide the encoding.
| Field type | Suggested CSV column | Suggested encoding |
|---|---|---|
PDFTextField | One column | The text as a string (quote multi-line text per RFC 4180) |
PDFCheckBox | One column | TRUE/FALSE (or 1/0) |
PDFRadioGroup | One column | The selected option's label/export value |
PDFDropdown | One column | The chosen option (may be free text) |
PDFOptionList | One column (or several) | Selected options, e.g. semicolon-joined for multi-select |
PDFButton | Omit | Not a data field |
PDFSignature | Optional flag column | Signed/unsigned — verify separately if needed |
What the tool provides vs. what you build
The division of labour between this schema tool and your export step.
| Step | This tool | You |
|---|---|---|
| Determine columns | Provides field names + types | Pick which to include, set header order |
| Get the values | Returns empty strings (schema only) | Read values in a separate step |
| Produce the CSV | Outputs JSON | Assemble rows + quoting in script/Sheets |
| Combine many forms | One file per run | Concatenate rows yourself |
Cookbook
Turning a PDF form's schema into a clean responses spreadsheet. Field names are illustrative; yours appear verbatim in the JSON.
Schema first, then a header row
Extract the field map once, then derive your CSV header from the field names — guaranteed to match the form exactly.
Field map (JSON):
[
{ "name": "full_name", "type": "PDFTextField", "value": "" },
{ "name": "rating", "type": "PDFDropdown", "value": "" },
{ "name": "subscribe", "type": "PDFCheckBox", "value": "" }
]
Derived CSV header:
full_name,rating,subscribeOne row per form
After capturing each form's answers (in a separate value-reading step), append one row per form under the columns the schema defined.
full_name,rating,subscribe Alex Stone,5,TRUE Dana Reyes,3,FALSE Sam Patel,4,TRUE Three forms -> three rows, columns locked by the field map.
Encoding each field type
The schema's type key tells you how to encode each column so the CSV stays clean and parseable.
PDFTextField -> string ("Great service, will return")
PDFCheckBox -> TRUE/FALSE
PDFRadioGroup -> selected label (e.g. "Express")
PDFDropdown -> chosen option (e.g. "United Kingdom")
PDFOptionList -> "gift;giftwrap" (multi-select, joined)Quoting multi-line text fields
Comment-style text fields can contain commas and newlines. Wrap them in double quotes so the row doesn't break.
Raw value: Loved it. Would recommend, definitely. In CSV (RFC 4180 quoting): full_name,comment Alex Stone,"Loved it. Would recommend, definitely."
Dropping non-data fields
Use the type to exclude buttons (and usually signatures) so they don't become empty junk columns.
Field map includes: submit_btn -> PDFButton (drop) signature -> PDFSignature (optional flag column) full_name -> PDFTextField (keep) CSV columns: full_name (+ signed? if you want it)
Edge cases and what actually happens
The tool outputs JSON, not CSV
JSON onlyThere is no CSV export in the UI — the result is a JSON array. Build the CSV yourself from the field names (your columns) plus values captured separately. The schema is the column blueprint; the CSV is assembled downstream.
Values are not included
Schema onlyEvery value is an empty string. This tool extracts the form's field structure, not the responses. Capture the actual answers in a separate value-reading step keyed by the field names this tool provides.
Combining 50 forms into one CSV
ManualThe tool processes one file per run and outputs schema, not data. Extract the schema once to fix your columns, then capture each form's values separately and append rows in a script or spreadsheet. There is no built-in batch.
Multi-line text fields
Handle in your CSV stepComment fields can contain commas and line breaks. The schema just tells you the field is a PDFTextField; you must wrap such values in double quotes (RFC 4180) when you write the CSV so rows stay aligned.
Conditional / hidden fields appear in the schema
ExpectedAll interactive fields are enumerated, including ones that may be hidden by form logic. That's useful — they're potential columns — but you may choose to drop unused ones. Filter in your export step, not here.
Push buttons would become junk columns
Filter outPDFButton entries (submit/reset) carry no response data. Exclude them by type so your CSV doesn't gain empty columns.
Form returns no fields
Empty arrayA flattened, scanned, or pure-XFA form yields an empty array — there's no schema to build columns from. For scanned survey sheets, use PDF OCR; for tabular data printed in the PDF, see PDF Table to JSON.
Field order matters for column alignment
PreservedThe JSON keeps pdf-lib's field enumeration order. Use that order consistently across every form so your columns line up — don't re-sort columns differently per file.
Excel mojibake on international names
EncodingThis is a CSV-writing concern, not a tool limitation: when you build the CSV, save it as UTF-8 with a BOM so Excel-on-Windows shows accented names correctly. The field map itself is plain JSON text.
Need a true tabular export from the PDF
Use a sibling toolIf your data is actually a table drawn on the page rather than form fields, this tool won't help. Use PDF Table to JSON or PDF to Excel for printed tables.
Frequently asked questions
Does this export form responses straight to CSV?
No — and it's important to be precise here. The tool outputs a JSON array describing the form's fields (each field's name and type), with every value as an empty string. It does not produce a CSV and it does not read the typed-in answers. What it gives you is the authoritative column blueprint: the exact field names, in the form's own order. You build the CSV from those columns plus values captured in a separate step.
Then how is this useful for a CSV export?
Getting the columns right is the part that usually goes wrong. Visible form labels don't match internal field names, so a hand-built header row breaks easily. This tool hands you the real field names and types, so your CSV header is correct by construction and stays aligned with the form even after revisions.
Why is every value blank?
Because the tool extracts the form's structure (a field map), not its content. It reports which fields exist and what type each is, returning an empty string for the value. To capture what respondents entered, pair the field map with a value-reading step keyed by these field names.
Can I process 50 filled forms into one CSV at once?
Not directly. The tool handles one file per run and outputs schema rather than data. Extract the schema once to fix your columns, then capture each form's values separately and append the rows in Excel, Google Sheets, or a script. There's no batch mode in the UI.
How should I encode each field type as a CSV column?
Use the type from the field map: text fields as plain strings (quote multi-line text), checkboxes as TRUE/FALSE, radio groups and dropdowns as the chosen option's label, and option lists as the selected option(s), joined with a separator like a semicolon for multi-select. Omit PDFButton entries.
Will multi-line comment fields break my CSV?
Only if you don't quote them. The schema tells you a field is a PDFTextField; when you write the value, wrap any value containing commas or line breaks in double quotes per RFC 4180. Then it imports cleanly into Excel or Google Sheets.
What about conditional fields that weren't shown?
Every interactive field is enumerated, including hidden ones — they all appear in the schema. Treat them as candidate columns and drop the ones you don't want during the CSV build. The tool doesn't decide visibility for you.
Does it keep the field order?
Yes — the JSON preserves pdf-lib's enumeration order. Use that order consistently for your columns across every form so the data lines up row to row.
What if the form returns no fields?
An empty array means no interactive AcroForm — the form is flattened, scanned, or pure-XFA. There are no field names to turn into columns. For scanned survey sheets, OCR them with PDF OCR; for printed tables, use PDF Table to JSON.
How do I avoid garbled accented characters in Excel?
That's handled when you write the CSV, not here: save the file as UTF-8 with a BOM so Excel-on-Windows renders names like José or Müller correctly. The field-map JSON itself is plain UTF-8 text.
Is my form data uploaded?
No. The form is parsed in your browser via pdf-lib and never sent to a server. The result panel shows '0 bytes uploaded'. Only an anonymous usage counter is recorded when you're signed in.
My data is a table on the page, not form fields — what then?
This tool only reads interactive form fields. If your responses are a table drawn on the page, use PDF Table to JSON or PDF to Excel instead — those are built for tabular page content.
Privacy first
All PDF processing runs locally in your browser using PDF-lib and pdf.js. No file is ever uploaded — only metadata counters are saved for signed-in dashboard stats.