Three-Way Match: Supplier Invoices Paid Only for What Was Ordered and Received
Invoice lines, purchase orders and receipts are matched in one Kylon room. Agents fill gaps from the invoice detail in Box, set follow-up tiers and reassess after late receipts and credit notes, and the AP lead approves each status before a payment run is built.
Invoices, orders and receipts rarely agree on the first pass
Three-way match sounds mechanical. An invoice line is paid when it agrees with its purchase order line on price and with the receipt on quantity, within tolerance. In practice many lines fail the first pass for ordinary reasons: the receipt was posted late, the supplier split a delivery, the invoice extraction left the quantity blank, or a credit note is already on its way.
Lines live in Airtable, invoice PDFs and their line-detail notes in Box, the match policy and tolerance table in Google Drive, and supplier mail, credit notes included, in the AP inbox on Outlook. Buyers chase variances from Gmail, and receiving posts late deliveries in Slack. Every variance needs an owner, and the match report that reaches the controller has to agree with the lines underneath it.
Who works in the room
People
AP lead
Approves every match status and each supplier payment run
Buyers
Own the purchase orders and settle price and quantity variances with suppliers
Receiving lead
Posts goods receipts and confirms late or split deliveries
Controller
Sets the match tolerances and approves any revision
Agents

AdaLine matcher
Matches each invoice line to its PO line and receipt, fills blank quantities from the Box line-detail note, and proposes a status and follow-up tier
Airtable
Box
Google Drive
NovaReport and payment runs
Checks the match report against the lines as they stand and prepares the supplier payment run records
Airtable
Google Drive
MycoSupplier follow-up
Matches supplier credit notes by invoice id, drafts follow-ups for buyers to send, and reads receiving updates in Slack
In the matching room, a message that names no agent goes to Ada, the default, which leads any thread about a line's status. Nova owns the match report and the payment run records. Myco owns supplier follow-up, so a credit note or a supplier question reaches it without a mention. When Myco matches a credit note to an invoice, it hands the invoice id to Ada in the thread, and Ada reassesses the lines on that invoice.
A match cycle, line by line
The tolerance table and the follow-up tiers are written into the room guidelines, so a line's status and its tier always come from the same rule set.
- Agent works
- Person decides
- Arrives or gets recorded
flowchart TD
match["<b>Ada</b> fills any blank quantity from<br>Box, then matches PO and receipt"]
ok1["<b>AP lead</b> approves statuses<br>before Airtable is written"]
tier["<b>Ada</b> gives each unmatched line<br>a follow-up tier"]
buyers["<b>Buyers</b> accept their follow-ups"]
report["<b>Nova</b> checks the match report<br>against the lines as they stand"]
okrep["<b>AP lead</b> corrects and releases it"]
late["<b>Ada</b> reassesses the lines<br>new receipts touch"]
tol["<b>Ada</b> reassesses only lines<br>at quantity variance"]
recv["<b>Receiving lead</b> confirms the<br>receipts, <b>AP lead</b> approves"]
ctrl["<b>Controller</b> approves the<br>revised tolerance"]
credit["<b>Myco</b> matches each credit note<br>by its invoice id"]
runs["<b>Nova</b> prepares the supplier<br>payment run records"]
okruns["<b>AP lead</b> approves each payment run"]
match --> ok1 --> tier --> buyers --> report --> okrep
okrep -->|late receipts| late
okrep -->|new tolerance| tol
late --> recv
tol --> ctrl
recv & ctrl --> credit
credit --> runs --> okruns
class match,tier,report,late,tol,credit,runs agent
class ok1,buyers,okrep,recv,ctrl,okruns person
classDef agent fill:#FFFFFF,stroke:#DCD3C8,color:#1B1712
classDef person fill:#EEF0E3,stroke:#6E7447,color:#1B1712
classDef event fill:#F4ECDD,stroke:#F4ECDD,color:#564C42| Stage | What happens | Who acts | Who decides |
|---|---|---|---|
| First match | Each invoice line is matched to its PO line and receipt, and a blank invoiced quantity is filled from the Box line-detail note first | Ada | The AP lead approves statuses before Airtable is written |
| Follow-up tiers | Each unmatched line gets a tier: buyer follow-up, supplier query or payment hold | Ada, then Myco | Buyers accept their follow-ups |
| Match report review | The generated report is checked against the lines as they stand | Nova | The AP lead corrects and releases it |
| Late receipts | Lines touched by newly posted receipts are reassessed | Ada | The receiving lead confirms the receipts; the AP lead approves |
| Tolerance revision | Only lines currently at quantity variance are reassessed, and every line is still reported | Ada, then Nova | The controller approves the revised tolerance |
| Credit notes and closeout | Credit notes are matched by invoice id, and the five supplier payment runs are closed out | Myco, Ada and Nova | The AP lead approves each payment run |
Late receipts, a tolerance change and credit notes
Most reassessment is triggered by something arriving late. When receiving posts receipts for two suppliers, Ada reassesses only the lines those receipts touch, and the thread shows which lines moved and which did not. When the controller widens the quantity tolerance, the reassessment covers only lines currently at quantity variance, since a price variance is not affected, but the report still lists every line so nobody wonders where the rest went.
Credit notes are matched by the invoice id in the supplier's email, never by amount or supplier name, because two invoices from one supplier can carry the same total. Once the credit notes are applied, Myco drafts one reply on the AP lead's request thread stating how many invoice ids changed, counted from the lines in Airtable after the update rather than from the conversation.
What the checks catch
- An invoice line with a blank quantity that would fail match until it is filled from the Box line-detail note
- A credit note matched by amount to the wrong invoice instead of by its invoice id
- A tolerance revision that reassesses price variance lines it does not apply to
- A match report whose totals do not agree with the lines in Airtable
- A reply that counts changed invoice ids from memory instead of from the updated lines
What stays with people
- Approving every match status before it is written to Airtable
- Agreeing price and quantity variances with suppliers
- Approving a tolerance revision
- Approving each supplier payment run, and sending the supplier mail Myco drafts
Integrations in this workflow
Kylon is not a procure-to-pay suite and it does not replace one. It works across the records and mailboxes the team already has, and keeps the matching decisions and their reasons in one room.
- Airtable holds the invoice, PO and receipt lines, their match status and the payment run records
- Box holds the invoice PDFs and the line-detail notes used to fill blank quantities
- Google Drive keeps the match policy, the tolerance table and the match report
- Outlook carries the AP inbox where suppliers send invoices and credit notes
- Gmail carries buyer threads with suppliers, with follow-ups drafted for the buyer to send
- Slack is where receiving posts late deliveries and split shipments
Where to start
Take one week of invoices from a handful of suppliers. Connect the Airtable base that holds your lines and the Box folder with the invoice PDFs, and write one rule in the room guidelines: a line is matched only on evidence in its own records, and the AP lead approves every status before it is written.
“Every line that moved has a reason in the thread, and every line that did not is still in the report.”
Set it up with your agent
Open a new Room, add your agent and paste this prompt. It connects the tools, builds the App with you and asks for your rules one step at a time, and nothing goes out until a person approves it.
Set up our three-way match desk in this Room. Take it one step at a time and wait for my OK before you move on. 1. Connect Airtable, Box, Gmail, Google Drive, Outlook and Slack. Tell me which ones still need connecting. 2. Ask me who works this desk: the AP lead, the buyers, the receiving lead and the controller. Help me invite them to this Room. 3. Build an Invoice Match App with Invoice line, PO line, Match and Status columns, one record per line. Fill it from the open invoice lines in Airtable and the invoice PDFs in Box. 4. Match each invoice line to its PO line and receipt. Fill any blank invoiced quantity from the Box line-detail note. Check each match against the threshold we set. Propose a status and a follow-up tier for every line, and show me the ones that fail. 5. Draft supplier follow-ups and credit note replies for buyers to send from Gmail. Never write a status to Airtable and never send any mail until the AP lead approves each match status, the buyers accept their follow-ups, and the AP lead approves each payment run. 6. Write our rules, our checks and who approves what into this Room's guideline, so every match cycle follows the same rule set. 7. After one clean week, offer to turn the match cycle into an Automation. Before you start, ask me for our rules one at a time.
Your first company harness. Where humans and agents run your business together.
More Use Cases
View allProperty Tax Appeals: The Right Parcels Filed Within Each County's Capacity
Parcel triage, filing allocation, manifest review, comparable corrections and appeal letters run through one Kylon room. Agents compute each county's median and check every filing against Airtable, and the tax manager approves each change and each letter.
Utility Bill Validation: Every Bill Checked Against Tariff, Meter and Period Days
Each utility bill is checked against the site register, the tariff in force on each day and any meter swap. Agents do the arithmetic and draft the replies in one Kylon room, and the utilities lead approves every disposition and every message.





