To get Petco prices and store stock from code, use Scavio's Petco API. POST /api/v1/petco/category or /search returns 48 products a page with the one-time, list and Repeat Delivery (autoship) price; /product adds every size's first-autoship price, UPC and ingredients; /stores finds the 10 Petco stores nearest a ZIP, and /store-inventory returns units on hand for up to 10 products at one of them. Every call costs 1 credit, about $0.002 on the Growth plan billed yearly.
Petco has no public product API, and petco.com shows stock for one selected store at a time. These five steps get the prices and the counts for any store, from code. Every response below was captured on November 2, 2026.
Step 1: List the products and their prices
curl -s https://api.scavio.dev/api/v1/petco/category \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"path": "dog/dog-food/dry-dog-food", "sort": "top_sold"}'This returned 48 of 1,055 dry dog foods, 22 pages, in 8.6 s. Row 12, as captured (trimmed to the id, price and fulfillment fields, and to one of its four sizes without that size's url and image):
{
"position": 12,
"name": "Purina Pro Plan Sensitive Skin and Stomach Salmon and Rice Formula Dog Food, 30 lbs.",
"brand": "Purina Pro Plan",
"part_number": "2579466",
"cat_entry_id": "531503",
"url": "https://www.petco.com/product/purina-pro-plan-focus-adult-sensitive-skin-and-stomach-salmon-and-rice-formula-dry-dog-food-30-lb-bag-2579466",
"rating": 4.5379,
"review_count": 6743,
"price": 77.99,
"list_price": 80.99,
"autoship_price": 74.09,
"fulfillment": {
"pickup_in_store": true,
"same_day_delivery": true,
"autoship_eligible": true,
"in_store_only": false
},
"deal_group_ids": [],
"variations": [
{
"name": "Purina Pro Plan Sensitive Skin and Stomach Salmon and Rice Formula Dog Food, 40 lbs.",
"part_number": "3748364",
"cat_entry_id": "6131012",
"price": 97.99,
"list_price": 97.99,
"autoship_price": 93.09
}
]
}price is what you pay once, list_price is the was price (it equals price when nothing is on sale), and autoship_price is the Repeat Delivery price. On every row and size on this page the autoship price was 5% below the one-time price, rounded to the cent. Use /search with a query instead of a category for keyword lookups; the rows have the same shape. A deal group such as dry-dog-food-deals from deal_group_ids works as a category path too.
Step 2: Read the product for the first-autoship price
curl -s https://api.scavio.dev/api/v1/petco/product \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://www.petco.com/product/purina-pro-plan-focus-adult-sensitive-skin-and-stomach-salmon-and-rice-formula-dry-dog-food-30-lb-bag-2579466"}'The response lists all 4 sizes. The 30 lb variant, as captured (description, details, ingredients, guaranteed analysis, specifications and images trimmed):
{
"cat_entry_id": "531503",
"part_number": "2579466",
"sku": "2579466",
"upc": "038100175526",
"name": "Purina Pro Plan Sensitive Skin and Stomach Salmon and Rice Formula Dog Food, 30 lbs.",
"attributes": [{ "name": "Weight", "value": "30.4 LBS" }],
"price": 77.99,
"list_price": 80.99,
"autoship_price": 74.09,
"first_autoship_price": 57.99,
"pickup_price": 77.99,
"online_quantity": 2106,
"inventory_status": "Available",
"is_discontinued": false,
"fulfillment": {
"pickup_in_store": true,
"same_day_delivery": true,
"autoship_eligible": true,
"in_store_only": false,
"online_only": false
},
"is_rx": false,
"is_rx_food": false,
"pet_type": "Dog"
}first_autoship_price is the price of the first Repeat Delivery order: $57.99, exactly $20 below $77.99. Across 48 sizes of 15 top-selling dry dog and cat foods, the first order was 35% off up to a $20 cap, so the 16 lb bag here ($54.99) got the full 35% and fell to $35.74. pickup_price equals price because Petco prices are national. The trimmed fields carry the label data: the ingredients start "Salmon, Rice, Barley, Canola Meal" and the guaranteed analysis "Crude Protein (Min) 26.0%". Passing the row's url answers faster than part_number. Our product calls took 2.7 to 24.7 s, so give them a 60-second timeout. The chart of all 48 sizes is in the best Petco product data APIs.
Step 3: Find the stores near a ZIP
curl -s https://api.scavio.dev/api/v1/petco/stores \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"zip": "60614", "limit": 10}'ZIP 60614 in Chicago returned 10 stores from 0.43 to 9.33 miles away. The first, as captured (Tuesday to Saturday hours trimmed; all were 09:00 to 21:00):
{
"store_id": "12286",
"store_number": "869",
"name": "CLYBOURN",
"store_type": "PETCO B&M",
"address": "2000 N Clybourn Ste 100",
"address2": null,
"city": "Chicago",
"state": "IL",
"zip": "60614",
"phone": "773-665-1368",
"latitude": 41.91752,
"longitude": -87.65916,
"distance_miles": 0.43,
"pickup_in_store": true,
"hours": {
"monday": { "open": "09:00", "close": "21:00" },
"sunday": { "open": "09:00", "close": "20:00" }
}
}Store inventory takes store_id, not store_number. limit goes up to 10.
Step 4: Check units on hand
curl -s https://api.scavio.dev/api/v1/petco/store-inventory \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"cat_entry_ids": ["531503", "24636"], "zip": "60614"}'With a ZIP, the nearest store answers and is returned as store. The captured response (store trimmed of distance, pickup flag and hours):
{
"data": {
"store_id": "12286",
"zip": "60614",
"store": {
"store_id": "12286",
"store_number": "869",
"name": "CLYBOURN",
"store_type": "PETCO B&M",
"address": "2000 N Clybourn Ste 100",
"address2": null,
"city": "Chicago",
"state": "IL",
"zip": "60614",
"phone": "773-665-1368",
"latitude": 41.91752,
"longitude": -87.65916
},
"count": 2,
"items": [
{ "cat_entry_id": "24636", "qty_available": 8, "alert_level": "GREEN", "in_stock": true },
{ "cat_entry_id": "531503", "qty_available": 0, "alert_level": "RED", "in_stock": false }
],
"missing_cat_entry_ids": []
},
"response_time": 11212,
"fetched_at": "2026-11-02T18:25:53.283Z",
"credits_used": 1
}The Clybourn store had 8 bags of Blue Buffalo Life Protection Formula (30 lbs.) and none of the 30 lb Purina bag. Send up to 10 ids per call. Every id must be a cat_entry_id: one unknown id empties the whole answer with a 404, which is not charged, so if a batch 404s, retry the ids one at a time.
Step 5: Loop over the stores
One call covers one store, so a metro check is a loop over step 3's store_id values. We checked the 10 top-selling dry dog foods at all 10 Chicago stores: 10 calls, 10 credits, 1.0 to 16.0 s each.
| Product (size checked) | Stores with stock | Units across 10 stores |
|---|---|---|
| WholeHearted Grain Free Beef and Pea, 40 lbs. | 9 | 57 |
| Blue Buffalo Life Protection Chicken and Brown Rice, 30 lbs. | 9 | 49 |
| Hill's Science Diet Sensitive Stomach and Skin, 30 lbs. | 9 | 42 |
| ORIJEN Original, 23.5 lbs. | 9 | 38 |
| Purina Pro Plan Sensitive Skin and Stomach, 30 lbs. | 8 | 29 |
| WholeHearted Active Performance, 45 lbs. | 6 | 18 |
| Nutro Natural Choice Lamb and Brown Rice Small Bites, 30 lbs. | 5 | 13 |
| The Honest Kitchen, Royal Canin Labrador 5+ and Stella and Chewy's Wild Red | 0 | 0 |
The Purina bag ranged from 0 at the nearest store to 6 at Chicago Diversey, 3.87 miles away. One store, North Orleans at 440 N Orleans St, returned 0 for all 10. A 0 does not say whether a store has sold out or never carries an item, and the three products at 0 everywhere are online best sellers, so check fulfillment.in_store_only and pickup_in_store before you alert on them.
All five endpoints
| Endpoint | What it returns | Credits |
|---|---|---|
/api/v1/petco/search | 48 products a page for a keyword: one-time, list and autoship price, rating, review count, ids, fulfillment flags, deal groups, every size with its prices, facets | 1 |
/api/v1/petco/category | The same listing for a petco.com category path or deal group | 1 |
/api/v1/petco/product | Every size: UPC, SKU, one-time, list, autoship, first-autoship and pickup price, online quantity, ingredients, guaranteed analysis, specifications, images | 1 |
/api/v1/petco/stores | Up to 10 stores nearest a ZIP with store_id, address, phone, distance and hours | 1 |
/api/v1/petco/store-inventory | Units on hand, GREEN, YELLOW or RED level and in_stock for up to 10 products at one store, by store_id or ZIP | 1 |
Prices are the same at every store, so there is no store parameter on search, category or product. A bare part number as a search query returns a 400; look it up with /product instead.
Getting started
- Sign up at dashboard.scavio.dev/sign-up: 50 free credits, no card required.
- Copy your API key from the dashboard.
- Send a POST to
/api/v1/petco/searchwith a query and your key as a Bearer token, then pass a row'scat_entry_idand a ZIP to/api/v1/petco/store-inventory.
Try the Petco API free in the playground first, or call it from Claude and other agents through the MCP server.
Reference: Petco API overview · search · category · product · stores · store inventory
Frequently asked questions
How do I check Petco inventory at a store?
On petco.com you select a store and read the pickup availability on each product page, one store at a time. From code, call Scavio's /api/v1/petco/store-inventory with up to 10 cat_entry_id values and a store_id or a ZIP; it returns qty_available, Petco's GREEN, YELLOW or RED level and in_stock for each product, for 1 credit.
Where do I find a Petco product's cat_entry_id?
Every search and category row has one, every size in its variations array has its own, and every variant in a product response has one. The store inventory endpoint takes cat_entry_id only. The part number at the end of a petco.com product URL is a different id, and passing it to store inventory returns a 404.
Does the API return Petco's autoship price?
Yes. Search and category rows carry autoship_price, the Repeat Delivery price for every order, which was 5% below the one-time price on all 48 sizes we checked on November 2, 2026. The product endpoint adds first_autoship_price, the first-order price: 35% off up to $20 that day.
Why does a Petco category call take so long?
Category and product calls read live from Petco and can take 25 to 30 seconds; ours took 2.7 to 24.7 s. Set a client timeout of at least 60 seconds. An occasional call times out upstream and returns a 502, which is not charged, so retry it.