● AI Automation  ·  Accounts Payable

AP 3-Way Match AI Agent — Auto-Matches Every PO, Receipt & Invoice Before a Dollar Goes Out

Your AP team is manually matching purchase orders to goods receipts to vendor invoices — one by one, in SAP or NetSuite. It’s 40% of their day and the easiest thing AI can take over.

👈  Live demo below. Watch the AI match a full AP queue — auto-approving clean invoices, flagging discrepancies, and routing exceptions to the right approver. Hit Run Demo to auto-play.
40%
of AP team time on matching
5–10%
of invoices have errors
$0
overpayments missed
AP 3-WAY MATCH — ACME CORP — WEEKLY BATCH PURCHASE ORDERS PO-2024-0841 $12,400 PO-2024-0842 $8,750 PO-2024-0843 $31,200 PO-2024-0844 $5,600 PO-2024-0845 $18,900 + 7 more... 12 POs GOODS RECEIPTS GR-2024-1201 ✓ recv GR-2024-1202 ✓ recv GR-2024-1203 partial GR-2024-1204 ✓ recv GR-2024-1205 ✓ recv 12 receipts VENDOR INVOICES INV-4471 $12,400 INV-4472 $8,750 INV-4473 $33,600 INV-4474 $5,600 INV-4475 $18,900 12 invoices 🤖 AI 3-WAY MATCH ENGINE (Claude AI + n8n) Comparing PO qty/price → GR received qty → Invoice amount → flagging variances ✓ AUTO-APPROVED: 10 invoices  — $71,150 ⚠ FLAGGED: 2 invoices  — $41,900 EXCEPTION 1: INV-4473 — Acme Supplies PO amount: $31,200  |  GR received: partial (80%)  |  Invoice: $33,600 ⚠ Invoice exceeds PO by $2,400  +  partial receipt — routed to CFO approval AI automation replaced 4 hours of manual AP matching. Every discrepancy caught. Every clean invoice auto-approved. Zero overpayments. Integrated with: SAP  |  NetSuite  |  QuickBooks  |  Bill.com  |  Tipalti
The Problem

Every invoice needs a PO and a goods receipt
before it gets paid. Someone has to check all three.

For a mid-size company processing 200 invoices a week, that’s someone’s entire job. And when the amounts don’t match — wrong quantity shipped, duplicate invoice, price that changed since the PO — those exceptions get lost in email threads.

📄
Purchase Order
What you agreed to pay
+
📦
Goods Receipt
What you actually received
+
🧾
Vendor Invoice
What they’re charging you
=
Pay or Flag
All three must agree
⚠  What lands in AP’s inbox
🧾  INV-4473 — Acme Supplies LLCINVOICE
⚠ Invoice is $33,600. PO was $31,200. Where’s the $2,400 from?
📄  PO-2024-0843 — approvedPO
⚠ Partial receipt on file — only 80% of goods received.
📦  INV-4476 — possible duplicateDUPLICATE?
⚠ Same vendor, same amount as INV-4461 paid 3 weeks ago.
✓  What the AI agent does
3-Way Match Result — INV-4473 (Acme Supplies)
PO-2024-0843 amount$31,200Found
Goods receipt statusPartial — 80%Flag ⚠
Invoice amount$33,600Over PO
Variance+$2,400 (7.7%)Discrepancy
Duplicate checkNo match foundClear
HOLD — Do not pay.Routed to CFO for approval with variance detail.
▪  Clean invoices are auto-approved and pushed to payment. Only exceptions reach a human — with full context already attached.
●  Interactive Demo — AP Batch Processing

Watch the AI work through a real AP queue — 6 invoices across 3 vendors. Click any invoice to see the match detail, or hit Run Demo to process all six.

AP Automation  ·  Weekly Batch  ·  Acme Corp  ·  6 Invoices Pending
This week’s invoice queue — 6 invoices waiting to be matched and paid
The AI agent watches your AP inbox and your ERP system. The moment an invoice arrives — email attachment, vendor portal upload, or EDI feed — it pulls the matching PO and goods receipt and begins the comparison automatically. Click any invoice to see it work.
6
Invoices
4
Auto-Approve
2
Flagged
$76,850
Total Value
01
Acme Supplies LLC
INV-4473 · PO-2024-0843 · received Tuesday
INV
PO
$33,600
Pending
02
Midwest Office Solutions
INV-9201 · PO-2024-0838 · received Monday
INV
PO
$8,750
Pending
03
TechStream Services Inc.
INV-2847 · PO-2024-0840 · received Wednesday
INV
PO
$12,400
Pending
04
Acme Supplies LLC
INV-4476 · possible duplicate · received Thursday
INV
DUPE?
$5,600
Pending
05
Pinnacle Logistics Co.
INV-7734 · PO-2024-0844 · received Thursday
INV
GR
$10,200
Pending
06
Cornerstone Industrial
INV-0552 · PO-2024-0845 · received Friday
INV
PO
$6,300
Pending
💡  Connects directly to SAP, NetSuite, QuickBooks, Bill.com, or Tipalti. Invoices are matched the moment they enter the system — whether they come in by email, vendor portal, or EDI feed.
CONNECTS TO ▪ SAP ▪ NetSuite ▪ QuickBooks ▪ Bill.com ▪ Tipalti Outlook Outlook
The AI reads the invoice and matches it against the PO and goods receipt
Left: the actual invoice as received. Right: the AI pulling the matching PO from your ERP, checking the goods receipt, comparing every line item, calculating variance, and checking for duplicates. Select an invoice below.
Vendor invoice — as received
INV-4473INVOICE PDF
AI match result
Comparing PO → GR → Invoice
Ready
Select an invoice above to watch the AI match it.
Match results across all 6 invoices
4 invoices matched cleanly and are queued for auto-payment. 2 are flagged and held — one for a price variance, one as a potential duplicate. No human touched the clean ones.
Acme Supplies LLC — INV-4473
$33,600⚠ Flagged — Hold Payment
PO Amount$31,200✓ received 80%$33,600 invoiced
VariancePartial GR+$2,400 over PO
Invoice exceeds PO by $2,400 (7.7%) and goods receipt is partial. Do not pay until variance explained and full delivery confirmed.
▶ Routed to: CFO for approval  ·  Vendor notified automatically
Midwest Office Solutions — INV-9201
$8,750✓ Matched — Auto-Approved
PO Amount$8,750✓ received 100%$8,750 invoiced
Duplicate CheckNo prior match
✓ Queued for payment  ·  Pushed to NetSuite automatically
TechStream Services Inc. — INV-2847
$12,400✓ Matched — Auto-Approved
PO Amount$12,400✓ received 100%$12,400 invoiced
✓ Queued for payment  ·  Pushed to SAP automatically
Acme Supplies LLC — INV-4476
$5,600⚠ Flagged — Possible Duplicate
Prior PaymentINV-4461$5,600Paid 3 wks ago
Possible duplicate — same vendor, same amount as INV-4461 paid January 8th. Holding for AP manager review.
▶ Routed to: AP Manager  ·  Vendor notified automatically
Pinnacle Logistics Co. — INV-7734
$10,200✓ Matched — Auto-Approved
PO Amount$10,200✓ received 100%$10,200 invoiced
✓ Queued for payment  ·  Pushed to QuickBooks automatically
Cornerstone Industrial — INV-0552
$6,300✓ Matched — Auto-Approved
PO Amount$6,300✓ received 100%$6,300 invoiced
✓ Queued for payment  ·  Pushed to Bill.com automatically
What gets routed to a human — and why
Only 2 of 6 invoices need human attention this week. Both came with full context — the variance amount, the relevant PO, the prior payment record — already attached. Your AP team and CFO spend 10 minutes, not 4 hours.
Price variance — Invoice exceeds PO
Hold
INV-4473 from Acme Supplies is $2,400 over the approved PO amount. Goods receipt is also partial — only 80% of the order was confirmed received. Neither condition alone would clear for payment, and both are present here.
Do not pay until Acme provides a valid change order or the PO is amended.
▶ Routed to: CFO  ·  Vendor auto-notified  ·  AP record updated
Possible duplicate payment
Hold
INV-4476 from Acme Supplies matches INV-4461 exactly — same vendor, same amount, no new PO reference. INV-4461 was paid on January 8th. This is either a resubmission or a billing error.
Hold for AP Manager confirmation before any action.
▶ Routed to: AP Manager  ·  Prior payment record attached
4 invoices auto-approved — no action needed
Cleared
Midwest, TechStream, Pinnacle, and Cornerstone invoices all matched their POs exactly, with full goods receipts confirmed. All four were pushed directly to the payment queue in the respective ERP systems.
$37,650 queued for payment. No human review required.
✓ Pushed to SAP, NetSuite, QuickBooks, Bill.com
How exception routing works
Note
Every exception is routed based on rules you define — price variances over a threshold go to the CFO, duplicate checks go to the AP manager, missing POs go to the department head. Every routing includes the full match detail, not just a flag.
Routing rules are fully configurable per your approval policy.
The AI sends the weekly AP summary to your CFO and AP manager
After every batch run, the AI drafts and sends a summary covering what was auto-approved, what was held, and what needs action. Your leadership team sees the full picture in one email, not a spreadsheet.
How it works

