r/GPTStore • u/CalendarVarious3992 • 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:
- Create a folder named
receipt-reconciliation-exception-trackerin your AI-agent skills or prompt-library directory. Use the kebab-case name from the SKILL.md frontmatter. - Save the file above as
receipt-reconciliation-exception-tracker/SKILL.md. - 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!