Export Typeform to JSON: API Export vs OCR for Scanned Forms
If you searched for export Typeform to JSON, you probably want typed records you can store, sync, or rebuild elsewhere. Short answer: for a live Typeform account, pull form definitions with the Create API and submissions with the Responses API (both return JSON). Use the admin Results export when CSV or XLSX is enough. When the input is a screenshot, PDF printout, or paper survey that only looks like a Typeform, there is no Typeform token to call. That is when OCRskill’s structured path (POST /ocr.json?fields=...) turns the page into named JSON.
This post is the Typeform-specific decision guide and glue. It is not a full field catalog. For form OCR as a document class, see form data extraction API. For how /ocr.json maps pixels to typed keys, see structured OCR JSON.
Two exports people confuse
“Export Typeform to JSON” usually means one of three jobs:
- Form definition: questions, options, logic, settings as a JSON document you can version or migrate.
- Response data: submitted answers as JSON (or a spreadsheet you will convert).
- Pixel capture: a printed survey, PDF dump, or UI screenshot with no API access to the original form.
Jobs 1 and 2 belong to Typeform’s own developer tools and admin panel. Job 3 belongs to OCR. Mixing them wastes time: you cannot call api.typeform.com against a phone photo, and you should not run OCR on data you can already pull as clean JSON from the Responses API.
Live account: official Typeform paths to JSON
Typeform documents data portability for form definitions under GDPR. Two supported routes:
Form definitions via Create API
GET https://api.typeform.com/formslists forms in the account (public and private).- Find
form_idfrom that list, or from the form URL (https://mysite.typeform.com/to/u6nXL7→u6nXL7). GET https://api.typeform.com/forms/{form_id}returns the full definition JSON (fields, logic, screens, settings, and related references).
Auth uses a Typeform personal access token (or app OAuth) as a Bearer token, same pattern as other Typeform APIs. Details live in the Create API and the retrieve form reference.
Admin “Request data” for definitions
From My Account, Typeform’s Request data flow emails an attachment with questions, options, and Logic Jumps for portability. Prefer the Create API when you need machine-readable JSON in a repeatable pipeline.
Response submissions via Responses API
The Responses API retrieves submissions on demand in JSON, without webhooks or third-party sync. The core call is:
curl -H "Authorization: Bearer YOUR_TYPEFORM_TOKEN" \
"https://api.typeform.com/forms/FORM_ID/responses?page_size=1000"
Verified behavior from Typeform’s docs:
- Default page size is small;
page_sizecan go up to 1000. - For larger histories, narrow with
since/untilor paginate withbefore/aftercursors (see the retrieve responses reference). - Very recent submissions (on the order of the last ~30 minutes) may not appear yet. For near-real-time delivery, Typeform points you to webhooks instead of polling alone.
- Each item includes answers keyed by field metadata (
id,ref,type) plus landing/submit timestamps and related members documented in the reference.
That JSON is the native export for developers who searched “export Typeform to JSON” with an active workspace and a token.
Admin Results: CSV and XLSX, not native JSON
In the product UI, Results → Responses lets you export selected or filtered rows as CSV or XLSX (Export your responses). Useful for analysts. If your app needs JSON, either use the Responses API directly or convert the spreadsheet in your own code. Do not expect the Results download button to emit the same JSON shape as GET .../responses.
Webhooks when polling is the wrong tool
Webhooks push each submission to your URL as it arrives. Pair them with the Responses API for catch-up and backfill. Polling alone is a poor substitute for live intake.
When OCR is the right path
Use OCRskill when you cannot authenticate to Typeform, or when the artifact is not in Typeform’s store:
- Printed surveys filled by hand or pen
- PDF “print to file” of a completed form
- Screenshots from a browser, email, or slide deck
- Partner packets that resemble Typeform layouts but live only as images
In those cases, declare the keys your backend already uses and call structured extraction:
curl https://api.ocrskill.com/get-key.json
curl "https://api.ocrskill.com/ocr.json?fields=last_name,first_name,email,company_name?,birthdate?" \
-H "Authorization: Bearer sk-your-key-here" \
-F "file=@typeform-screenshot.png"
You get trimmed strings and normalized dates as JSON, with required fields failing closed (400) when the page cannot support them. Optional keys use the name? suffix. Discovery mode (omit fields) helps you explore a new layout before you freeze a schema. Full field lists and error shapes stay on the OCR JSON API reference; the sibling posts above cover buyer framing and pipeline validation so this page stays Typeform-focused.
If you only need searchable text for review or RAG, use Markdown via POST /ocr instead of forcing a schema. See image to text API for when Markdown beats typed fields.
Glue patterns that stay honest
A practical split for teams that both run Typeform and still receive paper:
| Source | Prefer | Output |
|---|---|---|
| Live Typeform, need schema | Create API GET /forms/{id} |
Definition JSON |
| Live Typeform, need answers in code | Responses API GET /forms/{id}/responses |
Responses JSON |
| Live Typeform, need a spreadsheet | Results → Export CSV/XLSX | Tabular file |
| Live Typeform, need push | Webhooks | Event payloads |
| Screenshot / PDF / paper | OCRskill POST /ocr.json?fields=... |
App-shaped JSON |
| Readable text only | OCRskill POST /ocr |
Markdown |
Map Typeform answer ref values to your internal column names in your own layer. Do not expect Typeform’s answer array shape to match OCRskill’s flat field object one-for-one. Keep one schema contract in your app (Zod, Pydantic, JSON Schema) and adapt both sources into it.
For multi-page PDF printouts, decide page split vs single upload the way you would for any form packet. Typeform’s API already returns structured answers; OCR should only touch pages that never lived in that API.
Limitations worth planning for
- Typeform token scope. Private forms need a token with access; public form URLs alone do not unlock private response history.
- Responses latency. Near-term submissions may lag on the Responses API; webhooks cover the live path.
- Pagination. Over 1000 responses requires cursor or date windows, not a single giant dump.
- Admin formats. UI export is CSV/XLSX; JSON for submissions is an API concern.
- OCR quality. Handwriting, stamps, and crop photos still need a review path. Required-field
400s are a feature for incomplete scans, not a bug to retry blindly. - Field catalogs. OCRskill supports a published field list; novel Typeform question types that have no analogue still need Markdown OCR plus your own structuring step until you lock keys.
None of this invents a Typeform “JSON download” button that does not exist. It routes you to the documented Create API, Responses API, admin export, and OCR when pixels are all you have.
Conclusion
“Export Typeform to JSON” is solved first by Typeform itself: Create API for definitions, Responses API for submission JSON, admin CSV/XLSX when a spreadsheet is the real deliverable, and webhooks when you need push. Keep OCRskill for the leftover world of screenshots, PDF printouts, and paper surveys where there is no Bearer token and no form_id to call. Wire both sources into one app schema so live Typeform traffic and scanned leftovers land as the same typed records. Grab a free OCRskill key when the next artifact is an image; keep Typeform’s Responses and data portability docs open when the account is still online.
