10 free analyses a day · no sign-up · agents welcome

Stop paying wrong invoices.
Catch what string matching and semantic matching both miss.

The same product shows up with a different description and invoices quietly drift on quantity and price. InvoiceGuard AI recognizes the product across wording differences, then validates the numbers with deterministic rules, and routes anything unsafe to a human.

10 free analyses a day
0 external AI calls, all local
3 verdict states, evidence-backed
Illustration: invoice and purchase order aligned by an AI match, with a quantity mismatch alert
Runs fully localNo data leaves the host
Anonymous by designNo sign-up, no tracking
Exact money mathDecimal arithmetic, no float drift
Evidence on every verdictOriginals plus recomputation
Features

Everything you need to catch over-billing

A focused evaluation loop: read both documents, match the lines, validate the money, and show the evidence for every decision.

Semantic line matching

The same product found across reworded lines: USB-C Cable, 1 Meter vs Type-C Charging Cable, 100cm, scored by a local embedding model.

Deterministic money math

Quantities and unit prices are recomputed with exact decimal arithmetic. Excess rupee figures are only stated on safe ground.

Totals cross-checks

Every line total must equal quantity × price, and the stated subtotal is re-added. Failures are reported line by line.

Ambiguity to review

Near-tie candidates and contradictory SKUs are routed to NEEDS_REVIEW instead of guessed. Nothing unsafe is stated as certain.

Currency and unit safety

When currencies or quantity units disagree, the comparison basis is suppressed rather than multiplied wrongly.

Anonymous daily limits

Each browser session gets 10 analyses a day, enforced atomically at midnight IST. No account, no e-mail, no tracking.

Per-IP rate protection

Eight analyses a minute and one hundred per lifetime, per client IP — on top of the session allowance, enforced with the same atomic pattern. Rotating the anonymous session id unlocks nothing.

Speaks MCP to AI agents

A bundled MCP server wraps this API as tools, so assistants like Claude or Cursor can run an invoice review in chat and read the verdict JSON’s status, discrepancies and amounts.

Report-ready evidence

Verdicts render with a KPI strip, reconciliation and confidence visuals, and export to a branded one-page PDF report for the audit trail — no screenshots needed.

How it works

Three steps, one verdict

No configuration, no flowcharts to draw. Provide both documents and get a decision with evidence.

  1. Upload both documents

    Invoice as a PDF or image. Purchase Order as JSON or CSV, or load the bundled sample. Nothing to configure.

  2. Match every line item

    SKU first, then exact text, then fuzzy and semantic similarity. Conflicting SKUs, units or specs are contradictions, not matches.

  3. Validate, then decide

    Quantities, unit prices and totals are recomputed. You get MATCHED, DISCREPANCY_FOUND or NEEDS_REVIEW, with the numbers.

Product tour

See the verdict board before you upload

Real output from a sample analysis: what matched, what was billed against the PO budget, and every finding with its numbers.

Upload, verdict and key numbers. Load the bundled sample or your own files; the board explains any verdict at a glance and offers a one-click PDF report.
Watch it run

Two-minute demo, start to finish

Upload to verdict in one sitting: sample invoice in, discrepancies out, PDF report downloaded — recorded in one take on the live app.

Recorded on the deployed app. Prefer reading? The pipeline diagram below walks the same flow, step by step. Watch on Loom ↗
Under the hood

The whole pipeline, end to end

Every path a request can take — the happy one and the honest ones: rate limits, unreadable scans and invalid Purchase Orders stop explicitly, never with invented numbers.

Flow diagram of the InvoiceGuard AI analysis pipeline: a browser user and an AI agent path into a FastAPI service, which rate-limits per IP, checks the invoice text layer, parses the Purchase Order as JSON or CSV, matches invoice lines to PO lines by SKU and description similarity, validates quantities and unit prices deterministically, then renders a verdict with itemized findings and a one-click PDF report
InvoiceGuard AI request flow. Browser and AI-agent paths share one FastAPI service; every decision node above is a real branch in the backend. Full size ↗

Diagram authored with Eraser diagram-as-code — kept in the team workspace so it evolves together with the pipeline.

Under the hood

What gets checked, side by side

No verdict appears without a basis. This is the full list of deterministic checks and what happens when one fails.

CheckComparesOn failure
QuantityInvoiced quantity against the ordered quantity of the matched PO lineDISCREPANCY_FOUND with the excess computed from the agreed PO price
Unit priceInvoiced unit price against the PO price for the same lineDISCREPANCY_FOUND with both prices shown side by side
Line totalStated line total against quantity × unit priceDISCREPANCY_FOUND with the recomputed line total
Stated subtotalInvoice subtotal against the sum of extracted line totalsDISCREPANCY_FOUND with the recomputed subtotal
CurrencyInvoice currency against PO currencyComparison basis suppressed and routed to review, no silent conversion
Quantity unitDeclared units on both documents (pcs, meters, kg...)NEEDS_REVIEW plus a validation note, no invented conversion
Missing valuesPresence of quantity, unit price and totals on both sidesNEEDS_REVIEW, totals and all figures are never guessed
Limits & protection

Free access stays fair, enforced server-side

A public, free analyzer only stays fast and honest when abuse is stopped where it matters: inside the server, atomically, with every rejection explained.

Anonymous session allowance