Three steps. Fully automated.

From invoice received to ERP updated — clean ones paid automatically, exceptions routed with full context.

📤
Step 1
Invoice arrives — email, portal, or EDI
The agent watches your AP inbox and ERP system. Invoices from Outlook, vendor portals, or EDI feeds are picked up automatically. It then pulls the matching PO and goods receipt directly from SAP, NetSuite, QuickBooks, Bill.com, or Tipalti.
Orchestrated by n8n or Make.com — the automation layer that connects your inbox and ERP to the AI.
n8n Make.com
🤖
Step 2
AI matches all three documents and flags any variance
Claude AI compares PO price and quantity, goods receipt confirmation, and invoice amount line by line. It checks for price variances, quantity mismatches, partial receipts, and duplicate submissions — and calculates the variance in dollars.
Replaces manual AP matching — the task that takes 40% of your AP team’s week.
Claude AI
Step 3
Clean invoices pay. Exceptions route to the right person.
Matched invoices are pushed directly to the payment queue in your ERP — SAP, NetSuite, Bill.com, or Tipalti. Exceptions are routed to the CFO or AP manager in Outlook with the full variance detail attached — no one has to go digging.
Routing thresholds are fully configurable — you define what goes to whom at what dollar amount.
Outlook Gmail
What this replaces

AP automation platforms charge $20k–$60k/yr.
Or you build it once and own it.

Here’s what finance teams are spending on AP automation today — and what Omni builds for you instead.

Tipalti / Bill.com Current
$20k–$60k
per year · subscription
AP automation built in
Good for high-volume payments
Locked to their payment rails
Limited ERP flexibility
You rent it forever
SAP / Oracle built-in Current
Manual
already licensed · still needs humans
Already in your ERP
No extra license cost
Still requires manual review
No intelligent exception routing
No duplicate detection AI
Your AP team (manual) Current
4 hrs/day
per AP clerk · every week
Understands vendor relationships
Can make judgment calls
40% of day on matching alone
Fatigue = missed duplicates
No audit trail
Omni AI Agent What we build
You own it
one-time build · no annual fees
Connects to your existing ERP
Auto-approves clean invoices
Flags every discrepancy before payment
Routes exceptions with full context
You own it — not a subscription
Demo Notice: Conceptual demonstration of an AI-powered AP 3-way match workflow. All vendor names, invoice numbers, and amounts are illustrative. Omni Online Strategies builds custom AI automation systems integrated with your existing ERP and payment infrastructure.
Josh Leavitt — Founder, Omni Online Strategies
From the founder
“Every finance team I’ve talked to is already in SAP or NetSuite. The 3-way match capability is right there — it just still requires someone to sit there and do it. That’s what we replace.”
We don’t ask you to switch ERPs or adopt a new payment platform. We build the AI layer on top of what you already have — connecting your inbox, your ERP, and your approval workflow into one automated pipeline. Your AP team stops doing data entry and starts doing actual finance work.
Josh Leavitt
Founder & CEO · Omni Online Strategies

