skills/sam/product-compliance/SKILL.md
Summarize software product compliance status including license counts, entitlement gaps, compliance violations, and recommended remediation actions
npx skillsauth add happy-technologies-llc/happy-servicenow-skills product-complianceInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill provides a structured approach to summarizing software product compliance within ServiceNow Software Asset Management (SAM). It helps SAM analysts and license managers assess the compliance posture of software products across the enterprise.
Key capabilities:
When to use: When a SAM analyst needs to review compliance for a specific software product or publisher, when preparing for a vendor audit, when identifying cost optimization opportunities, or when generating periodic compliance reports.
sam_admin, sam_user, license_admin, or asset_managersamp_sw_product, samp_sw_install, samp_license, samp_compliance_result, samp_entitlement_result, and cmdb_sam_sw_discovery_model tablesFetch the software product record and its classification.
Using MCP:
Tool: SN-Query-Table
Parameters:
table_name: samp_sw_product
query: display_name=Microsoft Office 365
fields: sys_id,display_name,manufacturer,version,is_licensable,product_classification,lifecycle_stage,lifecycle_end_date,platform,category
limit: 5
For broader searches by publisher:
Tool: SN-NL-Search
Parameters:
query: "Find all licensable software products from Microsoft"
Using REST API:
GET /api/now/table/samp_sw_product?sysparm_query=display_nameLIKEMicrosoft Office^is_licensable=true&sysparm_fields=sys_id,display_name,manufacturer,version,is_licensable,product_classification,lifecycle_stage,lifecycle_end_date,platform,category&sysparm_limit=10&sysparm_display_value=true
Get the latest compliance calculation results for the product.
Using MCP:
Tool: SN-Query-Table
Parameters:
table_name: samp_compliance_result
query: software_product=[PRODUCT_SYS_ID]^ORDERBYDESCsys_updated_on
fields: sys_id,software_product,compliance_status,rights_count,install_count,usage_count,compliance_gap,last_compliance_run,license_metric,publisher
limit: 1
Using REST API:
GET /api/now/table/samp_compliance_result?sysparm_query=software_product=[PRODUCT_SYS_ID]^ORDERBYDESCsys_updated_on&sysparm_fields=sys_id,software_product,compliance_status,rights_count,install_count,usage_count,compliance_gap,last_compliance_run,license_metric,publisher&sysparm_limit=1&sysparm_display_value=true
Pull all license records associated with the product.
Using MCP:
Tool: SN-Query-Table
Parameters:
table_name: samp_license
query: software_product=[PRODUCT_SYS_ID]^ORDERBYDESCstart_date
fields: sys_id,display_name,license_metric,rights,used_rights,available_rights,start_date,end_date,contract,vendor,cost,state,license_type,compliance_status
limit: 20
Using REST API:
GET /api/now/table/samp_license?sysparm_query=software_product=[PRODUCT_SYS_ID]^ORDERBYDESCstart_date&sysparm_fields=sys_id,display_name,license_metric,rights,used_rights,available_rights,start_date,end_date,contract,vendor,cost,state,license_type,compliance_status&sysparm_limit=20&sysparm_display_value=true
Get current installations to understand actual deployment.
Using MCP:
Tool: SN-Query-Table
Parameters:
table_name: samp_sw_install
query: norm_product=[PRODUCT_SYS_ID]^is_reconciled=true
fields: sys_id,display_name,installed_on,installed_on.location,installed_on.assigned_to,install_date,discovery_source,is_reconciled,last_scanned
limit: 100
For installation count by location:
Tool: SN-Query-Table
Parameters:
table_name: samp_sw_install
query: norm_product=[PRODUCT_SYS_ID]^is_reconciled=true^GROUPBYinstalled_on.location
fields: installed_on.location
limit: 50
Using REST API:
GET /api/now/table/samp_sw_install?sysparm_query=norm_product=[PRODUCT_SYS_ID]^is_reconciled=true&sysparm_fields=sys_id,display_name,installed_on,install_date,discovery_source,is_reconciled,last_scanned&sysparm_limit=100&sysparm_display_value=true
Check how license entitlements are allocated.
Using MCP:
Tool: SN-Query-Table
Parameters:
table_name: samp_entitlement_result
query: software_product=[PRODUCT_SYS_ID]^ORDERBYDESCsys_updated_on
fields: sys_id,software_product,license,allocated_rights,consumed_rights,remaining_rights,metric_group,allocation_type
limit: 20
Using REST API:
GET /api/now/table/samp_entitlement_result?sysparm_query=software_product=[PRODUCT_SYS_ID]^ORDERBYDESCsys_updated_on&sysparm_fields=sys_id,software_product,license,allocated_rights,consumed_rights,remaining_rights,metric_group,allocation_type&sysparm_limit=20&sysparm_display_value=true
Analyze the compliance gap and determine remediation needs.
Using MCP:
Tool: SN-Query-Table
Parameters:
table_name: samp_compliance_result
query: compliance_status=non_compliant^ORDERBYcompliance_gap
fields: sys_id,software_product,publisher,compliance_status,rights_count,install_count,compliance_gap,license_metric,last_compliance_run
limit: 20
Using REST API:
GET /api/now/table/samp_compliance_result?sysparm_query=compliance_status=non_compliant^ORDERBYcompliance_gap&sysparm_fields=sys_id,software_product,publisher,compliance_status,rights_count,install_count,compliance_gap,license_metric&sysparm_limit=20&sysparm_display_value=true
Assemble collected data into a structured compliance report:
=== SOFTWARE COMPLIANCE SUMMARY ===
Product: [product_name]
Publisher: [manufacturer] | Version: [version]
Lifecycle: [lifecycle_stage] | EOL: [lifecycle_end_date]
Last Compliance Run: [last_compliance_run]
COMPLIANCE STATUS: [COMPLIANT / NON-COMPLIANT / OVER-LICENSED]
LICENSE POSITION:
Total Entitlements (Rights): [rights_count]
Total Installations: [install_count]
Actual Usage: [usage_count]
Compliance Gap: [compliance_gap] ([positive = over-licensed, negative = under-licensed])
LICENSE INVENTORY:
| License | Type | Metric | Rights | Used | Available | Expiry |
|---------|------|--------|--------|------|-----------|--------|
| [name] | [type] | [metric] | [rights] | [used] | [avail] | [end_date] |
INSTALLATION DISTRIBUTION:
| Location | Install Count | % of Total |
|----------|--------------|------------|
| [location] | [count] | [pct]% |
RISK ASSESSMENT:
- Compliance Gap: [gap_description]
- Expiring Licenses: [count] licenses expiring within 90 days
- Unreconciled Installs: [count] installations not matched to entitlements
- Lifecycle Risk: [EOL/EOS warnings]
REMEDIATION ACTIONS:
1. [action_description] - Priority: [High/Medium/Low]
2. [action_description] - Priority: [High/Medium/Low]
COST OPTIMIZATION:
- Over-licensed savings potential: $[amount]
- License consolidation opportunities: [description]
| Tool | When to Use |
|------|-------------|
| SN-NL-Search | Natural language product search (e.g., "find non-compliant Adobe products") |
| SN-Query-Table | Structured queries for compliance, license, and installation data |
| SN-Read-Record | Retrieve a specific product, license, or compliance record by sys_id |
| Endpoint | Method | Purpose |
|----------|--------|---------|
| /api/now/table/samp_sw_product | GET | Software product catalog lookup |
| /api/now/table/samp_compliance_result | GET | Compliance calculation results |
| /api/now/table/samp_license | GET | License entitlement records |
| /api/now/table/samp_sw_install | GET | Software installation records |
| /api/now/table/samp_entitlement_result | GET | Entitlement allocation details |
| /api/now/table/cmdb_sam_sw_discovery_model | GET | Discovery model mappings |
samp_sw_product (normalized) rather than raw discovery recordslast_scanned datesCause: The compliance calculation has not been run, or the product is not mapped to any discovery models.
Solution: Verify that the product has associated discovery models in cmdb_sam_sw_discovery_model. Trigger a compliance calculation from the SAM Workspace.
Cause: Multiple discovery sources may be reporting duplicate installations, or normalization rules are too broad.
Solution: Check for duplicate samp_sw_install records. Review the normalization rules mapping discovery models to the product. Filter by is_reconciled=true.
Cause: License records may reference a different product version or use a different product reference field.
Solution: Check the software_product and software_model fields on the license. Verify product normalization includes all relevant versions.
Cause: The compliance calculation may use a different metric than expected, or sub-capacity rules apply.
Solution: Review the license_metric field on the compliance result. Check if the product uses processor value unit (PVU) or other sub-capacity metrics.
Scenario: SAM analyst prepares a compliance summary for an upcoming Microsoft audit.
Step 1 - Find product:
Tool: SN-Query-Table
Parameters:
table_name: samp_sw_product
query: display_nameLIKEOffice 365^manufacturer.nameLIKEMicrosoft
fields: sys_id,display_name,manufacturer,version,is_licensable
limit: 5
Step 2 - Get compliance:
Tool: SN-Query-Table
Parameters:
table_name: samp_compliance_result
query: software_product=<sys_id>
fields: compliance_status,rights_count,install_count,usage_count,compliance_gap,last_compliance_run
limit: 1
Output Summary:
COMPLIANCE SUMMARY - Microsoft Office 365 E3
Publisher: Microsoft | Metric: Per User
Last Run: Mar 18, 2026
STATUS: NON-COMPLIANT
Rights: 2,500 licenses | Installs: 2,847 | Active Users: 2,712
Gap: -212 licenses (under-licensed)
LICENSES:
- EA Agreement EA-2024-001: 2,000 rights (exp Dec 2026)
- CSP Monthly: 500 rights (active, monthly)
REMEDIATION:
1. Purchase 212 additional E3 licenses - Priority: High
2. Review 135 installed but inactive users for removal - Priority: Medium
3. Evaluate E3 to E1 downgrade for 340 light users - Priority: Medium
ESTIMATED COST: $212 x $23/user/mo = $4,876/mo additional
SAVINGS OPPORTUNITY: Downgrade 340 users = $5,440/mo savings
Scenario: SAM manager needs an overview of all Adobe product compliance.
Tool: SN-Query-Table
Parameters:
table_name: samp_compliance_result
query: publisher.nameLIKEAdobe^ORDERBYcompliance_status
fields: software_product,compliance_status,rights_count,install_count,compliance_gap,license_metric
limit: 20
Output:
ADOBE COMPLIANCE OVERVIEW
Total Products: 8 | Compliant: 5 | Non-Compliant: 2 | Over-Licensed: 1
NON-COMPLIANT:
1. Adobe Acrobat Pro DC
Rights: 450 | Installs: 623 | Gap: -173
Action: Harvest unused installs, purchase delta
2. Adobe Illustrator CC
Rights: 50 | Installs: 78 | Gap: -28
Action: Verify business need for 28 excess installs
OVER-LICENSED:
1. Adobe Photoshop CC
Rights: 200 | Installs: 89 | Gap: +111
Action: Reduce licenses at next renewal (-$6,660/yr)
TOTAL RISK EXPOSURE: ~$48,000 (est. true-up cost)
SAVINGS OPPORTUNITY: ~$6,660/yr (Photoshop right-sizing)
sam/saas-user-resolution - Resolve SaaS user discrepancies and optimize licensesprocurement/invoice-management - Track license procurement and invoicingadmin/configuration-validation - Validate SAM plugin configurationreporting/executive-dashboard - Generate executive compliance dashboardstesting
Manage supplier onboarding, qualification, performance monitoring, and offboarding with auditable lifecycle controls
tools
Identify emerging risks, prioritize intake signals, and route candidates into formal GRC risk assessment workflows
documentation
Screen inbound documents for completeness, policy risk, and routing readiness before extraction or case workflows
testing
Generate concise task summaries with status, timeline, blockers, SLA risk, and recommended next actions