petsmart-product-data
Skill48 starsChanged 34 days agoMITView on GitHub
PetSmart product data API: search petsmart.com with national price, sale price, rating, promotions and how many stores stock each item, read one product with every size and flavor, UPC, sale end date and Autoship first-order and recurring price, find the 12 stores nearest a ZIP, get unit counts for up to 20 SKUs at one store or 20 store and SKU pairs, and list the Sale section. 6 endpoints, 1 credit each.
- Reads credentials
- Installs packages
- Sends data out
In this repository81 other files it gives its agents.
- airbnb-scraper-apiSkill
- aldi-grocery-dataSkill
- aliexpress-product-dataSkill
- amazon-product-dataSkill
- apple-app-store-apiSkill
- booking-com-hotel-dataSkill
- canadian-tire-apiSkill
- capterra-reviews-apiSkill
- chatgpt-scraper-apiSkill
- chewy-product-dataSkill
- companies-house-apiSkill
- costco-product-dataSkill
- cvs-product-dataSkill
- decathlon-product-dataSkill
- dollar-general-apiSkill
- douyin-scraper-apiSkill
- ebay-product-dataSkill
- etsy-product-dataSkill
- facebook-scraper-apiSkill
- g2-software-reviews-apiSkill
- gemini-scraper-apiSkill
- github-apiSkill
- glassdoor-salary-dataSkill
- google-ads-transparency-apiSkill
- google-ai-mode-apiSkill
- google-flights-apiSkill
- google-hotels-apiSkill
- google-maps-apiSkill
- google-news-apiSkill
- google-play-store-apiSkill
- google-search-apiSkill
- google-shopping-apiSkill
- google-trends-apiSkill
- harbor-freight-apiSkill
- heb-grocery-dataSkill
- home-depot-product-dataSkill
- iherb-product-dataSkill
- indeed-jobs-apiSkill
- instagram-scraper-apiSkill
- kroger-grocery-dataSkill
- kuaishou-scraper-apiSkill
- linkedin-ad-library-apiSkill
- linkedin-scraper-apiSkill
- lowes-product-dataSkill
- menards-product-dataSkill
- mercadolibre-product-dataSkill
- meta-ad-library-apiSkill
- micro-center-apiSkill
- nordstrom-product-dataSkill
- nordstrom-rack-product-dataSkill
- petco-product-dataSkill
- pinterest-apiSkill
- realtor-com-property-dataSkill
- reddit-search-apiSkill
- redfin-property-dataSkill
- rightmove-property-dataSkill
- sams-club-product-dataSkill
- scavioSkill
- sec-edgar-apiSkill
- sephora-product-dataSkill
- The first 60 shown.
The file
Show its rules and text
We split this skill into the rules it gives an agent
14 rules. About 0 are common, 4 are distinctive, and 10 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈4
Distinctive · estimate
This author's own choices. Worth a look.
10
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 23
Use this skill when the user asks to:
- Distinctive: line 25
Check a PetSmart product's price, sale price, or the price of each size and flavor
- Distinctive: line 26
Check the Autoship price of a PetSmart product, first order and recurring
- Distinctive: line 27
Check how many units a PetSmart store has of an item, or which nearby store has it
- Very specific: line 49
When the balance runs out the API answers 402 with a JSON body carrying billing_url.
- Very specific: line 52
Every request is a POST with a JSON body and:
- Very specific: line 73
Find the product: call /petsmart/search with query.
- Very specific: line 74
Every size and its price: call /petsmart/product with the web_style_id (or a sku or the product url).
- Very specific: line 75
Nearby stores: call /petsmart/stores with the user's zip.
- Very specific: line 76
Many SKUs at one store: call /petsmart/store-stock with store_id and up to 20 skus (for example every variant of a product).
- Very specific: line 77
Many stores at once, or a mix: call /petsmart/availability with up to 20 {store_id, sku} pairs.
- Very specific: line 78
What is on sale: call /petsmart/deals, optionally with pet.
- Very specific: line 236
Every response uses the envelope { data, response_time, fetched_at, credits_used, credits_remaining }.
- Very specific: line 256
Never fabricate prices, stock or promotions.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
PetSmart Product Data API - Prices, Autoship, Store Stock, Deals
Search PetSmart pet food and supplies with the national price, list and sale price, price range across sizes, rating, review count, promotion text and how many PetSmart stores stock each item, up to 40 per page. Read one product with every size and flavor: SKU, UPC, sale price and its end date, the Autoship discount with first-order and recurring price, and the ship, pickup and same-day options. Find the 12 stores nearest a ZIP with hours and services, get live unit counts for up to 20 SKUs at one store or for 20 store and SKU pairs, and list the Sale section with its current sale events. All endpoints return structured JSON.
When to trigger
Use this skill when the user asks to:
- Find dog, cat, fish, bird, reptile or small-pet products at PetSmart by keyword
- Check a PetSmart product's price, sale price, or the price of each size and flavor
- Check the Autoship price of a PetSmart product, first order and recurring
- Check how many units a PetSmart store has of an item, or which nearby store has it
- Find PetSmart stores near a ZIP code, with hours and services (grooming, PetsHotel, training)
- List what is on sale at PetSmart, for one pet or one sale event
- Compare PetSmart prices with Petco, Chewy or other retailers, or monitor them
Setup
Get a free API key at scavio.dev (50 free credits to get started, no card required):
export SCAVIO_API_KEY=sk_live_your_keyIf you do not have a key yet
An agent running this skill without SCAVIO_API_KEY set will get 401 on every
call below. The whole path from nothing to a working key is self-serve:
- Sign up at dashboard.scavio.dev - email or Google, no card required.
- A key is created for the account automatically at signup. It is on the dashboard under API Keys, ready to copy.
- A new account starts with 50 credits. Every endpoint in this skill costs 1 credit.
When the balance runs out the API answers 402 with a JSON body carrying
billing_url. Topping up needs no code change - the same key keeps working.
Every request is a POST with a JSON body and:
Authorization: Bearer $SCAVIO_API_KEYEndpoints
Base URL: https://api.scavio.dev. All PetSmart endpoints cost 1 credit.
| Endpoint | Credits | What it returns |
POST /api/v1/petsmart/search | 1 | Up to 40 products per page: SKU, web style id, name, brand, UPC, price, original and sale price, price range across sizes, rating, review count, image, size, variation summary, category, pets, promotions, stores_in_stock (how many stores stock it), pickup and Autoship eligibility, URL. With store_id, only items in stock at that store |
POST /api/v1/petsmart/product | 1 | One product by web style id, SKU or URL, with every variant (size and flavor): SKU, UPC, price, original and sale price, sale end date, Autoship discount with first-order and recurring price, ship-to-home stock, pickup and same-day options, images, promotions. Plus brand, rating, review count, categories, description and option lists |
POST /api/v1/petsmart/stores | 1 | The 12 stores nearest a US ZIP: store number, name, address, phone, coordinates, distance, time zone, the next 7 days of hours and services. With sku, each store also carries its unit count of that SKU |
POST /api/v1/petsmart/store-stock | 1 | Up to 20 SKUs at ONE store: units for in-store pickup there, units to ship to home, and a nearby alternate store with its count when the store has none. Plus the store's address, page URL and pickup options |
POST /api/v1/petsmart/availability | 1 | Up to 20 store and SKU pairs, mixed freely (many stores, many SKUs): quantity and in_stock per pair |
POST /api/v1/petsmart/deals | 1 | The Sale section, up to 40 per page, in the search row shape, plus the current sale events with approximate product counts. Filter by pet, sale event, keywords or store |
Workflow
- Find the product: call
/petsmart/searchwithquery. Each row has asku(one size or flavor) and aweb_style_id(the whole product). - Every size and its price: call
/petsmart/productwith theweb_style_id(or askuor the producturl). Eachvariants[]row has its ownsku, price and Autoship block. - Nearby stores: call
/petsmart/storeswith the user'szip. Pass oneskutoo and each store carries its unit count of it, so one call answers "which store near me has this". - Many SKUs at one store: call
/petsmart/store-stockwithstore_idand up to 20skus(for example every variant of a product). - Many stores at once, or a mix: call
/petsmart/availabilitywith up to 20{store_id, sku}pairs. - What is on sale: call
/petsmart/deals, optionally withpet. Itsevents[]names the running sale events; pass one back aseventto list only that sale.
store-stock vs availability: store-stock is one store and many SKUs, and adds ship-to-home stock, an alternate nearby store, and the store's details; an unknown store number there is a 404. availability takes any mix of stores and SKUs but returns only quantity and in_stock, and an unknown store or SKU reads 0.
Parameters
Search (/search)
| Parameter | Type | Default | Description |
query | string | required | Keywords (1-200 chars) |
page | integer | 1 | 1-based page (1-100) |
limit | integer | 40 | Results per page, 1-40 |
store_id | string | - | PetSmart store number from /stores. Lists only products in stock at that store; each row then carries in_stock_at_store |
sort | string | relevance | relevance, best_sellers, price_low, price_high, top_rated or new_arrivals |
Product (/product)
Pass exactly one of the three.
| Parameter | Type | Default | Description |
web_style_id | string | one of | The number at the end of a product URL (...-570.html), a search row's web_style_id. One id covers every size and flavor |
sku | string | one of | One size or flavor, a search row's sku (4-9 digits). Returns the whole product it belongs to, with requested_sku set |
url | string | one of | A petsmart.com product page URL |
Stores (/stores)
| Parameter | Type | Default | Description |
zip | string | required | US ZIP code (5 digits or ZIP+4) |
radius | integer | 30 | Search radius in miles, 1-100 |
sku | string | - | A SKU. Each store then carries quantity and in_stock for it |
Store stock (/store-stock)
| Parameter | Type | Default | Description |
store_id | string | required | PetSmart store number from /stores |
skus | string[] | required | 1-20 SKUs, for example every variants[].sku of a product |
Availability (/availability)
| Parameter | Type | Default | Description |
pairs | object[] | required | 1-20 { "store_id": "1658", "sku": "5252900" } pairs, stores and SKUs mixed freely |
Deals (/deals)
| Parameter | Type | Default | Description |
pet | string | - | dog, cat, fish, small_pet, reptile or bird |
event | string | - | One sale event, by its exact name from the events[] of a previous deals answer ("Sale > November > Dog Sale"). Events change with the season |
query | string | - | Keywords to search within the sale |
page | integer | 1 | 1-based page (1-100) |
limit | integer | 40 | Results per page, 1-40 |
store_id | string | - | Only products in stock at this store |
sort | string | relevance | Same values as search |
Examples
curl -X POST https://api.scavio.dev/api/v1/petsmart/availability \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"pairs": [{"store_id": "1658", "sku": "5252900"}, {"store_id": "2528", "sku": "5252900"}]}'Captured response (a 30 lb bag of Purina Pro Plan dry dog food at two Chicago-area stores):
{
"data": {
"count": 2,
"in_stock_count": 2,
"results": [
{ "store_id": "1658", "sku": "5252900", "quantity": 8, "in_stock": true },
{ "store_id": "2528", "sku": "5252900", "quantity": 4, "in_stock": true }
]
},
"response_time": 3257,
"credits_used": 1
}A captured /store-stock item for {"store_id": "1658", "skus": ["5252900", ...]}:
{
"sku": "5252900",
"store_quantity": 8,
"in_stock_at_store": true,
"ship_to_home_quantity": 9816,
"ship_to_home_in_stock": true,
"alt_store_id": null,
"alt_store_quantity": null
}A captured /product variant for {"web_style_id": "36648"}, the 4 lb size on sale (images and promotions trimmed):
{
"sku": "5339374",
"name": "Purina Pro Plan Sensitive Skin and Stomach Dry Dog Food Adult Salmon & Rice Formula Digestive Health",
"upc": "038100100757",
"options": { "flavor": "Salmon & Rice", "size": "4 Lb" },
"price": 20.68,
"original_price": 21.99,
"sale_price": 20.68,
"sale_valid_until": "9999-12-31T07:00:00.000Z",
"on_sale": true,
"autoship": null,
"ship_to_home": { "in_stock": true, "one_time": true, "autoship": true, "max_quantity": 500 },
"store_pickup": { "one_time": true, "autoship": true, "max_quantity": 500 },
"same_day_delivery": { "one_time": true, "autoship": true, "max_quantity": 500 },
"is_live_pet": false,
"treats_points": 10
}import requests
BASE = "https://api.scavio.dev"
# Your key from https://scavio.dev. Load it from your environment or secret
# store in real code - keep it out of source control.
API_KEY = "sk_your_key_here"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
def petsmart(endpoint, body):
r = requests.post(f"{BASE}/api/v1/petsmart/{endpoint}", headers=HEADERS, json=body, timeout=120)
r.raise_for_status()
return r.json()["data"]
# 1. Find the product (1 credit)
row = petsmart("search", {"query": "dog food", "sort": "best_sellers", "limit": 10})["products"][0]
print(row["name"], row["price"], "in", row["stores_in_stock"], "stores")
# 2. Every size, with sale and Autoship prices (1 credit)
product = petsmart("product", {"web_style_id": row["web_style_id"]})
for v in product["variants"]:
auto = v["autoship"] or {}
print(v["options"].get("size"), v["price"], "sale" if v["on_sale"] else "", auto.get("first_order_price"))
# 3. Stores near a ZIP with their count of one SKU (1 credit)
stores = petsmart("stores", {"zip": "60601", "sku": row["sku"]})["stores"]
for s in stores:
print(s["name"], s["distance_miles"], "mi:", s["quantity"], "units")
# 4. Every size at the nearest store in one call (1 credit)
skus = [v["sku"] for v in product["variants"]][:20]
for it in petsmart("store-stock", {"store_id": stores[0]["store_id"], "skus": skus})["items"]:
print(it["sku"], it["store_quantity"], it["alt_store_id"])Response shapes
Every response uses the envelope { data, response_time, fetched_at, credits_used, credits_remaining }. Nothing is cached; fetched_at is when PetSmart answered.
- search -
query,store_id,sort,page,limit,total_results,total_pages,count,products[](position,sku,web_style_id,name,brand,upc,price,original_price,sale_price,on_sale,price_range{min,max},rating,review_count,image,size,variations[],category,pets[],stores_in_stock,in_stock_at_store(only withstore_id),pickup_eligible,in_store_only,online_only,autoship_eligible,promotions[]{text,start,end},url). - product -
web_style_id,default_sku,requested_sku,name,brand,brand_url,rating,review_count,primary_category,categories[],description,price_range{min,max},options{option: [values]},variant_count,variants[](sku,name,upc,options{option: value},price,original_price,sale_price,sale_valid_until,on_sale,autoship{discount,first_order_price,recurring_price} or null,ship_to_home{in_stock,one_time,autoship,max_quantity},store_pickup{one_time,autoship,max_quantity},same_day_delivery{same},images[],promotions[]{text,type,start,end},is_live_pet,treats_points),url. - stores -
zip,radius_miles,sku,count,stores_in_stock(only withsku),stores[](store_id,name,address,address2,city,state,zip,phone,latitude,longitude,distance_miles,time_zone,google_place_id,opening_date,hours[]{date,day,closed,open,close},services[], and withsku:quantity,in_stock). - store-stock -
store_id,store{name,address,address2,city,state,zip,phone,url,offers_pickup,offers_curbside_pickup},count,in_stock_count,items[](sku,store_quantity,in_stock_at_store,ship_to_home_quantity,ship_to_home_in_stock,alt_store_id,alt_store_quantity). - availability -
count,in_stock_count,results[](store_id,sku,quantity,in_stock). - deals -
pet,event,query,store_id,sort,page,limit,total_results,total_pages,count,products[](the search row shape),events[]{name,product_count}.
Guardrails
- Prices are in dollars and national:
77.99is $77.99 at every store and online. No endpoint returns a store-specific price, so never claim one. priceis what the item sells for now,original_pricethe list price,sale_pricethe reduced price ornull.on_salemeanssale_priceis beloworiginal_price. Asale_valid_untilof9999-12-31means the sale has no announced end date.- Autoship is per variant:
autoship.first_order_priceis the first Autoship order andrecurring_priceevery order after it, with PetSmart'sdiscountlabel.autoshipisnullwhen no Autoship offer is running for that variant, even ifautoship_eligibleis true; quote the one-time price then. - Stock is per store and live:
quantityandstore_quantityare units at that store.stores_in_stockon a search row is how many stores carry the item, not a unit count. store-stockcovers one store and adds ship-to-home stock and an alternate store (alt_store_id,alt_store_quantity) when that store has none; an unknown store number is a404.availabilitymixes stores and SKUs, but an unknown store or SKU reads0, the same as out of stock, so check the store number from/storesbefore telling the user an item is out of stock.ship_to_home_quantityis the online warehouse (chain-wide), not the store.- The Sale section also holds points, Autoship and free-delivery promotions, so most
/dealsrows are not price cuts: useon_saleto find the rows whose price is actually reduced.promotions[].textis the site's own wording; quote it as written and do not compute a final price from it. - Without
store_id, search and deals list every product regardless of local stock. /storesreturns at most the 12 nearest stores; an unknown ZIP returns an empty list, not an error.- Never fabricate prices, stock or promotions. Only return what the API returned, with the product
url.
Failure handling
400means a missing or invalid parameter (noquery, none or more than one ofweb_style_id/sku/url, a non-PetSmart URL, a ZIP that is not 5 digits, an unknownsortorpet,limitabove 40, or more than 20skusorpairs).401means the API key is invalid or missing. CheckSCAVIO_API_KEY.402means the balance is out of credits. The body carriesbilling_url.404on/productmeans no such product or SKU; on/store-stockit means an unknown store number (find one with/stores). Not charged.429means rate or usage limit exceeded. Wait before retrying. See rate limits.502or503means PetSmart is temporarily unavailable. It is not charged; retry after a few seconds.
SDKs
pip install scavio==0.33.0
npm install scavio@0.33.0import { Scavio } from "scavio";
const scavio = new Scavio(); // reads SCAVIO_API_KEY
const { data: found } = await scavio.petsmart.search({ query: "dog food", sort: "best_sellers" });
const { data: item } = await scavio.petsmart.product({ web_style_id: found.products[0].web_style_id });
const { data: near } = await scavio.petsmart.stores({ zip: "60601", sku: found.products[0].sku });
const stock = await scavio.petsmart.storeStock({
store_id: near.stores[0].store_id,
skus: item.variants.map((v) => v.sku),
});
const deals = await scavio.petsmart.deals({ pet: "cat" });MCP: the Scavio MCP server exposes all 6 endpoints as tools (search_petsmart, get_petsmart_product, get_petsmart_stores, get_petsmart_store_stock, get_petsmart_availability, get_petsmart_deals). PetSmart is opt-in: add petsmart to SCAVIO_PLATFORMS.
{
"mcpServers": {
"scavio": {
"command": "npx",
"args": ["-y", "@scavio/mcp-server@0.31.0"],
"env": {
"SCAVIO_API_KEY": "sk_live_your_key",
"SCAVIO_PLATFORMS": "default,petsmart"
}
}
}
}Docs
Full reference per endpoint: search, product, stores, store stock, availability, deals. Overview: PetSmart API.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

