Costco Scraper - Products, Prices, Reviews & Warehouses avatar

Costco Scraper - Products, Prices, Reviews & Warehouses

Pricing

from $2.20 / 1,000 results

Go to Apify Store
Costco Scraper - Products, Prices, Reviews & Warehouses

Costco Scraper - Products, Prices, Reviews & Warehouses

Extract Costco products, prices, ratings, reviews, categories, and warehouse locations across eight markets. Export structured rows and pay per delivered row plus a run start fee.

Pricing

from $2.20 / 1,000 results

Rating

0.0

(0)

Developer

kane liu

kane liu

Maintained by Community

Actor stats

1

Bookmarked

10

Total users

6

Monthly active users

2 days ago

Last modified

Security

Limited permissions

Share

Costco Scraper

Extract Costco products, prices, reviews, categories, and warehouse locations across eight markets as rows you can export.

  • Search products or browse categories and Hot Buys.
  • Get product identifiers, prices, ratings, availability, and images when shown.
  • Collect reviews, category entries, or warehouse addresses as separate row types.
  • Choose the United States, Canada, Mexico, United Kingdom, Australia, Japan, South Korea, or Taiwan.
  • Pay only for rows delivered: $3.00 per 1,000 rows on the Free plan, plus a start fee.

What does Costco Scraper do?

Costco Scraper collects publicly available shopping data from costco.com, costco.ca, costco.com.mx, costco.co.uk, costco.com.au, costco.co.jp, costco.co.kr, and costco.com.tw. Use one target per run for price tracking, assortment research, review analysis, or location lookup.

  • Product listings: search with keyword, browse with categoryUrl or categorySlug, or choose a topic.
  • Product details: use productUrl or itemId.
  • Reviews: choose productReviews; each review is a separately billed row, not an automatic addition to a product row.
  • Locations and categories: choose warehouseLocations or categoryTree.
  • Optional enrichment: enrichDetails is off by default. It adds available product details to existing listing rows, rather than creating extra rows.

This is an unofficial tool, not affiliated with Costco. It does not place orders or access private member accounts.

What data can you extract from Costco?

Fields depend on the selected mode and what Costco provides. Missing values may be absent or null. rowType distinguishes products, reviews, warehouses, and categories.

Product rows

FieldDescriptionExample
rowTypeEntity typeproduct
itemIdCostco item number4000376434
skuAdditional product identifier, when suppliednull
titleProduct namePaper towels, 12 rolls
urlProduct linkhttps://www.costco.com/p/-/ninja-crispi-portable-air-fryer/4000376434
priceDisplayed price, not a checkout quote119.99
currencyCurrency associated with the priceUSD
brandBrand shown for the productNinja
ratingAverage product rating4.7
reviewCountNumber of ratings or reviews shown125
availabilityAvailability information when suppliedInStock
imagesProduct image links, when available[]
pdpAdditional details on enriched listing rows{"brand":"Ninja"}
browseCountrySelected marketUS
sourceSurfaceType of page supplying the rowkeywordSearch
scrapedAtCollection timestamp2026-10-24T00:00:00Z

Review rows

FieldDescriptionExample
rowTypeEntity typereview
reviewIdReview identifierexample-review-1
itemIdReviewed item's number, when supplied10024438
titleReview headingUseful size
textReview content when provided under this fieldFits the shelf well.
ratingIndividual review score4
authorPublic reviewer display nameJane Doe
submissionTimeReview publication timestamp2026-10-20T12:00:00Z

Warehouse rows

FieldDescriptionExample
rowTypeEntity typewarehouse
nameWarehouse nameExample warehouse
urlWarehouse or locator linkhttps://www.costco.com/warehouse-locations
addressAvailable street, locality, region, postal code, and country{"locality":"Seattle","country":"US"}
phonesPublic warehouse phone entries[{"value":"+1 555 0100","type":"phone"}]

Category rows

FieldDescriptionExample
rowTypeEntity typecategory
nameCategory nameGrocery & Household
slugCategory path identifiergrocery-household
urlCategory linkhttps://www.costco.com/grocery-household.html
depthCategory level, when available1
parentIdParent category identifier, when suppliednull
pathCategory hierarchy, when supplied["grocery-household"]

How to scrape Costco

  1. Open Costco Scraper in Apify Console.
  2. Choose browseCountry and fill one target, such as keyword.
  3. Set maxResults to 3 for a small first run.
  4. Click Start and wait for completion.
  5. Open the dataset and download your rows or read them through the API.

Empty input starts the form's example: paper towels in CA (Canada), limited to 3 rows. This is a billed example, not a free preview. With mode set to auto, filling one target selects its matching mode. Explicit warehouseLocations and categoryTree runs need no target and do not become examples.

Fill keyword, such as paper towels. Set browseCountry for the desired market; use words appropriate to that market.

Category browse

Fill categoryUrl or categorySlug. Full links must match browseCountry. A US example is grocery-household.

Specialty browse

Set topic to hotBuys, whatsNew, warehouseOnly, or grocery. Topic availability varies by market.

