Structured XML, not a flattened dump
XML is the language systems talk to each other in: an ERP import, a middleware pipeline, an integration that expects tagged fields. But the data you need is often locked in a PDF a supplier or bank sent you. FlowParse bridges that by reading the PDF with AI and emitting proper XML — each field wrapped in its own element, values correctly escaped, the whole document valid UTF-8.
This is not a text dump with angle brackets around it. The output has a real structure you can validate and parse, whether you feed it to an ERP, a transformation, or your own code.
The distinction matters: a flattened export forces the consumer to guess which fragment was the amount and which was the date, while structured XML names every value, so a parser addresses it directly and fails loudly if something is missing rather than silently misreading it.
What the XML contains
For an invoice, FlowParse emits a supplier block, invoice metadata, a line-item list and totals; for a bank statement, an account summary followed by a transactions list. Every field is its own element, so a downstream parser can address values by name rather than by position.
A trimmed invoice example looks like this:
<?xml version="1.0" encoding="UTF-8"?>
<Invoice xmlns="urn:parseflow:invoice:1.0">
<Supplier>
<Name>Acme Trading Ltd</Name>
<VATNumber>GB123456789</VATNumber>
</Supplier>
<Number>INV-2043</Number>
<Date>2026-03-14</Date>
<Items>
<Item index="1">
<Description>Consulting services</Description>
<Quantity>10.00</Quantity>
<UnitPrice>90.00</UnitPrice>
<Amount>900.00</Amount>
</Item>
</Items>
<Total>1080.00</Total>
</Invoice>Invoice XML and statement XML
The converter uses a shape that fits the document. Invoices produce a supplier / metadata / line-items / totals tree; bank statements produce an account-summary / transactions tree with signed amounts and a running balance. Both are namespaced so a consumer can tell what it is receiving.
Receipts, purchase orders and other structured documents map to the same field-per-element approach, so whatever the source, the output is predictable. A consumer written against one document type recognises the pattern in the next, which keeps your integration code small.
Why teams still choose XML
XML remains the lingua franca of enterprise integration. ERPs, EDI pipelines, government e-filing systems and legacy middleware often accept or require XML because it is self-describing, strictly validatable against a schema, and unambiguous about nesting — a line item clearly belongs to an invoice, a transaction to a statement.
Where a CSV flattens everything into rows and loses hierarchy, XML keeps the parent-child relationships intact, which matters when one invoice has many lines or one statement has many transactions. A validating parser can also reject a malformed document at the door rather than letting bad data reach your database.
When XML beats CSV or Excel
Pick the output that matches the consumer. A person analysing data wants Excel or CSV; a system ingesting data usually wants XML or JSON.
| Consumer | Best format | Why |
|---|---|---|
| A person analysing numbers | Excel / CSV | Sortable, familiar, spreadsheet tools |
| An ERP or middleware import | XML | Self-describing, schema-validatable, keeps hierarchy |
| Your own code / API | JSON or XML | Parse by field name, not position |
| Accounting software feed | QBO / OFX | Native bank-feed import, no mapping |
Encoding and escaping done right
Hand-built XML breaks on the small things: an ampersand in a company name, an accented character in a description, a quote inside a value. FlowParse escapes the five XML special characters and emits valid UTF-8 throughout, so the file parses cleanly the first time instead of throwing a well-formedness error mid-import.
Numbers are emitted with a consistent decimal format and dates in ISO form, so a strict schema validator accepts them without coercion. The little correctness details — no unclosed tags, no double-encoding, no invalid control characters — are exactly what makes an automated import reliable at volume.
Why you can't hand-author this
Re-typing a PDF into XML by hand is not just slow — it is where errors breed. One unescaped character or one mismatched tag and the whole document fails to parse, and finding that fault in a hundred-line file is its own chore. Multiply that by a month of invoices and manual XML authoring is a non-starter.
FlowParse generates the markup mechanically from the extracted data, so the structure is always well-formed and the values always match the source. The person who used to transcribe documents becomes the person who reviews a preview and clicks export.
How to convert a PDF to XML
Upload the PDF
An invoice, statement, receipt or other structured document.
Extract with AI
Fields are read and mapped to their meaning in seconds.
Review
Confirm the values in the editable preview; low-confidence fields are flagged.
Download XML
Export well-formed, UTF-8 XML — or choose Excel, CSV or JSON instead.
Convert many PDFs to XML
Processing a batch works the same way one document does — upload the set and each produces its own XML file, so an inbox of supplier invoices becomes a folder of import-ready XML your ERP can pick up. For consolidated financial data, Smart Merge combines many statements first, then exports.
Because the shape is identical across documents of the same type, a single import routine on your side ingests the whole folder — no per-file special-casing, no manual reformatting between one supplier's layout and the next.
Our XML vs industry standards
It is worth being precise: FlowParse emits its own clean, namespaced XML schema, not an industry EDI standard such as UBL, Factur-X or ISO 20022. That generic XML is ideal when you control the consumer — your own import, a transformation you write, a system that accepts arbitrary XML.
If a downstream system demands a specific standard, the honest path is to take FlowParse's structured XML (or CSV/JSON) and map it to that standard in your integration layer. FlowParse gives you clean, reliable field data to start from; it does not claim to output every regulated e-invoicing or banking schema.
| Format | What it is | FlowParse emits it? |
|---|---|---|
| FlowParse XML | Clean, namespaced generic XML | Yes |
| UBL / Factur-X | Regulated e-invoicing standards | No — map from our XML |
| ISO 20022 (CAMT) | Bank interchange standard | No — bank-authored |
XML or JSON over the API
For fully automated pipelines, the API returns the same extracted data as structured JSON you can transform into XML — or any shape — inside your own code. That suits high-volume, hands-off processing where no one opens a preview.
Whether through the app or the API, the underlying extraction is identical, so results are consistent across both. Teams typically prototype in the app, confirm the fields are right, then move the same documents onto the API once they trust the output.
Accurate fields, valid markup
Two things have to be right for usable XML: the values and the structure. FlowParse reaches around 98% field-level accuracy on standard layouts, and the serializer guarantees the markup is well-formed and escaped. On statements, a balance check confirms nothing was dropped before the file is produced.
The editable preview surfaces low-confidence fields before export, so a misread value is corrected while it is cheap to fix — not after it has already flowed into a downstream system.
Private by default
Uploads travel over TLS, processing is EU-hosted, the source PDF is deleted immediately after processing, and your documents are never used to train AI models. The XML you download is yours alone.
Because nothing is retained, there is no archive of your invoices or statements to leak — the data exists only long enough to produce the file you asked for.
Elements, attributes and nesting
Good XML is more than tagged text — it is structure a schema can enforce. FlowParse uses elements for values and attributes for metadata, so an invoice line carries an index attribute while its description, quantity and amount are child elements. Repeating structures — line items, transactions — are wrapped in a container element, giving a parser a clean list to iterate.
That predictable nesting is what lets you write a small, stable transformation on your side. An XSLT stylesheet or a few lines of code can walk the tree, pull the fields you care about, and drop the rest, because the shape never shifts from one document to the next.
Validating the XML on your side
Because the output is well-formed and consistently shaped, you can validate it against a schema (XSD) or a schematron rule set before it enters your system. That means a document with a missing total or an out-of-range date is rejected at the gate rather than silently posted, which is exactly the safety net a batch import needs.
It also makes debugging trivial: a validation error points at the element that is wrong, rather than leaving you to hunt through a flat file for the row that broke the import.
Transforming XML into whatever you need
XML is a starting point as much as a destination. From FlowParse's clean output you can transform to another XML dialect with XSLT, load it into a database, convert it to JSON for a web app, or feed it into an integration platform that maps fields to a target system. The self-describing structure makes every one of those steps straightforward.
This is why teams that receive documents in wildly different layouts standardise on structured XML first: it collapses the messy variety of incoming PDFs into one predictable shape their pipeline already knows how to handle.
The PDF-to-XML pitfalls this avoids
The do-it-yourself route to XML is a minefield: a table that a generic extractor reads as text with no structure, characters that break the encoding, values that land under the wrong tag, and scanned pages that yield nothing at all. Each is a well-formedness or a data-quality failure that surfaces only when an import rejects the file.
FlowParse's extraction is built to avoid exactly these. Structure is inferred from meaning so fields don't drift; the serializer escapes special characters and guarantees valid UTF-8; scanned pages go through OCR first; and the balance check on statements confirms completeness. The XML you get is one you can hand straight to a strict parser.
The net effect is fewer failed imports and less debugging. Instead of discovering a malformed document three steps into a pipeline, you get clean, validatable XML from the start.
Namespaces and versioning
Every FlowParse XML document declares a namespace — urn:parseflow:invoice or urn:parseflow:statement — with a version. That does two useful things: it tells a consumer unambiguously what kind of document it is holding, and it lets your integration bind to a known contract rather than parsing blind.
Versioning in the namespace means your code can be strict without being brittle. A parser written against version 1.0 keeps working, and if the shape ever evolves the version signals it explicitly rather than silently changing structure under a running import.
This is the discipline that separates production XML from an ad-hoc export: a named, versioned contract you can validate against and depend on across thousands of documents.
XML or JSON — which for your pipeline
XML and JSON solve the same problem — structured, machine-readable data — and FlowParse produces both. XML shines where schema validation, namespaces and mature XSLT tooling matter, which is common in enterprise and government integrations. JSON is lighter and native to web and modern API stacks.
The practical rule: if your consumer is an ERP, an EDI pipeline or a validating middleware, XML is usually expected; if it is a web app, a serverless function or a modern API, JSON is the smoother fit. Because both come from the same extraction, you can even emit XML for one system and JSON for another from a single upload.
Whichever you choose, the field mapping is identical, so a value that lands in an XML element appears under the same name in the JSON — no reconciling two different shapes.
A worked example: invoice PDF to import
Picture a supplier invoice arriving as a PDF. You upload it, FlowParse reads the supplier name and VAT number, the invoice number and date, each line item, and the totals, then shows them in the preview. You confirm one flagged field — a smudged unit price — and export.
The result is an XML document with a supplier block, the metadata, an items list and the totals, valid and escaped. Your integration picks it up from a watched folder, validates it against your schema, and posts it to the ledger — no one re-typed a figure, and the whole path from inbox to posted took under a minute.
Repeat that across a month of invoices and the pattern is the same every time, because every document produces the same predictable shape your pipeline already understands.
Who converts PDFs to XML
Developers wiring a supplier's PDF invoices into an ERP, integration teams feeding middleware, finance systems that ingest tagged data, and anyone whose downstream tool speaks XML rather than spreadsheets.
If a machine, not a person, is the next reader of the data, XML is usually the format it wants — and FlowParse turns the PDF into that shape without a template, a macro, or a morning of manual transcription.
Convert your PDF to XML
Upload an invoice, statement or table and get clean, well-formed, UTF-8 XML — one element per field, ready for your ERP or integration.
