See where the money goes by category

Breaks spend down by category (software, travel, marketing…) with the monthly trend and the uncategorised share.

Finance Analyst📆 MonthlyIntermediateRead-only

Ask it like this

Where does the money go by expense category over the last 12 months?

When to use it

Every month or quarter, to see how spend splits by nature and spot what is accelerating.

What it produces

Total, categorised and uncategorised share, then a table per category with amount, share, number of expenses, highest month and trend.

How it works

  1. 1Gets your expense categories
  2. 2Breaks spend down by category, month by month
  3. 3Checks that the category total matches the real total
  4. 4Isolates the share of spend with no category
  5. 5Spots categories that are accelerating or one-off

What protects you

  • This skill only reads: it changes nothing in Spendesk
  • It acts with your permissions and your role, never beyond
  • The assistant cannot approve or pay
▸Technical detail88/100 · 2 tools
Spend analysisReportsget_expense_categoriesspendesk_analyze_spend

# Spend by expense category

## Why this skill exists

`spendesk_analyze_spend` has **no "category" dimension** in `groupBy`. Expense categories come out under `analyticalCode`, mixed with the values of custom analytical fields (region, project…). Unsorted, the table is wrong. This skill isolates the categories.

## Step 1 — Get the categories

```json
{ "tool": "get_expense_categories", "params": {} }
```

Returns `id`, `name`, `isArchived`. Keep the list of `id`s: it filters step 2.

- Archived categories are included: keep them for history, and flag them.
- These are employee-facing labels, **not accounting accounts**: do not present them as GL codes (use `get_chart_of_accounts` for that).
- `costCenters: []` means the category applies to every cost center, not to none.

## Step 2 — Analyse and keep only the category rows

```json
{
  "tool": "spendesk_analyze_spend",
  "params": {
    "fromDate": "YYYY-MM-DD",
    "toDate": "YYYY-MM-DD",
    "groupBy": ["analyticalCode", "month"],
    "limit": 50
  }
}
```

In the response, **keep only the rows whose `id` is one of the category IDs** from step 1. The other rows are values of other analytical fields: ignore them.

- `analyticalCode` first in `groupBy`, `limit` at 50 so that no category falls into "Others".
- State the exact dates used. Maximum period: 366 days.
- Do not reuse `share`: it is computed across all rows, other fields included. Recompute each share on `summary.totalAmount`.

## Step 3 — Consistency check

Add up the category rows and compare with `summary.totalAmount`:

- **Equal**: all spend has a category. Verified live over 12 months: IT & Technical fees EUR 87,235.36 + Announcements & Ads EUR 25,984.90 + Travel & Expense EUR 500.00 = EUR 113,720.26, exactly the total.
- **Lower**: the gap is spend **with no category**. Show it on an "Uncategorised" row.
- **Higher**: this should not happen, since each row carries only its own category's amounts. Check that no non-category row was kept; if the gap remains, say so rather than forcing the total.

## Step 4 — Read the trend

The `month` level under each category gives the monthly series. To spot what is accelerating:

- compare the latest month with the average of the earlier months of the same category;
- flag a category concentrated in a single month (on the demo account, 94% of "IT & Technical fees" fell in July): that is a one-off, not a trend.

`compareWithPreviousPeriod` compares with the window of equal length just before, not with the previous calendar month or quarter: read `summary.previousPeriod.period` and show it as returned.

## Recommended output format

```
Spend by category — from <date> to <date>
Total: X EUR — categorised: Y EUR — uncategorised: Z EUR

| Category | Amount | Share of total | No. of expenses | Highest month | Trend |
```

Amounts in functional currency, including VAT, on the document date. Credit notes are included and netted off. The MCP does not read budgets: for a variance against budget by category, the user supplies the figures.

## Example user prompts

- "Where does the money go by expense category over the last 12 months?"
- "Which expense categories grew the most this quarter?"
- "What share of our spend has no category?"

How to install this skill

/
  1. 1
    Download the file s74-depenses-par-categorie.md using the button above.
  2. 2
    Place the file in the .claude/ directory of your project (or ~/.claude/ for a global install).
    cp s74-depenses-par-categorie.md .claude/s74-depenses-par-categorie.md
  3. 3
    Use in Claude Code — the skill is automatically discovered. Describe your need in natural language and Claude will apply the skill instructions.
💡 Make sure the Spendesk MCP is configured in your .claude/settings.json with the tools get_expense_categories, spendesk_analyze_spend.

Similar skills

★ Top
95/100·🔍 Ad hoc·Expert

Audit what the MCP covers

Probes all available MCP tools, re-evaluates coverage of 50 persona use cases, detects new fields or tools, and regenerates the gap analysis report.

CFOControllerAP Manager
90/100·📅 Weekly·Beginner

Card requests via get_requests

Explains how to use get_requests for card requests and why expense reimbursements don't appear there. Avoids a frequent source of confusion between two distinct workflows.

ControllerFinance Analyst
90/100·🔍 Ad hoc·Intermediate

Active vs archived cost centers

Distinguishes active cost centers from archived ones with correct use of get_cost_centers. Avoids the counter-intuitive isArchived vs isActive naming convention pitfall.

ControllerFinance Analyst

Interested in AI Agent services or Custom Integrations?