Hey n8n community,
One more follow up on my Purchase Order extractor. Everyone talks about getting the extraction working. Almost nobody talks about what happens after, when the data is sitting in a sheet and someone has to trust it.
That gap bothered me on this build. My friend downloads the sheet and pushes it straight into his ERP. If one field came out wrong, he has no way of knowing until the numbers are already in his system. Silent failure is the worst kind, because a blank cell looks exactly like a field that was legitimately empty.
So I built three small things into the workflow. None of them are clever, they just take ten minutes each and they change how much you can trust the output.
1. Every row knows where it came from. The source filename lands in a Document Name column next to every single line. Sounds trivial. It means that when a number looks off three weeks later, you go straight back to the exact PDF instead of guessing which of forty documents produced that row. This is the single highest value column in the whole sheet and it costs you nothing.
2. One helper that catches every flavour of empty. “Missing” is never just one thing. Across real documents I saw actual null, the string “null”, empty strings and whitespace-only values. I stopped writing one-off checks and made a single isMissing() function that catches all of them, then used it everywhere. Without this you get inconsistent behaviour where one field is caught and the next one silently slips through.
3. The workflow tells you what it isn’t sure about. After processing, the form’s completion screen lists which document and which field didn’t extract cleanly. Not a log file nobody reads, the actual screen the user is already looking at. So instead of trusting forty rows blindly, he knows the two he should eyeball against the original.
The mindset shift for me was this: an extraction pipeline isn’t done when it produces data, it’s done when someone can tell good output from bad without opening the source documents. Especially if you’re handing this to a client. They will find the one wrong number, and “the AI did it” is not an answer.
One deliberate choice worth mentioning: I do not flag every empty field. Some fields on these POs are legitimately blank most of the time, and flagging those would generate a warning on nearly every document. Then people learn to ignore the warnings entirely, which is worse than having none. Flag what should be there, not everything that’s missing.
The full workflow is now on the official n8n template library if you want to try it:
You’ll also find it on my GitHub, alongside 20 other workflows I’ve built over the last months:
How do you handle this on your document workflows? Curious whether people build a review step or just spot check and hope.
Best,
Felix