Product detail

Fill productUrl or itemId. This selects productDetail automatically and returns details for one product, not a list of unrelated products.

Product reviews

Select mode: productReviews explicitly, then fill productUrl or itemId. Without this mode, a product target selects product details instead.

Warehouse locations

Select mode: warehouseLocations. Add zip to request a postal-code search where supported. Results are warehouse entries, not product-level stock guarantees.

Category tree

Select mode: categoryTree to get category entries. The returned list is not a guarantee of an exhaustive or fully current catalog.

What to fill in

FieldWhat to enterDefault
modeauto or one of the seven modes aboveauto
browseCountryUS, CA, MX, UK, AU, JP, KR, TWUS
keywordOne search phraseNone; form sample paper towels
queryOlder name for keywordEmpty
productUrlProduct link matching the marketEmpty
itemIdProduct item numberEmpty
slugOptional product-name path for an item numberEmpty
categoryUrlCategory link matching the marketEmpty
categorySlugCategory path without the domainEmpty
topicOne of the four specialty topicsEmpty
maxResultsRow limit, from 1 to 50070; form sample 3
zipPostal code for location contextEmpty
warehouseWarehouse identifier for location contextEmpty
deptDepartment filter for supported keyword searchesEmpty
sortrelevance, priceAsc, priceDesc, newest, or ratingSite order
currencyOptional currency setting; not currency conversionBy market
pageStarting page, from 1 to 2001
maxPagesPage cap per part of up to 70 rows, from 1 to 50No explicit cap
enrichDetailsAdd available details to listing rowsfalse
enrichLimitListings to enrich per part, from 0 to 505

Keyword search:

{
"keyword": "paper towels",
"browseCountry": "US",
"maxResults": 3
}

Category browse:

{
"categorySlug": "grocery-household",
"maxResults": 3
}

Specialty browse:

{
"topic": "hotBuys",
"maxResults": 3
}

Product detail:

{
"productUrl": "https://www.costco.com/p/-/ninja-crispi-portable-air-fryer/4000376434",
"maxResults": 1
}

Product reviews:

{
"mode": "productReviews",
"itemId": "10024438",
"maxResults": 3
}

Warehouse locations:

{
"mode": "warehouseLocations",
"zip": "98101",
"maxResults": 3
}

Category tree:

{
"mode": "categoryTree",
"maxResults": 3
}

maxItems and limit are accepted aliases for maxResults. Unknown fields alone do not fail input validation: close misspellings are corrected where possible; other unknown fields are ignored with a note.

When targets conflict, precedence is productUrl, categoryUrl, itemId, categorySlug, topic, then keyword or query. Targets belonging to another mode are ignored, not collected as additional inputs. Use separate runs for separate targets.

The INPUT_REPORT record in the default key-value store records input interpretation, corrections, ignored fields, and example use. Invalid targets or market links stop before row collection with INVALID_INPUT: and a field-specific explanation. No rows are charged for input-validation failures; the start fee still applies.

Output example

Illustrative product row; prices and availability are not current offers:

{
"rowType": "product",
"itemId": "4000376434",
"sku": null,
"title": "Ninja Crispi 5-in-1 Portable Glass Air Fry Cooking System",
"url": "https://www.costco.com/p/-/ninja-crispi-portable-air-fryer/4000376434",
"price": 119.99,
"currency": "USD",
"rating": 4.7,
"browseCountry": "US",
"sourceSurface": "keywordSearch"
}

Export the dataset as JSON, CSV, Excel, XML, RSS, or an HTML table. Keep identifiers as text when importing into a spreadsheet.

Why use this Costco scraper?

  • Pay for delivered rows. Product, review, category, and warehouse rows use the same per-row price.
  • Keep delivered data. Rows already written to the dataset remain available after a stop. Recoverable partial results can be delivered; a stop before delivery may leave no rows.
  • Understand failures. Input errors explain what to fix; RUN_SUMMARY and, on failure, ERROR_SUMMARY provide run information.
  • Keep missing data honest. Unavailable fields stay empty rather than becoming invented prices or contact details.
  • Compare markets deliberately. Select a market per run and keep browseCountry with your exports.
  • No proxy setup. You do not need to set up proxies.

How much does it cost to scrape Costco?

The Actor uses pay-per-event pricing. At the default 512 MB memory, the start fee is $0.005: one start event per GB, with a minimum of one event. Platform usage is included in these prices.

Apify planStart fee at 512 MBPrice per rowPrice per 1,000 rows
Free$0.005$0.003$3.00
Starter$0.005$0.003$3.00
Scale$0.005$0.0026$2.60
Business$0.005$0.0022$2.20
Platinum$0.005$0.002$2.00
Diamond$0.005$0.0016$1.60
  • maxResults applies to the single input in a run, defaults to 70, and accepts up to 500. Searches, category listings, specialty listings, and reviews can continue in parts of up to 70 rows.
  • Category trees and warehouse lists return at most 70 rows. Availability and page limits may reduce the result count.
  • Free Apify plan users are limited to 200 rows per run and 10 runs of this Actor.
  • Maximum cost per run (maxTotalChargeUsd in the API) limits the whole run. A budget too small for one row can leave an empty dataset after the start fee.

