How we automated email triage and receipt logging for a small business
A managed system that labels each new email, routes uncertain messages for review, and records receipts and invoices in the correct ledger, saving and linking the source document whenever the email carried one. It labels and records only. It never deletes, archives, or moves email.
- 7 min
- 74 workflow steps
- 14 processing stages
- Live system
Built and run internally by Noventra Automation. System details and recorded figures are real.
How do you automate email sorting and receipt logging?
The system labels each new email using fixed rules first and AI classification only where needed. Uncertain messages go to a person for review. When an email contains a receipt or invoice, a connected workflow extracts the relevant details, saves the source document, and adds it to the correct income or expense ledger.
A business owner's inbox is where admin quietly piles up. Receipts and invoices arrive mixed in with newsletters, sales noise, and real client mail, and every one of them is a small decision: what is this, does it matter, and does it need to go into the books.
Done by hand, it becomes a stream of small daily tasks that never really stops. Receipts are easy to miss, and the ledgers fall behind precisely when things are busiest. The goal was to take the sorting and the routine receipt-logging off the owner's desk without ever risking the one thing that matters: that nothing is lost and the numbers are right.
What the finished system does
The system now reads each new email, labels it, and, when it contains a receipt or invoice, saves the document and records it in the correct ledger in the currency actually paid or received. The owner opens an inbox that is already sorted and ledgers that are being kept up to date. Anything uncertain still waits for a human decision.
We design managed automation systems like this around the tools a team already uses.
How the system works, stage by stage
A new email arrives
The system reads each new message as it lands in the inbox.
Known senders are handled by rule first
Clients, replies to conversations already in progress, and other known addresses are labelled by fixed rules before any AI is involved.
Classify the remaining email
AI classifies the remaining messages as expenses, income, newsletters, needs-a-look, or probably-junk.
Anything uncertain goes to a person
When the classifier is not confident, the message is routed to a needs-a-look lane rather than guessed at.
The email is labelled, never moved
A colour-coded label is applied and a processed stamp added. Nothing is deleted, archived, or moved out of the inbox.
A financial document triggers the correct logger
An expense or income email is handed to the matching ledger workflow.
The document is read and the figures extracted
The receipt or invoice, whether a PDF attachment or the email body, is read into supplier or customer, date, amount, currency, and category.
Save and link the source document
Where the email carried a receipt or invoice, the document is filed into a dated folder and linked from the ledger row, so the figure can be checked against the evidence.
A row is added to the ledger
A new line is appended to the correct year of the expense or income tracker, recorded in the currency that was actually paid or received.
Under the hood: the 14 internal stages
These stages group the 74 workflow steps that run across three connected workflows. The Inbox Sorter (stages 01 to 07) does the triage; the Expense and Income Loggers are near-identical clones and share the seven-stage shape shown in stages 08 to 14.
- 01Watch the inboxInternal stage: sorter.watch_inbox
Reads each new message as it lands, checking for new inbox mail about once a minute, alongside a manual drop-zone label polled every couple of minutes and a read-only preview path for inspecting a message without acting on it.
- 02Normalise the message and load settingsInternal stage: sorter.plan
Cleans each message into a common shape and loads the sorting configuration, so every later step works from the same tidy record.
- 03Recognise replies to our own mailInternal stage: sorter.read_outbound_queue
Reads the outbound-queue reference sheet so that replies to conversations we started are recognised as ours rather than treated as cold inbound mail.
- 04Apply fixed rules firstInternal stage: sorter.deterministic_rules
Our own addresses, warm-up mail, client domains, known senders, and source-based rules are all decided by fixed rules before any AI is involved.
- 05Decide whether AI is neededInternal stage: sorter.need_ai
Only the mail the fixed rules cannot answer is passed to the classifier; anything a rule already settled skips the AI entirely.
- 06Classify the rest in one readInternal stage: sorter.classify_batch
One batched classification sorts the remaining mail into expenses, income, newsletters, needs-a-look, or probably-junk, and routes anything it is not confident about to the human lane.
- 07Merge the decision, label, and routeInternal stage: sorter.merge_label_route
Merges the rule and AI decisions, applies the colour-coded label and a processed stamp without deleting or moving the message, hands expense and income mail to the matching logger, and strips the drop-zone tag so that lane empties itself.
- 08Receive the message and load settingsInternal stage: logger.receive
Takes the reference passed by the Sorter, loads its own configuration, and fetches the full email to work from.
- 09Read the documentInternal stage: logger.read_document
Detects a PDF attachment and reads its text, or falls back to the email body when the figures are in the message itself.
- 10Extract the figuresInternal stage: logger.extract_fields
A language model reads the document into structured fields: supplier or customer, date, amount, currency, and category.
- 11Map to a canonical categoryInternal stage: logger.normalise_category
Normalises the extracted category and maps it onto a fixed set of canonical categories, so the ledgers stay consistent.
- 12Find or create the dated folderInternal stage: logger.ensure_folder
Finds, or creates, the correct dated folder (year, quarter, month) for the document.
- 13Save the document and build the linkInternal stage: logger.upload_and_link
Uploads the document into the dated folder and builds a link back to it, so the ledger row can point at its source.
- 14Append the ledger rowInternal stage: logger.append_row
Ensures the correct year tab exists, then appends a new row to the expense or income ledger, recorded in the currency actually paid or received and linked to the saved file.
Why this is more than an AI that reads email
The classification is the easy part. The work is in making uncertain decisions visible and recoverable: the system only ever adds a label or a ledger row, so the original message stays exactly where you left it. Most of the steps exist to handle the cases where the obvious approach quietly corrupts your inbox or your ledgers.
The safeguards that make it dependable
One message at a time
Each email is handled on its own, start to finish.
Rules before AI
Deterministic rules run first, so known senders never depend on a model being right.
Confidence gate
Anything the classifier is unsure about goes to a human needs-a-look lane instead of being guessed.
Label and append only
The system never deletes, archives, or moves mail; the original is always where you left it.
No double-processing
A processed stamp stops any message being handled twice.
Figures keep their evidence
Where a receipt or invoice is attached, it is saved to a dated folder and linked from the ledger row. A figure reported in an email body with no document attached is still recorded, with nothing to link.
Currency discipline
Only the currency actually paid or received is recorded; conversions are left to a person, not invented.
Safe test mode
A dry-run mode writes to a scratch tab and a test folder, so the system can be exercised without touching the real ledgers.
Failure alerting
If any step fails, an internal failure-alert workflow is notified rather than the error passing silently.
The system is designed to keep uncertain classifications from silently changing financial records. Fixed rules handle known senders first, and low-confidence messages go to a human review lane rather than being logged on a guess.
Because the system only adds labels and ledger rows, the original email remains in place. Where the email carried a document, the recorded row links back to it, so the figure can be checked against the evidence.
In live operation
The system was validated against real historical email before going live. The category rules and confidence threshold were adjusted so uncertain messages reached a person rather than being added to the ledgers.
These figures cover the system's first six weeks in service. The email counts come from the mailbox's own label counters and the ledger figures from the ledgers themselves, rather than from run history, which is pruned after about a week.
The 565 label decisions are label applications rather than a division of the 484 messages: the system adds labels and never removes them, so a message reclassified later keeps both. Of those decisions, at least three hundred were made by fixed rules with no model involved, because three of the labels are ones the classifier has no route to at all. The true figure is higher, but it cannot be stated exactly: the system records which path decided a message only while it runs, never to a log. A mechanism and a floor are honest here; a percentage would not be.
The receipt and invoice volumes are small, covering a solo business over that period. They are real rather than representative.
The system is now live and managed by Noventra Automation.
Questions businesses ask
Does it delete or move my email?
No. It only adds a label and a processed stamp. Nothing is deleted, archived, or moved, so the original is always where you left it.
What happens if the AI is not sure what an email is?
It is routed to a needs-a-look lane for you to decide, rather than being logged on a guess.
Can I push an email through by hand?
Yes. Applying a process-me label sends a message through the same pipeline, and the label is removed once it has been handled.
How are receipts and invoices recorded?
The document is read for supplier or customer, date, amount, currency, and category, saved into a dated folder, and added as a row to the right year of the income or expense ledger, with the row linked back to the file. If a figure arrives in an email body with no document attached, the row is still recorded and simply has no file to link.
What about foreign-currency receipts?
The amount is recorded in the currency actually paid or received. Conversions are left to a person, so no exchange rate is ever invented.
Related teardowns
Want a system like this in your business?
Tell us what eats your week. We will tell you what can be automated, what should stay human, and what a first version would involve.
No build cost · Clear terms upfront · Managed by Noventra Automation