Spend request approval console for your Coda intake table

By General Input

Work every pending purchase and expense request in one fast queue, with budget context, one click decisions and automatic notifications.

Integrations

  • Coda
  • Gmail
  • Slack Bot

Type

App

Categories

  • Finance
  • Operations

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.

Related prompts

Explore more prompts
Win back LiveChat visitors whose chats went unansweredA brand asset library your marketing team actually searchesTurn Mailjet email clicks into ranked HubSpot follow-upsClean out the Looker dashboards and Looks nobody opensLiveKit live operations console for room moderationWake up dormant Keap leads with a researched reasonLiveChat coverage board for planning next week's shiftsPhone routing control panel for LiveKit voice agentsLinkedIn Ads budget pacing dashboard for every client accountGive your team Looker numbers without buying more seats