Free for 30 days on Scale.Start free
Run5 steps45 min setup, ongoing ~2 min per invoice review

AP invoice routing and approval

An AP workspace where every invoice gets one row, the right approver gets pinged in Slack with full context, and Payment Ready rows are the single source of truth for what's cleared to pay.

An AP workspace where every invoice gets one row

An AP workspace where every invoice gets one row, the right approver gets pinged in Slack with full context, and Payment Ready rows are the single source of truth for what's cleared to pay.

Spin up an agent for the heavy lifting

Watches invoices-inbox/ on cron, extracts invoice fields with Claude, creates Invoice queue rows at the right Status (Approved for auto, Pending otherwise), routes Slack approval requests, never flips a Pending row to Approved.

5 steps, 0 official links, 2 agent prompts

Every external doc the agent needs to cite is pre-loaded into the workspace's Pointers table. No hunting for the right URL mid-draft.

What's inside

Pre-loaded so day one is execution.

4Surfaces
5Steps
2Agent prompts
4Tools mapped
Surfaces
  • tableInvoice queue
  • docSetup guide
  • docApproval log
  • docStatus
How the loop works

Your agent works. Dock shows you what happened.

Open this template and you get a workspace seeded with an agent prompt. Connect your agent — Claude via our MCP, Cursor, your own setup — and it reads, drafts, and posts updates as it goes. You watch Dock for the latest.

  1. 01

    Connect your agent

    Claim an agent invite at trydock.ai/agent-invites — your agent gets an API key scoped to this workspace. Paste the key into Claude Desktop, Cursor, or any MCP client.

  2. 02

    Your agent reads the workspace

    The agent prompt at the top of the workspace tells your agent its role, the cadence to follow, and the surfaces to update. No extra setup — open Dock and your agent already knows what to do.

  3. 03

    Watch Dock for the latest

    Your agent posts to the Status surface after every meaningful action — newest at top. Wire the workspace's webhooks to Slack or email to get pinged in real time.

Wire it up · Claude Desktop

Add Dock as an MCP server in 30 seconds.

{
  "mcpServers": {
    "dock": {
      "command": "npx",
      "args": ["-y", "@trydock/mcp"],
      "env": {
        "DOCK_API_KEY": "<paste from /agent-invites>"
      }
    }
  }
}

Drop into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or the equivalent on Windows / Linux. Restart Claude Desktop. Ask Claude:“Read trydock.ai/<org>/ap-invoice-routing-approval and follow the agent prompt.”

FAQ

Common questions on this template.

Does the agent move money or initiate payments?
No. The agent extracts, routes, and tracks. Payment Ready is the workflow's terminal state. Actual payment happens in your AP system (QuickBooks, Xero, NetSuite, or a bank portal) by a human. The Extending section of Setup guide outlines wiring Payment Ready to a QuickBooks bill creation, but money movement is operator-initiated.
Can I add PDF invoices to the inbox folder?
Yes, with one extension: pip install pdfplumber, then in route_invoices.py extract text with pdfplumber.open(path) before passing to extract_invoice(). The base template handles .txt and .md only because not every operator wants the pdfplumber dep.
What if Claude misreads an amount or vendor?
Two protections. First, the approver sees the extracted fields in the Slack message before approving; misreads get caught here. Second, every routing decision logs to Approval log doc, so audit trail is intact. If you see persistent extraction misses on a vendor, edit the prompt in extract_invoice() to include a vendor-specific hint.
Can I route by department too, not just amount?
Yes, via the routing_rules.json extension in Setup guide. The base template routes on amount only. You can add per-department routing (IT invoices to IT director, marketing invoices to CMO) by extending the routing function. The pattern is the same: read department from the extracted fields, look up the right approver, route.
What happens to invoices that fail Claude extraction?
They get logged and marked permanently processed (json.JSONDecodeError). The agent moves on; the file stays in the inbox folder for manual review. Transient errors (Dock down, Slack 500) don't mark processed and will retry next run. This is intentional: a bad scan shouldn't loop forever, but a Dock outage shouldn't lose invoices.

Open it. Hand it to your agent. Ship.

One click mints a fresh workspace in your org with the template body seeded. Your agents, your team, your edits from there.

About this template

Curated by the Dock team at . Every template is a real shared workspace we run with our own agents before publishing.

Reviewed regularly by the Dock team. Each playbook step links to the upstream tool's official docs so we can re-verify the rules as platforms change.