Motion APImotion.com ↗
Access Motion.com's industrial parts catalog via API. Search products, get specs, browse categories, find substitute parts, and locate branch locations across North America.
What is the Motion API?
The Motion.com API exposes 9 endpoints covering product search, detailed specifications, category browsing, substitute parts, and branch location data from one of North America's largest industrial distributors. The search_products endpoint returns paginated results with pricing, inventory status, and attribute data across millions of industrial components including bearings, belts, motors, and fluid power products.
curl -X GET 'https://api.parse.bot/scraper/e2830288-91b0-4411-a796-243225516c9a/search_products?page=1&limit=5&query=bearing' \ -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 motion-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.
"""Walkthrough: Motion.com Industrial Parts API — search parts, drill into details, explore categories."""
from parse_apis.Motion_com_Industrial_Parts_API import Motion, ProductNotFound
client = Motion()
# Search for ball bearings — limit caps total items fetched across all pages.
for product in client.products.search(query="6205-2RS", limit=3):
print(product.name, product.brand, product.price)
# Drill into the first result for full specifications.
item = client.products.search(query="6205-2RS", limit=1).first()
if item:
full = item.details()
print(full.name, full.inventory_status, full.market_price)
# Get technical specifications as a flat map.
specs = full.specifications()
print(specs.name, specs.specifications_count)
# Check substitute products.
for sub in full.substitutes.list(limit=3):
print(sub.name, sub.price)
# Autocomplete suggestions for a search prefix.
suggestions = client.products.autocomplete(query="ball bearing")
print(suggestions.terms, suggestions.manufacturers)
# Browse a category by constructing it from its handle.
page = client.category("bearings").browse()
print(page.category.name, page.is_l1_category_page)
# List all top-level categories.
for cat in client.categories.list(limit=3):
print(cat.name, cat.handle, cat.children_count)
# Typed error handling — catch a missing product.
try:
client.products.get(sku="99999999")
except ProductNotFound as exc:
print(f"Product not found: {exc.sku}")
print("exercised: products.search / details / specifications / substitutes.list / autocomplete / category.browse / categories.list / products.get")
Full-text search over Motion's industrial parts catalog. `query` matches product names, descriptions, and part numbers. Returns paginated results with product summaries including pricing, inventory status, and attributes. Also returns search suggestions (categories, manufacturers, terms). Paginates via integer page counter.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination. |
| limit | integer | Results per page. |
| queryrequired | string | Search keyword or part number. |
{
"type": "object",
"fields": {
"page": "integer, current page number",
"total": "integer, total number of matching products",
"results": "array of product summary objects with id, name, brand, price, description, attributes, inventoryStatus, manufacturerPartNumber",
"pageSize": "integer, results per page",
"suggestions": "object containing categories, manufacturers, terms, and partNumbers arrays"
},
"sample": {
"data": {
"page": 1,
"total": 69810,
"results": [
{
"id": "01178041",
"name": "BEARING",
"brand": "DODGE",
"price": 308.94,
"attributes": [
{
"name": "Product Type",
"value": "Speed Reducer Rebuild Kits & Replacement Parts"
}
],
"description": "BEARING",
"manufacturerName": "DODGE",
"manufacturerPartNumber": "BEARING"
}
],
"pageSize": 5,
"suggestions": {
"terms": [
"bearing",
"sleeve bearing"
],
"categories": [
"Bearings"
],
"partNumbers": [
"BEARING"
],
"manufacturers": [
"Dodge",
"SKF"
]
}
},
"status": "success"
}
}About the Motion API
Product Search and Lookup
The search_products endpoint accepts a query string — either a keyword or part number — and returns an array of product objects, each carrying id (Motion Item Number), name, brand, price, inventoryStatus, and attributes. The response also includes a suggestions object with parallel categories, manufacturers, and terms arrays useful for guiding follow-up queries. Use page and limit to paginate through large result sets. When you have a manufacturer part number instead of a Motion SKU, get_product_by_mfr_part_number accepts values like 6205-2RS or VEM3546T and returns the same result shape.
Product Details and Specifications
get_product_details accepts an 8-digit Motion Item Number (sku) and returns the full record: name, brand, price, description, inventoryStatus (e.g. IN_STOCK_SIMPLE, NOT_IN_STOCK), manufacturerPartNumber, breadcrumbs (category path), and a detailed attributes array. For a flattened view, get_product_specifications returns a specifications object mapping spec names directly to values alongside a specifications_count — useful when you want to compare attribute tables without unpacking nested groups. get_substitute_products takes the same sku and returns a list of alternative items with their own id, brand, price, and description.
Category Browsing and Autocomplete
get_product_categories returns all top-level categories with id, name, handle, image, and childrenCount. Those handle values feed directly into browse_category, which accepts a slash-delimited category_path like Bearings or Bearings/Ball-Bearings. Top-level paths return subcategories and an isL1CategoryPage: true flag; deeper paths return products, totalProductsCount, and taxonomyInfo. get_autocomplete_suggestions accepts a query prefix and returns terms, categories, and manufacturers arrays — handy for building search-as-you-type interfaces.
Branch Locations
find_locations requires no inputs and returns every Motion branch and shop in North America. Each record includes city, state, country, zip, latitude, longitude, phone, label, and an isShop boolean that distinguishes retail shop locations from standard distribution branches.
The Motion API is a managed, monitored endpoint for motion.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when motion.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 motion.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 parts cross-reference tool using
get_substitute_productsto surface drop-in replacements when a bearing or motor is out of stock. - Aggregate industrial component specs into a searchable internal database using
get_product_specificationsfor flat key-value attribute maps. - Power a procurement dashboard with real-time pricing and
inventoryStatusfromsearch_productsorget_product_details. - Map the nearest Motion branch to a job site using
latitude,longitude, andisShopfields fromfind_locations. - Implement a typeahead search UI using
get_autocomplete_suggestionsto surface relevantterms,categories, andmanufacturersas users type. - Resolve manufacturer part numbers like
6205-2RSto Motion SKUs and pricing usingget_product_by_mfr_part_number. - Traverse the full category hierarchy from
get_product_categoriesthroughbrowse_categoryto index all products in a given segment like Bearings or Fluid Power.
| 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 Motion.com have an official public developer API?+
What does `inventoryStatus` return and does it include quantity on hand?+
inventoryStatus field returns a status string such as IN_STOCK_SIMPLE or NOT_IN_STOCK. It indicates availability but does not expose a numeric quantity-on-hand figure. The API covers stock status for pricing and availability checks; exact warehouse quantities are not part of the current response.Does `browse_category` return products at every category depth?+
Bearings), the endpoint returns subcategories and category metadata with isL1CategoryPage: true rather than a product list. Product arrays and totalProductsCount appear when you supply a deeper path like Bearings/Ball-Bearings. Navigating to the right depth first using get_product_categories and the returned handle values is the reliable approach.Does the API return customer reviews or Q&A for products?+
Is there a way to filter `search_products` results by brand or category rather than just a keyword?+
search_products endpoint currently accepts a query string plus page and limit pagination parameters. Facet filtering by brand or category is not a direct input parameter. The suggestions.categories and suggestions.manufacturers fields in the response can guide follow-up queries, and browse_category provides category-scoped browsing. You can fork this API on Parse and revise it to add brand or category filter parameters.