{"slug":"autotask-product-catalog","title":"Autotask Product Catalog","summary":"Autotask product catalog structure - Products, Services, and Service Bundles - and how Price Lists override default unit pricing. Covers product/service fields, inventory tracking, and cost-vs-billing margin analysis for MSP quoting and procurement.","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-09-21T18:26:36.090387Z","repo":{"url":"https://github.com/WYRE-AI/msp-claude-plugins","stars":46,"forks":26,"license":"Apache-2.0","updatedAt":"2026-09-21T16:51:26Z"},"bodyHtml":"<hr>\n<h2>name: \"Autotask Product Catalog\"\ndescription: &gt;\nAutotask product catalog structure - Products, Services, and Service Bundles - and how\nPrice Lists override default unit pricing. Covers product/service fields, inventory\ntracking, and cost-vs-billing margin analysis for MSP quoting and procurement.\nwhen_to_use: &gt;-\nWhen searching products, checking pricing, managing inventory, or working with the relationship\nbetween products, services, bundles, and price lists. Use when: autotask product, autotask\nproducts, product catalog, product pricing, price list, inventory items, autotask services,\nservice bundles, product search, check pricing, cost analysis, billing rates, markup, or autotask\ninventory.</h2>\n<h1>Autotask Product Catalog</h1>\n<h2>Overview</h2>\n<p>The Autotask product catalog manages three types of sellable items: <strong>Products</strong> (one-time purchases like hardware and software licenses), <strong>Services</strong> (recurring offerings used in contracts), and <strong>Service Bundles</strong> (grouped services sold together). Each type has associated pricing through <strong>Price Lists</strong> that control unit prices, markup, and billing codes.</p>\n<p>This skill covers product catalog operations for MSP technicians, sales engineers, and managers who need to look up products, verify pricing, check inventory levels, or audit cost-vs-billing rates.</p>\n<h2>Anti-triggers</h2>\n<ul>\n<li><strong>Putting a catalog item on a customer proposal</strong> — quote items have\ntheir own type rules and discount mechanisms; use <code>autotask-quotes</code>.</li>\n<li><strong>The recurring services a client actually pays for</strong> — those are\ncontract services, not catalog entries; use <code>autotask-contracts</code>.</li>\n<li><strong>Supplier SKUs, buy prices, and purchase orders</strong> — this catalog\nholds your sell price only; procurement lives in the separate Kaseya\nQuote Manager plugin, <code>kaseya-quote-manager-purchasing</code>.</li>\n<li><strong>The same catalog in another PSA</strong> — a ConnectWise PSA product\ncarries its own IDs, pricing flags, and procurement links; use\n<code>connectwise-psa-product-catalog</code>.</li>\n</ul>\n<h2>Key Concepts</h2>\n<h3>Product Types</h3>\n<table>\n<thead>\n<tr>\n<th>Type</th>\n<th>Description</th>\n<th>Use Case</th>\n<th>Recurring</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Product</td>\n<td>Physical or digital item</td>\n<td>Hardware, licenses, one-time purchases</td>\n<td>No</td>\n</tr>\n<tr>\n<td>Service</td>\n<td>Recurring offering</td>\n<td>Managed services, monthly monitoring</td>\n<td>Yes</td>\n</tr>\n<tr>\n<td>Service Bundle</td>\n<td>Grouped services</td>\n<td>All-in-one MSP packages</td>\n<td>Yes</td>\n</tr>\n<tr>\n<td>Inventory Item</td>\n<td>Tracked stock</td>\n<td>Warehouse items with serial numbers</td>\n<td>No</td>\n</tr>\n</tbody>\n</table>\n<h3>Product Fields</h3>\n<table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>id</td>\n<td>number</td>\n<td>Unique product identifier</td>\n</tr>\n<tr>\n<td>name</td>\n<td>string</td>\n<td>Product display name</td>\n</tr>\n<tr>\n<td>sku</td>\n<td>string</td>\n<td>Stock keeping unit code</td>\n</tr>\n<tr>\n<td>description</td>\n<td>string</td>\n<td>Product description</td>\n</tr>\n<tr>\n<td>isActive</td>\n<td>boolean</td>\n<td>Whether product is currently available</td>\n</tr>\n<tr>\n<td>unitCost</td>\n<td>number</td>\n<td>Internal cost per unit</td>\n</tr>\n<tr>\n<td>unitPrice</td>\n<td>number</td>\n<td>Default selling price per unit</td>\n</tr>\n<tr>\n<td>msrp</td>\n<td>number</td>\n<td>Manufacturer's suggested retail price</td>\n</tr>\n<tr>\n<td>productCategory</td>\n<td>number</td>\n<td>Category ID (picklist)</td>\n</tr>\n<tr>\n<td>vendorProductNumber</td>\n<td>string</td>\n<td>Vendor's product number</td>\n</tr>\n<tr>\n<td>manufacturerName</td>\n<td>string</td>\n<td>Manufacturer name</td>\n</tr>\n<tr>\n<td>isSerialTracked</td>\n<td>boolean</td>\n<td>Whether serial numbers are tracked</td>\n</tr>\n<tr>\n<td>priceCostMethod</td>\n<td>number</td>\n<td>How pricing is calculated</td>\n</tr>\n<tr>\n<td>defaultVendorID</td>\n<td>number</td>\n<td>Default vendor/supplier</td>\n</tr>\n</tbody>\n</table>\n<h3>Price List Structure</h3>\n<p>Price lists control what customers actually pay. They can override default product pricing per currency:</p>\n<table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>productID / serviceID</td>\n<td>number</td>\n<td>The item being priced</td>\n</tr>\n<tr>\n<td>currencyCode</td>\n<td>string</td>\n<td>Currency (e.g., USD, GBP)</td>\n</tr>\n<tr>\n<td>unitPrice</td>\n<td>number</td>\n<td>Price in this price list</td>\n</tr>\n<tr>\n<td>usesInternalCurrencyPrice</td>\n<td>boolean</td>\n<td>Whether to use internal currency</td>\n</tr>\n</tbody>\n</table>\n<h2>API Patterns</h2>\n<h3>Searching Products</h3>\n<p>Search products by name, SKU, or category:</p>\n<pre><code>Tool: autotask_search_products\nArgs: { searchTerm: \"firewall\", isActive: true }\n</code></pre>\n<p><strong>Note:</strong> <code>productCategory</code> is a field on the Product entity (see table above) but is <strong>not</strong> an accepted filter on <code>autotask_search_products</code> — the tool only supports <code>searchTerm</code>, <code>isActive</code>, and <code>pageSize</code>.</p>\n<h3>Getting Product Details</h3>\n<p>Retrieve full product information by ID:</p>\n<pre><code>Tool: autotask_get_product\nArgs: { productId: 12345 }\n</code></pre>\n<h3>Searching Services</h3>\n<p>Find recurring service offerings:</p>\n<pre><code>Tool: autotask_search_services\nArgs: { searchTerm: \"managed\", isActive: true }\n</code></pre>\n<h3>Inventory and Price List Lookups — not currently available</h3>\n<p>There is no MCP tool to search Inventory Items or Price Lists directly (no\n<code>autotask_search_inventory_items</code> / <code>autotask_search_price_list_products</code> /\n<code>autotask_search_price_list_services</code> exist in the live tool set, despite\nboth being real Autotask entities — see the field references above). Until\none is added, inventory levels and price-list overrides must be checked\ndirectly in the Autotask UI.</p>\n<h2>Common Workflows</h2>\n<h3>1. Quote Pricing Audit</h3>\n<p>Verify that a product's quote price matches the price list:</p>\n<ol>\n<li>Search for the product: <code>autotask_search_products { searchTerm: \"product name\" }</code></li>\n<li>Get the product details: <code>autotask_get_product { productId: &lt;id&gt; }</code></li>\n<li>Check the price list directly in the Autotask UI (no MCP tool for this yet — see note above)</li>\n<li>Compare unitPrice from product vs price list entry</li>\n<li>Calculate margin: <code>(priceListPrice - unitCost) / priceListPrice * 100</code></li>\n</ol>\n<h3>2. Cost vs Billing Rate Comparison</h3>\n<p>Analyze margins across products:</p>\n<ol>\n<li>Search products: <code>autotask_search_products { isActive: true, pageSize: 100 }</code></li>\n<li>For each product, compare <code>unitCost</code> vs <code>unitPrice</code></li>\n<li>Flag products where margin is below threshold</li>\n<li>Check price list overrides if pricing seems off</li>\n</ol>\n<h3>3. Inventory Check Before Quote</h3>\n<p>Before quoting hardware, verify stock:</p>\n<ol>\n<li>Find the product: <code>autotask_search_products { searchTerm: \"laptop\" }</code></li>\n<li>Check inventory directly in the Autotask UI (no MCP tool for this yet — see note above)</li>\n<li>Review <code>quantityOnHand</code> vs <code>quantityMinimum</code></li>\n<li>If low stock, note in quote or suggest alternatives</li>\n</ol>\n<h3>4. Service Pricing Review</h3>\n<p>Review recurring service pricing for contract renewals:</p>\n<ol>\n<li>Search services: <code>autotask_search_services { isActive: true }</code></li>\n<li>For key services, check the price list directly in the Autotask UI (no MCP tool for this yet — see note above)</li>\n<li>Compare current pricing to contract rates</li>\n<li>Identify services where pricing has drifted</li>\n</ol>\n<h2>Error Handling</h2>\n<table>\n<thead>\n<tr>\n<th>Error</th>\n<th>Cause</th>\n<th>Resolution</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Product not found</td>\n<td>Invalid product ID</td>\n<td>Verify ID with search first</td>\n</tr>\n<tr>\n<td>Empty results</td>\n<td>No matching products</td>\n<td>Broaden search term, check isActive filter</td>\n</tr>\n<tr>\n<td>Permission denied</td>\n<td>API user lacks access</td>\n<td>Check API integration security level</td>\n</tr>\n</tbody>\n</table>\n<h2>Best Practices</h2>\n<ul>\n<li>Always check <code>isActive</code> when searching for products to avoid quoting discontinued items</li>\n<li>Use price lists for customer-facing pricing, not the product's <code>unitPrice</code> (which is the default)</li>\n<li>When checking inventory, consider all locations if multi-site</li>\n<li>Products with <code>isSerialTracked: true</code> require serial number assignment on delivery</li>\n<li>Service pricing in price lists overrides the service's default <code>unitPrice</code></li>\n</ul>\n<h2>Related Skills</h2>\n<ul>\n<li><a href=\"/skills/crm/\">CRM</a> - Company and contact management for quoting</li>\n<li><a href=\"/skills/contracts/\">Contracts</a> - Contract pricing and service associations</li>\n<li><a href=\"/skills/api-patterns/\">API Patterns</a> - General Autotask API query patterns</li>\n</ul>\n","files":[{"path":"SKILL.md","sizeBytes":7354,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-09-21T18:27:12.95272Z","sha256":"71C2F3EF78E272227D0A145D986A5221D40164763D812118B5708EF502BD4E7A","sizeBytes":2992},"review":null,"source":{"repositoryUrl":"https://github.com/WYRE-AI/msp-claude-plugins","path":"msp-claude-plugins/kaseya/autotask/skills/product-catalog","license":"Apache-2.0","commit":"147da75a83127bb77f9551efdbf66adf62823c05","subtreeSha":"3B36BA13EFCFAD86A62DB781907A945001C0719D7323789FF2575B21CA02E443","lastSyncedAt":"2026-09-21T18:26:31.557491Z"},"reviewedAt":"2026-09-21T18:28:10.274497Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/WYRE-AI/msp-claude-plugins/tree/main/msp-claude-plugins/kaseya/autotask/skills/product-catalog"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install wyre-ai-msp-claude-plugins@llmmart"},{"target":"git","command":"git clone https://github.com/WYRE-AI/msp-claude-plugins.git"}]}