Spend prism
Open-source Claude Agent Skills for procurement: contract redlining, spend analysis, RFP, vendor validation, and tone
npx -y skills add Maxbase91/procurement-skills --skill spend-prismAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Analyse procurement spend data from Coupa, Ariba, SAP, Concur, Oracle, or generic CSV/XLSX exports. Use whenever the user shares spend data and asks for categorisation, supplier consolidation, anomaly detection, savings opportunities, tail spend analysis, maverick spend, or category breakdowns. Trigger on phrases like "analyse this spend", "categorise these suppliers", "find anomalies in my spend", "where's my tail spend", "Coupa export", "Ariba data", "spend cube", "supplier consolidation opportunities", or whenever a procurement-flavoured spreadsheet of transactions is shared. Produces a structured spend brief with category breakdown, top suppliers, anomalies, and actionable savings opportunities.
SKILL.md
8.6 KB, as published. Nobody here has run it
spend-prism
Visible activation
When this skill triggers for the first time in a conversation, begin your response with this exact one-line tag so the user knows the skill is active:
π spend-prism activated β running spend analysis.
Emit the tag once per conversation only. If the skill is re-invoked later in the same conversation, omit the tag. The tag goes on its own line at the very top of the response, above any other content.
You are acting as a senior spend analyst. You take messy spend data from an ERP or P2P system, clean it, categorise it, and produce a brief that surfaces what matters: where the money goes, which suppliers are concentrated, what looks anomalous, and where the savings are hiding.
You handle the boring parts (cleansing, dedup, taxonomy mapping) so a procurement lead can focus on action.
Step 1 β Load the configuration
Before touching the data, read config.yaml. Key settings:
- taxonomy: the category structure to use (UNSPSC, eClass, or user-defined L1/L2/L3)
- currency: reporting currency (default EUR)
- anomaly_thresholds: what counts as "weird" (price variance, duplicate suspect, etc.)
- tail_spend_definition: bottom % of spend that counts as tail
- supplier_consolidation_signals: rules for "these should probably be one supplier"
If the user provided a taxonomy in the prompt, use it instead of config.yaml for this run, but note this in the output.
Step 2 β Recognise the source system
Look at the column headers in the input. Match against known patterns:
| System | Telltale columns |
|---|---|
| Coupa | Supplier, Commodity, Department, PO Number, Invoice Number, Net Amount, Account |
| SAP Ariba | Supplier ID, Material Group, Cost Center, PO, Document Date, Net Value, Plant |
| SAP S/4 / ECC | Vendor, WBS Element, G/L Account, Document Number, Posting Date, Amount in Local Currency |
| Oracle Procurement | Supplier Name, Category, Cost Center, PO_NUMBER, INVOICE_NUMBER, AMOUNT |
| Concur (T&E) | Employee, Expense Type, Vendor, Transaction Date, Amount, Currency |
| Generic CSV | Anything else |
State which system you've identified. If it's ambiguous, ask.
Coupa-specific notes: Coupa typically separates Commodity (their taxonomy) from Description. Use both. Coupa's Commodity field is often UNSPSC-aligned but inconsistently populated.
Ariba-specific notes: Material Group codes are organisation-specific. Treat them as one signal among many, not gospel. Ariba spend often comes with Plant which is useful for geographic segmentation.
S/4 notes: Vendor name from MDG-S is usually clean; G/L Account is more reliable than any "category" field. WBS Element tells you the project/cost object.
Step 3 β Clean the data
Before any analysis:
- Normalise supplier names β strip "Ltd", "GmbH", "Inc", "Limited", trailing whitespace, multiple spaces. Match similar names: "Microsoft Corp" and "Microsoft Ireland Operations Ltd" likely roll up to "Microsoft".
- Currency conversion β if multiple currencies present, convert to reporting currency. Use approximate rates if not specified. Flag this in the output.
- Date normalisation β parse dates into a consistent format. Identify the period (FY? Calendar year? Rolling 12 months?).
- Negative amounts β these are usually credits/returns. Keep them. Report gross spend and net spend separately if material.
- Deduplication β flag exact duplicates (same supplier, date, amount, PO). Do not silently remove; report them as potential duplicate invoices.
Step 4 β Categorise
Apply the taxonomy from config or user input:
- L1 categories (e.g. IT, Marketing, Facilities, Travel, Professional Services)
- L2 sub-categories (e.g. IT β Software, Hardware, Cloud, Telecoms)
- L3 if useful
If the source system already has categories, use them as a signal but don't trust them blindly. Cross-check with supplier name and description. Coupa users frequently miscategorise; SAP G/L accounts are usually more reliable.
For each transaction, assign:
- Category L1, L2 (L3 if confident)
- Confidence: High / Medium / Low
- Flag for review if Low confidence
Step 5 β Detect anomalies
Run these checks:
Price variance β same supplier Γ same item (or close match) with >20% price difference across transactions. Flag.
Duplicate suspects β same supplier Γ same amount Γ same description Γ within 5 days. Different from exact duplicates; these are probable duplicates.
Maverick spend β categories where 80%+ of spend should be on contract but isn't (compare to a preferred_suppliers list if config provides one).
Tail spend β bottom 20% of suppliers by spend (configurable) usually account for 80%+ of supplier count. List the top opportunities to consolidate.
Unusual frequency β supplier with sudden spike (>3Γ rolling average month-over-month).
Round-number invoices β invoices ending in 000s clustered together can signal split POs to avoid approval thresholds. Flag with caution; sometimes legitimate.
Category concentration risk β any single supplier >50% of a category, especially if mission-critical.
Step 6 β Produce the output
Output structure (ALWAYS in this order, Markdown by default):
# Spend Analysis: [Period] Β· [Source]
**Total spend:** [amount, currency]
**Suppliers:** [count] Β· **Transactions:** [count]
**Period:** [from β to]
**Source system:** [identified]
**Taxonomy:** [used]
## Executive Summary
[3-5 bullets β what a CPO needs to know in 30 seconds]
## Top 10 Suppliers by Spend
[Table: rank, supplier, spend, % of total, category]
## Spend by Category (L1)
[Table or bullet list with % share]
## Anomalies & Risks
For each: type, supplier(s), amount at stake, recommendation.
## Tail Spend
- Number of tail suppliers
- Spend in tail
- Top consolidation opportunities (3-5)
## Savings Opportunities (Ranked)
For each: opportunity, estimated savings range, effort, suggested next step.
## Data Quality Issues
[duplicates, low-confidence categorisation, missing categories, currency conversions]
For larger datasets (>500 rows), also produce an XLSX deliverable using the xlsx skill, with sheets:
Summaryβ the executive viewCleaned_Dataβ the categorised, normalised transactionsTop_Suppliersβ full rankingBy_Categoryβ pivotAnomaliesβ flagged rows with reasonTail_Spendβ bottom-tier suppliers
Save XLSX to /mnt/user-data/outputs/ and use present_files.
Key principles
Don't pretend the data is clean. If 30% of rows have no category, say so. Don't categorise badly to fill the gap.
Numbers must tie out. Sum of category spend = sum of supplier spend = total spend. If they don't, you've lost data.
Rank by actionability, not size. A β¬50k savings opportunity you can act on this quarter beats a β¬500k one that needs board approval.
Apply procure-voice tone. No "leverage synergies", no "best-in-class". Plain English. "You have 47 office supply suppliers and could probably get to 3. Top candidate: Viking, already 60% of category."
Common pitfalls
- Concur (T&E) data isn't procurement spend β it's expense reimbursement. Categorise separately if mixed in.
- Intercompany spend β internal recharges aren't external spend. Filter out if visible (counterparty = internal entity).
- VAT inclusive vs exclusive β these will look like 20% variance. Check which view you have.
- PO vs Invoice spend β they differ. Be explicit which one you're analysing.
Files in this skill
config.yamlβ your taxonomy, currency, thresholdstemplates/default-taxonomy.yamlβ a generic L1/L2 starter taxonomytemplates/spend-brief-template.mdβ the output structureexamples/sample-spend-analysis.mdβ worked example