PetSmart API endpoint
Returns one page of PetSmart products from its catalog of about 20,000, optionally narrowed by keyword, category, brand, price range, minimum rating or any catalog filter, in six orderings (relevance, price_asc, price_desc, best_sellers, top_rated, new_arrivals). Each product carries its SKU id, master product id, name, brand, price (current, list and PetSmart's display text, with the range across sizes), images, rating and review count, primary category, pets, size, variations, UPC and availability flags (available online, in stock in stores, in-store only, online only, pickup and autoship eligible). total_results and total_pages describe the whole result set; PetSmart pages no deeper than 10,000 results, so narrow the search to reach the rest. Call /petsmart/categories and /petsmart/search/filters for the valid category and filter values; an unknown category path or filter name returns a 400 rather than an empty list. Pass country=ca for the Canadian catalog.
/petsmart/searchEvery argument is validated against PetSmart's live catalog because the underlying index answers an unknown name or value with zero results rather than an error: an unknown category path or filter name returns a 400 pointing to the discovery endpoint that lists the valid values.
Query parameters (all optional):
country — us (default) or ca for the Canadian store, which has its own products (about 9,000), categories, filters and prices. category and filter values must come from the same country's /petsmart/categories and /petsmart/search/filters.query — keyword. Omit to browse the whole catalog or one category.category — a category path from /petsmart/categories (for example Dog > Food > Dry Food). Case-insensitive. A category includes all of its descendants.brand — exact brand name. Find values with /petsmart/search/filters using facet=brand and facet_query.filter — catalog filter as name:value, repeatable (for example customPet:Dog). Names and values come from /petsmart/search/filters. Different names combine with AND; repeating one name combines its values with OR.min_price, max_price — price range in dollars.min_rating — minimum average customer rating, 0 to 5.sort — relevance (default), price_asc, price_desc, best_sellers, top_rated or new_arrivals.page — 1-based page, default 1. limit — products per page, default 24, maximum 100.Each product has id (the SKU), master_product_id, name, brand, price (current, list when discounted, display text, display_type and the list_range/sale_range across sizes), images, rating, review_count, primary_category_id/primary_category_name, pets, size, variations, upc and availability flags (available, in_stock_in_store, in_store_only, online_only, pickup_eligible, autoship_eligible).
| Field | Filled in, of 24 checked | Values in the sample |
|---|---|---|
| id | 24 | |
| master_product_id | 24 | |
| name | 24 | “Purina Pro Plan Sensitive Skin and Stomach Dry Dog Food Adu…” and 23 other values |
| brand | 24 | Purina Pro Plan (13), Simply Nourish (4), Hill's Science Diet (3) and 3 more |
| price | 24 | |
| images | 24 | |
| rating | 24 | 4.2 to 4.9, median 4.6 |
| review_count | 24 | 174 to 9,248, median 1,320 |
| primary_category_id | 24 | |
| primary_category_name | 24 | Dry Food (15), Wet Food (4), Canned Food (3) and 2 more |
| pets | 24 | median 1 entry |
| size | 24 | |
| variations | 24 | median 2 entries |
| upc | 24 | |
| available | 24 | true in 24 of 24 |
| in_stock_in_store | 24 | true in 23 of 24 |
| in_store_only | 24 | true in 0 of 24 |
| online_only | 24 | true in 0 of 24 |
| pickup_eligible | 24 | true in 24 of 24 |
| autoship_eligible | 24 | true in 24 of 24 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| country | string | No | Optional catalog: us (default) or ca for the Canadian store, which has its own products (about 9,000), categories, filters and prices. Allowed values: us, ca. | us | |
| query | string | No | Optional keyword. | dog food | |
| category | string | No | Optional category path, from /petsmart/categories' path field (for example Dog > Food > Dry Food). Includes the category's descendants. A path not in the directory returns a 400. | Dog > Food > Dry Food | |
| brand | string | No | Optional exact brand name. Find values with /petsmart/search/filters using facet=brand and facet_query. | Blue Buffalo | |
| filter | string | No | Optional catalog filters as name:value, repeatable (for example customPet:Dog). Names and values come from /petsmart/search/filters; an unknown name returns a 400. Different names combine with AND; repeating one name combines its values with OR. | customPet:Dog | |
| min_price | number | No | Optional minimum price in dollars. | 10 | |
| max_price | number | No | Optional maximum price in dollars. | 60 | |
| min_rating | number | No | Optional minimum average customer rating, 0 to 5. | 4.5 | |
| sort | string | No | Optional ordering. Allowed values: relevance, price_asc, price_desc, best_sellers, top_rated, new_arrivals. | price_asc | |
| page | integer | No | 1 | Optional 1-based page number. Defaults to 1. | 1 |
| limit | integer | No | 24 | Optional products per page. Defaults to 24, maximum 100. | 24 |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/petsmart/search?country=us&query=coffee&sort=relevance&page=1&limit=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"country": "us",
"query": "dog food",
"sort": "price_asc",
"page": 1,
"limit": 2,
"total_results": 4889,
"total_pages": 2445,
"products": [
{
"id": 5252900,
"master_product_id": 36648,
"name": "Purina Pro Plan Sensitive Skin and Stomach Dry Dog Food",
"brand": "Purina Pro Plan",
"price": {
"current": 77.99,
"display": "$20.68-$94.99",
"display_type": "range",
"list_range": [
21.99,
94.99
],
"sale_range": [
20.68,
94.99
]
},
"images": {
"large": "https://s7d2.scene7.com/is/image/PetSmart/5252900?$sclp-prd-main_large$"
},
"rating": 4.5,
"review_count": 9236,
"primary_category_id": "100246",
"primary_category_name": "Dry Food",
"pets": [
"Dog"
],
"size": {
"solidSize": "30 Lb"
},
"available": true,
"in_stock_in_store": true,
"in_store_only": false,
"online_only": false,
"pickup_eligible": true,
"autoship_eligible": true
}
]
}
}Request schema
No body schema
Response schema
#/definitions/petsmart.searchResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | Code is the HTTP status code or a custom code used to indicate the result of the request @example 200 | |||
| data | petsmart.SearchResponse | No | ||||
| data.country | string | No | ||||
| data.limit | integer | No | ||||
| data.page | integer | No | ||||
| data.products | array | No | ||||
| data.products[].autoship_eligible | boolean | No | ||||
| data.products[].available | boolean | No | ||||
| data.products[].brand | string | No | ||||
| data.products[].id | integer | No | ID is the SKU; /petsmart/product and /petsmart/product/inventory take it. | |||
| data.products[].images | petsmart.Images | No | ||||
| data.products[].images.alternate | array | No | ||||
| data.products[].images.large | string | No | ||||
| data.products[].images.small | string | No | ||||
| data.products[].in_stock_in_store | boolean | No | ||||
| data.products[].in_store_only | boolean | No | ||||
| data.products[].master_product_id | integer | No | MasterProductID groups the size and flavor variations of one product. | |||
| data.products[].name | string | No | ||||
| data.products[].online_only | boolean | No | ||||
| data.products[].pets | array | No | ||||
| data.products[].pickup_eligible | boolean | No | ||||
| data.products[].price | petsmart.Price | No | Price record, 7 fields: current, display, display_type, list, list_range, sale_range, strikethrough_display. Described under PetSmart Product API. | |||
| data.products[].primary_category_id | string | No | ||||
| data.products[].primary_category_name | string | No | ||||
| data.products[].rating | number | No | ||||
| data.products[].review_count | integer | No | ||||
| data.products[].size | object | No | Size is the size attribute (for example solidSize: "30 Lb"). | |||
| data.products[].upc | string | No | ||||
| data.products[].variations | array | No | ||||
| data.query | string | No | ||||
| data.sort | string | No | ||||
| data.total_pages | integer | No | ||||
| data.total_results | integer | No | ||||
| msg | unknown | No | Msg is the message that describes the result of the request @example "Request successful" |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/petsmart/search?country=us&query=coffee&sort=relevance&page=1&limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"