Product Price & Availability Evidence API (JSON-LD)
Pricing
from $1.50 / 1,000 offer observations
Product Price & Availability Evidence API (JSON-LD)
Extract declared product offers, decimal prices, currencies and availability from public JSON-LD HTML, with hashes and explicit gaps. No browser or checkout assumptions.
Pricing
from $1.50 / 1,000 offer observations
Rating
0.0
(0)
Developer
Salih Can Kurnaz
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
14 days ago
Last modified
Categories
Share
Turn public product-page JSON-LD into selected, exportable offer rows: product name/SKU/brand, direct decimal price, declared currency, availability, and source block/pointer. Suitable for inexpensive price-declaration monitoring across storefront platforms. Unlike a general SEO metadata extractor, output has one row per inline offer and keeps AggregateOffer low/high ranges separate.
Quick start
{"urls":["https://scrapeme.live/shop/Bulbasaur/","https://scrapeme.live/shop/Ivysaur/"],"maxItemsPerPage":20}
Example sources are a public scraping demo, not customers or sales. Download the dataset as JSON, CSV or Excel. POST input to https://api.apify.com/v2/actors/soilair~public-product-offer-price-evidence-api/runs with your Apify authorization header, poll the returned run, and read dataset plus OUTPUT/SNAPSHOT. Never put API tokens inside a source URL.
What is returned
Recognizes lexical Product and inline Offer/AggregateOffer types, including schema.org HTTP/HTTPS type URLs and type arrays, anywhere within static JSON-LD object/list graphs. ProductGroup-only nodes are not expanded unless they contain explicit Product nodes. No JSON-LD context expansion, compact-prefix resolution, remote contexts, @id reference resolution or linked document fetching. Inline offers without a recognized explicit type are skipped with a coverage warning.
Offer declaredPrice is a nonnegative, plain decimal string from the direct price field. AggregateOffer yields declaredLowPrice/declaredHighPrice separately; it is not converted to a single purchasable price. Decimal commas, exponent notation, nonfinite values, negatives, booleans and unsupported structures yield null with row warnings. Currency is the original uppercase three-letter declaration, syntactically checked, not verified against a currency registry. A row with missing/unsupported price or currency is still a billable offer observation with warnings. priceSpecification is not used as a fallback; tax, delivery, unit pricing, discounts, exchange rates and price validity are not computed. URL and availability fields are source strings, not fetched, authenticated or independently verified.
These are publisher declarations, not checkout prices, measured stock quantities or product authenticity. Stale or inaccurate structured data can differ from the rendered page and checkout. No browser, login, captcha workaround, cart action, screenshots, availability guarantee or schema/rich-result validation. UTF-8 HTML decoding only; non-UTF-8 pages may show replacement characters. Related/recommended Product nodes may also appear; this is not a main-product classifier.
Coverage and changes
Up to five distinct normalized pages, 100 offer rows per page (default20), 50 JSON-LD blocks, 5000 traversed nodes per block and depth24. The HTTP decoded-body cap is 2 MiB per response. Invalid/duplicate-key/nonfinite/oversized blocks, unsupported offer references, missing inline offers and row caps are reported as incomplete coverage. A zero-offer page can be a successful zero-result observation; this does not prove absence of products. Always read OUTPUT.errors, sources, warnings and complete. complete describes only the declared bounded extraction, not a complete store catalog or verification of prices.
Pass SNAPSHOT.previousHashes as previousHashes on the next run. UNCHANGED/CHANGED compare selected declaration fields. Keys bind final source URL plus block/JSON pointer/offer position; markup reordering or redirects can create new identities. FIRST_SEEN means absent from your provided baseline, not a newly listed product. No global product matching, missing-row deletion inference, hidden state or automatic schedule. Rows include observedAt; no full description, reviews, seller profile, cookies or raw HTML is stored.
Pricing and requests
Publication price: $0.0015 per emitted offer observation ($1.50 per1000), plus $0.005 Actor start at256MB. Higher memory can multiply startup events. Platform usage is included in this event model. Failed pages emit no result event; startup can still apply. Missing-price offer rows can be charged. Budget-limited output reports PARTIAL_BUDGET and complete=false. Check effective Store pricing before running.
Public HTTP(S) ports80/443 only, no credentials, exclusively public DNS addresses, connection IP pinning, TLS hostname verification, at most five redirects, approximately95-second fetch budget. Fetches robots.txt and uses Python RobotFileParser; parser semantics may differ from actual crawlers. Disallowed/unavailable robots policy and source errors are not bypassed. No proxies or paid upstream. Only supplied pages, their HTTP redirects and corresponding robots files are fetched; product/offer URLs, images and remote contexts are never followed. Websites see the request and User-Agent. Input/results stay in your Apify storage under your retention settings; no additional tracking or customer-data export.
Developed with AI assistance. Fixture tests and public-demo/cloud checks qualify the stated behavior, not universal store compatibility. Support: share a run ID and the expected field, without credentials/private data.
References: https://schema.org/Product · https://schema.org/Offer · https://schema.org/AggregateOffer