Let’s talk about your AP workflow →
--amber:#C98A2D;--amber-dim:rgba(201,138,45,.1); --blue:#3B7DD8;--blue-dim:rgba(59,125,216,.1); --text:#E2E8F0;--text2:rgba(226,232,240,.58);--text3:rgba(226,232,240,.32); } *,*::before,*::after{box-sizing:border-box;margin:0;padding:0} html{scroll-behavior:smooth} body{background:var(--bg);color:var(--text);font-family:'DM Sans',sans-serif;font-size:15px;line-height:1.6;overflow-x:hidden} body::before{content:'';position:fixed;inset:0;background-image:linear-gradient(rgba(42,157,143,.02) 1px,transparent 1px),linear-gradient(90deg,rgba(42,157,143,.02) 1px,transparent 1px);background-size:48px 48px;pointer-events:none;z-index:0} /* ── HERO ── */ .hero{position:relative;z-index:1;display:grid;grid-template-columns:1fr 1fr;align-items:center;gap:60px;max-width:1140px;margin:0 auto;padding:80px 40px 60px} @media(max-width:820px){.hero{grid-template-columns:1fr;padding:60px 24px 40px}} .eyebrow{display:inline-flex;align-items:center;gap:8px;background:var(--teal-dim);border:1px solid var(--teal-border);border-radius:4px;padding:5px 14px;font-size:11px;color:var(--teal);letter-spacing:.07em;text-transform:uppercase;margin-bottom:20px;font-family:'DM Mono',monospace} .hero h1{font-family:'Sora',sans-serif;font-size:clamp(28px,3.6vw,46px);font-weight:800;line-height:1.1;letter-spacing:-1px;margin-bottom:18px} .hero h1 em{font-style:normal;color:var(--teal)} .hero-desc{font-size:16px;color:var(--text2);line-height:1.75;margin-bottom:22px} .hero-desc strong{color:var(--text);font-weight:500} .demo-ptr{display:flex;align-items:flex-start;gap:10px;margin-bottom:28px;font-size:14px;color:var(--text2);background:rgba(42,157,143,.06);border:1px solid rgba(42,157,143,.14);border-radius:6px;padding:12px 16px;line-height:1.55} .stat-row{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:30px} .stat-chip{background:var(--bg3);border:1px solid var(--border);border-radius:6px;padding:10px 16px;display:flex;flex-direction:column;gap:3px} .stat-num{font-family:'Sora',sans-serif;font-size:20px;font-weight:700;color:var(--teal)} .stat-lbl{font-size:11px;color:var(--text3);font-family:'DM Mono',monospace} .cta-primary{display:inline-flex;align-items:center;gap:10px;background:var(--teal);color:white;text-decoration:none;padding:12px 24px;border-radius:6px;font-family:'Sora',sans-serif;font-size:14px;font-weight:700;transition:background .2s;border:none;cursor:pointer} .cta-primary:hover{background:var(--teal2)} .hero-visual{display:flex;align-items:center;justify-content:center} @media(max-width:820px){.hero-visual{display:none}} /* ── SECTIONS ── */ .section{position:relative;z-index:1;max-width:1100px;margin:0 auto;padding:20px 28px 70px} .sec-label{font-family:'DM Mono',monospace;font-size:10px;color:var(--teal);letter-spacing:.12em;text-transform:uppercase;margin-bottom:12px;display:flex;align-items:center;gap:8px} .sec-label::before{content:'';display:block;width:16px;height:1px;background:var(--teal)} .sec-h{font-family:'Sora',sans-serif;font-size:clamp(22px,3vw,34px);font-weight:700;letter-spacing:-.5px;margin-bottom:10px} .sec-sub{font-size:15px;color:var(--text2);max-width:580px;line-height:1.7;margin-bottom:40px} /* ── 3-WAY FLOW DIAGRAM ── */ .match-flow{display:grid;grid-template-columns:1fr auto 1fr auto 1fr auto 1fr;align-items:center;gap:0;margin-bottom:40px} @media(max-width:680px){.match-flow{grid-template-columns:1fr;gap:8px}} .match-node{background:var(--bg2);border:1px solid var(--border);border-radius:10px;padding:16px;text-align:center} .match-node.active{border-color:var(--teal-border);background:var(--teal-dim)} .match-node.flag{border-color:rgba(201,76,76,.3);background:var(--red-dim)} .match-node-icon{font-size:22px;margin-bottom:8px} .match-node-label{font-size:12px;font-weight:600;margin-bottom:3px;font-family:'Sora',sans-serif} .match-node-sub{font-size:11px;color:var(--text3);font-family:'DM Mono',monospace} .match-arr{font-size:20px;color:rgba(42,157,143,.35);text-align:center;padding:0 4px} @media(max-width:680px){.match-arr{display:none}} /* ── PROBLEM CHAOS ── */ .chaos-layout{display:grid;grid-template-columns:1fr auto 1fr;align-items:start;gap:32px} @media(max-width:760px){.chaos-layout{grid-template-columns:1fr;gap:20px}} .chaos-arrow{font-size:28px;color:rgba(42,157,143,.3);text-align:center;padding-top:60px} @media(max-width:760px){.chaos-arrow{display:none}} .doc-stack{display:flex;flex-direction:column;gap:8px} .doc-card{background:var(--bg2);border:1px solid var(--border);border-radius:8px;overflow:hidden} .doc-card-bar{padding:8px 14px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;background:var(--bg3)} .doc-card-name{font-size:11px;font-weight:600;color:var(--text2);font-family:'DM Mono',monospace} .doc-card-body{padding:10px 14px} .doc-fake-row{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:5px} .dfk{height:6px;border-radius:2px;background:rgba(255,255,255,.07)} .dfk.s{width:40%}.dfk.m{width:65%}.dfk.f{width:100%}.dfk.a{width:28%;background:rgba(255,255,255,.1)} .doc-note{font-size:10px;color:rgba(201,76,76,.65);margin-top:7px;font-family:'DM Mono',monospace} .dtag{font-size:9px;font-weight:600;padding:2px 7px;border-radius:3px;letter-spacing:.04em;font-family:'DM Mono',monospace} .t-po{background:rgba(42,157,143,.1);color:#5DC8BC;border:1px solid rgba(42,157,143,.25)} .t-gr{background:var(--blue-dim);color:#80AAEC;border:1px solid rgba(59,125,216,.25)} .t-inv{background:var(--amber-dim);color:#E0AA60;border:1px solid rgba(201,138,45,.25)} .t-ex{background:var(--red-dim);color:#E08080;border:1px solid rgba(201,76,76,.2)} .ai-result-card{background:var(--bg2);border:1px solid rgba(45,157,106,.28);border-radius:8px;overflow:hidden} .ai-result-bar{background:rgba(45,157,106,.07);padding:11px 16px;border-bottom:1px solid rgba(45,157,106,.15);display:flex;align-items:center;gap:8px} .ai-result-bar-title{font-size:12px;font-weight:600;color:var(--green);font-family:'DM Mono',monospace} .ai-result-body{padding:14px 16px} .air{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:6px 0;border-bottom:1px solid rgba(255,255,255,.04);font-size:12px} .air:last-child{border:none} .air-item{color:var(--text2)}.air-val{font-weight:500;color:var(--text);font-family:'DM Mono',monospace} .af{font-size:9px;padding:2px 7px;border-radius:3px;font-weight:600;flex-shrink:0;font-family:'DM Mono',monospace} .f-ok{background:var(--green-dim);color:var(--green)} .f-flag{background:var(--red-dim);color:var(--red)} .f-watch{background:var(--amber-dim);color:var(--amber)} /* ── APP SHELL ── */ .demo-section{position:relative;z-index:1;max-width:1140px;margin:0 auto;padding:0 24px 80px} .demo-intro{text-align:center;margin-bottom:18px} .demo-intro-lbl{display:inline-flex;align-items:center;gap:8px;background:var(--teal-dim);border:1px solid var(--teal-border);border-radius:4px;padding:5px 16px;font-family:'DM Mono',monospace;font-size:11px;color:var(--teal);letter-spacing:.05em;margin-bottom:8px} .demo-intro-sub{font-size:14px;color:var(--text2);max-width:620px;margin:0 auto} .app-shell{background:var(--bg2);border:1px solid var(--border2);border-radius:10px;overflow:hidden;box-shadow:0 24px 60px rgba(0,0,0,.5)} .app-chrome{background:var(--bg3);border-bottom:1px solid var(--border);padding:10px 18px;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px} .chrome-left{display:flex;align-items:center;gap:14px} .chrome-dots{display:flex;gap:5px} .chrome-dot{width:10px;height:10px;border-radius:50%} .chrome-title{font-family:'DM Mono',monospace;font-size:11px;color:var(--text3)} .chrome-title span{color:var(--text2)} .run-btn{background:var(--teal);color:white;border:none;border-radius:5px;padding:7px 18px;font-size:12px;font-weight:700;cursor:pointer;font-family:'DM Mono',monospace;letter-spacing:.03em;transition:background .2s,opacity .2s} .run-btn:disabled{opacity:.4;cursor:default} .run-btn:not(:disabled):hover{background:var(--teal2)} .app-tabs{background:var(--bg3);border-bottom:1px solid var(--border);display:flex;overflow-x:auto;scrollbar-width:none;padding:0 8px} .app-tabs::-webkit-scrollbar{display:none} .app-tab{font-family:'DM Mono',monospace;font-size:11px;color:var(--text3);background:none;border:none;border-bottom:2px solid transparent;padding:11px 16px 9px;cursor:pointer;white-space:nowrap;transition:color .15s,border-color .15s;letter-spacing:.02em;display:flex;flex-direction:column;align-items:flex-start;gap:2px} .app-tab:hover{color:var(--text2)} .app-tab.active{color:var(--teal);border-bottom-color:var(--teal)} .app-tab-label{display:flex;align-items:center;gap:6px;font-size:12px;font-weight:500} .tab-num{width:17px;height:17px;border-radius:3px;background:var(--bg4);display:flex;align-items:center;justify-content:center;font-size:10px;color:var(--text3);flex-shrink:0;transition:background .15s,color .15s;font-family:'DM Mono',monospace} .app-tab.active .tab-num{background:var(--teal);color:white} .app-tab-sub{font-size:10px;color:var(--text3);padding-left:23px} .tab-panel{display:none}.tab-panel.active{display:block} .tab-body{padding:22px} .tab-head{margin-bottom:18px} .tab-title{font-size:15px;font-weight:600;margin-bottom:4px;font-family:'Sora',sans-serif} .tab-desc{font-size:13px;color:var(--text2);line-height:1.65} /* ── TAB 1 — INVOICE QUEUE ── */ .queue-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:20px} @media(max-width:580px){.queue-stats{grid-template-columns:1fr 1fr}} .qs{background:var(--bg3);border:1px solid var(--border);border-radius:6px;padding:12px 14px;text-align:center} .qs-num{font-family:'Sora',sans-serif;font-size:22px;font-weight:700;margin-bottom:3px} .qs-lbl{font-size:11px;color:var(--text3);font-family:'DM Mono',monospace} .inv-list{display:flex;flex-direction:column;gap:7px} .inv-row{display:grid;grid-template-columns:28px 1fr auto auto auto 110px;align-items:center;gap:14px;background:var(--bg3);border:1px solid var(--border);border-radius:7px;padding:13px 18px;cursor:pointer;transition:border-color .2s,background .15s;opacity:0;animation:fadeUp .3s ease forwards} .inv-row:hover{border-color:rgba(42,157,143,.28);background:var(--bg4)} .inv-row.processing{border-color:rgba(201,138,45,.3)}.inv-row.matched{border-color:rgba(45,157,106,.22)}.inv-row.flagged{border-color:rgba(201,76,76,.28)} @keyframes fadeUp{to{opacity:1}} .inv-num{font-family:'DM Mono',monospace;font-size:11px;color:var(--text3)} .inv-info{min-width:0} .inv-vendor{font-size:14px;font-weight:500;margin-bottom:2px} .inv-detail{font-size:11px;color:var(--text3);font-family:'DM Mono',monospace} .inv-amt{font-family:'DM Mono',monospace;font-size:13px;font-weight:600;text-align:right} .inv-status{font-size:11px;text-align:right;min-width:100px;font-family:'DM Mono',monospace} .s-wait{color:var(--text3)}.s-proc{color:var(--amber);display:flex;align-items:center;gap:5px;justify-content:flex-end}.s-match{color:var(--green);display:flex;align-items:center;gap:5px;justify-content:flex-end}.s-flag{color:var(--red);display:flex;align-items:center;gap:5px;justify-content:flex-end} .pulsedot{width:6px;height:6px;border-radius:50%;background:var(--amber);animation:pd 1.2s ease-in-out infinite} .greendot{width:6px;height:6px;border-radius:50%;background:var(--green)} .reddot{width:6px;height:6px;border-radius:50%;background:var(--red)} @keyframes pd{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.4;transform:scale(.7)}} .hint-bar{margin-top:12px;padding:11px 15px;background:rgba(42,157,143,.05);border:1px solid rgba(42,157,143,.12);border-radius:6px;font-size:13px;color:var(--text2);line-height:1.55} .tool-strip{display:flex;flex-wrap:wrap;gap:7px;margin-top:14px;padding-top:12px;border-top:1px solid var(--border);align-items:center} .ts-lbl{font-family:'DM Mono',monospace;font-size:10px;color:var(--text3);margin-right:4px;letter-spacing:.04em} .tool-pill{display:flex;align-items:center;gap:6px;background:var(--bg4);border:1px solid var(--border);border-radius:5px;padding:5px 11px;font-size:12px;color:var(--text2);text-decoration:none;transition:border-color .2s} .tool-pill:hover{border-color:var(--border2)} .tool-pill img{width:14px;height:14px;object-fit:contain} /* ── TAB 2 — AI MATCH ── */ .match-picker{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:14px} .mpbtn{font-family:'DM Mono',monospace;font-size:11px;padding:6px 12px;border-radius:5px;background:var(--bg3);border:1px solid var(--border);color:var(--text3);cursor:pointer;transition:all .15s;display:flex;align-items:center;gap:6px} .mpbtn:hover{color:var(--text2);border-color:var(--border2)} .mpbtn.active{background:var(--teal-dim);border-color:var(--teal-border);color:var(--text)} .match-split{display:grid;grid-template-columns:1fr 1fr;gap:14px} @media(max-width:660px){.match-split{grid-template-columns:1fr}} .pane-lbl{font-family:'DM Mono',monospace;font-size:10px;color:var(--text3);margin-bottom:7px;text-transform:uppercase;letter-spacing:.06em;display:flex;align-items:center;gap:6px} .doc-viewer{background:#F8F7F4;border-radius:7px;overflow:hidden;border:1px solid rgba(0,0,0,.08);min-height:320px} .doc-top{background:#EDEAE0;padding:9px 14px;border-bottom:1px solid rgba(0,0,0,.08);display:flex;align-items:center;justify-content:space-between} .doc-top-name{font-size:11px;font-weight:600;color:#2E2C1E;font-family:'DM Mono',monospace} .doc-top-type{font-size:10px;color:#7A7460;font-family:'DM Mono',monospace} .doc-content{padding:14px;font-size:12px;line-height:1.9;color:#46443A;font-family:'DM Mono',monospace} .doc-line{display:flex;justify-content:space-between;gap:14px;padding:1px 4px;border-radius:3px;transition:background .15s} .doc-line.hl{background:rgba(42,157,143,.13)}.doc-line.sc{color:#B8B2A0}.doc-line.bl{font-weight:600;color:#1E1C0E} .doc-line-val{font-weight:600;color:#1E1C0E;white-space:nowrap} .ai-panel{background:var(--bg3);border:1px solid var(--border);border-radius:7px;overflow:hidden;display:flex;flex-direction:column;min-height:320px} .ai-panel-top{padding:10px 14px;border-bottom:1px solid var(--border);background:var(--bg4);display:flex;align-items:center;justify-content:space-between} .ai-panel-lbl{font-family:'DM Mono',monospace;font-size:11px;font-weight:500;display:flex;align-items:center;gap:7px} .ai-panel-status{font-family:'DM Mono',monospace;font-size:10px;color:var(--text3)} .prog-wrap{height:2px;background:var(--bg4)} .prog-bar{height:100%;background:linear-gradient(90deg,var(--teal),var(--green));width:0%;transition:width .35s ease} .ai-findings{padding:8px;display:flex;flex-direction:column;gap:5px;flex:1;overflow-y:auto} .ai-finding{padding:9px 13px;background:var(--bg2);border:1px solid var(--border);border-radius:6px;display:flex;align-items:center;justify-content:space-between;gap:10px;opacity:0;transform:translateY(4px);transition:opacity .2s,transform .2s} .ai-finding.show{opacity:1;transform:translateY(0)} .finding-name{font-size:12px;color:var(--text);flex:1} .finding-val{font-family:'DM Mono',monospace;font-size:12px;color:var(--text2);margin-right:6px} .finding-flag{font-family:'DM Mono',monospace;font-size:9px;padding:2px 7px;border-radius:3px;font-weight:600;white-space:nowrap} .b-ok{background:var(--green-dim);color:var(--green)} .b-flag{background:var(--red-dim);color:var(--red)} .b-watch{background:var(--amber-dim);color:var(--amber)} .ai-placeholder{padding:40px 20px;text-align:center;font-size:13px;color:var(--text3);font-family:'DM Mono',monospace} /* ── TAB 3 — MATCH RESULTS ── */ .results-grid{display:flex;flex-direction:column;gap:10px} .result-card{background:var(--bg3);border:1px solid var(--border);border-radius:8px;overflow:hidden} .result-card.rc-matched{border-color:rgba(45,157,106,.25)} .result-card.rc-flagged{border-color:rgba(201,76,76,.3)} .result-card.rc-partial{border-color:rgba(201,138,45,.25)} .rc-header{padding:12px 16px;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px;border-bottom:1px solid var(--border)} .rc-vendor{font-size:14px;font-weight:600;font-family:'Sora',sans-serif} .rc-meta{display:flex;align-items:center;gap:10px;flex-wrap:wrap} .rc-badge{font-family:'DM Mono',monospace;font-size:10px;padding:3px 9px;border-radius:4px;font-weight:600} .badge-matched{background:var(--green-dim);color:var(--green);border:1px solid rgba(45,157,106,.22)} .badge-flagged{background:var(--red-dim);color:var(--red);border:1px solid rgba(201,76,76,.22)} .badge-partial{background:var(--amber-dim);color:var(--amber);border:1px solid rgba(201,138,45,.22)} .rc-body{padding:12px 16px} .rc-match-row{display:grid;grid-template-columns:140px 1fr 1fr 1fr auto;gap:10px;align-items:center;padding:6px 0;border-bottom:1px solid rgba(255,255,255,.04);font-size:12px} .rc-match-row:last-child{border:none} .rc-field{font-family:'DM Mono',monospace;color:var(--text3);font-size:10px;letter-spacing:.03em} .rc-po{color:var(--teal)}.rc-gr{color:var(--blue)}.rc-inv{color:var(--amber)} .rc-match-icon{font-size:14px;text-align:center} .rc-flag-note{margin-top:10px;padding:10px 12px;border-radius:5px;font-size:12px;font-family:'DM Mono',monospace} .rc-flag-note.error{background:var(--red-dim);border:1px solid rgba(201,76,76,.2);color:var(--red)} .rc-flag-note.warn{background:var(--amber-dim);border:1px solid rgba(201,138,45,.2);color:var(--amber)} .rc-action{margin-top:8px;font-size:12px;color:var(--text2);display:flex;align-items:center;gap:6px} /* ── TAB 4 — EXCEPTIONS ── */ .exc-intro{font-size:13px;color:var(--text2);margin-bottom:18px;padding:12px 16px;background:rgba(201,76,76,.05);border:1px solid rgba(201,76,76,.14);border-radius:6px;line-height:1.6} .exc-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:12px} .exc-card{background:var(--bg3);border:1px solid var(--border);border-radius:8px;padding:16px;transition:transform .2s} .exc-card:hover{transform:translateY(-2px)} .ec-high{border-color:rgba(201,76,76,.28)}.ec-med{border-color:rgba(201,138,45,.22)}.ec-info{border-color:rgba(42,157,143,.2)}.ec-ok{border-color:rgba(45,157,106,.22)} .exc-hd{display:flex;align-items:flex-start;justify-content:space-between;gap:8px;margin-bottom:8px} .exc-ttl{font-size:13px;font-weight:600;line-height:1.35;font-family:'Sora',sans-serif} .exc-sev{font-family:'DM Mono',monospace;font-size:9px;font-weight:700;padding:3px 8px;border-radius:3px;flex-shrink:0;letter-spacing:.04em;text-transform:uppercase} .sv-high{background:var(--red-dim);color:var(--red);border:1px solid rgba(201,76,76,.22)} .sv-med{background:var(--amber-dim);color:var(--amber);border:1px solid rgba(201,138,45,.22)} .sv-info{background:var(--teal-dim);color:var(--teal);border:1px solid var(--teal-border)} .sv-ok{background:var(--green-dim);color:var(--green);border:1px solid rgba(45,157,106,.22)} .exc-bd{font-size:12px;color:var(--text2);line-height:1.6} .exc-action{margin-top:8px;font-size:12px;font-weight:600;font-family:'DM Mono',monospace} .exc-route{margin-top:6px;display:flex;align-items:center;gap:6px;font-size:11px;color:var(--text3);font-family:'DM Mono',monospace} /* ── TAB 5 — APPROVAL EMAIL ── */ .email-wrap{max-width:680px;margin:0 auto} .email-shell{background:var(--bg3);border:1px solid var(--border);border-radius:8px;overflow:hidden} .email-bar{background:var(--bg4);padding:10px 16px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:8px;justify-content:space-between} .email-bar-left{display:flex;align-items:center;gap:7px;font-family:'DM Mono',monospace;font-size:11px;color:var(--text3)} .email-field{padding:9px 16px;border-bottom:1px solid rgba(255,255,255,.04);display:flex;gap:10px;align-items:baseline} .ef-label{font-family:'DM Mono',monospace;font-size:10px;color:var(--text3);width:52px;flex-shrink:0;letter-spacing:.04em} .ef-val{font-size:13px;color:var(--text);flex:1} .email-body{padding:18px;font-family:'DM Mono',monospace;font-size:12px;line-height:2;color:var(--text2);min-height:280px;max-height:400px;overflow-y:auto} .el{opacity:0;animation:eli .2s ease forwards} @keyframes eli{to{opacity:1}} .eg{color:var(--green)}.er{color:var(--red)}.ea{color:var(--amber)}.eb{color:var(--teal)} .email-foot{padding:12px 16px;border-top:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px} .send-btn{background:var(--teal);color:white;border:none;border-radius:5px;padding:9px 22px;font-family:'DM Mono',monospace;font-size:12px;font-weight:700;cursor:pointer;display:flex;align-items:center;gap:7px;transition:background .2s;letter-spacing:.02em} .send-btn:hover{background:var(--teal2)} .send-btn.sent{background:var(--green);cursor:default} /* ── HOW IT WORKS ── */ .hiw{position:relative;z-index:1;background:var(--bg2);border-top:1px solid var(--border);border-bottom:1px solid var(--border);padding:70px 28px} .hiw-inner{max-width:1060px;margin:0 auto} .hiw-steps{display:grid;grid-template-columns:1fr auto 1fr auto 1fr;gap:0;margin-top:44px} @media(max-width:720px){.hiw-steps{grid-template-columns:1fr;gap:20px}} .hiw-arr{color:rgba(42,157,143,.28);font-size:24px;padding:34px 10px 0;text-align:center} @media(max-width:720px){.hiw-arr{display:none}} .hiw-step{background:var(--bg3);border:1px solid var(--border);border-radius:8px;padding:24px 20px} .hiw-icon{width:48px;height:48px;border-radius:7px;display:flex;align-items:center;justify-content:center;margin:0 0 14px;font-size:22px} .hiw-num{font-family:'DM Mono',monospace;font-size:10px;color:var(--teal);font-weight:600;letter-spacing:.08em;text-transform:uppercase;margin-bottom:6px} .hiw-title{font-family:'Sora',sans-serif;font-size:15px;font-weight:700;margin-bottom:9px;line-height:1.3} .hiw-body{font-size:13px;color:var(--text2);line-height:1.65;margin-bottom:12px} .hiw-note{font-size:11px;color:var(--text3);padding:8px 11px;background:rgba(255,255,255,.03);border:1px solid var(--border);border-radius:5px;margin-bottom:11px;font-family:'DM Mono',monospace;line-height:1.5} .hiw-note strong{color:var(--red)} .tool-logos{display:flex;flex-wrap:wrap;gap:7px} .tlb{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:6px;background:var(--bg4);border:1px solid var(--border)} .tlb img{width:16px;height:16px;object-fit:contain} /* ── BENCHMARK ── */ .bench{position:relative;z-index:1;max-width:1060px;margin:0 auto;padding:70px 28px} .bench-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;margin-top:40px} .bench-card{background:var(--bg2);border:1px solid var(--border);border-radius:8px;padding:20px} .bench-card.hl{border-color:rgba(45,157,106,.3);background:rgba(45,157,106,.03)} .bench-name{font-family:'DM Mono',monospace;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--text3);margin-bottom:10px;display:flex;align-items:center;gap:6px;flex-wrap:wrap} .bench-name span{padding:2px 7px;border-radius:3px;font-size:9px} .tag-them{background:var(--red-dim);color:var(--red)}.tag-us{background:var(--green-dim);color:var(--green)} .bench-price{font-family:'Sora',sans-serif;font-size:26px;font-weight:700;margin-bottom:3px} .bench-period{font-size:11px;color:var(--text3);margin-bottom:14px;font-family:'DM Mono',monospace} .bench-features{display:flex;flex-direction:column;gap:6px} .bench-feature{font-size:12px;color:var(--text2);display:flex;align-items:flex-start;gap:6px} .bench-feature::before{content:attr(data-icon);flex-shrink:0} /* ── JOSH ── */ .josh{border-top:1px solid var(--border);padding:60px 28px;position:relative;z-index:1} .josh-inner{max-width:860px;margin:0 auto;display:grid;grid-template-columns:170px 1fr;gap:48px;align-items:center} @media(max-width:640px){.josh-inner{grid-template-columns:1fr}} .josh-photo{width:100%;border-radius:8px;border:1px solid var(--border);display:block} .j-eyebrow{font-family:'DM Mono',monospace;font-size:10px;color:var(--teal);letter-spacing:.1em;text-transform:uppercase;margin-bottom:12px} .j-quote{font-family:'Sora',sans-serif;font-size:clamp(16px,2vw,20px);font-weight:600;line-height:1.45;letter-spacing:-.2px;margin-bottom:13px} .j-body{font-size:14px;color:var(--text2);line-height:1.75;margin-bottom:22px} .j-name{font-family:'Sora',sans-serif;font-weight:700;font-size:15px;margin-bottom:2px} .j-title{font-family:'DM Mono',monospace;font-size:12px;color:var(--text3);margin-bottom:22px} .cta-btn{display:inline-flex;align-items:center;gap:8px;background:var(--teal);color:white;text-decoration:none;padding:11px 22px;border-radius:6px;font-family:'Sora',sans-serif;font-size:14px;font-weight:700;transition:background .2s} .cta-btn:hover{background:var(--teal2)} .disclaimer{max-width:1060px;margin:0 auto;padding:0 28px 48px;position:relative;z-index:1} .disclaimer-inner{font-size:11px;color:var(--text3);line-height:1.75;background:var(--bg2);border:1px solid var(--border);border-radius:6px;padding:13px 17px;font-family:'DM Mono',monospace} .disclaimer-inner strong{color:rgba(226,232,240,.4)}
● AI Automation  ·  Accounts Payable

