ssh.autos

Catalog / Retail, marketplaces & classifieds

RETAIL, MARKETPLACES & CLASSIFIEDS · CANADA

Staples Canada Store Stock & Clearance Tracker

Staples Canada in-store stock near a postal code: one row per product and store with the live unit count, distance, regular and sale price, discount and clearance flag.

PER CALL · X402 / MPP From $0.02 per call 1 endpoint at api.ssh.autos. Pay in USDC, no account. See the endpoint
APIFY STORE Public actor Run it with your Apify account: bulk runs, schedules and exports. Open on Apify

About this data

Staples Canada in-store stock near a postal code: one row per product and store with the live unit count, distance, regular and sale price, discount and clearance flag. Look up SKUs or product links, or list clearance, sale, search or category items; track restocks and price drops.

From the actor’s Apify Store listing. The per-call endpoint may return a bounded subset; its own description is below.

Buy per call over x402

One endpoint at api.ssh.autos. Each call is one JSON POST, paid in USDC with no account or API key, and answered in the same HTTP response.

POST /v1/ca/staples/stock

Check up to five Staples Canada SKUs at up to four nearby stores, at most 20 product-store rows.

PRICE$0.02 per call, in USDC
RESULTOne JSON answer per call
PAYMENTx402 or MPP · no account

Returns published pickup quantities, stock status, pickup messages, store addresses and distance.

Product names, brands, links, photos and online retailer prices are included when the search index supplies them; priceScope identifies that price context.

No ongoing change ledger or product page crawl.

Input

Send a JSON body to POST https://api.ssh.autos/v1/ca/staples/stock.

FieldTypeRequiredNotes
postalCodestringoptional6–7 characters; default "M5V 3L9"
productsarray of stringsoptionalup to 5 items; default ["31307"]
maxStoresintegeroptional1–4; default 2

Returned fields

The answer is JSON: records, a list, and summary, the run status and counts. Each record has these 36 fields; a field the source does not publish comes back null.

36 fields per record
FieldTypeNotes
productIdstringStaples product id (Shopify product), as listed.
variantIdstringStaples variant id of this item, as listed.
skustringStaples item number (SKU).
brandstringBrand as listed.
urlstringProduct page on staples.ca.
imagestringMain product image link.
storeIdstringStaples store number.
storeNamestringStore name as the store locator gives it.
addressstringStore street address.
citystringStore city.
provincestringStore province code, for example ON.
postalCodestringStore postal code.
latitudenumberStore latitude.
longitudenumberStore longitude.
distanceKmnumberStraight-line distance in km from the search point (the exact point given, or the centre of the postal code area) to the store.
storeUrlstringStore page on stores.staples.ca.
quantityintegerUnits available for in-store pickup at this store, as Staples states it. Null when Staples gives no unit count for the pair, and on a row that is no longer listed (changeType gone).
stockStatusstringin_stock when quantity is above zero, out_of_stock at zero, null when no unit count is published, and not_listed on a gone row for a product that left the completed, unchanged product selection.
one of in_stock, out_of_stock, not_listed
pickupMessagestringPickup message exactly as Staples sends it, including its own spacing (currently always in French, for example 'Prêt en 2 h').
regularPricenumberPublished regular reference price in CAD; it may equal the current price or be unavailable.
salePricenumberCurrent online price in CAD. Staples prices are national; a store may differ at the till.
currencystringCAD when a price is present.
one of CAD
priceScopestringPrice context: Staples' retailer-wide online current and regular-reference prices. A store may charge a different till price. Gone rows can retain last-observed prices; scope alone does not assert a…
one of retailer_online
priceStoreIdstringShop whose specific price was observed. Always null for this actor: per-store stock is observed, shop-specific pricing is not.
one of
discountPctnumberDerived percent difference between the current regular reference and sale price, only when the regular reference is higher. Not an observed historical or pre-clearance price drop; otherwise null.
clearancebooleanTrue when Staples marks the item as clearance; null when product details could not be read.
saleLabelsarray of stringsSale, clearance and promotion tags Staples attaches to the item, verbatim (for example clearance_centre|en_CA).
productDetailsstringHow complete the product details are: full (name, brand, image, regular and sale price, clearance flag), basic (name and current price only, when the full details were unavailable this run), or null…
one of full, basic
observedAtstringWhen this run read the stock (UTC, ISO 8601).
changeTypestringChanges mode only: new, backInStock, outOfStock, stockChanged, priceChanged or gone. gone means the product left the same clearance, search or category listing (same search words, category and filter…
one of new, backInStock, outOfStock, stockChanged, priceChanged, gone
changeTypesarray of stringsChanges mode: every change seen on this row (a row can both restock and drop in price). gone appears only when the product left the same unchanged listing that this run read to the end. Empty in full…
previousQuantityintegerChanges mode: units at the last run, on stock changes and gone rows.
previousPricenumberChanges mode: sale price at the last run, on price changes and gone rows.
priceDropFromLastSeennumberChanges mode: how many CAD the price fell since the last run; null when it did not fall.
firstSeenAtstringChanges mode: first run that saw this product at this store.
lastSeenAtstringChanges mode: this run, or on a gone row the last run that saw it.

Example call

TERMINAL · $0.02 PER RUN
npx agentcash@latest fetch https://api.ssh.autos/v1/ca/staples/stock -m POST -b '{"products": ["31307"], "postalCode": "M5V 3L9", "maxStores": 1}'

The example values come from the API spec or the actor’s own sample input. Running it is a paid call.

What is and isn’t charged

Free

  • Invalid input (422), busy (503), source failure (502), timeout (504) and calls whose client hung up are never charged.
  • Invalid input and source failures are not charged.

Prefer a subscription? Run it on Apify

This data source is a public actor on the Apify Store: Staples Canada Store Stock & Clearance Tracker. Run it with your Apify account and plan for larger, scheduled or exported runs; it may offer more input options than the per-call endpoint.

Open on Apify

How x402 payment works

  1. Your client sends the request. The API answers 402 Payment Required with the price and where to pay.
  2. The client pays from its own wallet: USDC on Base or Solana over x402, or over MPP on Tempo. No account, sign-up or API key.
  3. The client retries with the payment attached and gets the JSON answer in the same call. You are only charged for answers.

The AgentCash CLI in the example does all three steps for you and pays from your AgentCash wallet. Any x402 or MPP client works the same way.

Machine-readable: openapi.json · llms.txt

Some links to Apify are affiliate links. We may earn a commission if you sign up and become a paying customer.