Expense categories and cost center mapping

Lists expense categories and their mapping to cost centers configured in Spendesk. Useful for understanding the company's analytical structure.

โ†“ Download skill (.md)
87/100ยท๐Ÿ” Ad hocยทIntermediateControllerFinance Analyst
SettingsSpend analysisget_expense_categoriesget_cost_centers

๐ŸŽฏ Skill purpose

Lists expense categories and their mapping to cost centers configured in Spendesk. Useful for understanding the company's analytical structure.

๐Ÿ“Š What it produces

Expense category reference with associated cost center and mapping rules.

โšก Benefit

Before

Opaque analytical structure โ€” required asking the Spendesk administrator.

After

Readable category โ†” cost center mapping in one call, without admin access.



# Expense categories and cost center mapping

## Structure of a category

```json
{
  "id": "r96xprmx87jiso",
  "name": "ABM",
  "costCenters": [
    {
      "id": "e411c663-1e1f-4b1e-b674-d954272afbc4",
      "name": "Marketing"
    }
  ]
}
```

Fields: `id`, `name`, `costCenters` (array of `{id, name}` objects).

## Call

```json
{
  "tool": "get_expense_categories",
  "params": {
    "companyId": "<companyId>"
  }
}
```

Returns all categories in a single response (no pagination). On this account: 62 categories.

## Category โ†’ cost centers mapping (1-to-many)

A category can be linked to several cost centers. Examples:
- "Agency" โ†’ 7 CCs (including Marketing + 6 "X- old" CCs)
- "Workspace - Rental costs" โ†’ 2 CCs ("X- old Workspace" + "People")
- "ABM" โ†’ 1 CC (Marketing only)

## Categories with no mapping (costCenters = [])

**15 categories have no associated cost center** โ€” `costCenters: []` (empty array). These are generally cross-functional categories or ones not allocated to a specific department:

| Category | Typical usage |
|-----------|--------------|
| Externalised salaries | Externalized payroll |
| Financial result | Financial results |
| Monthly Learning Allowance | Individual training budget |
| Personal Expense | Personal expense claims |
| Salaries | Salaries |
| Server and COGS tools | Cloud infrastructure |
| Services - Consulting & advisory | Consulting |
| Services - Contractors or Freelancer | Freelancers |
| Tools and subscriptions | SaaS subscriptions |
| Travel & Expense (T&E) - Business | Business expense claims |
| Travel & Expense (T&E) - Candidates | Candidate expenses |
| Travel & Expense (T&E) - Relocation | Relocation |
| Travel & Expense (T&E) - Remote employee | Remote employee expenses |
| T&E - Spendesk Onboarding Connect | Onboarding |
| T&E - Team Building & Team Lunch | Team events |

**Correct interpretation:** `costCenters: []` = no mapping configured, not an "error" nor an "invalid category".

## Outdated mappings (X-old CCs)

Some categories point exclusively to "X-old" CCs decommissioned by convention (but still `isArchived: false` in the API). Examples:
- "Content" โ†’ only "X- old Content" (decommissioned CC)
- "Banking charges" โ†’ mix of an active CC ("Banking Operations") + 5 "X-old"
- "Agency" โ†’ Marketing (active) + 6 "X- old" CCs

These mappings were not updated during the team restructuring.

## Correspondence with the API reality

On this account, the CCs referenced in `costCenters` include CCs with `isArchived: false` (active and X-old) โ€” never CCs with `isArchived: true`. Categories do not point to the 10 truly archived CCs.

## No filter or pagination

`get_expense_categories` always returns the complete list. No filter available (by name, by CC, by status). Filtering must be done client-side.

## Common usage pattern

1. Retrieve all categories with `get_expense_categories`
2. Identify active categories: exclude those whose `costCenters` are all "X-old" CCs
3. For spend by category: `get_payables(filters.expenseCategoryIds=[id1, id2])`

## Distinction from get_cost_centers

| Tool | Returns | Usage |
|------|----------|-------|
| `get_expense_categories` | Employee-facing labels + linked CCs | Reference data for expense classification |
| `get_cost_centers` | Departments/entities + owners | Organizational reference data |

A category ("Travel & Expense - Business") can be used by all CCs โ€” the mapping in `get_expense_categories` specifies for which CCs this category is configured in the Spendesk UI.

## Example user prompts

- "List all available expense categories"
- "Which expense categories are associated with the Marketing cost center?"
- "Are there any categories without a configured cost center?"
- "Give me the full category / cost center reference data for our ERP integration"

How to install this skill

/
  1. 1
    Download the file s36-categories-depenses.md using the button above.
  2. 2
    Place the file in the .claude/ directory of your project (or ~/.claude/ for a global install).
    cp s36-categories-depenses.md .claude/s36-categories-depenses.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, get_cost_centers.

Similar skills

โ˜… Top
95/100ยท๐Ÿ” Ad hocยทExpert

MCP coverage audit & gap analysis

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