Spend request approval console for your Coda intake table
Work every pending purchase and expense request in one fast queue, with budget context, one click decisions and automatic notifications.
Build me an internal approval console for the spend requests my team submits into a Coda intake table. Right now approvers work the queue by loading the whole Coda doc on their phone, which is slow. I want one fast screen that opens on the pending queue and lets an approver clear it in a few minutes.
Setup screen: let me pick the Coda doc and table, then call Coda List Columns and let me map the fields the app needs, so the app adapts to how the table is actually built instead of assuming column names. Map requester name, requester email, team, amount, vendor, category, business justification, linked doc or URL, status, and the fields the app writes back (decision, approver name, decided at, rejection reason). Also configurable here: the service level in hours (default 48), the amount above which approvals are posted to Slack, the bulk approve cap, the finance Slack channel (use Slack Bot List Channels for the picker), and which button column to fire if the table has one. Persist all of this.
Main view is the queue. Read pending requests with Coda List Table Rows, filtering on the mapped status column. Show a compact table with requester, team, amount, vendor, category and waiting time. Let the approver sort by amount or by how long the request has been waiting, and filter by team and category. A header strip shows the pending count, the total amount pending, and a prominent count of requests aging past the service level. Flag those aging rows visually in the list too.
Selecting a request opens a detail panel. Fetch it with Coda Get Row so the detail is fresh: requester, amount, vendor, category, business justification, and any linked doc rendered as a clickable link. Next to the detail, show budget context for that requester's team: read this month's approved rows with List Table Rows and display the running total already approved for that team this month plus the number of approved requests, so the approver sees the budget picture at the moment of decision.
Approve and reject. Approve writes back with Coda Update Row, stamping the decision value, the approver name and a decision timestamp. Reject writes the same fields plus a rejection reason, and the reject button stays disabled until a reason has been entered. Coda writes are asynchronous and return a request id, so after every Update Row poll Coda Get Mutation Status until the write is confirmed, and only then clear the request from the queue and mark it decided. Never remove a row optimistically before confirmation, otherwise two approvers can double approve the same request. Show an in flight state on the row while the write is pending, and surface a clear error if a mutation never confirms.
Where the table already has a button column driving a downstream Coda automation, fire it with Coda Push Button once the decision write is confirmed, so the doc's existing routing keeps working instead of being replaced. Only offer this when List Columns shows a button column exists.
Notifications after a confirmed decision. Email the requester with Gmail Send a Message: the outcome, the key request details, and the rejection reason when rejected. For approvals at or above the configured threshold, post to the finance channel with Slack Bot Send a Message including requester, team, amount, vendor, category and approver. If a notification fails, show that on the request rather than failing the decision, since the decision is already saved in Coda.
Bulk approve: one action that approves every pending request under the configurable small amount. Show a confirmation listing exactly which requests will be approved and the combined total before anything is written. Coda allows roughly ten writes every six seconds, so batch and pace the updates, poll mutation status for each one, show a progress indicator, and report per request success or failure at the end. Only clear confirmed rows and leave anything that failed sitting in the queue.
Details: the approver name defaults to the signed in user and is editable in settings. Remember each user's last used sort and filter. Refresh the queue after any decision and offer a manual refresh. Show a friendly empty state when the queue is clear. Back off and retry on Coda rate limit responses instead of erroring the whole screen.
What does this prompt do?
- Opens on a live queue of every pending spend request from your Coda table, sorted by amount or by how long it has been waiting, with a clear count of anything aging past your two day service level.
- Shows the full request beside a running total of what that team has already had approved this month, so the approver has budget context at the moment of decision.
- Approve or reject in one click. The decision, the approver name, the time and any rejection reason are written straight back into the Coda row, and rejections cannot be submitted without a reason.
- Emails the requester the outcome, posts larger approvals into a finance Slack channel, and lets you bulk approve everything under a small amount you set.
What do I need to use this?
- A Coda account with the table your team submits purchase and expense requests into
- A Gmail account to send outcome emails from
- A Slack workspace if you want approvals above a threshold posted to a finance channel
- Requests already captured as rows, with fields like requester, amount, vendor, category and status (the app reads your table structure, so column names can be whatever you use)
How can I customize it?
- Change the service level from two days to whatever turnaround your team promises requesters
- Set the amount above which approvals get announced in Slack, and the cap for bulk approving small requests
- Point it at a different table or rename your columns at any time, since the app reads how the table is actually built and adapts the field mapping
FAQs
Will this change how my Coda doc works?
Can two approvers accidentally approve the same request?
Do rejections have to include a reason?
Is bulk approving hundreds of small requests safe?
Does the requester need access to the doc to see the outcome?
Related templates
See how your brand's news coverage and sentiment stack up against four competitors, then let an assistant write the weekly report for you.
One screen showing every social post waiting on approval, sorted by deadline, so reviewers can approve or reject without leaving the page.
Every Monday, find the past champions and closed-won contacts who changed jobs, update Attio, and get the moves worth chasing in Slack.
Staff submit what happened, your social manager edits the copy, picks the accounts and puts it on the calendar without a single spreadsheet.
Open one board each morning, see which voice calls went badly, replay the exact moment the caller got frustrated, and file the fix.
A calibration board that lines up every candidate's answer to the same question, hides names until your panel has scored, and writes the agreed rating back.
Stop working the approval queue by scrolling a slow doc.
Open one screen, see the budget picture next to each request, and clear the day's spend decisions in a few minutes.