Example: one search delivering 5 rows on the Free plan at 512 MB costs 5 × $0.003 + $0.005 = $0.020. Requesting 5 rows does not guarantee 5 matches; row charges follow delivery.

What happens when the run timeout is too short

A short timeout can cause the run to pause instead of failing while results are pending. It shows ABORTED with a message like "Queued on the collection backend; this run will resume automatically when results are ready (about Ns)."

When ready, the same run resumes automatically, delivers into the same dataset, and finishes as SUCCEEDED if collection succeeds. A resume can report "Resumed: delivering N rows." Already delivered rows are skipped, so they are not delivered or charged twice.

This can happen at most 3 times per run. Keep the default timeout of 3600 seconds to reduce interruptions. Automatic resumption is not a promise that every manually aborted or failed run will recover.

The synchronous API endpoints run-sync and run-sync-get-dataset-items wait at most 300 seconds and can return an empty dataset while a run is paused. For longer work, start asynchronously and read the dataset after SUCCEEDED, or use an ACTOR.RUN.SUCCEEDED webhook.

Use with AI agents and the API

Apify MCP server

Add this remote tool in a compatible client such as Claude, ChatGPT, Cursor, or VS Code:

https://mcp.apify.com?tools=lentic_clockss/costco-scraper

Sign in through Apify OAuth, or send Authorization: Bearer <YOUR_APIFY_TOKEN>. The tool returns run and dataset IDs; the agent can read rows with get-dataset-items. Clients without remote support can use npx @apify/actors-mcp-server --tools lentic_clockss/costco-scraper with APIFY_TOKEN set locally.

Example prompt: "Search Costco US for paper towels, return at most 3 products, and show titles, prices, and links."

Apify API

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("lentic_clockss/costco-scraper").call(
run_input={"keyword": "paper towels", "maxResults": 3}
)
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row)
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('lentic_clockss/costco-scraper').call({
keyword: 'paper towels', maxResults: 3
});
const { items: rows } = await client.dataset(run.defaultDatasetId).listItems();
console.log(rows);

For asynchronous HTTP access, send the input as JSON to POST https://api.apify.com/v2/acts/lentic_clockss~costco-scraper/runs with your bearer token. After successful completion, read GET https://api.apify.com/v2/datasets/<datasetId>/items?format=json. If a waiting client returns an ABORTED run, apply the timeout guidance above rather than treating its dataset as final.

Integrations

Use Apify Schedules for recurring runs. Connect results through the Integrations tab to Google Sheets, Make, Zapier, n8n, Slack, Airtable, or your own webhook.

FAQ

Public availability does not remove your responsibilities. Check applicable terms and data-protection law for your use. Processing personal data, including reviewer names, requires a lawful basis. This Actor does not grant permission on Costco's behalf.

Why did my run end as ABORTED?

Read the status message. A queued run may resume automatically as described above. A manual abort or other interruption is different; check the run details before restarting and creating another billable run.

How many results can I get?

Set maxResults up to 500 for one input. The Free plan caps each run at 200 rows; warehouse and category-tree modes stop at 70. Source availability, page limits, and your spending limit can reduce delivery.

Why are some fields empty?

Not every page exposes a price, rating, image, phone number, or availability value. Listing enrichment may fill some fields, but does not guarantee them. An empty field is not a zero price or confirmed lack of stock.

Why do itemId and sku differ?

itemId identifies the item in the product link. sku is another identifier supplied with product details and may differ. Keep both when provided; neither is guaranteed on every row.

No. Target fields accept single values. Competing target fields select one mode rather than creating a batch. Start separate runs for separate keywords, products, categories, or markets.

Are Same Day, Pharmacy, and China covered?

No. Same Day, Business Delivery, Pharmacy, Travel, and Photo are outside scope, as is China. Supported markets refer to Costco shopping sites, not all Costco services.

Why did a successful run return no rows?

A search with no matches can finish successfully with an empty dataset. Review the input and RUN_SUMMARY. Unavailable review data or collection failures are not a guarantee that the product has no reviews.

Limitations

  • Market selection does not guarantee every mode, topic, department filter, or sort order works identically across countries.
  • Prices and availability reflect exposed information, not member-specific discounts, checkout totals, or guaranteed warehouse inventory.
  • Reviews and product-detail enrichment may be incomplete. Enriched listing details can appear inside pdp.
  • Category entries may be incomplete or outdated; the category-tree mode is not a full-catalog product download.
  • One target is processed per run. There is no documented date-window input or guaranteed automatic search-word translation.

More e-commerce and marketplace scrapers from the same publisher:

Browse all of our scrapers at apify.com/lentic_clockss.

Support

Report a problem or request a field through the Issues tab of this Actor's page. Include the run ID and the input you used.