This workflow corresponds to n8n.io template #8506 — we link there as the canonical source.
This workflow follows the Form → Form Trigger recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"nodes": [
{
"id": "0663af99-4977-4723-828d-d5e5725d036a",
"name": "Trigger \u2022 Upload image for OCR",
"type": "n8n-nodes-base.formTrigger",
"position": [
576,
288
],
"parameters": {
"options": {},
"formTitle": "Receipt OCR",
"formFields": {
"values": [
{
"fieldType": "file",
"fieldLabel": "File (Max 1MB)",
"multipleFiles": false,
"requiredField": true
},
{
"fieldType": "radio",
"fieldLabel": "Is it a table",
"fieldOptions": {
"values": [
{
"option": "Yes"
},
{
"option": "No"
}
]
},
"requiredField": true
}
]
},
"formDescription": "Upload an image to extract text via OCR.\nMax file size: 1 MB"
},
"typeVersion": 2.3,
"alwaysOutputData": false
},
{
"id": "815fc903-a65e-46a5-8177-a0cf8d40aa01",
"name": "Prepare \u2022 Normalize inputs",
"type": "n8n-nodes-base.set",
"position": [
832,
288
],
"parameters": {
"options": {
"stripBinary": false
},
"assignments": {
"assignments": [
{
"id": "c454bde2-a211-448e-ac21-e044044915f6",
"name": "isTable",
"type": "string",
"value": "={{ ($json[\"Is it a table\"] ?? $json.Is_it_a_table) === \"Yes\" }}"
},
{
"id": "07545925-b27a-4471-a5d0-93abc740acf6",
"name": "File (Max 1MB)",
"type": "object",
"value": "={{ $json['File (Max 1MB)'] ?? $json.File__Max_1MB_ }}"
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.4
},
{
"id": "baf07380-1179-4077-9c7f-07c92e65bee5",
"name": "OCR.space \u2022 Parse image",
"type": "n8n-nodes-base.httpRequest",
"position": [
1088,
288
],
"parameters": {
"url": "https://api.ocr.space/parse/image",
"method": "POST",
"options": {},
"sendBody": true,
"contentType": "multipart-form-data",
"authentication": "genericCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "language",
"value": "pol"
},
{
"name": "file",
"parameterType": "formBinaryData",
"inputDataFieldName": "File__Max_1MB_"
},
{
"name": "OCREngine",
"value": "2"
},
{
"name": "isTable",
"value": "={{ $json.isTable }}"
}
]
},
"genericAuthType": "httpHeaderAuth"
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "3e1fe87f-e776-469d-bae4-f76de5032ec3",
"name": "Display \u2022 Show OCR text",
"type": "n8n-nodes-base.form",
"position": [
1344,
288
],
"parameters": {
"options": {
"customCss": ".card {\n\tposition: relative;\n\tmax-width: 500px;\n\tmargin: 20px auto;\n\tpadding: 20px;\n\tbackground: #fefefe !important;\n\tborder-radius: 12px;\n\tbox-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);\n\tfont-family: 'Courier New', monospace;\n\tcolor: #1f2937;\n\tfont-size: 16px;\n\tline-height: 1.6;\n\twhite-space: pre-wrap;\n}\n\n.header p { text-align: left; }\n\n@media (max-width: 768px) {\n\t.card { margin: 10px !important; padding: 15px !important; font-size: 14px; }\n}\n",
"formTitle": "OCR Result"
},
"operation": "completion",
"completionTitle": "OCR Result",
"completionMessage": "={{ $json.ParsedResults[0].ParsedText }}"
},
"typeVersion": 2.3
},
{
"id": "ba102eff-44a3-48f3-bf37-2c4db27fa1a0",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
240,
96
],
"parameters": {
"height": 176,
"content": "### \ud83d\udccc What this flow does \nUpload a receipt image \u2192 select if it\u2019s a table \u2192 OCR.space parses it \u2192 result displayed in a styled card."
},
"typeVersion": 1
},
{
"id": "4c2f78c5-f0f1-40b8-a776-8fd846ec6922",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
512,
96
],
"parameters": {
"height": 400,
"content": "### \ud83d\udd39 Trigger \u2022 Upload image for OCR \nPublic form that collects the image (\u22641 MB) and asks if the content is a table."
},
"typeVersion": 1
},
{
"id": "f9d0e10c-466b-4456-9f89-2d50e4a1cf46",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
752,
96
],
"parameters": {
"width": 256,
"height": 400,
"content": "### \ud83d\udd39 Prepare \u2022 Normalize inputs \nConverts the radio field (\u201cYes/No\u201d) into a true/false `isTable` flag. Keeps the uploaded file attached."
},
"typeVersion": 1
},
{
"id": "36621099-7926-463a-a36d-f185cbfb8b82",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1008,
96
],
"parameters": {
"width": 256,
"height": 400,
"content": "### \ud83d\udd39 OCR.space \u2022 Parse image \nSends file + options to OCR.space API. \nLanguage = `pol`, Engine = `2`, passes `isTable`. \n\u26a0\ufe0f Needs API key (header auth)."
},
"typeVersion": 1
},
{
"id": "70f2a795-2c1c-4265-b5d2-af8af703814c",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
1264,
96
],
"parameters": {
"height": 400,
"content": "### \ud83d\udd39 Display \u2022 Show OCR text \nShows parsed text from `ParsedResults[0].ParsedText` inside a clean, monospace card for easy copy-paste."
},
"typeVersion": 1
}
],
"connections": {
"OCR.space \u2022 Parse image": {
"main": [
[
{
"node": "Display \u2022 Show OCR text",
"type": "main",
"index": 0
}
]
]
},
"Prepare \u2022 Normalize inputs": {
"main": [
[
{
"node": "OCR.space \u2022 Parse image",
"type": "main",
"index": 0
}
]
]
},
"Trigger \u2022 Upload image for OCR": {
"main": [
[
{
"node": "Prepare \u2022 Normalize inputs",
"type": "main",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
httpHeaderAuth
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow automates the process of extracting text from receipt or document images using OCR.space and presenting the results in a clean, styled form.
Source: https://n8n.io/workflows/8506/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Small businesses, consultants, agencies… anyone who bills with PayPal.
Transform your GLPI system's user experience with a modern, optimized web interface that simplifies technical support ticket creation. How it works
Credentials Transfer. Uses form, httpRequest, executeCommand, readWriteFile. Event-driven trigger; 22 nodes.
This workflow automates the process of sending voice calls for verification purposes and combines it with email verification. It uses the ClickSend API for voice calls and integrates with SMTP for ema
This workflow creates a user-friendly web form to upload a file, which allows users to upload a single large file (up to 5Gb) through a custom web form and automatically send it via TransferNow, handl