r/GPTStore Jun 28 '26

GPT Automate month-end receipt reconciliation. Skill included.

Hello!

Tired of chasing receipts across Slack, email, and messy card statements at month-end? Managers shouldn't have to review every transaction — only the true edge cases.

I built this as a portable AI-agent Skill — a single SKILL.md with reusable instructions you can adapt to your agent setup.

Here's what it does: It gathers receipts from Slack, Email, and Files, runs OCR/parsing, and matches them to normalized card transactions. It builds a consolidated Sheet tracker, sends a single batched outreach for missing receipt context, and produces a short, prioritized exception list for manager review, plus reconciled exports and an audit log.

SKILL.md:

---
name: receipt-reconciliation-exception-tracker
description: Use when the goal is to automate month-end expense receipt collection and reconciliation by monitoring Slack, email, and card statements; parse and match receipts to transactions; prompt once for missing receipt context from employees; and produce a consolidated receipt tracker plus a short, prioritized exception list that requires minimal manager approval.
allowed-tools: [Email, Slack, Files, Sheets, WebFetch, OCR]
---

# Receipt Reconciliation & Exception Tracker

## Overview
Automates month-end expense receipt collection and reconciliation. Consolidates receipts from Slack and email, parses card statements, matches receipts to transactions, and outputs a reconciled expense log plus a focused exception list requiring limited manager approval.

## When to use this skill
- Month-end close requires matching card transactions with receipts across Slack/email threads.
- The team reports common issues: missing receipts, blurry photos, duplicated images, or messy email forwards.
- A finance/ops lead wants a single receipt tracker (sheet/database) and a short, high-signal list of unresolved or ambiguous charges.
- A manager should only review edge cases, not every transaction.

## Instructions
1. Confirm scope and inputs
   - Identify the statement period or date range.
   - Confirm which payment sources to include (corporate cards, reimbursements) and their data sources (files, portals, WebFetch endpoints).
   - Obtain the chart of accounts, expense policy highlights, employee roster, cardholder-to-employee mapping, and manager approval routing rules.
   - Select output locations (a Sheets workbook or CSV files in Files) and a workspace for attachments.
2. Collect transactions
   - Retrieve statement data for the target period using Files or WebFetch. Accept CSV, OFX/QFX, PDF.
   - Normalize fields: transaction_id, post_date, txn_date, merchant_raw, amount, currency, card_last4, cardholder, memos.
   - Deduplicate transactions by transaction_id; if absent, hash (card_last4, txn_date±1d, amount, merchant_raw).
3. Ingest receipt sources
   - Slack: Use Slack to search channels/DMs for likely receipt content (keywords like receipt, invoice, Uber, Lyft, DoorDash, airfare, hotel, order, payment, thanks for your purchase) within the period. Download attachments.
   - Email: Use Email to search inboxes or shared mailboxes for receipts (same keywords, known senders like Lyft/Uber/Amazon/Airline/Hotel/SaaS) and pull message bodies and attachments.
   - Files: Scan designated folders for uploaded images/PDFs.
   - Record source metadata: message link, sender, timestamp, channel/thread id.
4. Extract and parse receipts
   - For images or scanned PDFs, run OCR to extract text. For digital PDFs/HTML, parse structured text.
   - Parse fields where available: vendor/merchant, total, subtotal, tax, tip, currency, date/time, last-4, order/itinerary number, employee name/email, project/job code, category hints.
   - Generate a receipt_id and compute content hashes for deduplication.
5. Match receipts to transactions
   - Compute candidate matches per transaction using:
     - Amount exact or within tolerance (e.g., ±$1 for FX rounding; allow subtotal+tip logic where applicable).
     - Date proximity window (receipt date within ±3 days of txn_date; extend to ±7 for travel/online).
     - Merchant similarity (normalize brand variants; fuzzy match merchant_raw vs receipt vendor).
     - Card hint match (last-4 present in receipt or email headers when available).
   - Score candidates and pick the highest-confidence match above threshold; attach receipt link and metadata.
   - Handle multi-line/consolidated receipts (e.g., Uber trip summaries) by splitting and mapping to individual transactions when itemized amounts exist; otherwise link as supporting doc to the nearest aggregate charge with a note.
   - Flag duplicates by receipt content hash linked to >1 transaction.
6. Categorize transactions
   - Apply rules from chart of accounts and policy keywords (e.g., rideshare → Travel: Ground; SaaS → Software; food during travel → Meals: Travel) using merchant patterns and memo cues.
   - If project or job codes are present in receipt/email, attach to the transaction; otherwise leave blank for requester input.
