Expense categories and cost center mapping

Lists expense categories and the cost centers each is restricted to; a category with no restriction applies to all.

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

๐ŸŽฏ Skill purpose

Lists expense categories and the cost centers each is restricted to; a category with no restriction applies to all.

๐Ÿ“Š 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>"
  }
}
```

Cursor-paginated list (100 categories per page by default): when `meta.pagination.hasNextPage` is true, call again with `cursor`. 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 cost center restriction (costCenters = [])

**15 categories have `costCenters: []` (empty array)** โ€” this means the category applies to ALL cost centers, not none. These are generally cross-functional categories:

| 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: []` = category available on ALL cost centers (no restriction), not "no cost center" nor an "error".

## 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` returns one page at a time (cursor), archived categories included (`isArchived`). 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: there is neither a `get_payables` filter nor a `spendesk_analyze_spend` dimension by expense category โ€” group by `payableType`, `costCenter` or `analyticalCode` instead, and tell the user.

## 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?"
- "Which categories are restricted to certain cost centers, and which apply to all?"
- "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

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?