Costco Scraper API - Warehouse Prices & Deals
Pricing
from $1.50 / 1,000 results
Costco Scraper API - Warehouse Prices & Deals
Extract Costco prices and product data from costco.ca and costco.com — sale prices, discounts, package sizes, normalized unit pricing, images and item numbers. Pick a warehouse by postal code for regional pricing. Browse any department, paste product URLs, or search. Export as JSON, CSV or Excel.
Pricing
from $1.50 / 1,000 results
Rating
0.0
(0)
Developer
JChaw
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Costco price and product data from Costco Canada and Costco US, priced at the warehouse you pick.
The Costco Scraper API returns prices, discounts, promotional windows, derived unit prices and warehouse item numbers, with no membership, no login and no browser.
- Storefronts: costco.ca in CAD, costco.com in USD
- Every row: name, brand, price, was-price, sale flag, promotion text and dates, derived unit price, package size, image, product URL, item number, availability, rating, warehouse details
- Catalogue: 43 selectable entries, from a single subcategory up to all ~11,000 products
- Setup: no membership, no login, no API key
Costco's assortment differs by province, so a BC run and an Ontario run return different products for the same query.
Run it
Paste this into the Input tab (switch to JSON view) and hit Start:
{"site": "CABC","categories": ["grocery-household"],"postal_code": "V6B 1V4","max_items": 1000}
Rows stream into Output as they arrive. Download from Storage → Dataset as JSON, CSV or Excel.
Three things to change from there:
- Take the whole catalogue with
"categories": ["all"]and"max_items": 0 - Keep only discounts with
"on_sale_only": true - Scrape Costco US by swapping
sitetoUSBCand givinglatitudeandlongitudeinstead of a postal code
Selecting a department also scrapes everything nested beneath it.
From the API
Grab a token at console.apify.com/settings/integrations:
curl -X POST \"https://api.apify.com/v2/acts/sunny_eternity~costco-scraper/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"site": "CABC", "categories": ["grocery-household"], "postal_code": "V6B 1V4", "max_items": 100}'
run-sync-get-dataset-itemssuits small runs and can time out on large ones- For scheduled or full-catalogue scrapes, POST to
/runsand read the returneddefaultDatasetId - Official JavaScript and Python clients work too
What you get back
{"store": "Costco","currency": "CAD","category": "grocery-household","name": "Ruffles Potato Chips Variety Pack, 36 × 28 g","brand": "Ruffles","price": 17.49,"was_price": 20.99,"is_on_sale": true,"multi_buy_deal": "$3.50 OFF","promotion_text": "$3.50 OFF","promotion_validity": "Valid for orders placed 08/03/26 to 08/30/26.","unit_price": "1008g, $1.74/100g","comparable_unit_price": 1.74,"package_size": "1008g","parsed_package_size": { "size": 1008, "unit": "g" },"parsed_unit_price": { "value": 1.74, "quantity": 100, "unit": "g", "unit_type": "weight" },"selling_type": "by_weight","image_url": "https://bfasset.costco-static.com/.../4160094-894__1?auto=webp&format=jpg","product_url": "https://www.costco.ca/p/-/ruffles-potato-chips-variety-pack-36-x-28-g/4000363385","product_id": "4000363385","item_number": "4160094","availability": "IN_STOCK","member_only": false,"rating": 4.3,"rating_count": 128,"location": "552","location_name": "Vancouver BC","location_postal_code": "V6B 1V4","location_coordinates": { "lat": 49.278, "lng": -123.11 }}
| Field | What it holds |
|---|---|
name, brand | Product title and brand |
price, was_price, is_on_sale | Current price, original price, discount flag |
multi_buy_deal, promotion_text, promotion_validity | Costco's own promotional wording and its dates |
unit_price, comparable_unit_price | Derived per-100 g, per-100 ml or per-unit pricing |
package_size, parsed_package_size, normalized_package_size | Package size, parsed and normalized |
selling_type | by_weight or by_unit |
image_url, product_url | Product image and page link |
product_id, item_number | Catalogue ID and the warehouse item number from the shelf tag |
availability, member_only | Stock status and membership restriction |
rating, rating_count | Customer rating and review count |
location, location_name, location_postal_code, location_coordinates | The resolved warehouse |
store, currency, category | Storefront, currency, and the category scraped |
Export as JSON, CSV or Excel, pull it through the Apify API, schedule recurring runs, or push it into Zapier, Make, Google Sheets and Airbyte.
Why this Actor
- 705 runs across the suite in the last 30 days, none ended in a failed state. Run stats are public on the Apify API; figures from August 2026.
- Supplies unit prices Costco does not publish. Costco exposes no unit price and no package-size field, so the Actor derives both from the product title, which Costco consistently suffixes with the size (
", 1 kg","36 × 28 g","21-pack"). - Collapses multipacks to total contents, so
36 × 28 gbecomes1008 gpriced per 100 g. That puts Costco's bulk formats on the same footing as an ordinary supermarket pack. - Leaves
package_sizeandcomparable_unit_priceasnullwhere a title carries no parseable size, such as gift cards, furniture and apparel, which keeps a bad number out of your comparison. - Never reports an empty run as a success. Costco's catalogue API answers with zero results when no location is supplied, and reports success while doing it. This Actor checks for a location up front and stops with a clear message.
- Takes no membership, no login and no browser. It works over plain HTTP, and its only runtime dependency is the Apify SDK.
- Accepts raw Costco URLs: paste a product, category or search link and the Actor works out what to do with each one.
- Covers both storefronts from one input shape and one output schema.
What people build with it
- Bulk vs. supermarket price studies, using derived per-100 g pricing to compare a Costco multipack against a regular pack
- Deal trackers built on
is_on_sale,was_price,promotion_textandpromotion_validity - Regional assortment research, comparing what a BC warehouse stocks against Ontario or a US state
- CPG monitoring of a brand's Costco price, item number and rating over time
- AI shopping agents that need grounded warehouse-club prices
- Product databases keyed by
item_number, the number printed on the shelf tag
Input
| Field | Type | Description |
|---|---|---|
site | string | CABC (costco.ca, CAD) or USBC (costco.com, USD). Default CABC |
categories | string[] | Department, subcategory or curated-list slugs; all for the entire catalogue |
startUrls | string[] | Raw costco.ca or costco.com product, category or search URLs |
search_terms | string[] | Keyword queries; combined with categories they filter by name instead |
postal_code | string | Resolves the nearest warehouse and sets the pricing region. Required, see below |
warehouseId | string | A specific warehouse number. Requires postal_code as well |
shipToState | string | Override the province or state code (BC, ON, WA, and so on) |
latitude, longitude | string | Resolve the warehouse from coordinates; this is how you select a US warehouse |
on_sale_only | boolean | Keep only discounted products. Default false |
max_items | integer | Stop after N products; 0 means no limit. Default 1000 |
The 43 category entries cover all, departments, subcategories and Costco's curated lists such as New Items, Treasure Hunt and Offers Ending Sunday.
A location is required
Costco's catalogue API answers with an empty catalogue when no location is supplied, so the Actor requires one of:
postal_code, geocoded automatically for Canadian postal codes (site: "CABC")latitudeandlongitude, which work for both countries and are how you pick a US warehousewarehouseId, supplied together withpostal_code
Examples
Discounted grocery items only:
{ "site": "CABC", "categories": ["grocery-household"], "postal_code": "M5H 2N2", "on_sale_only": true }
A single product from its URL:
{ "site": "CABC", "postal_code": "V6B 1V4", "startUrls": ["https://www.costco.ca/p/-/scotties-premium-facial-tissue-21-pack/4000376464"] }
Costco US, warehouse resolved from coordinates:
{ "site": "USBC", "latitude": "47.6062", "longitude": "-122.3321", "search_terms": ["olive oil"] }
The entire Costco Canada catalogue, roughly 11,000 products:
{ "site": "CABC", "categories": ["all"], "postal_code": "V6B 1V4", "max_items": 0 }
FAQ
How do I scrape Costco prices? Give a postal_code (or latitude and longitude) plus either categories, search_terms or startUrls. The Run it input above is a working example.
Do I need a Costco membership? No. The Actor reads Costco's public catalogue, which takes no account, no membership and no login.
Does it return warehouse-specific prices? It returns prices for the region the warehouse sits in. Costco varies price and assortment at the province and state level, so two warehouses in the same province generally return the same catalogue.
Can I scrape Costco US? Yes. Set "site": "USBC" and supply latitude and longitude, which is the supported way to select a US warehouse. Prices come back in USD.
Where does the unit price come from? Costco publishes none, so the Actor derives it from the product title, which Costco suffixes with the size. Multipacks are collapsed to total contents, so 36 × 28 g becomes 1008 g priced per 100 g.
Why is comparable_unit_price null on some rows? Titles with no parseable size, such as gift cards, furniture and apparel, return null rather than a guessed number.
Is there an official Costco API? No. Costco publishes no public product or pricing API.
How many products are in the full catalogue? Costco Canada runs to roughly 11,000 products with categories: ["all"] and max_items: 0.
How do I track prices over time? Schedule the Actor daily or weekly in Apify, keep each run's dataset, and compare price per item_number. The Actor returns current prices and stores no history itself.
Is scraping Costco legal? Scraping publicly available product and price information is generally legal. Complying with Costco's terms of service and the law in your jurisdiction remains your responsibility, so keep request volume reasonable.
Canadian grocery Actors
| Actor | Chains | Coverage |
|---|---|---|
| Canadian Grocery Price Comparison API | 16, matched and ranked in one run | Nationwide |
| Loblaws, No Frills, Superstore & Maxi Scraper API - Canada | 12 Loblaw banners | Every province, YT, NT |
| Save-On-Foods, PriceSmart & Urban Fare Scraper API - Canada | 4 Pattison Food Group banners | BC, AB, SK, MB |
| T&T Asian Supermarket Grocery Price Scraper API - Canada | T&T | BC, AB, ON, QC |
| Costco Scraper API - Warehouse Prices & Deals (this Actor) | Costco warehouses | Canada and US |
All four retailer Actors emit the same 21 core fields, among them name, price, was_price, is_on_sale, unit_price, comparable_unit_price, package_size, selling_type and the location set. Their datasets concatenate without a mapping layer. Chain-specific extras such as item_number sit alongside those fields.
Feedback
Found a bug or have technical feedback? Open an issue on the Actor's Issues tab.