Catalog / Retail, marketplaces & classifieds
RETAIL, MARKETPLACES & CLASSIFIEDS · PERU
Metro Peru Price, Promo & Stock Tracker
Product price search on Metro, Peru's leading grocery chain.
About this data
Product price search on Metro, Peru's leading grocery chain. Search by keyword and get structured records: name, brand, price, list price, stock, unit data, price-per-kg and URLs.
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/pe/metro/products
Records include names, brands, categories, PEN prices and list prices, discount and promotion fields, SKU and seller stock signals, availability, images and product URLs.
Fetch one catalog search page with up to 20 Metro Peru products.
Unit-price fields appear when supplied by the source.
Calls use the fixed Metro storefront and return current observations without history storage or category summaries.
Input
Send a JSON body to POST https://api.ssh.autos/v1/pe/metro/products.
| Field | Type | Required | Notes |
|---|---|---|---|
search | string | optional | 1–120 characters; default "huevos" |
maxResults | integer | optional | 1–20; default 10 |
Returned fields
The answer is JSON: records, a list of up to 20, and summary, the run status and counts. Each record has these 48 fields; a field the source does not publish comes back null.
48 fields per record
| Field | Type | Notes |
|---|---|---|
id | string | Storefront's product id; not guaranteed unique when datasets are merged, prefer productKey. |
productKey | string | Composite unique key: source:id (e.g. metro.pe:34075). |
url | string | Public product page URL on Metro Peru (www.metro.pe). |
name | string | Product name as shown by the store. |
brand | string | Brand name when the store declares one. |
category | string | Deepest category path segment as shown by Metro Peru (Spanish). |
price | number | Current selling price in the store's local currency (PEN); null when the store shows no price. |
listPrice | number | Reference (pre-discount) price in the store's local currency when higher than price. |
currency | string | ISO currency code for Peru (PEN); determined by the store config, never an input. |
unitMultiplier | number | Store's unit multiplier for the SKU (1 for single units; e.g. 0.4 for a pack priced per 0.4 kg). |
measurementUnit | string | Store's measurement unit abbreviation (e.g. 'un', 'kg'). |
availableQuantity | number | Store's available quantity for the default seller; 99999 means effectively unlimited; null when the store reports none. |
pricePerKg | number | Normalized price per kilogram in the store's local currency. A labelled pack weight overrides a smaller positive kg ordering increment; otherwise kg multiplier. For kg SKUs, selected SKU weight label… |
inStock | boolean | Store's availability flag for the default seller. |
imageUrl | string | Primary product image URL when present. |
store | string | Store the record came from — Metro Peru for this record (slug 'metro'). |
searchQuery | string | Search term the record was found with. |
categoryResolved | boolean | True when the optional category input uniquely resolved and scoped the search; false when it fell back to unscoped search; null when no category input was given. |
source | string | Source website hostname (metro.pe). |
collectedAt | string | UTC ISO-8601 collection timestamp. |
skuId | string | — |
unitPriceBasis | string | — |
historyStatus | string | — |
discountAmount | number | — |
discountPercent | number | — |
unitPrice | number | — |
previousPrice | number | — |
priceChange | number | — |
priceChangePercent | number | — |
daysSinceLastChange | number | — |
onPromo | boolean | — |
newSku | boolean | — |
removedSku | boolean | — |
promoStarted | boolean | — |
promoEnded | boolean | — |
backInStock | boolean | — |
outOfStock | boolean | — |
promoNames | array | — |
installments | array | — |
sellerStock | array | — |
skuSignals | array | — |
rowType | string | — |
removalReason | string | — |
count | integer | — |
pricedCount | integer | — |
medianPrice | number | — |
promoShare | number | — |
unitPriceSource | string | one of name, measurement, none |
Example call
npx agentcash@latest fetch https://api.ssh.autos/v1/pe/metro/products -m POST -b '{"search": "huevos", "maxResults": 5}'
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
You pay the call price for
- An answer, including a definitive “not found” or an empty result.
- Confirmed no matches returns records: [] (charged: it is an answer).
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: Metro Peru Price, Promo & Stock 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.
How x402 payment works
- Your client sends the request. The API answers
402 Payment Requiredwith the price and where to pay. - 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.
- 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