SaaS subscriptions inventory
Lists and analyzes all company SaaS subscriptions via the payableType=subscription filter. Identifies active subscriptions, their total cost, and recurrence.
83/100Β·π MonthlyΒ·IntermediateCFOFinance AnalystProcurement
CardsSpend analysisget_payableslist_cards
π― Skill purpose
Lists and analyzes all company SaaS subscriptions via the payableType=subscription filter. Identifies active subscriptions, their total cost, and recurrence.
π What it produces
SaaS subscription inventory with supplier, monthly or annual amount, and status.
β‘ Benefit
Before
No consolidated subscription view β discovered only at renewal time.
After
Complete SaaS subscription inventory in seconds, ready to optimize costs.
# SaaS subscriptions β payableType=subscription
## Base query
```json
{
"companyId": "<companyId>",
"filters": {
"field": "payableType",
"operator": "=",
"value": ["subscription"]
},
"pageSize": 20
}
```
β `hasNextPage: true` if more than 20 results β paginate with the cursor to retrieve everything.
## β οΈ spendingAmount β subscription amount
This is the main pitfall on subscriptions. `spendingAmount` is the **limit of the dedicated card**, not the billed amount:
| Description | amount (actual) | spendingAmount (card limit) |
|-------------|---------------|---------------------------------|
| Google Apps subscription | 32.26 EUR | 4,500 EUR |
| Auto-recharge on Twilio | 14.65 EUR | 50 EUR |
| MessageBird | 27.36 EUR | 5,000 EUR |
| CRM 5 users | 276.25 USD β 257 EUR | 400 USD |
β **NEVER sum `spendingAmount`** to calculate the total subscription cost β the result would be 10 to 200x higher than reality.
β Always use `amount` (local currency) or `functionalAmount` (EUR) for actual amounts.
```json
// Good practice
const totalEUR = payables.reduce((sum, p) => sum + p.functionalAmount.amount / Math.pow(10, p.functionalAmount.precision), 0)
// Do not do this
const wrongTotal = payables.reduce((sum, p) => sum + p.spendingAmount.amount / ..., 0) // can be 100x too high
```
## Currencies: majority in USD (international SaaS)
SaaS subscriptions are mostly billed in USD. Use `functionalAmount` for the EUR total:
```json
{
"currency": "USD",
"functionalCurrency": "EUR",
"functionalExchangeRate": 0.9315,
"amount": { "amount": 27625, "currency": "USD", "precision": 2 },
"functionalAmount": { "amount": 25722, "currency": "EUR", "precision": 2 }
}
```
β Sum `functionalAmount` to get the consolidated EUR total across all currencies.
## Filtering by period
For subscriptions in a given period:
```json
{
"companyId": "<companyId>",
"filters": { "field": "payableType", "operator": "=", "value": ["subscription"] },
"fromDate": "2026-01-01",
"toDate": "2026-06-30",
"pageSize": 20
}
```
## Linking subscription β supplier
Each payable exposes `counterparty.supplierId` (no name):
```json
{ "counterparty": { "type": "supplier", "supplierId": "S1mrHIIp" } }
```
β `get_supplier_by_id("S1mrHIIp")` to get the name (`legalName`), IBAN, VAT number.
## Aggregated analysis with spendesk_analyze_spend
For a quick total grouped by supplier:
```json
{
"companyId": "<companyId>",
"fromDate": "2026-01-01",
"toDate": "2026-06-30",
"groupBy": ["supplier"],
"filters": { "field": "payableType", "operator": "=", "value": ["subscription"] }
}
```
β οΈ `groupBy=supplier` returns IDs (not names) β a `get_suppliers(ids=[...])` call is needed for display (see skill S05).
## Useful fields
| Field | Description |
|-------|-------------|
| `description` | Subscription label |
| `amount` / `functionalAmount` | Actual amount in local currency / EUR (integer coefficient / 10^precision) |
| `spendingAmount` | Card limit β do not use for totals |
| `counterparty.supplierId` | ID of the SaaS supplier |
| `currency` | Billing currency (often USD) |
| `functionalExchangeRate` | Exchange rate applied |
| `creationDate` | Date of the payable |
| `state` | Accounting status (`exported`, `toExport`, `toPrepare`) |
## Example prompts
- "What are our SaaS subscriptions and their monthly cost?"
- "Show me the total spent on subscriptions in Q1"
- "Which subscriptions are still active?" (filter by recent `fromDate`)
- "List all subscriptions billed in USD"
- "What is the average monthly cost of our Google Apps subscription?"
How to install this skill
/
- 1Download the file
s16-abonnements-subscriptions.mdusing the button above. - 2Place the file in the
.claude/directory of your project (or~/.claude/for a global install).cp s16-abonnements-subscriptions.md .claude/s16-abonnements-subscriptions.md - 3Use 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_payables, list_cards.Similar skills
β
Top