Overdue invoices >60 days by supplier

Identifies invoices overdue by more than 60 days for targeted suppliers via spendesk_get_due_invoices and the supplierIds filter. Prioritizes critical follow-ups.

↓ Download skill (.md)
87/100Β·πŸ“… WeeklyΒ·BeginnerAP ManagerController
SuppliersReconciliationspendesk_get_due_invoicesget_suppliers

🎯 Skill purpose

Identifies invoices overdue by more than 60 days for targeted suppliers via spendesk_get_due_invoices and the supplierIds filter. Prioritizes critical follow-ups.

πŸ“Š What it produces

List of critically overdue invoices with supplier, amount, due date, and days overdue.

⚑ Benefit

Before

Manual review of supplier invoices to identify critical overdue items β€” slow and imprecise.

After

Immediate list of critical invoices to prioritize, ready for collections follow-up.



# Instructions

## Use case

Identify all overdue invoices for a given supplier, broken down by aging bucket (1-30, 31-60, 61-90, 90+ days).

## Step 1 β€” Find the supplier ID

`spendesk_get_due_invoices` returns invoices with `supplier: "Supplier name"` (a name, not an ID). To filter by supplier, you must first resolve the name to an ID:

```json
// get_suppliers
{
  "companyId": "<COMPANY_ID>",
  "search": "Vaultspeed"
}
```

β†’ Retrieve `data[0].id` β†’ e.g. `"t0tiu752i9bms9"`

## Step 2 β€” Aging filtered by supplier

```json
// spendesk_get_due_invoices
{
  "companyId": "<COMPANY_ID>",
  "filters": {
    "supplierIds": ["t0tiu752i9bms9"]
  },
  "includeUpcoming": true,
  "limit": 20
}
```

### Parameters available in filters

| Parameter | Type | Description |
|-----------|------|-------------|
| `supplierIds` | `string[]` | Filter by one or more suppliers |
| `costCenterIds` | `string[]` | Filter by cost center |
| `currencies` | `string[]` | Filter by currency (e.g. `["EUR", "GBP"]`) |
| `minAmount` | `number` | Minimum amount in EUR (decimal) |

### Options

- `includeUpcoming: true` β†’ adds a "Not yet due" bucket (invoices not yet due)
- `limit` β†’ maximum number of invoices per bucket (default 10, max 50)
- `asOfDate` β†’ reference date (default = today, format `YYYY-MM-DD`)

## Result structure

```json
{
  "summary": {
    "asOfDate": "2026-07-06",
    "totalOverdueAmount": { "amount": 81986, "currency": "EUR", "precision": 2 },
    "totalOverdueCount": 2,
    "oldestInvoiceDaysOverdue": 301
  },
  "data": {
    "upcoming": { "label": "Not yet due", "count": 0, "invoices": [] },
    "buckets": [
      { "label": "1-30 days",  "count": 0, "invoices": [] },
      { "label": "31-60 days", "count": 0, "invoices": [] },
      { "label": "61-90 days", "count": 0, "invoices": [] },
      { "label": "90+ days",   "count": 2, "invoices": [
        {
          "id": "a7f1c327-...",
          "supplier": "Vaultspeed",
          "amount": { "amount": 13548, "currency": "GBP", "precision": 2 },
          "currency": "GBP",
          "invoiceNumber": "CB-CN-202509-1142",
          "invoiceDueDate": "2025-09-08",
          "costCenter": "Revenue",
          "daysOverdue": 301
        }
      ]}
    ]
  }
}
```

## Pitfall 1 β€” The summary is in EUR, invoices in native currency

`summary.totalOverdueAmount` is converted to EUR (functional currency), but each `invoice.amount` is in the invoice's original currency. In this example:
- Vaultspeed: 135.48 GBP (invoice in pounds)
- eau de paris: 663.79 EUR (invoice in euros)

β†’ Do not sum `invoice.amount` across invoices in different currencies. Use `summary.totalOverdueAmount` for the converted total.

## Pitfall 2 β€” Reverse name β†’ ID lookup is mandatory

`spendesk_get_due_invoices` does not return supplier IDs in the response β€” only the name (`supplier: "Vaultspeed"`). To use the `supplierIds` filter, you **must necessarily** go through `get_suppliers(search=name)` first.

## Pitfall 3 β€” Only invoicePurchase toPay

`spendesk_get_due_invoices` only covers **supplier invoices** (`invoicePurchase`) with `paymentStatus = toPay`. Excluded:
- Expense reports
- Card purchases
- Invoices already paid or being paid

## Advanced use cases

**Several suppliers at once:**
```json
{ "filters": { "supplierIds": ["t0tiu752i9bms9", "b3E3B8t2s5"] } }
```

**Overdue + upcoming invoices for a supplier:**
```json
{ "filters": { "supplierIds": ["t0tiu752i9bms9"] }, "includeUpcoming": true }
```

**Aging at a past date (e.g. month-end close):**
```json
{ "asOfDate": "2026-06-30" }
```

## Example user prompts

- "Which invoices from Vaultspeed are overdue?"
- "Show me unpaid invoices older than 60 days for our Marketing suppliers"
- "Are there any invoices overdue by more than 90 days for eau de paris?"

How to install this skill

/
  1. 1
    Download the file s26-aging-factures-fournisseur.md using the button above.
  2. 2
    Place the file in the .claude/ directory of your project (or ~/.claude/ for a global install).
    cp s26-aging-factures-fournisseur.md .claude/s26-aging-factures-fournisseur.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 spendesk_get_due_invoices, get_suppliers.

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