Noventra Automation
Teardown № 05 · Email and bookkeeping automation

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.

The problem

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.

The outcome

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.

New email
Sorted and labelled
Receipt read
Filed and linked
Ledger row added

We design managed automation systems like this around the tools a team already uses.

How it works

How the system works, stage by stage

Stage 01

A new email arrives

The system reads each new message as it lands in the inbox.

Stage 02

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.

Stage 03

Classify the remaining email

AI classifies the remaining messages as expenses, income, newsletters, needs-a-look, or probably-junk.

Stage 04

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.

Stage 05

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.

Stage 06

A financial document triggers the correct logger

An expense or income email is handed to the matching ledger workflow.

Stage 07

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.

Stage 08

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.

Stage 09

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.

  1. 01
    Watch the inbox
    Internal 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.

  2. 02
    Normalise the message and load settings
    Internal 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.

  3. 03
    Recognise replies to our own mail
    Internal 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.

  4. 04
    Apply fixed rules first
    Internal 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.

  5. 05
    Decide whether AI is needed
    Internal 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.

  6. 06
    Classify the rest in one read
    Internal 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.

  7. 07
    Merge the decision, label, and route
    Internal 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.

  8. 08
    Receive the message and load settings
    Internal stage: logger.receive

    Takes the reference passed by the Sorter, loads its own configuration, and fetches the full email to work from.

  9. 09
    Read the document
    Internal 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.

  10. 10
    Extract the figures
    Internal stage: logger.extract_fields

    A language model reads the document into structured fields: supplier or customer, date, amount, currency, and category.

  11. 11
    Map to a canonical category
    Internal stage: logger.normalise_category

    Normalises the extracted category and maps it onto a fixed set of canonical categories, so the ledgers stay consistent.

  12. 12
    Find or create the dated folder
    Internal stage: logger.ensure_folder

    Finds, or creates, the correct dated folder (year, quarter, month) for the document.

  13. 13
    Save the document and build the link
    Internal 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.

  14. 14
    Append the ledger row
    Internal 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.

The real complexity

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.

Known senders must not depend on a model being right, so clients and live conversations are decided by fixed rules before any AI runs.
A confident wrong answer is worse than an honest not-sure, so low-confidence mail is sent to a human lane rather than logged.
Receipts and invoices arrive as PDF attachments, as email bodies, and in different currencies, so the reader has to cope with all three.
The same email must never be processed twice.
A recorded figure is hard to check without its source document, so whenever one is present it is saved and linked from the ledger row.
A wrong currency conversion silently corrupts the ledgers, so the system records only what was actually paid or received.
Safeguards

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.

A wrong label should not become a hidden accounting error

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.

Results

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.

484
emails processed in its first six weeks
At least 300
of 565 label decisions made without a model involved
14
receipts and invoices logged, 12 expense and 2 income
0
logging failures on record
74
workflow steps across three connected workflows
2
separate income and expense 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.

Common questions

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.

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