Skip to content

Documentation

PDF parsing: turn PDFs into text an agent can read

Updated October 12, 2026

Invoices, contracts and reports usually arrive as PDFs, which a model cannot read directly. The Parse PDF node turns a PDF into clean Markdown in reading order, with headings, lists and tables kept, so the next node can work with it.

Add the Parse PDF node

Drag Parse PDF from the Tool group in the palette and choose where the PDF comes from under Source:

  • File: a PDF you upload, or one passed in the run input, such as {{ input.file }} or {{ trigger.invoice }}.
  • URL: a public link to a PDF. Private and internal addresses are blocked.
  • Base64: the file as base64 text, such as an email attachment from a connector.
Agent user prompt
Pull the invoice number, total and due date from this invoice:

{{ nodes.parse.output.markdown }}

Uploading a file

Uploads must be PDFs up to 25 MB, and Worfilo checks the file itself, not its name. There are three ways to test with one:

  • On the node: choose Upload PDF, or drop a file on the File field.
  • In the trigger: on the Manual Trigger, choose Attach PDF under Test inputs. The file arrives as {{ trigger.file }}, the same way an API call sends it, so set the node's File to {{ trigger.file }} and press Run.
  • In the Playground: attach a PDF with the paperclip next to the message box. The chip shows the name it arrives under, and the code samples switch to a multipart request you can copy.

What the node returns

Output picks the format. Markdown (the default) is best for an agent. JSON lists every heading, paragraph, table and image with its page number and position on the page, which is useful for citations or highlighting. Both returns both.

out
{
  "filename": "invoice-1042.pdf",
  "pages": 2,
  "needs_ocr": false,
  "markdown": "# Invoice 1042\n\nBilled to: Acme Ltd ..."
}

Pages limits parsing to part of a document, such as 1-3 or 1,4,7-9.

Scanned PDFs

Parse PDF reads the text stored in a PDF. A scanned document is only images of pages, so it comes back nearly empty with needs_ocr set to true. Branch on it with an If node to tell the sender, instead of passing empty text to an agent.

Privacy

Files are stored encrypted, are visible only to your account, and are deleted after 24 hours. The parser keeps nothing: each PDF is parsed in a temporary folder that is removed straight away. Run history records the page count, never the text.

To keep personal data in a document away from the model, put a Mask PII node between Parse PDF and the agent, with its text set to {{ nodes.parse.output.markdown }}.

Build it on the canvas

Create a free account, describe the workflow or wire it yourself, and run it in the browser.