AP 3-Way Match AI Agent — Auto-Matches Every PO, Receipt & Invoice Before a Dollar Goes Out

Your AP team is manually matching purchase orders to goods receipts to vendor invoices — one by one, in SAP or NetSuite. It’s 40% of their day and the easiest thing AI can take over.

👈  Live demo below. Watch the AI match a full AP queue — auto-approving clean invoices, flagging discrepancies, and routing exceptions to the right approver. Hit Run Demo to auto-play.
40%
of AP team time on matching
5–10%
of invoices have errors
$0
overpayments missed
AP 3-WAY MATCH — ACME CORP — WEEKLY BATCH PURCHASE ORDERS PO-2024-0841 $12,400 PO-2024-0842 $8,750 PO-2024-0843 $31,200 PO-2024-0844 $5,600 PO-2024-0845 $18,900 + 7 more... 12 POs GOODS RECEIPTS GR-2024-1201 ✓ recv GR-2024-1202 ✓ recv GR-2024-1203 partial GR-2024-1204 ✓ recv GR-2024-1205 ✓ recv 12 receipts VENDOR INVOICES INV-4471 $12,400 INV-4472 $8,750 INV-4473 $33,600 INV-4474 $5,600 INV-4475 $18,900 12 invoices 🤖 AI 3-WAY MATCH ENGINE (Claude AI + n8n) Comparing PO qty/price → GR received qty → Invoice amount → flagging variances ✓ AUTO-APPROVED: 10 invoices  — $71,150 ⚠ FLAGGED: 2 invoices  — $41,900 EXCEPTION 1: INV-4473 — Acme Supplies PO amount: $31,200  |  GR received: partial (80%)  |  Invoice: $33,600 ⚠ Invoice exceeds PO by $2,400  +  partial receipt — routed to CFO approval AI automation replaced 4 hours of manual AP matching. Every discrepancy caught. Every clean invoice auto-approved. Zero overpayments. Integrated with: SAP  |  NetSuite  |  QuickBooks  |  Bill.com  |  Tipalti
The Problem

