Shopify Variant Feed Auditor — Price, Stock & Screenshots avatar

Shopify Variant Feed Auditor — Price, Stock & Screenshots

Pricing

$20.00 / 1,000 variant audits

Go to Apify Store
Shopify Variant Feed Auditor — Price, Stock & Screenshots

Shopify Variant Feed Auditor — Price, Stock & Screenshots

Audit Shopify product variants against your Google Shopping feed. Compare price and stock with Shopify data, JSON-LD and the rendered page. Get evidence, screenshots and clear mismatch or inconclusive results.

Pricing

$20.00 / 1,000 variant audits

Rating

0.0

(0)

Developer

Aristide Kamara

Aristide Kamara

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

18 days ago

Last modified

Categories

Share

Shopify Variant Feed Auditor

Check whether a Shopify landing page actually shows the variant, price and availability in your Google Shopping product feed. Get a structured diagnosis, an HTML evidence report, a spreadsheet-safe CSV and optional screenshots.

Built for Shopping specialists and agencies checking products before promotions, after theme changes, or during recurring catalogue reviews.

Independent diagnostic tool. Not affiliated with Shopify or Google. A passing audit is not a guarantee of Merchant Center approval.

Try it

The default example is a clearly labelled synthetic demonstration. It requests no websites and charges no audit events. Normal platform usage may still apply.

{ "demoMode": true }

For a live audit, turn off Demo mode and provide products from a store you are authorized to inspect:

{
"demoMode": false,
"products": [
{
"id": "blue-bag-42",
"link": "https://your-store.example/products/bag?variant=123456789",
"variantId": "123456789",
"sku": "BAG-BLUE",
"price": "49.90 USD",
"availability": "in_stock"
}
],
"maxProducts": 25,
"renderPages": true,
"captureScreenshots": true,
"locale": "en-US"
}

Replace the fictional URL, variant and SKU with your own data. For a product with multiple variants, supply a numeric variantId, a ?variant= URL, or a unique SKU. Contradictory identities are reported rather than guessed. The browser checks the original landing URL; the Actor never silently fixes a URL that preselects the wrong variant.

Alternatively, provide feedUrl pointing to a public CSV, TSV or JSON array. Each row uses the fields above. Feed URLs and inline products are mutually exclusive. Limit: 500 rows and 4 MB; split larger catalogues into batches. Extra feed columns are ignored. XML feeds and authenticated feeds are not supported.

What is checked

  1. Feed values: explicit ISO currency and decimal price, availability, variant identity and optional sale interval.
  2. Shopify variant: exact ID/SKU in the public Ajax product data, price where currency can be verified, and purchasability.
  3. Structured data: a Product/Offer matched to the same variant by ID or exact SKU. Ambiguous or conflicting offers remain unverified.
  4. Rendered page: selected variant, one visible current price, and a recognized purchase-control availability state.

Rendered extraction targets Shopify Dawn-compatible product layouts. Use priceSelector for a different price element inside the main product section. A custom selector does not add support for an otherwise unsupported variant selector or purchase control. English add-to-cart/sold-out labels are recognized initially; other labels can make the rendered stock check inconclusive.

Availability uses in_stock, out_of_stock, preorder or backorder. Shopify's purchasable flag alone does not prove a preorder/backorder state.

For promotions, provide sale_price and optionally sale_price_effective_date, for example 2026-11-20T00:00:00Z/2026-11-30T00:00:00Z. The sale must be lower than the regular price and use the same currency. Start is inclusive, end exclusive. Without an interval, a supplied sale price is active.

Understand your results

StatusMeaning
passAll requested comparisons completed without a discrepancy or unresolved warning.
failAt least one definite discrepancy or invalid input was found. Inspect individual checks for coverage.
inconclusiveA block, ambiguous extraction, unsupported layout, missing evidence or resource limit prevented a complete conclusion.

Each row contains productId, resultId, url, checkedAt, expected, observations, findings, checks, billable, isDemo, requestCount and durationMs. Screenshots, when saved, are referenced by screenshotKey in this run's key-value store. billable describes eligibility for an audit charge, not proof of payment.

Findings have stable codes such as RENDERED_VARIANT_MISMATCH, SHOPIFY_PRICE_MISMATCH, JSONLD_PRICE_MISMATCH, PRODUCT_PAGE_MISSING and JSONLD_UNVERIFIED, with expected and observed values when available.

Open the output links:

  • REPORT: readable HTML with expected and observed values.
  • EXPORT: CSV with spreadsheet formulas neutralized.
  • SUMMARY: status counts and audit event count.
  • SNAPSHOT: compact state for the next run.
  • CHANGES: produced when previousResults is supplied. Inconclusive rows are excluded from resolution claims.

For recurring monitoring, schedule the Actor and pass the previous SNAPSHOT in previousResults. Keep separate snapshots for separate stores. Connect the dataset to your own n8n/Make workflow or use Apify's integrations to deliver reports. The Actor itself does not send messages or modify products.

Pricing and cost controls

The launch price is $0.02 per completed variant audit ($20 per 1,000), with platform usage included for customers. The live Pricing tab is authoritative. The paid event is variant-audited, once for each completed, billable product audit. A successful check with no issues also counts. Definite missing product pages are useful completed diagnostics. Invalid input, inconclusive results and synthetic demonstrations do not trigger an audit event. There is no Actor-start fee or automatic dataset-row fee.

Set Maximum total charge in Apify and start with a small maxProducts. Default concurrency is one, maximum two. Each product has a bounded request count, response size and time budget. Duplicate identical product IDs are checked once; conflicting duplicates reject the input.

Application-level charge attempts are persisted before calling the official SDK. An interrupted, uncertain charge is not attempted again on resume. Storage delivery and charging are separate operations; resultId is stable within a run and can be used to deduplicate deliveries after network interruptions. Unchanged products are still audits and may be charged on subsequent runs.

Coverage and limits

  • Supports public Shopify product pages with /products/handle URLs and accessible Ajax data. Other commerce platforms are outside scope.
  • Uses the default anonymous storefront market. Locale controls parsing/browser language; it does not select the network country. Explicit currency/country/market query overrides are currently inconclusive.
  • No customer login, member prices, discount-code application, checkout, shipping, tax calculation, subscription-price validation or Merchant Center account access.
  • Product-page crawl restrictions are respected. Public HTTP(S) only, ports 80/443. Private-network targets and unsafe redirects are rejected; DNS is pinned on each connection.
  • Chromium requests are routed through the bounded public transport. Images, fonts, media, WebSockets and non-GET requests are blocked. Evidence screenshots show the audited text/layout and can omit imagery. Consent and custom scripts can limit coverage.
  • Missing data is never treated as proof of a match. A fail can coexist with incomplete secondary checks; inspect checks and findings.
  • Screenshots and reports are stored in the user's run storage. Share only what you intend to disclose.

Support

Open an issue on this Actor with a redacted example input, run ID and finding code. Do not post API tokens, private feeds or customer credentials. Prefer a shareable public product URL and expected behavior.

Development

Node.js 24 recommended. npm ci, npm run check, npm run build, then npm start. For rendered checks install Chromium using npx playwright install chromium. Apify input is read from the standard storage/key_value_stores/default/INPUT.json locally. Run npm run test:live for a bounded check against the public Shopify Dawn demonstration store.