# Daily Coupa invoice exception triage for your AP team

> Every weekday at 7am, your accounts payable team gets a ranked brief of every held Coupa invoice, what went wrong, and what to fix first.

- Workflow type: agent
- Services: Coupa, Slack, Google Sheets
- Categories: Finance, Operations
- Published: 2026-08-04

## What it does

- Checks your Coupa invoice queue every weekday morning for invoices stuck on hold, disputed, or waiting on review.
- Compares each held invoice against the original purchase order and the supplier record to work out what actually went wrong, such as a price higher than what was ordered, more units billed than ordered, a missing order, or a tax or currency mismatch.
- Ranks every exception by how much money is at risk and how long it has been sitting, so your team starts with the costliest and stalest items instead of clicking through the queue one at a time.
- Posts the ranked brief to your accounts payable Slack channel and logs every exception to a Google Sheet, so you can watch exceptions age and spot suppliers who keep causing the same problem.

## What you'll need

- A Coupa account that can view invoices, purchase orders, and suppliers.
- A Slack workspace and the channel where your accounts payable team wants the morning brief.
- A Google account and a spreadsheet to use as the exception tracker.
- A rough idea of the variance you are happy to ignore, for example anything under fifty dollars or two percent.

## Prompt

Every weekday at 7am, triage my Coupa invoice exception queue so my accounts payable team walks in knowing exactly what to fix first, instead of clicking through held invoices one at a time. Use a cron trigger set to weekdays at 7am. Coupa does not send outgoing webhooks through this integration and is not available as a polling source, so cron is the correct and only valid trigger here.

Start by pulling the exception queue from Coupa with the List Invoices operation. I only want invoices sitting in exception states rather than the whole ledger, so filter for statuses such as on hold, disputed, and pending review. Note that Coupa list endpoints return at most 50 records per call and support offset based pagination only, with no cursor and no way to raise the page size. Loop by increasing the offset in increments of 50 and stop when a call returns fewer than 50 records. Apply the same pagination rule to every Coupa list call in this workflow.

For each exception invoice, gather the context needed to judge it. Fetch the linked purchase order with the List Purchase Orders operation, and fetch the vendor record with the List Suppliers operation. Then compare the invoiced unit price, quantity, tax, and currency against what was actually ordered on the purchase order.

Important scope limit: this is a two way match between the invoice and the purchase order only. There is no receiving or inventory receipt list operation available, so do not attempt to verify goods receipts and do not describe the result as a three way match anywhere in the output.

Diagnose the likely cause of each exception in plain language that an AP clerk can act on. The common cases are: unit price invoiced above the price on the order, quantity billed above quantity ordered, no matching purchase order at all, a tax discrepancy, or a currency mismatch. Be specific and quantitative rather than vague. For example, say "Billed at $62.00 per unit against $48.00 on PO 4471, across 200 units" rather than "price mismatch". Where the supplier record explains or contradicts the variance, such as a tax rate or default currency on file, mention it.

Apply a tolerance rule so small variances do not drown out the real problems. Treat a variance as low risk when it falls under the tolerance threshold, defaulting to 50 dollars or 2 percent of the invoice line value, whichever comes out smaller in dollar terms. Group every low risk item into a single summary line giving the count and the combined value, rather than listing them individually. Expose both the dollar and the percentage threshold as settings at the top of the workflow so I can tune them without editing the logic.

Assign each remaining exception a priority based on two factors: the value at risk, meaning the absolute dollar variance between what was invoiced and what was ordered, and how long the invoice has been held, meaning the number of days it has been sitting in an exception status. Items that are both high value and long held should rank at the top. Rank the full list so the team can work straight down it.

Post the ranked triage brief to my accounts payable Slack channel using Slack's Send a Message operation. Lead with the headline numbers, the count of held invoices and the total value at risk. Then give the ranked list, and for each exception include the invoice number, supplier name, value at risk, days held, the diagnosed cause in plain language, and a suggested next step. Close with the single grouped low risk line. If there are no exceptions at all that morning, post a short all clear message instead of an empty brief, so the team knows the check ran.

Append one row per exception to my Google Sheets tracker using the Append Values operation, so the team can watch exception aging and spot repeat offender suppliers over time. Include columns for date triaged, invoice number, supplier name, invoice amount, purchase order number, variance amount, variance percentage, diagnosed cause, priority, and days held. Append rather than overwrite so history accumulates. Log every exception individually, including the ones collapsed into the low risk line in Slack, because the grouping is a presentation choice for the brief and the tracker should keep full detail for trend analysis.

## How to customize

- Change the timing. Seven in the morning on weekdays suits most teams, but you can move it earlier, later, or run it every day including weekends.
- Set your own tolerance. Raise or lower the dollar and percentage thresholds that decide which small variances get grouped into a single low risk line.
- Choose where it lands. Point the brief at a different Slack channel, or add columns to the tracker such as business unit, approver, or cost centre.

## Example output

Coupa invoice exceptions, Tuesday 4 August
9 invoices held, $13,240 at risk

1. HIGH | INV-88301 | Cedar Fabrication | $6,900 at risk | held 6 days
No matching purchase order. The invoice references PO 5120, which does not exist in Coupa. Looks like an expedited order raised outside the normal process.

2. HIGH | INV-88214 | Northwind Industrial | $2,800 at risk | held 9 days
Unit price above the order. Billed $62.00 per unit against $48.00 on PO 4471, across 200 units. Confirm whether a price increase was agreed, otherwise dispute the difference.

3. MEDIUM | INV-88190 | Bluepeak Supply | $1,540 at risk | held 12 days
Quantity billed over quantity ordered. 140 units invoiced against 100 ordered on PO 4388. Oldest item in the queue.

4. MEDIUM | INV-88422 | Halberd Tooling | $980 at risk | held 3 days
Tax discrepancy. The invoice applies 20 percent VAT where both the order and the supplier record show 5 percent.

Plus 5 low risk variances under the $50 / 2 percent tolerance, $1,020 combined. No action needed, all logged to the tracker.

## FAQ

### Does this change anything in Coupa?

No. It only reads your invoices, purchase orders, and supplier records. Nothing is approved, released, disputed, or edited. Your team still makes every call, they just walk in knowing what to look at first.

### Does it check goods receipts as well?

No. This compares the invoice against the purchase order only, which is what catches price, quantity, missing order, tax, and currency problems. Checking what was physically received is not part of this workflow.

### What if we get a lot of tiny variances?

That is exactly what the tolerance rule is for. Anything under your threshold, for example fifty dollars or two percent, gets rolled into one low risk line at the bottom of the brief instead of cluttering the ranked list. Every one of them still gets its own row in the tracker.

### What happens on a morning with no exceptions?

You get a short all clear message rather than an empty brief, so the team knows the check ran and there is nothing waiting on them.

### How does this help us spot problem suppliers?

Every exception gets its own row in the tracker with the supplier name, the cause, and the value at risk. After a few weeks you can sort the sheet by supplier and see who repeatedly bills above the order or keeps sending invoices with no order at all.

Use this prompt in General Input: https://www.generalinput.com/prompts/daily-coupa-invoice-exception-triage-for-your-ap-team