Mcmaster APImcmaster.com ↗
Search McMaster-Carr's industrial catalog via API. Get part numbers, prices, specs, filter options, and autocomplete suggestions across millions of products.
What is the Mcmaster API?
The McMaster-Carr API provides 5 endpoints for querying McMaster-Carr's industrial supply catalog, returning part numbers, prices, specs, and category filters. The search_products endpoint maps a free-text query to organized category tiles and navigation IDs, which you can then pass to get_product_detail to retrieve individual products with prices and technical specs, or to get_product_filters to surface attribute-level facets like thread size, material, and length.
curl -X GET 'https://api.parse.bot/scraper/56275657-6d7f-4930-b070-9129c4e412a8/search_suggest?count=5&query=bolts' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace mcmaster-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
from parse_apis.mcmaster_carr_search_api import McMaster, Suggestion, SearchResult, Category, ProductFamily, Product, Filter, FilterValue, PartLookup
mcmaster = McMaster()
# Search for autocomplete suggestions
for suggestion in mcmaster.suggestions.search(query="bolts", count=5):
print(suggestion.name, suggestion.rank, suggestion.is_part_number)
# Search catalog for product categories
result = mcmaster.searchresults.search(query="o-rings")
print(result.search_result_id, result.total_categories)
# Browse categories from the search result
for category in result.categories:
print(category.title, category.tile_type, category.product_outline_entry_id)
# Get product families within a category
first_category = result.categories[0]
for family in first_category.families(search_result_id=result.search_result_id):
print(family.title, family.product_set_id)
# Get individual products from a product family
family = mcmaster.productfamily(product_set_id="1230802104037")
for product in family.products(search_result_id=result.search_result_id, product_outline_entry_id="10000001449376"):
print(product.part_number, product.price, product.url)
# Get filter options for a category
for filt in first_category.filters(search_result_id=result.search_result_id):
print(filt.name, filt.is_numeric)
for val in filt.values:
print(val.name, val.product_count)
# Look up a specific part number
part = mcmaster.partlookups.get(part_number="92620A401")
print(part.found, part.catalog_status, part.catalog_page, part.parent_part)
Get search autocomplete suggestions for a query. Returns ranked suggestions with images, useful for building search UIs or discovering product terms. Each suggestion includes a popularity rank and whether it matches a part number.
| Param | Type | Description |
|---|---|---|
| count | integer | Max number of suggestions to return |
| queryrequired | string | Search query text (partial or full) |
{
"type": "object",
"fields": {
"query": "string - the original search query",
"total": "integer - number of suggestions returned",
"suggestions": "array of suggestion objects with name, rank, is_part_number, and optional image_url"
},
"sample": {
"data": {
"query": "bolts",
"total": 10,
"suggestions": [
{
"name": "bolts",
"rank": 564324,
"image_url": "https://www.mcmaster.com/mvD/Contents/gfx/ImageCache/913/91309a540p1-b01-digital@300p_637026952995155778.png",
"is_part_number": false
},
{
"name": "long bolts",
"rank": 14042,
"image_url": "https://www.mcmaster.com/mvD/Contents/gfx/ImageCache/913/91309a540p1-b01-digital@300p_637026952995155778.png",
"is_part_number": false
}
]
},
"status": "success"
}
}About the Mcmaster API
Search and Category Navigation
The search_products endpoint accepts a plain-text query (e.g., 'ball bearings', 'hex bolts') and returns an array of category objects, each carrying a category_group, title, tile_type, and either a product_outline_entry_id or product_family_id. These IDs are the entry point for all downstream product calls. The response also includes a search_result_id that must be threaded through to get_product_detail and get_product_filters. A complementary search_suggest endpoint returns ranked autocomplete suggestions — each with a name, rank, is_part_number flag, and an optional image_url — useful for type-ahead search UIs or term discovery.
Product Detail Retrieval
get_product_detail operates in two modes. Without a product_set_id, it returns a list of product families (product_families array) each with a title, product_set_id, presentation_id, and href. Passing a product_set_id from that first call shifts the response to individual products, where each entry carries a part_number, url, price, and specs object. The endpoint echoes back search_result_id, product_outline_entry_id, and product_set_id for traceability across paginated or chained workflows.
Filters and Part Lookup
get_product_filters returns structured facet data for a given category: each filter object includes an id, human-readable name, an is_numeric flag, and a values array where each value carries its own id, name, product_count, and is_selected state. This is suitable for building a filterable product browser or narrowing result sets programmatically. For direct part validation, get_part_number accepts any McMaster part number string and returns found, discontinued, catalog_status ('Current' or 'Discontinued'), catalog_page, parent_part, and a direct url to the product listing.
The Mcmaster API is a managed, monitored endpoint for mcmaster.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when mcmaster.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official mcmaster.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a filterable parts selector using
get_product_filtersto expose attributes like thread size, material, and length - Validate supplier BOMs by running each line item through
get_part_numberto checkfoundanddiscontinuedstatus - Populate a type-ahead search field using
search_suggestresults with thumbnail images fromimage_url - Monitor price changes on specific product families by periodically calling
get_product_detailwith aproduct_set_id - Discover related product categories for a search term using the
category_groupandtitlefields fromsearch_products - Map internal part references to McMaster catalog pages using the
catalog_pagefield returned byget_part_number - Aggregate spec data across a product family for comparison tables using the
specsfields from individual product objects
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does McMaster-Carr have an official developer API?+
What does `get_part_number` return beyond confirming a part exists?+
found (boolean), discontinued (boolean), catalog_status ('Current' or 'Discontinued'), catalog_page (the printed catalog page reference), parent_part (the part family the number belongs to), and a direct url to that part's listing on mcmaster.com.Does the API return customer reviews or product ratings?+
Does `search_products` return paginated results or all categories at once?+
search_products response includes a total_categories count and returns category tiles in a single response. Pagination within a category is handled downstream by calling get_product_detail with a product_set_id; the response includes product_count and total_products to indicate how many items exist in that set.Is inventory availability or stock status included in product responses?+
get_product_detail include part_number, price, and specs, but do not include real-time stock levels or availability dates. The discontinued flag from get_part_number is the closest indicator of availability status. You can fork the API on Parse and revise it to add an endpoint targeting that data if McMaster surfaces it.