
InvoiceMatch
AI invoice and purchase order matching
- Client
- A UK-based business
- Area
- Finance: supplier invoices and purchase orders
- My role
- Designed and built the service and its integrations
- Platform
- Flask microservice on Azure
- Connects to
- Outlook and the company's PHP-based CRM
Overview
InvoiceMatch automates the invoice checks in a UK business’s finance team. Supplier invoices are picked up from the inbox, read by AI and checked against the matching purchase order in the company’s CRM. Invoices that match are approved automatically, and a person only steps in when something doesn’t add up.
The Problem
Supplier invoices arrived in an Outlook inbox, and each one had to be checked by hand against its purchase order in the CRM before it could be approved.
The Solution
A Python microservice, built with Flask and deployed on Azure, that runs the whole check. It picks up new invoices from the Outlook inbox, uses Azure AI Foundry to read them, and pulls the matching purchase order from the company’s PHP-based CRM to compare the values. When everything matches, the invoice is approved automatically. When any value differs, it goes to a person to approve. Every invoice and decision is stored in PostgreSQL.
Key Features
Inbox Capture
New invoices in the Outlook inbox are picked up automatically. No one has to forward or upload them.
AI Reading
Azure AI Foundry reads each invoice and pulls out the details needed for the check, such as the PO number and amounts.
PO Matching
Each invoice is checked against its purchase order from the company's PHP-based CRM, value by value.
Auto-Approval
Invoices that match their purchase order are approved without anyone having to touch them.
Human Review
If any value doesn't match, the invoice goes to a person to approve before it goes any further.
Built on Azure
A Flask microservice deployed on Azure, with PostgreSQL storing every invoice and decision.
Tech Stack
Service
- Python
- Flask
- PostgreSQL
AI & Cloud
- Azure AI Foundry
- Azure
Integrations
- Outlook
- PHP CRM

