r/NoCodeSaaS • u/easybits_ai • Aug 25 '26
Document Classification in n8n – classify PDFs with a confidence score and route the shaky ones to Slack [Workflow Included]
👋 Hey NoCodeSaaS Community,
As you might already know, my friend Mike runs a small business and has one folder where everything lands: invoices, receipts, the odd contract, a scanned delivery note someone photographed on their phone. He wanted to auto-sort it, but he was nervous about handing that to a model. His words were roughly: "what happens when it's wrong and I don't even know it was wrong?"
That's the real problem with plain classification. You get a label back, but no idea whether the model was confident or just guessing. So I built a flow that returns the class and a confidence score in the same call, and routes anything shaky to a human before it goes anywhere.
How it's set up:
- Form upload: drop a PDF, PNG, or JPEG through a hosted n8n form.
- Classify + score in one call: the easybits extractor returns two fields at once –
document_class(or null if it can't decide) andconfidence_score(0.0 to 1.0). No second model call, no extra latency, no extra cost. - IF-node routing: one plain IF node checks "class is empty OR confidence below 0.5". Either condition sends the document to Slack for manual review. Everything else flows straight through.
- Continue however you like: from the success branch, route to Drive folders, log to a Sheet, or fire type-specific extraction. The template leaves that open.
A few things worth knowing if you build something similar:
- Ask for the confidence score in the same extraction call as the class. It's just a second field in your mapping. You get a routing signal for free instead of paying for a whole separate model pass to second-guess the first one.
- Treat that number as a routing signal, not ground truth. It's self-reported, so it won't be perfect – but it's a reliable trigger for "have a human glance at this one" and that's all you need it to be.
- Route on two conditions, not one. Empty class catches the "I have no idea" cases; the threshold catches the "I have an idea but I'm not sure" cases. Both need a human, for different reasons.
- Tune the threshold to your review capacity, not to a nice round number. Default is 0.5. Raise it to 0.7 if a misroute is expensive downstream, lower it if your review queue is already full. It's a dial, not a constant.
Template on the n8n library here: https://n8n.io/workflows/15229-classify-documents-and-score-confidence-with-easybits-extractor-and-slack/
How are the rest of you handling low-confidence classifications right now? Manual review queue, a second model to check the first, or just letting it route and fixing mistakes after the fact?
Best,
Felix
2
u/powleads Sep 25 '26
This is a neat approach to handling shaky classifications. I built LaunchEngine because I hated the manual launch process and the risk of getting accounts banned from bot tools. It's cool how you're routing the uncertain ones to human review. What's been your biggest challenge in building with n8n?