Every invoice needs a PO and a goods receipt
before it gets paid. Someone has to check all three.

For a mid-size company processing 200 invoices a week, that’s someone’s entire job. And when the amounts don’t match — wrong quantity shipped, duplicate invoice, price that changed since the PO — those exceptions get lost in email threads.

📄
Purchase Order
What you agreed to pay
+
📦
Goods Receipt
What you actually received
+
🧾
Vendor Invoice
What they’re charging you
=
Pay or Flag
All three must agree
⚠  What lands in AP’s inbox
🧾  INV-4473 — Acme Supplies LLCINVOICE
⚠ Invoice is $33,600. PO was $31,200. Where’s the $2,400 from?
📄  PO-2024-0843 — approvedPO
⚠ Partial receipt on file — only 80% of goods received.
📦  INV-4476 — possible duplicateDUPLICATE?
⚠ Same vendor, same amount as INV-4461 paid 3 weeks ago.
✓  What the AI agent does
3-Way Match Result — INV-4473 (Acme Supplies)
PO-2024-0843 amount$31,200Found
Goods receipt statusPartial — 80%Flag ⚠
Invoice amount$33,600Over PO
Variance+$2,400 (7.7%)Discrepancy
Duplicate checkNo match foundClear
HOLD — Do not pay.Routed to CFO for approval with variance detail.
▪  Clean invoices are auto-approved and pushed to payment. Only exceptions reach a human — with full context already attached.
●  Interactive Demo — AP Batch Processing

