Merchant Feed Offer Audit
Pricing
$0.50 / completed report
Merchant Feed Offer Audit
Compare merchant feed prices, currencies and stock against supplied Product JSON-LD snapshots. Exact variant IDs, explicit uncertainty, JSON/CSV/HTML evidence.
Pricing
$0.50 / completed report
Rating
0.0
(0)
Developer
Gilad Ronen
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
What does Merchant Feed Offer Audit do?
Audit merchant feed prices, currencies, and availability against supplied Product JSON-LD snapshots. Submit feed rows together with HTML or raw JSON-LD text from your crawl/export pipeline. The Actor returns an evidence-based decision for every row and downloadable JSON, evidence CSV, and HTML reports.
It runs entirely on supplied data. It does not visit URLs, execute JavaScript, fetch JSON-LD contexts, or inspect checkout pages. The data model follows Schema.org Product and Offer. A match means agreement with the supplied evidence; it does not certify Google Merchant Center approval.
Why use this audit?
Rerun a batch after a price upload, inventory change, or storefront theme release. Exact SKU and GTIN checks help identify variant mistakes before the evidence reaches another system. If both identifiers are supplied, both must match the same Product. The Actor never chooses the first Product, cheapest offer, or an AggregateOffer price range.
Apify API access, integrations, run monitoring, and scheduling can connect this audit to your existing export pipeline. Each run must receive the snapshots you intend to check.
How to use it
- Export up to 250 feed rows with string IDs, source URLs, and SKU and/or GTIN.
- Include the expected price and currency, availability, or currency alone. Use the exact sale price you want checked; there is no automatic sale selection.
- Supply one snapshot for each exact source URL. Choose either
htmlorjsonLd, wherejsonLdis a raw JSON string. Both cannot appear in one snapshot. - Run the Actor and review the row decisions. Download
evidence.csvfor a flat investigation queue orreport.htmlfor a standalone report. - Fix the feed or source markup outside the Actor, capture new snapshots, and rerun.
See the Input tab for configuration and examples/input.json for a synthetic batch with both matching and problematic offers.
Input and matching rules
records contains id, url, optional sku and gtin, and at least one expected comparison: price, currency, or availability. Price requires currency. IDs and identifiers remain strings, including leading zeros. GTIN input accepts 8, 12, 13, or 14 digits; it checks exact identity, not GS1 allocation or checksum validity. Missing identifiers produce ambiguity, since the URL alone cannot establish a variant.
pages contains url, exactly one of html or jsonLd, and an optional ISO 8601 fetchedAt timestamp with timezone. Timestamps are customer-supplied metadata, not verified freshness. Source URLs match exactly, including query, fragments, trailing slash, and case. Only HTTP(S) URLs without embedded credentials are accepted; none are fetched.
Prices use a dot decimal separator and up to 30 integer and 18 fractional digits. Expected prices must be strings. Numeric JSON-LD prices are parsed losslessly from raw text. 24.90 and 24.900 are equal; exponent notation, negative amounts, grouping separators, and currency symbols are unsupported. Currency codes are exact uppercase three-letter strings; no exchange conversion or ISO currency catalogue validation occurs.
Availability inputs are the four Merchant feed states: in_stock, out_of_stock, preorder, and backorder. Following Google's availability mapping, InStock/LimitedAvailability/OnlineOnly map to in_stock; Discontinued/InStoreOnly/OutOfStock/SoldOut map to out_of_stock; PreOrder/PreSale map to preorder; and BackOrder maps to backorder. Original terms remain in availabilityRaw; bare terms or HTTP(S) Schema.org URLs are accepted. Vehicle-only build_to_order is outside this release. Unknown availability remains incomplete. Every selected Offer must contain supported price, currency, and availability, even when your feed requests only one comparison.
The parser handles top-level arrays, @graph, embedded Products, and unique Offer @id references within the same snapshot. Products within ItemList/BreadcrumbList, itemListElement, and known related-product relationships are excluded, including nodes linked through those structures by @id. An identifier found only there produces explicit recommendation-only ambiguity. Root or graph Product evidence still does not prove that the page visibly presents that product as its primary item. Identical complete offers may form a consensus; all evidence remains in the report. Conflicting offers and multiple matching Product nodes remain ambiguous. SKU/GTIN matching is case-sensitive and does not trim or normalize identifiers. Repeated feed IDs preserve every occurrence with distinct row keys. Duplicate snapshot URLs and duplicate JSON-LD node definitions are never silently merged.
Output
One dataset item contains the complete report, summary, and rows array. The Feed row decisions view expands the rows for inspection. Use the dedicated evidence CSV for a flat export rather than a generic flattening of the nested dataset.
| Field | Meaning |
|---|---|
status | match, mismatch, ambiguous, or missing_evidence |
expected* / observed* | Feed expectations and a complete selected offer consensus |
issues | Stable finding codes, severity, explanation, and source locations |
evidence | Candidate offer values, source URL, snapshot timestamp, script index, JSON Pointer |
rowKey | Stable feed-ID-derived key plus occurrence number |
Observed consensus fields remain null when selection or evidence is unresolved. Candidate values remain available under evidence. Script and snapshot indices are zero-based; -1 means absent. JSON Pointers refer to each individual JSON-LD script document. The CSV has one row per evidence item or finding, so a feed row may appear more than once.
Downloads are OUTPUT (complete JSON), evidence.csv (spreadsheet-safe cells), and report.html (escaped, script-free standalone HTML). Open the HTML download locally. Reports exclude raw HTML and unrelated page content. The supplied input remains in the run's input storage according to your Apify retention settings.
Pricing and recovery
The initial price is $0.50 per completed report, covering up to 250 feed rows with platform usage included. There is one report-completed event and no separate startup or dataset-item event. Check the current Pricing tab before running. Findings do not add charges. A fresh run is a new billable report.
The Actor validates input and download sizes before publishing or charging. An insufficient event budget produces no report and no report event. The dataset JSON is the primary result. If interrupted while writing convenience downloads after the report charge, a resurrection verifies saved integrity and the input fingerprint, then recreates exports without a second report event. If the dataset write succeeded but its charge was interrupted, recovery charges the saved report once. This is recovery within the same run; starting a fresh run does not reuse another run's charge.
Limits and support
Limits are 250 records, 250 snapshots, 4 MB combined input JSON, 100 JSON-LD scripts per page, 10,000 parsed values per page, 64 levels of JSON-LD nesting, and 100 offers per matched Product. Full JSON must remain under 8 MB and each download under 9 MB; split unusually verbose evidence into smaller runs. The Actor uses 1024 MB memory and a recommended 180-second timeout.
ProductGroup links and variant inheritance are explicitly unsupported in this release. Their presence blocks a clean result for that snapshot; use a direct Product snapshot without group relationships if your pipeline can supply one faithfully. Arbitrary context aliases, conditional pricing (priceSpecification, eligible region/customer/quantity), Offer itemOffered relationships, non-Offer types, malformed JSON, and missing fields remain unresolved. The presence of priceSpecification is a conservative unsupported condition, even alongside a direct price; it is not a confirmed price mismatch. Page-wide malformed scripts or unsupported contexts block clean results even if another script contains a matching Product. This conservative behavior prevents omitted evidence from appearing trustworthy.
There is no CSV input, live crawling, currency conversion, visible-price inference, automatic feed repair, tax or shipping adjustment, personalization, offer-date eligibility evaluation, or Google cached-view/checkout prediction. Submit only snapshots you are authorized to process. Use the Issues tab for reproducible problems, preferably with a small sanitized example.