ssh.autos

Catalog / Retail, marketplaces & classifieds

RETAIL, MARKETPLACES & CLASSIFIEDS · PERU

Peru Grocery Basket Aggregator (Metro, Wong, PlazaVea, Vivanda)

Compare a grocery basket across Peru's four largest chains (Metro, Wong, PlazaVea, Vivanda): cheapest chain per item, basket totals per chain, and where switching stores saves money.

PER CALL · X402 / MPP From $0.01 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

Compare a grocery basket across Peru's four largest chains (Metro, Wong, PlazaVea, Vivanda): cheapest chain per item, basket totals per chain, and where switching stores saves money. Prices in PEN. Use specific item names with size hints (e.g. 'aceite vegetal 1L') for best results.

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/grocery/compare

One grocery item priced across Peru's Metro, Wong, PlazaVea and Vivanda, with the cheapest chain. Prices in PEN.

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

Input

Send a JSON body to POST https://api.ssh.autos/v1/pe/grocery/compare.

FieldTypeRequiredNotes
basketarray of stringsrequiredexactly 1 item

Returned fields

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

32 fields per record
FieldTypeNotes
recordTypestringoffer = a priced candidate found at a chain; unmatched = nothing plausible at any chain (marker record with null offer fields).
one of offer, unmatched
itemstringBasket item text exactly as given in the input.
itemIndexintegerZero-based position of the item in the basket.
storestringChain slug (metro, wong, plazavea, vivanda); null on unmatched records.
productIdstringStorefront product id. The Cencosud chains (metro/wong/vivanda) share one id space; PlazaVea has its own.
productKeystringComposite unique key: source:id (e.g. metro.pe:34266); join on this rather than the bare productId (PlazaVea occupies a separate id space).
namestringProduct name as shown by the chain.
brandstringBrand name when the chain declares one.
categorystringDeepest category path segment as shown by the chain (Spanish).
pricenumberCurrent selling price in PEN (S/).
listPricenumberReference (pre-discount) price in PEN when the chain reports one.
currencystringISO currency of every record — always PEN for the four Peru grocery chains.
unitMultipliernumberChain's unit multiplier for the SKU (1 for single units; e.g. 0.4 for a pack priced per 0.4 kg).
availableQuantitynumberStore's reported available quantity for the default seller. NOTE: 99999 is the VTEX platform default that masquerades as stock — treat it as 'effectively unlimited', not real inventory. Real counts o…
measurementUnitstringChain's measurement unit abbreviation (e.g. 'un', 'kg').
gramsnumberNet mass in grams: explicit pack label first, else kg multiplier × 1000. Null when unknown.
pieceCountnumberPieces per pack parsed from the name (e.g. '30un', 'x4'); null when not stated.
pricePerKgnumberNormalized PEN per kilogram. Explicit pack weight takes precedence over kg ordering increment; otherwise kg multiplier. Null when unknown.
pricePerLnumberPEN per litre for a confidently matched liquid in basket mode.
matchConfidencenumberBasket-mode evidence score: 1 for requested size, 0.9 for size-normalized food; null in legacy mode. Not a calibrated probability.
basketPricenumberEstimated PEN cost for requested canonical quantity, not checkout pack price. Used in basket-mode totals.
pricePerPiecenumberprice / pieceCount when the pack count is known and > 1; null otherwise.
inStockbooleanChain's availability flag for the default seller.
urlstringPublic product page URL.
imageUrlstringPrimary product image URL when present.
searchQuerystringThe basket item text this offer was found with.
categoryResolvedbooleanTrue when this chain's search was scoped to a category (the explicit categoryHint when given, else the item text itself resolved against the chain's own tree); false when scoping was attempted but no…
matchedbooleanTrue when this offer was linked to the same basket item at another chain (shared productId within Cencosud, or normalized name+unit match against PlazaVea).
matchBasisstringHow this offer was linked: productId (shared Cencosud id), name-unit (PlazaVea normalized name+mass/count vs a Cencosud reference), alone (best effort, no cross-chain link).
one of productId, name-unit, alone, canonical-category-unit
isCheapestbooleanTrue for the cheapest offer of this item across chains, compared on the item's compareBasis.
compareBasisstringWhat the cheapest comparison used for this item: perKg when every offer has a normalized per-kg price; perUnit when every offer has a piece count; nominal otherwise.
one of perKg, perUnit, nominal, basket
collectedAtstringUTC ISO-8601 collection timestamp.

Example call

TERMINAL · $0.01 PER RUN
npx agentcash@latest fetch https://api.ssh.autos/v1/pe/grocery/compare -m POST -b '{"basket": ["arroz extra 5kg"]}'

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: Peru Grocery Basket Aggregator (Metro, Wong, PlazaVea, Vivanda). 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.