Watch the AI work through a real AP queue — 6 invoices across 3 vendors. Click any invoice to see the match detail, or hit Run Demo to process all six.

AP Automation  ·  Weekly Batch  ·  Acme Corp  ·  6 Invoices Pending
This week’s invoice queue — 6 invoices waiting to be matched and paid
The AI agent watches your AP inbox and your ERP system. The moment an invoice arrives — email attachment, vendor portal upload, or EDI feed — it pulls the matching PO and goods receipt and begins the comparison automatically. Click any invoice to see it work.
6
Invoices
4
Auto-Approve
2
Flagged
$76,850
Total Value
01
Acme Supplies LLC
INV-4473 · PO-2024-0843 · received Tuesday
INV
PO
$33,600
Pending
02
Midwest Office Solutions
INV-9201 · PO-2024-0838 · received Monday
INV
PO
$8,750
Pending
03
TechStream Services Inc.
INV-2847 · PO-2024-0840 · received Wednesday
INV
PO
$12,400
Pending
04
Acme Supplies LLC
INV-4476 · possible duplicate · received Thursday
INV
DUPE?
$5,600
Pending
05
Pinnacle Logistics Co.
INV-7734 · PO-2024-0844 · received Thursday
INV
GR
$10,200
Pending
06
Cornerstone Industrial
INV-0552 · PO-2024-0845 · received Friday
INV
PO
$6,300
Pending
💡  Connects directly to SAP, NetSuite, QuickBooks, Bill.com, or Tipalti. Invoices are matched the moment they enter the system — whether they come in by email, vendor portal, or EDI feed.
CONNECTS TO ▪ SAP ▪ NetSuite ▪ QuickBooks ▪ Bill.com ▪ Tipalti Outlook Outlook
The AI reads the invoice and matches it against the PO and goods receipt
Left: the actual invoice as received. Right: the AI pulling the matching PO from your ERP, checking the goods receipt, comparing every line item, calculating variance, and checking for duplicates. Select an invoice below.
Vendor invoice — as received
INV-4473INVOICE PDF
AI match result
Comparing PO → GR → Invoice
Ready
Select an invoice above to watch the AI match it.
Match results across all 6 invoices
4 invoices matched cleanly and are queued for auto-payment. 2 are flagged and held — one for a price variance, one as a potential duplicate. No human touched the clean ones.
Acme Supplies LLC — INV-4473
$33,600⚠ Flagged — Hold Payment
PO Amount$31,200✓ received 80%$33,600 invoiced
VariancePartial GR+$2,400 over PO
Invoice exceeds PO by $2,400 (7.7%) and goods receipt is partial. Do not pay until variance explained and full delivery confirmed.
▶ Routed to: CFO for approval  ·  Vendor notified automatically
Midwest Office Solutions — INV-9201
$8,750✓ Matched — Auto-Approved
PO Amount$8,750✓ received 100%$8,750 invoiced
Duplicate CheckNo prior match
✓ Queued for payment  ·  Pushed to NetSuite automatically
TechStream Services Inc. — INV-2847
$12,400✓ Matched — Auto-Approved
PO Amount$12,400✓ received 100%$12,400 invoiced
✓ Queued for payment  ·  Pushed to SAP automatically
Acme Supplies LLC — INV-4476
$5,600⚠ Flagged — Possible Duplicate
Prior PaymentINV-4461$5,600Paid 3 wks ago
Possible duplicate — same vendor, same amount as INV-4461 paid January 8th. Holding for AP manager review.
▶ Routed to: AP Manager  ·  Vendor notified automatically
Pinnacle Logistics Co. — INV-7734
$10,200✓ Matched — Auto-Approved
PO Amount$10,200✓ received 100%$10,200 invoiced
✓ Queued for payment  ·  Pushed to QuickBooks automatically
Cornerstone Industrial — INV-0552
$6,300✓ Matched — Auto-Approved
PO Amount$6,300✓ received 100%$6,300 invoiced
✓ Queued for payment  ·  Pushed to Bill.com automatically
What gets routed to a human — and why
Only 2 of 6 invoices need human attention this week. Both came with full context — the variance amount, the relevant PO, the prior payment record — already attached. Your AP team and CFO spend 10 minutes, not 4 hours.
Price variance — Invoice exceeds PO
Hold
INV-4473 from Acme Supplies is $2,400 over the approved PO amount. Goods receipt is also partial — only 80% of the order was confirmed received. Neither condition alone would clear for payment, and both are present here.
Do not pay until Acme provides a valid change order or the PO is amended.
▶ Routed to: CFO  ·  Vendor auto-notified  ·  AP record updated
Possible duplicate payment
Hold
INV-4476 from Acme Supplies matches INV-4461 exactly — same vendor, same amount, no new PO reference. INV-4461 was paid on January 8th. This is either a resubmission or a billing error.
Hold for AP Manager confirmation before any action.
▶ Routed to: AP Manager  ·  Prior payment record attached
4 invoices auto-approved — no action needed
Cleared
Midwest, TechStream, Pinnacle, and Cornerstone invoices all matched their POs exactly, with full goods receipts confirmed. All four were pushed directly to the payment queue in the respective ERP systems.
$37,650 queued for payment. No human review required.
✓ Pushed to SAP, NetSuite, QuickBooks, Bill.com
How exception routing works
Note
Every exception is routed based on rules you define — price variances over a threshold go to the CFO, duplicate checks go to the AP manager, missing POs go to the department head. Every routing includes the full match detail, not just a flag.
Routing rules are fully configurable per your approval policy.
The AI sends the weekly AP summary to your CFO and AP manager
After every batch run, the AI drafts and sends a summary covering what was auto-approved, what was held, and what needs action. Your leadership team sees the full picture in one email, not a spreadsheet.
How it works

