AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

Expense Report Builder

skill-igptai-skills-expense-report-builder · by igptai

Aggregates expense receipts from email by time period, categorizes them by project or client, and returns a structured schema ready for expense tools or accountant submission. Use when a user needs to build an expense report from email receipts. Triggers on "build my expense report", "expense receipts from email", "what did I spend this month", "expenses by client", "expense report for accounting…

No reviews yet
0 installs
37 views
0.0% view→install

Install

$ agentstack add skill-igptai-skills-expense-report-builder

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-igptai-skills-expense-report-builder)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
4mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Expense Report Builder? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Expense Report Builder

Prerequisites

This skill needs the iGPT MCP at https://mcp.igpt.ai/.

If the MCP tools aren't available or return an auth error, tell the user to install the iGPT plugin (/plugin marketplace add igptai/skills) or add https://mcp.igpt.ai/ as a connector, then complete OAuth and say "ready". Retry once after they confirm. Never invent tokens or OAuth URLs. For deeper troubleshooting: https://raw.githubusercontent.com/igptai/skills/main/shared/mcp-guard.md


What This Skill Does

Finds all expense receipts in email for a given period, categorizes each by expense type and optionally by project or client, and returns a structured expense report ready for submission to accounting software or an accountant.


Workflow

  1. Before calling any tool, collect these values from the user. Offer the

defaults and let the user override them; do not invent values they did not give.

  • [time_range] — what window of email to scan. The user may give this

in any form ("the current month", "last 30 days", "May 2024", "since the trip"). Default: the current calendar month. Keep the user's natural phrasing for use in the ask input; convert to ISO dates separately for the search call.

  • [grouping_scope] — optional grouping for the report. "none"

(default), "project", or "client".

  • [groupingclause] — derived. When [groupingscope] is not "none",

set to ", grouped by [grouping_scope]". When "none", set to empty string.

  • [local_currency] — the currency to convert all totals into (e.g.

USD, EUR, ILS). No default — must come from the user.

  1. Call search with:
  • query: receipt expense reimbursement purchase paid travel meal hotel
  • datefrom: ISO start date derived from [timerange]
  • dateto: ISO end date derived from [timerange] (or today if open-ended)
  1. Call ask with:
  • input: Find all expense receipts and purchase confirmations in email from [timerange][groupingclause]. For each expense extract: the vendor, the amount, the currency, the date, the expense category, and any project or client it can be associated with based on context. Convert all amounts to [local_currency].
  • output_format:

{ "strict": true, "schema": { "type": "object", "description": "Expense report for a specific time period built from email receipts", "additionalProperties": false, "properties": { "periodfrom": { "type": "string", "description": "ISO8601 start date of the expense report period" }, "periodto": { "type": "string", "description": "ISO8601 end date of the expense report period" }, "localcurrency": { "type": "string", "description": "Currency all amounts have been converted to" }, "expenses": { "type": "array", "description": "List of every expense receipt found in email during the period", "items": { "type": "object", "description": "A single expense item extracted from an email receipt", "additionalProperties": false, "properties": { "vendor": { "type": "string", "description": "Name of the vendor or merchant" }, "date": { "type": "string", "description": "ISO8601 date of the expense" }, "originalamount": { "type": "number", "description": "Expense amount in its original currency" }, "originalcurrency": { "type": "string", "description": "Currency code of the original expense" }, "convertedamount": { "type": "number", "description": "Expense amount converted to local currency" }, "category": { "type": "string", "description": "Type of expense", "enum": [ "travel", "accommodation", "meals", "software", "hardware", "officesupplies", "marketing", "professionalservices", "communication", "other" ] }, "projectorclient": { "type": "string", "description": "Project or client this expense can be attributed to, empty string if not determinable" }, "notes": { "type": "string", "description": "Any additional context about this expense from the email" } }, "required": [ "vendor", "date", "originalamount", "originalcurrency", "convertedamount", "category", "projectorclient", "notes" ] } }, "totalsbycategory": { "type": "array", "description": "Subtotal of expenses grouped by category", "items": { "type": "object", "description": "Category subtotal", "additionalProperties": false, "properties": { "category": { "type": "string", "description": "Expense category name" }, "total": { "type": "number", "description": "Total amount for this category in local currency" } }, "required": ["category", "total"] } }, "grandtotal": { "type": "number", "description": "Total of all expenses in local currency" }, "summary": { "type": "string", "description": "One or two sentence summary of total expenses found and largest categories" } }, "required": [ "periodfrom", "periodto", "localcurrency", "expenses", "totalsbycategory", "grandtotal", "summary" ] } }

  1. Present with grand total and category breakdown first, then full itemized

list grouped by category.

  1. Ask: "Would you like this formatted for a specific expense tool like

Expensify, QuickBooks, or a CSV?"

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.