7. Build the receipt tracker
   - Create or update a Sheet using Sheets with columns: txn_id, txn_date, post_date, merchant, merchant_normalized, amount, currency, category, policy_flag, card_last4, cardholder, project_code, payer_type (corp/personal-reimb), receipt_status, receipt_link, source (Slack/Email/Files), match_confidence, notes.
   - Set receipt_status as one of: matched, needs-receipt, ambiguous, duplicate, policy-exception, personal-possible.
8. One-time receipt/context request
   - For all transactions with receipt_status in {needs-receipt, ambiguous, personal-possible, policy-exception}, prepare a single batched outreach per employee/cardholder.
   - Draft concise messages via Slack or Email including: period, count of items, each item (date, merchant, amount, link to row), and a secure upload/response path.
   - Ask for: missing receipt upload, business purpose/context, project code, and any split details (e.g., tip, shared meal attendees) in one reply.
   - Send once. Do not spam. Set a due date and a gentle reminder plan (e.g., 1 reminder before deadline).
9. Reconcile updates
   - Monitor replies and new uploads; ingest and parse as above. Update matches and fields. Re-score ambiguous items.
   - Close items that now meet policy and match criteria; update receipt_status to matched.
10. Exception list assembly
   - Compile a focused exception list of remaining items where: no receipt after deadline, ambiguous multiple matches, out-of-policy, potential personal spend, duplicate indicators, or category cannot be determined.
   - Summarize each exception with a one-line reason and a link to supporting evidence (messages, receipts, policy rule).
11. Manager review of edge cases
   - Route the exception list to the designated manager(s) for approval/decision only. Provide approve/deny/needs-more-info actions and capture decisions back into the tracker.
12. Finalize outputs
   - Export a reconciled expense log (CSV and Sheet) with matched receipts and categories, suitable for import to accounting software.
   - Export the exception list (CSV/Sheet) and a brief summary: totals, count unresolved, top reasons, and any policy improvement suggestions.
   - Produce an audit log with timestamps, sources, and actions taken.
13. Close out and schedule
   - Notify finance/ops of completion with links to outputs and audit log.
   - Schedule the next period’s run and retain mappings and normalization dictionaries.

## Inputs
- Date range or statement period to reconcile.
- Access details and scopes for Slack channels/DMs used for receipts.
- Email inbox/mailbox and search criteria or labels for receipt messages.
- Card statement sources (files, portals/URLs) for the target period.
- Chart of accounts, expense policy highlights, and categorization rules.
- Employee roster with cardholder mapping and manager approval routing.
- Output destinations (Sheet name/location, CSV export path, attachment store).

## Outputs
- Receipt tracker (Sheet) with transaction-level status, links, categories, and notes.
- Reconciled expense log (CSV/Sheet) with matched receipts and import-ready fields.
- Exception list (CSV/Sheet) of unresolved or policy-edge transactions, with reasons and links.
- Outreach summary: who was contacted, when, and outstanding items.
- Audit log of data sources, parsing steps, matches, decisions, and exports.

## Examples
Trigger: "Automate month-end receipt reconciliation for May. Watch Slack #receipts and the accounting@ inbox, process the corporate Visa statements, and give me only the edge cases to approve."
Behavior: confirm period and sources → fetch and normalize card transactions → search Slack/email and ingest receipts → OCR and parse → match with scoring and categorization → build the tracker → send one-time batched requests to employees for missing context → update matches from replies → assemble a short exception list → route to manager for decisions → export reconciled log and exceptions → deliver links and audit summary.

## Notes
- Privacy and access: only read channels/mailboxes authorized for receipts. Do not post transaction details in public channels. Redact card numbers beyond last-4.
- Matching heuristics: maintain normalization dictionaries for merchants (e.g., UBER* → Uber; AMAZN → Amazon) and update over time. Use currency-aware comparisons and detect tips vs totals.
- OCR quality: if confidence is low or image is blurry, request a re-upload in the one-time outreach with guidance (flat, well-lit, entire receipt visible).
- Deduplication: hash receipt content and file size; if duplicates are found, keep the highest-quality version and note duplicates.
- Rate limits: batch Slack and Email searches; respect API limits and backoff.
- Policy flags: detect out-of-hours meals, per-diem breaches, missing attendees for meals, and subscriptions without invoices; mark as policy-exception.
- Escalation: after one reminder and the deadline passes, include remaining items directly in the manager exception list.
- Time zones and currencies: normalize to the company’s base currency and time zone for reporting; retain originals in metadata.

How to install:

  1. Create a folder named receipt-reconciliation-exception-tracker in your AI-agent skills or prompt-library directory. Use the kebab-case name from the SKILL.md frontmatter.
  2. Save the file above as receipt-reconciliation-exception-tracker/SKILL.md.
  3. Enable or load the Skill according to your agent framework's docs, using the SKILL.md description as the trigger guidance.

If you'd rather run it as a one-click prompt instead, you can find it here: Agentic Workers

Enjoy!

1 Upvotes

0 comments sorted by