Ten successful analyses per browser session per day. Capacity is reserved before the expensive work and released on any failure, so crashed requests never consume allowance. Resets at midnight IST.

10 per day · per session

Per-IP burst and lifetime caps

Session ids are client-supplied, so a second, identity-agnostic layer keys on the client IP: eight analyses per rolling minute, one hundred per database lifetime. Denied attempts are never billed, and a minute-rate rejection carries a Retry-After countdown.

8 per minute · 100 lifetime · per client IP

Fails honest, never guesses

Scanned documents without OCR tooling, currency or unit conflicts, missing fields — each returns an explicit review state or a precise dependency message, never a confident number without evidence.

3 verdict states · 0 silent fallbacks
Integrations

Built for AP teams and for AI agents

The REST API is the product: self-documented, callable from any script, and exposed to coding assistants through a bundled MCP server. Every platform limit applies identically to both.

REST API, self-documented

Every check the app runs is one POST away. /docs is an OpenAPI playground; responses are the same verdict JSON the app renders.

API=https://invoiceguard-ai-15a1.onrender.com curl -X POST $API/api/v1/analyze \ -F invoice=@invoice.pdf \ -F po_file=@purchase_order.json \ -F session_id=anon-41759671

MCP server for assistants

Register invoiceguard_mcp.py with any MCP client and your assistant reviews invoices itself. Answers flow through the same live API, limits included.

  • analyze_invoiceinvoice + PO → full verdict JSON
  • usagesession → remaining allowance today
{ "mcpServers": { "invoiceguard": { "command": "python", "args": ["invoiceguard_mcp.py"] } } }
Who it is for

Built for the people who sign off on payments

One narrow job: read both documents, prove the match, validate every figure, and escalate whatever a human should decide.

Accounts Payable reviewers

Validate supplier invoices against the committed PO before the payment batch goes out, with every quantity and price recomputed from the agreed contract.

Founders and operations teams

Catch silent over-billing early without standing up a full enterprise procurement suite. Load an invoice and a PO, get a decision with the numbers.

Finance teams evaluating tooling

See the matching and validation approach end to end on real documents before committing to a platform or writing the requirement spec.

Pricing

Simple, transparent pricing

The complete analyzer is free today. Paid tiers are the roadmap for teams and institutions.

Starter

For individuals evaluating the workflow.

$0/ forever
  • Full matching and validation engine
  • 10 analyses per day, anonymized
  • PDF, JSON and CSV inputs
  • REST API and MCP agent access
  • No sign-up, no data retention
Start analyzing

Pro

For finance teams that process weekly.

$29/ mo

billed monthly

  • 500 analyses per day (planned)
  • Appraisal-ready exports (planned)
  • Multi-user review queue (planned)
  • Priority support (planned)
Join the waitlist

Enterprise

For institutions with procurement controls.

Custom
  • On-premise deployment (planned)
  • Nothing leaves your host
  • Custom thresholds and units
  • SSO integration (planned)
Talk to us

Everything marked (planned) is roadmap scope for this prototype; the free plan works in full today.

Analyzer

Ready to check an invoice?

Open the standalone analyzer app: upload an invoice and its Purchase Order, and get a verdict with every number shown.

Open the analyzer
FAQ

Questions people actually ask

Short, straight answers about how the engine works and what it does with your documents.

Does any document leave my machine?

No. Parsing, embedding and validation all run in-process on the machine serving the page. The semantic encoder is a small local ONNX model (BAAI/bge-small-en-v1.5); there are no calls to external AI services.

What are the three verdicts?

MATCHED (checked and consistent), DISCREPANCY_FOUND (a reliable match with a quantity, price or totals conflict) and NEEDS_REVIEW (weak evidence, incompatible units or currency, or missing data). NEEDS_REVIEW always wins when the numbers would be unsafe to compare.

What formats does it accept?

Invoices: PDF, PNG, JPG or WEBP up to 10 MB. Purchase orders: JSON or CSV, pasted inline or uploaded as a file. The CSV header needs description, quantity, unit_price and optionally sku, unit, line_total, po_number and currency — so the PO document header itself can be validated too. Unknown headers are rejected with the exact expected schema, never guessed.

How are the 10 analyses a day enforced?

Server-side. Each anonymous browser session reserves its allowance atomically before analysis starts, so concurrent requests cannot double-spend, and the counter resets at midnight IST.

Is there protection against scripted abuse?

Yes — a second layer rates every client IP directly: 8 analyses per rolling minute and 100 per lifetime, enforced with the same atomic database pattern. Because session ids are client-supplied, rotating them grants nothing new; the IP layer responds with 429 RATE_LIMIT_MINUTE or RATE_LIMIT_LIFETIME, and minute-limit responses include a Retry-After countdown. Denied attempts never consume allowance.

Can I automate checks or connect an AI assistant?

That is intended. The REST API is self-documented at /docs, and the repository ships invoiceguard_mcp.py — an MCP server exposing the API as analyze_invoice and usage tools for Claude Desktop, Cursor or any MCP client. Platform limits apply identically to agents and humans.

Can I use this to approve payments?

No. A MATCHED result is informational support for a reviewer; it is never a payment authorization. The prototype states that boundary in the interface, in the tests and on this page.

Contact us

Get in touch

Questions about the matching engine, deployment, or procurement? Send a note or open an issue.