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.
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.
Example output
Additional information
What does this prompt do?
- 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 do I need to use this?
- 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.
How can I customize it?
- 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.
FAQs
Does this change anything in Coupa?
Does it check goods receipts as well?
What if we get a lot of tiny variances?
What happens on a morning with no exceptions?
How does this help us spot problem suppliers?
Related templates
New roof inspection requests from your website form land in JobNimbus within a minute, with no duplicate records and nothing retyped by your team.
Every weekday at 7am, your active courses are checked for missing work, silent logins, and slipping grades, with a ranked list sent to your advising channel.
Every new customer request gets a priority, triage labels, a friendly reply with the right help article, and a Slack ping only when it is truly urgent.
Every Monday at 8am, see exactly which assignments have work waiting, sorted worst first, posted to Slack and logged to a spreadsheet.
When a bot opens a version bump pull request, we read the real documentation for that exact version and tell you whether it is safe to merge.
The moment a deal hits Closed Won, the right contract starts in Ironclad, the link lands on the deal, and your sales channel hears who owns the next step.
Stop clicking through held invoices one at a time.
Let this run before your accounts payable team logs on, so the morning starts with a ranked list instead of a queue.