Costco
Overview
E-commerce warehouse club. Product search, detail, reviews, warehouse locator, delivery options, cart management, and product comparison.
Workflows
Find and evaluate a product
searchProducts(query) → product listings with itemNumber
getProductDetail(itemNumber) → price, description, attributes, rating
getProductReviews(productId) → review summary, rating distribution, recommendation %
Compare products before buying
searchProducts(query) → find candidates → itemNumbers
compareProducts(itemNumbers) → side-by-side price, brand, rating, attributes
getDeliveryOptions(itemNumber) → shipping/pickup availability per product
Check warehouse availability
findWarehouses(latitude, longitude) → nearby warehouses with warehouseId
getWarehouseDetails(warehouseId) → full hours, services, amenities
checkWarehouseStock(itemNumber, warehouseNumber) → in-store vs online-only, price
Browse and discover
searchSuggestions(query) → autocomplete completions to refine search
browseCategory(category) → products by department with available filters
Cart management (requires login)
searchProducts(query) → itemNumber
addToCart(itemNumber, quantity) → orderItemId
updateCartQuantity(orderItemId, quantity) → update quantity
removeFromCart(orderItemId) → remove item
Operations
| Operation |
Intent |
Key Input |
Key Output |
Notes |
| searchProducts |
search by keyword |
query |
itemNumber, title, brands, pills |
entry point, paginated (pageSize, offset) |
| searchSuggestions |
autocomplete |
query |
term, type |
entry point |
| getProductDetail |
product details |
itemNumber ← searchProducts |
price, rating, attributes, buyable |
price=0 means "see in cart" |
| getMultipleProducts |
batch product lookup |
itemNumbers ← searchProducts |
price, brand, rating per item |
|
| compareProducts |
side-by-side comparison |
itemNumbers ← searchProducts (2+) |
price, brand, rating, attributes |
|
| getProductReviews |
review summary |
productId ← searchProducts |
totalReviews, averageRating, distribution |
navigates page (BV widget) |
| getDeliveryOptions |
shipping/pickup check |
itemNumber ← searchProducts |
options[].type, available, membershipRequired |
types: shipping, business_delivery, warehouse_pickup |
| browseCategory |
browse by department |
category |
products, availableFilters |
entry point, paginated |
| findWarehouses |
nearby warehouses |
latitude, longitude |
warehouseId, name, address, hours, services |
entry point |
| getWarehouseDetails |
full warehouse info |
warehouseId ← findWarehouses |
hours, services[].name/hours, has* booleans |
|
| checkWarehouseStock |
in-store availability |
itemNumber ← searchProducts, warehouseNumber ← findWarehouses |
inWarehouse, onlineOnly, price |
|
| addToCart |
add to cart |
itemNumber ← searchProducts |
orderItemId |
write, requires login. Navigates to PDP; scrapes JWT + SKU |
| removeFromCart |
remove from cart |
orderItemId ← addToCart |
success |
write, requires login. Navigates to /CheckoutCartView |
| updateCartQuantity |
change cart qty |
orderItemId ← addToCart, quantity |
success |
write, requires login. Navigates to /CheckoutCartView |
Quick Start
# Search for products
openweb costco exec searchProducts '{"query": "laptop"}'
# Get product details (use itemNumber from search)
openweb costco exec getProductDetail '{"itemNumber": "100978861"}'
# Get review summary
openweb costco exec getProductReviews '{"productId": "4000373324"}'
# Find nearby warehouses
openweb costco exec findWarehouses '{"latitude": 37.35, "longitude": -121.95, "limit": 3}'
# Check delivery options
openweb costco exec getDeliveryOptions '{"itemNumber": "100978861", "zipCode": "95050"}'
# Browse a category
openweb costco exec browseCategory '{"category": "Electronics"}'
# Compare products side by side
openweb costco exec compareProducts '{"itemNumbers": ["100978861", "4000373324"]}'
# Cart workflow (requires logged-in Costco session in managed Chrome)
openweb costco exec addToCart '{"itemNumber": "100978861", "quantity": 1}'
# → returns { orderItemId: <int>, orderId, ... } — pass orderItemId to next step
openweb costco exec updateCartQuantity '{"orderItemId": "<from above>", "quantity": 2}'
openweb costco exec removeFromCart '{"orderItemId": "<from above>"}'
Known Limitations
- Cart write ops require login. Managed Chrome must have a live Costco session (cookies copied from default Chrome). Without it, addToCart returns 403 from Akamai.
- Cart edits are page-bound. removeFromCart/updateCartQuantity scrape
catalogEntryId and the WCS authToken from /CheckoutCartView hidden inputs each call — they only work for items currently in the user's cart.
- Two distinct authToken formats. PDP add uses a Microsoft B2C JWT (sessionStorage
authToken_<userHash>); cart edits use a WCS userId,signature token (cart-page hidden input). They are not interchangeable.
1---2name: costco3description: Costco4---5# Costco67## Overview8E-commerce warehouse club. Product search, detail, reviews, warehouse locator, delivery options, cart management, and product comparison.910## Workflows1112### Find and evaluate a product131. `searchProducts(query)` → product listings with `itemNumber`142. `getProductDetail(itemNumber)` → price, description, attributes, rating153. `getProductReviews(productId)` → review summary, rating distribution, recommendation %1617### Compare products before buying181. `searchProducts(query)` → find candidates → `itemNumber`s192. `compareProducts(itemNumbers)` → side-by-side price, brand, rating, attributes203. `getDeliveryOptions(itemNumber)` → shipping/pickup availability per product2122### Check warehouse availability231. `findWarehouses(latitude, longitude)` → nearby warehouses with `warehouseId`242. `getWarehouseDetails(warehouseId)` → full hours, services, amenities253. `checkWarehouseStock(itemNumber, warehouseNumber)` → in-store vs online-only, price2627### Browse and discover281. `searchSuggestions(query)` → autocomplete completions to refine search292. `browseCategory(category)` → products by department with available filters3031### Cart management (requires login)321. `searchProducts(query)` → `itemNumber`332. `addToCart(itemNumber, quantity)` → `orderItemId`343. `updateCartQuantity(orderItemId, quantity)` → update quantity354. `removeFromCart(orderItemId)` → remove item3637## Operations3839| Operation | Intent | Key Input | Key Output | Notes |40|-----------|--------|-----------|------------|-------|41| searchProducts | search by keyword | query | itemNumber, title, brands, pills | entry point, paginated (pageSize, offset) |42| searchSuggestions | autocomplete | query | term, type | entry point |43| getProductDetail | product details | itemNumber ← searchProducts | price, rating, attributes, buyable | price=0 means "see in cart" |44| getMultipleProducts | batch product lookup | itemNumbers ← searchProducts | price, brand, rating per item | |45| compareProducts | side-by-side comparison | itemNumbers ← searchProducts (2+) | price, brand, rating, attributes | |46| getProductReviews | review summary | productId ← searchProducts | totalReviews, averageRating, distribution | navigates page (BV widget) |47| getDeliveryOptions | shipping/pickup check | itemNumber ← searchProducts | options[].type, available, membershipRequired | types: shipping, business_delivery, warehouse_pickup |48| browseCategory | browse by department | category | products, availableFilters | entry point, paginated |49| findWarehouses | nearby warehouses | latitude, longitude | warehouseId, name, address, hours, services | entry point |50| getWarehouseDetails | full warehouse info | warehouseId ← findWarehouses | hours, services[].name/hours, has* booleans | |51| checkWarehouseStock | in-store availability | itemNumber ← searchProducts, warehouseNumber ← findWarehouses | inWarehouse, onlineOnly, price | |52| addToCart | add to cart | itemNumber ← searchProducts | orderItemId | write, requires login. Navigates to PDP; scrapes JWT + SKU |53| removeFromCart | remove from cart | orderItemId ← addToCart | success | write, requires login. Navigates to /CheckoutCartView |54| updateCartQuantity | change cart qty | orderItemId ← addToCart, quantity | success | write, requires login. Navigates to /CheckoutCartView |5556## Quick Start5758```bash59# Search for products60openweb costco exec searchProducts '{"query": "laptop"}'6162# Get product details (use itemNumber from search)63openweb costco exec getProductDetail '{"itemNumber": "100978861"}'6465# Get review summary66openweb costco exec getProductReviews '{"productId": "4000373324"}'6768# Find nearby warehouses69openweb costco exec findWarehouses '{"latitude": 37.35, "longitude": -121.95, "limit": 3}'7071# Check delivery options72openweb costco exec getDeliveryOptions '{"itemNumber": "100978861", "zipCode": "95050"}'7374# Browse a category75openweb costco exec browseCategory '{"category": "Electronics"}'7677# Compare products side by side78openweb costco exec compareProducts '{"itemNumbers": ["100978861", "4000373324"]}'7980# Cart workflow (requires logged-in Costco session in managed Chrome)81openweb costco exec addToCart '{"itemNumber": "100978861", "quantity": 1}'82# → returns { orderItemId: <int>, orderId, ... } — pass orderItemId to next step83openweb costco exec updateCartQuantity '{"orderItemId": "<from above>", "quantity": 2}'84openweb costco exec removeFromCart '{"orderItemId": "<from above>"}'85```8687## Known Limitations8889- **Cart write ops require login.** Managed Chrome must have a live Costco session (cookies copied from default Chrome). Without it, addToCart returns 403 from Akamai.90- **Cart edits are page-bound.** removeFromCart/updateCartQuantity scrape `catalogEntryId` and the WCS `authToken` from `/CheckoutCartView` hidden inputs each call — they only work for items currently in the user's cart.91- **Two distinct authToken formats.** PDP add uses a Microsoft B2C JWT (sessionStorage `authToken_<userHash>`); cart edits use a WCS `userId,signature` token (cart-page hidden input). They are not interchangeable.