Costco Scraper API - Warehouse Prices & Deals avatar

Costco Scraper API - Warehouse Prices & Deals

Pricing

from $1.50 / 1,000 results

Go to Apify Store
Costco Scraper API - Warehouse Prices & Deals

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

JChaw

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

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 site to USBC and giving latitude and longitude instead 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-items suits small runs and can time out on large ones
  • For scheduled or full-catalogue scrapes, POST to /runs and read the returned defaultDatasetId
  • 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 }
}
FieldWhat it holds
name, brandProduct title and brand
price, was_price, is_on_saleCurrent price, original price, discount flag
multi_buy_deal, promotion_text, promotion_validityCostco's own promotional wording and its dates
unit_price, comparable_unit_priceDerived per-100 g, per-100 ml or per-unit pricing
package_size, parsed_package_size, normalized_package_sizePackage size, parsed and normalized
selling_typeby_weight or by_unit
image_url, product_urlProduct image and page link
product_id, item_numberCatalogue ID and the warehouse item number from the shelf tag
availability, member_onlyStock status and membership restriction
rating, rating_countCustomer rating and review count
location, location_name, location_postal_code, location_coordinatesThe resolved warehouse
store, currency, categoryStorefront, 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 g becomes 1008 g priced per 100 g. That puts Costco's bulk formats on the same footing as an ordinary supermarket pack.
  • Leaves package_size and comparable_unit_price as null where 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_text and promotion_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

FieldTypeDescription
sitestringCABC (costco.ca, CAD) or USBC (costco.com, USD). Default CABC
categoriesstring[]Department, subcategory or curated-list slugs; all for the entire catalogue
startUrlsstring[]Raw costco.ca or costco.com product, category or search URLs
search_termsstring[]Keyword queries; combined with categories they filter by name instead
postal_codestringResolves the nearest warehouse and sets the pricing region. Required, see below
warehouseIdstringA specific warehouse number. Requires postal_code as well
shipToStatestringOverride the province or state code (BC, ON, WA, and so on)
latitude, longitudestringResolve the warehouse from coordinates; this is how you select a US warehouse
on_sale_onlybooleanKeep only discounted products. Default false
max_itemsintegerStop 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")
  • latitude and longitude, which work for both countries and are how you pick a US warehouse
  • warehouseId, supplied together with postal_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

ActorChainsCoverage
Canadian Grocery Price Comparison API16, matched and ranked in one runNationwide
Loblaws, No Frills, Superstore & Maxi Scraper API - Canada12 Loblaw bannersEvery province, YT, NT
Save-On-Foods, PriceSmart & Urban Fare Scraper API - Canada4 Pattison Food Group bannersBC, AB, SK, MB
T&T Asian Supermarket Grocery Price Scraper API - CanadaT&TBC, AB, ON, QC
Costco Scraper API - Warehouse Prices & Deals (this Actor)Costco warehousesCanada 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.