Expense Report Review
Expense report decision logged in expense tool: approved/partially approved/rejected per line. GL codes applied to approved lines. Reimbursement queued for next cycle. Employee notified with outcome. Finance dashboard updated: total expenses reviewed, total approved, total rejected, flag rate by category. Monthly policy exception summary sent to finance lead.
Before you start
- Expense policy documented with category limits and prohibited items
- Expense submission tool configured (Ramp, Expensify, or Concur)
- Approval workflow defined: who approves what dollar amounts
- Submitted expense report (employee name, submission date, expense line items with receipts)
- Expense policy document with category limits
- Employee's department and cost center for GL coding
The steps
- Ingest and parse submitted report — Extract every line: date, vendor, amount, the category the employee chose, whether a receipt is attached, and any note. Record the submission date — policy usually allows 30 days from the expense — and flag anything older.
- Verify receipts are present and legible — Above the policy threshold, usually $25, confirm the receipt shows vendor, date, amount and itemisation. Meals need the itemised receipt, not just the total. Missing or unreadable means that line is not approved until they resubmit.
- Check amounts against policy limits — Check each line against its category limit — meals per person, hotel per night against policy or the GSA rate for that city, economy airfare unless an exception exists, receipts for rideshare. Over the limit is not an automatic rejection; it needs manager approval for the overage.
- Identify prohibited categories — Reject outright, do not escalate: alcohol without pre-approved client entertainment, personal care, gym, fines and parking tickets, gifts over $50 without approval, and travel companions. Tell the employee which rule applied.
- Code approved lines to GL — Give every approved line a GL code, the employee's cost centre, and a project code where relevant — meals 6200, travel 6100, software 6400, office supplies 6300. Check the coded total matches the approved total before it goes to accounting.
- Route for approval or auto-approve — Under $500 and unflagged: approve and send for reimbursement. $500 to $2k unflagged: the direct manager. Over $2k, or anything flagged: the finance manager. Give approvers 48 hours, then chase.
- Communicate outcome to employee — Approved: give the expected reimbursement date. Partly approved: name each rejected line, the rule that applied, and how to resubmit. Rejected: the same, with the path forward. Never send a generic rejection — cite the line and the rule.
If it goes wrong
Employee resubmits same rejected line without changes
Track rejection history per line in expense tool. On second submission of the same rejected line, auto-flag to manager with rejection history included. Do not let repeat submissions loop indefinitely.
GL code mapping is wrong — expenses hit the wrong account
Maintain a validated GL mapping table updated quarterly with finance. Do not infer GL codes from category names alone — always use the mapping table.
Manager approval sits pending for more than 48 hours
Auto-escalate to finance manager after 48-hour timeout. Log escalation in the approval thread. Do not hold reimbursement indefinitely — employees lose trust in the process.
All OpenLabor playbooks