Three steps. Fully automated.

From invoice received to ERP updated — clean ones paid automatically, exceptions routed with full context.

📤
Step 1
Invoice arrives — email, portal, or EDI
The agent watches your AP inbox and ERP system. Invoices from Outlook, vendor portals, or EDI feeds are picked up automatically. It then pulls the matching PO and goods receipt directly from SAP, NetSuite, QuickBooks, Bill.com, or Tipalti.
Orchestrated by n8n or Make.com — the automation layer that connects your inbox and ERP to the AI.
n8n Make.com
🤖
Step 2
AI matches all three documents and flags any variance
Claude AI compares PO price and quantity, goods receipt confirmation, and invoice amount line by line. It checks for price variances, quantity mismatches, partial receipts, and duplicate submissions — and calculates the variance in dollars.
Replaces manual AP matching — the task that takes 40% of your AP team’s week.
Claude AI
Step 3
Clean invoices pay. Exceptions route to the right person.
Matched invoices are pushed directly to the payment queue in your ERP — SAP, NetSuite, Bill.com, or Tipalti. Exceptions are routed to the CFO or AP manager in Outlook with the full variance detail attached — no one has to go digging.
Routing thresholds are fully configurable — you define what goes to whom at what dollar amount.
Outlook Gmail
What this replaces

