Procurement Summarization
Overview
This skill provides a structured approach to summarizing procurement operations in ServiceNow Sourcing and Procurement Operations. It helps you:
- Retrieve and consolidate procurement case details from
sn_proc_case - Summarize vendor communications, approval chains, and case progress
- Analyze spend across vendors, categories, and time periods using
proc_poandsn_proc_invoice - Generate pipeline reports showing requisitions, POs, and invoices at each stage
- Identify bottlenecks in approval workflows, vendor responses, and fulfillment
When to use: When procurement managers need an overview of case workload, spend trends, pipeline health, or when preparing executive reports on procurement operations.
Prerequisites
- Roles:
sn_procurement.manager,sn_procurement.analyst, orprocurement_admin - Plugins:
com.sn_procurement(Sourcing and Procurement Operations) activated - Access: Read access to
sn_proc_case,proc_po,proc_po_item,sn_spo_requisition,sn_proc_invoice,core_company - Knowledge: Familiarity with your organization's procurement workflow stages and approval hierarchies
Procedure
Step 1: Retrieve Procurement Cases
Query active procurement cases to understand current workload and status distribution.
Using MCP (Claude Code/Desktop):
Tool: SN-Query-Table
Parameters:
table_name: sn_proc_case
query: active=true^ORDERBYDESCsys_updated_on
fields: sys_id,number,short_description,state,priority,category,vendor,assigned_to,assignment_group,opened_at,sys_updated_on,approval,requested_by
limit: 50
To filter by date range or category:
Tool: SN-Query-Table
Parameters:
table_name: sn_proc_case
query: opened_at>=javascript:gs.beginningOfLast30Days()^category=contract_request
fields: sys_id,number,short_description,state,priority,category,vendor,assigned_to,opened_at
limit: 50
Using REST API:
GET /api/now/table/sn_proc_case?sysparm_query=active=true^ORDERBYDESCsys_updated_on&sysparm_fields=sys_id,number,short_description,state,priority,category,vendor,assigned_to,assignment_group,opened_at,sys_updated_on,approval,requested_by&sysparm_limit=50&sysparm_display_value=true
Step 2: Gather Case Communications and Work Notes
Pull journal entries to summarize vendor interactions and internal notes.
Using MCP:
Tool: SN-Query-Table
Parameters:
table_name: sys_journal_field
query: element_id=[case_sys_id]^element=work_notes^ORelement=comments^ORDERBYDESCsys_created_on
fields: sys_id,element,value,sys_created_on,sys_created_by
limit: 30
Using REST API:
GET /api/now/table/sys_journal_field?sysparm_query=element_id=[case_sys_id]^element=work_notes^ORelement=comments^ORDERBYDESCsys_created_on&sysparm_fields=sys_id,element,value,sys_created_on,sys_created_by&sysparm_limit=30
Step 3: Check Approval Status
Query approval records to identify pending approvals and bottlenecks.
Using MCP:
Tool: SN-Query-Table
Parameters:
table_name: sysapproval_approver
query: document_id=[case_sys_id]^ORDERBYDESCsys_updated_on
fields: sys_id,approver,state,sys_updated_on,comments,source_table,group
limit: 20
For a pipeline-wide view of pending approvals:
Tool: SN-Query-Table
Parameters:
table_name: sysapproval_approver
query: state=requested^source_table=sn_proc_case^ORDERBYsys_created_on
fields: sys_id,approver,document_id,state,sys_created_on,group
limit: 50
Using REST API:
GET /api/now/table/sysapproval_approver?sysparm_query=document_id=[case_sys_id]^ORDERBYDESCsys_updated_on&sysparm_fields=sys_id,approver,state,sys_updated_on,comments,source_table,group&sysparm_limit=20&sysparm_display_value=true
Step 4: Analyze Spend by Vendor and Category
Query purchase orders to build a spend summary.
Using MCP:
Tool: SN-Query-Table
Parameters:
table_name: proc_po
query: ordered_date>=javascript:gs.beginningOfLast90Days()^state!=cancelled
fields: sys_id,number,vendor,total_cost,state,ordered_date,currency,category
limit: 200
Aggregate by vendor:
Tool: SN-Query-Table
Parameters:
table_name: proc_po
query: ordered_date>=javascript:gs.beginningOfLastQuarter()^state!=cancelled^vendor=[vendor_sys_id]
fields: sys_id,number,total_cost,state,ordered_date
limit: 100
Using REST API:
# All POs from last 90 days
GET /api/now/table/proc_po?sysparm_query=ordered_date>=javascript:gs.beginningOfLast90Days()^state!=cancelled&sysparm_fields=sys_id,number,vendor,total_cost,state,ordered_date,currency,category&sysparm_limit=200&sysparm_display_value=true
# Spend for a specific vendor
GET /api/now/table/proc_po?sysparm_query=vendor=[vendor_sys_id]^ordered_date>=javascript:gs.beginningOfLastQuarter()^state!=cancelled&sysparm_fields=number,total_cost,state,ordered_date&sysparm_limit=100&sysparm_display_value=true
Step 5: Generate Pipeline Report
Query across requisitions, POs, and invoices to show the procurement pipeline.
Using MCP:
Tool: SN-Query-Table
Parameters:
table_name: sn_spo_requisition
query: state!=cancelled^sys_created_on>=javascript:gs.beginningOfLast30Days()
fields: sys_id,number,state,requested_by,total_estimated_cost,sys_created_on,approval
limit: 50
Tool: SN-Query-Table
Parameters:
table_name: sn_proc_invoice
query: state!=cancelled^sys_created_on>=javascript:gs.beginningOfLast30Days()
fields: sys_id,number,state,vendor,invoice_amount,due_date,po_number
limit: 50
Using REST API:
# Requisitions in pipeline
GET /api/now/table/sn_spo_requisition?sysparm_query=state!=cancelled^sys_created_on>=javascript:gs.beginningOfLast30Days()&sysparm_fields=sys_id,number,state,requested_by,total_estimated_cost,sys_created_on,approval&sysparm_limit=50&sysparm_display_value=true
# Invoices in pipeline
GET /api/now/table/sn_proc_invoice?sysparm_query=state!=cancelled^sys_created_on>=javascript:gs.beginningOfLast30Days()&sysparm_fields=sys_id,number,state,vendor,invoice_amount,due_date,po_number&sysparm_limit=50&sysparm_display_value=true
Step 6: Build the Procurement Summary
Assemble the data into a structured report:
=== PROCUREMENT OPERATIONS SUMMARY ===
Period: [start_date] to [end_date]
CASE WORKLOAD:
Total Active Cases: [count]
By State: New [n] | In Progress [n] | Pending Approval [n] | Resolved [n]
By Priority: P1 [n] | P2 [n] | P3 [n] | P4 [n]
Avg Case Age: [days] days
APPROVAL BOTTLENECKS:
Pending Approvals: [count]
Oldest Pending: [case_number] - waiting [days] days for [approver_name]
Top Delayed Approvers:
1. [approver] - [count] pending, avg [days] days
2. [approver] - [count] pending, avg [days] days
PIPELINE STATUS:
Requisitions: [count] open ($[total_value])
Purchase Orders: [count] open ($[total_value])
Invoices: [count] pending ($[total_value])
SPEND ANALYSIS (Last 90 Days):
Total PO Spend: $[amount]
Top Vendors:
1. [vendor_name] - $[amount] ([count] POs)
2. [vendor_name] - $[amount] ([count] POs)
3. [vendor_name] - $[amount] ([count] POs)
KEY OBSERVATIONS:
- [bottleneck or risk identified]
- [trend noted]
- [action recommended]
Tool Usage
MCP Tools Reference
| Tool | When to Use |
|---|---|
SN-Query-Table |
Query cases, POs, requisitions, invoices, and approvals |
SN-Natural-Language-Search |
Natural language searches (e.g., "show all procurement cases from last week") |
SN-Get-Record |
Retrieve a single case or PO record by sys_id |
REST API Reference
| Endpoint | Method | Purpose |
|---|---|---|
/api/now/table/sn_proc_case |
GET | Query procurement cases |
/api/now/table/proc_po |
GET | Retrieve purchase orders for spend analysis |
/api/now/table/sn_spo_requisition |
GET | Query requisitions in pipeline |
/api/now/table/sn_proc_invoice |
GET | Query invoices for payment tracking |
/api/now/table/sysapproval_approver |
GET | Check approval statuses |
/api/now/table/sys_journal_field |
GET | Retrieve case work notes and comments |
/api/now/table/core_company |
GET | Vendor details |
Best Practices
- Use Display Values: Always include
sysparm_display_value=truein REST calls for readable vendor and user names - Scope Time Ranges: Always bound queries with date ranges to avoid pulling excessive data
- Group by State: Summarize cases and POs by state to quickly identify where work is stuck
- Track Aging: Flag any case or approval older than your SLA threshold (e.g., 5 business days)
- Normalize Currency: When aggregating spend across vendors, ensure all amounts use the same currency
- Refresh Regularly: Procurement pipelines change rapidly; regenerate summaries at consistent intervals
Troubleshooting
"No procurement cases found"
Cause: The sn_proc_case table may not be populated if your organization uses a custom case table
Solution: Check with your admin for the correct table name; some orgs extend task directly for procurement cases
"Spend totals seem incorrect"
Cause: Cancelled or duplicate POs may be included, or currency conversion is needed
Solution: Ensure the query excludes state=cancelled; check the currency field and convert to a base currency before summing
"Approval records missing"
Cause: Approvals may be handled via workflow rather than the sysapproval_approver table
Solution: Check wf_context and wf_executing tables for workflow-based approvals tied to the case
"Requisition data not available"
Cause: The com.sn_sourcing plugin may not be activated
Solution: Verify plugin activation; requisition data requires com.sn_sourcing or com.sn_procurement
Examples
Example 1: Weekly Procurement Dashboard
Scenario: Procurement manager needs a weekly status summary.
Steps:
- Query all active cases: 42 active, 8 pending approval
- Query POs from last 7 days: 15 new POs totaling $234,500
- Check pending approvals: 3 approvals waiting 5+ days
- Query invoices: 12 invoices pending match, $89,200 total
Output:
WEEKLY PROCUREMENT SUMMARY (Mar 12-19, 2026)
CASES: 42 active (8 new this week)
Pending Approval: 8 | In Progress: 22 | Awaiting Vendor: 12
BOTTLENECK ALERT:
3 approvals stalled 5+ days - Finance VP approval queue
PIPELINE:
Requisitions: 18 open ($412,000 estimated)
Purchase Orders: 15 new this week ($234,500)
Invoices: 12 pending match ($89,200)
SPEND THIS WEEK: $234,500 across 6 vendors
Top: TechSupply Inc - $98,000 (3 POs)
Example 2: Vendor Communication Summary
Scenario: Analyst needs to summarize all communications for a vendor dispute case.
Tool: SN-Query-Table
Parameters:
table_name: sn_proc_case
query: number=PROC0005678
fields: sys_id,number,short_description,state,vendor,category,opened_at,assigned_to
limit: 1
Then retrieve work notes and comments:
Tool: SN-Query-Table
Parameters:
table_name: sys_journal_field
query: element_id=[case_sys_id]^element=work_notes^ORelement=comments^ORDERBYDESCsys_created_on
fields: element,value,sys_created_on,sys_created_by
limit: 50
Output:
CASE PROC0005678 - VENDOR COMMUNICATION SUMMARY
Vendor: Global Parts Ltd | Category: Price Dispute | State: In Progress
TIMELINE:
Mar 18 - [Analyst] Vendor agreed to credit $2,400 for overcharge
Mar 16 - [Vendor] Responded: pricing error on catalog item SKU-4421
Mar 14 - [Analyst] Sent formal dispute letter with PO and invoice evidence
Mar 12 - [System] Case created from invoice exception INVCASE0001234
RESOLUTION PATH: Credit memo expected by Mar 25
Related Skills
procurement/invoice-management- Invoice matching and exception handlingprocurement/purchase-order-summarization- Detailed PO status and delivery trackingprocurement/sourcing-summarization- Sourcing event and bid analysisprocurement/supplier-recommendation- Vendor performance evaluationreporting/executive-dashboard- Build executive-level dashboards