AP automation platforms charge $20k–$60k/yr.
Or you build it once and own it.

Here’s what finance teams are spending on AP automation today — and what Omni builds for you instead.

Tipalti / Bill.com Current
$20k–$60k
per year · subscription
AP automation built in
Good for high-volume payments
Locked to their payment rails
Limited ERP flexibility
You rent it forever
SAP / Oracle built-in Current
Manual
already licensed · still needs humans
Already in your ERP
No extra license cost
Still requires manual review
No intelligent exception routing
No duplicate detection AI
Your AP team (manual) Current
4 hrs/day
per AP clerk · every week
Understands vendor relationships
Can make judgment calls
40% of day on matching alone
Fatigue = missed duplicates
No audit trail
Omni AI Agent What we build
You own it
one-time build · no annual fees
Connects to your existing ERP
Auto-approves clean invoices
Flags every discrepancy before payment
Routes exceptions with full context
You own it — not a subscription
Demo Notice: Conceptual demonstration of an AI-powered AP 3-way match workflow. All vendor names, invoice numbers, and amounts are illustrative. Omni Online Strategies builds custom AI automation systems integrated with your existing ERP and payment infrastructure.
Josh Leavitt — Founder, Omni Online Strategies
From the founder
“Every finance team I’ve talked to is already in SAP or NetSuite. The 3-way match capability is right there — it just still requires someone to sit there and do it. That’s what we replace.”
We don’t ask you to switch ERPs or adopt a new payment platform. We build the AI layer on top of what you already have — connecting your inbox, your ERP, and your approval workflow into one automated pipeline. Your AP team stops doing data entry and starts doing actual finance work.
Josh Leavitt
Founder & CEO · Omni Online Strategies

Let’s talk about your AP workflow →