Ecommerce Product Page Scraper

Extract product title, price, availability, SKU, UPC, images, ratings, and metadata from public ecommerce product URLs.

Data fields

FieldTypeDescription
urlstringValue exported as url.
finalUrlstring | nullValue exported as finalUrl.
statusCodeinteger | nullValue exported as statusCode.
titlestring | nullValue exported as title.
pricestring | nullValue exported as price.
currencystring | nullValue exported as currency.
availabilitystring | nullValue exported as availability.
skustring | nullValue exported as sku.

Input preview

urlsProduct page URLs
startUrlsLegacy product page URLs
maxItemsMaximum product pages
includeRawMetadataInclude raw metadata
renderJavascriptStart with browser rendering
autoBrowserFallbackAutomatic browser fallback

API and agents

This actor can be run through Apify API, datasets, webhooks, schedules, and the official Apify MCP server.

How this actor works

See example inputs, outputs, API usage, and practical limits before running this actor on Apify.

Open Apify page

Extract structured product snapshots from public ecommerce product page URLs. Paste product links and get normalized rows with title, price, availability, identifiers, images, ratings, breadcrumbs, metadata provenance, and per-URL errors when a page is blocked or missing.

Use this Actor for price monitoring, competitor analysis, product catalog enrichment, SEO audits, marketplace research, and automated checks where you already have product URLs.

Who is this for?

  • Ecommerce analysts comparing public prices and stock status across stores.
  • Price-monitoring operators who already maintain lists of product URLs.
  • SEO and content teams auditing product metadata, descriptions, images, and breadcrumbs.
  • Data teams enriching internal catalogs with public product page snapshots.
  • Dropshipping and marketplace researchers checking visible identifiers, availability, and price text.

Use cases

  • Monitor public prices and availability for a known set of competitor products.
  • Enrich a product database with titles, descriptions, images, and identifiers.
  • Audit product pages for missing structured metadata or empty descriptions.
  • Check stale product links and capture 404/error rows without failing the whole run.
  • Feed normalized product data into spreadsheets, dashboards, alerts, or agents.

Example input

{
  "urls": [
    "https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html",
    "https://books.toscrape.com/catalogue/tipping-the-velvet_999/index.html"
  ],
  "maxItems": 2,
  "includeRawMetadata": false
}

Example output

{
  "url": "https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html",
  "finalUrl": "https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html",
  "statusCode": 200,
  "title": "A Light in the Attic",
  "price": "£51.77",
  "currency": null,
  "availability": "In stock (22 available)",
  "sku": null,
  "upc": "a897fe39b1053632",
  "brand": null,
  "description": "It's hard to imagine a world without A Light in the Attic...",
  "ratingValue": null,
  "reviewCount": null,
  "images": [],
  "breadcrumbs": ["Home", "Books", "Poetry", "A Light in the Attic"],
  "structuredDataTypes": [],
  "sourceMethod": "dom",
  "renderModeUsed": "http",
  "attemptedRenderModes": ["http"],
  "warnings": [],
  "error": null,
  "fetchedAt": "2026-07-12T15:44:45.332Z"
}

What data can you extract?

Field Description
url Original product URL from your input.
finalUrl Final URL after redirects.
statusCode HTTP status code returned by the product page.
title Product title/name when visible.
price Price text or structured price value.
currency Currency from structured product metadata or product meta tags.
availability Stock/availability text or structured availability value.
sku SKU when published on the page.
upc UPC/GTIN identifier when published on the page.
brand Product brand when available.
description Product description or page meta description.
ratingValue Aggregate rating value when available.
reviewCount Aggregate review/rating count when available.
images Product image URLs found in structured data, social meta tags, or product image markup.
breadcrumbs Category/breadcrumb trail when visible.
structuredDataTypes Structured data types detected on the page.
sourceMethod Main extraction source: jsonLd, meta, dom, shopifyJson, or error.
renderModeUsed Successful route: fast HTTP, browser rendering, or same-origin Shopify product JSON.
attemptedRenderModes Ordered routes attempted for this URL.
warnings Non-fatal fallback or completeness notes.
error Per-URL diagnostic for a missing, blocked, unsupported, or failed page. Diagnostics are not charged as product rows.
fetchedAt ISO timestamp when the URL was processed.
rawMetadata Optional parsed metadata snippets when includeRawMetadata is enabled.

Verified public example tasks

These Apify Store tasks use small, QA-verified inputs and can be opened or cloned directly:

Input recipes

  • Smoke test: Run the default Books to Scrape URL with maxItems: 1.
  • Price monitoring sample: Paste 10-50 direct product URLs from public store pages and schedule the Actor daily or weekly.
  • Catalog enrichment: Export product URLs from your catalog, run the Actor, then join results by url or finalUrl.
  • Error audit: Include known old URLs and check statusCode plus error for missing or redirected product pages.

Tips for best results

  • Use direct public HTTP(S) product-detail URLs, not category, search, cart, or checkout URLs. Private-network addresses, credentials, and non-standard ports are rejected before the run starts.
  • Product fields vary by store. Empty fields mean the page did not expose that data clearly.
  • For blocked stores, try Apify Proxy settings and keep batches small while testing.
  • Keep automatic browser fallback enabled for mixed-store lists. Enable renderJavascript when every URL in a run is known to need client-side rendering.
  • Use sourceMethod to understand whether data came from structured metadata, meta tags, or page content.
  • Keep includeRawMetadata disabled unless you need debugging details; it can make rows larger.

Limits and caveats

  • This Actor extracts public page data only. It does not log in, solve CAPTCHAs, add items to cart, or access account-specific prices.
  • The Actor tries fast HTTP first, a same-origin Shopify product-data route when applicable, and bounded browser rendering for classified blocked or incomplete responses. A site can still deny every supported route; those pages remain uncharged diagnostics.
  • Automatic browser fallback does not silently enable Residential proxy traffic. Proxy use remains explicit through proxyConfiguration.
  • Redirect destinations are validated again. The Actor keeps a bounded pending-work checkpoint and RUN_SUMMARY record when the shared run deadline is near.
  • Universal product extraction is best-effort. Store-specific scrapers may be better for high-volume extraction from a single marketplace.

API usage

Node.js:

import { ApifyClient } from "apify-client";

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor("fetch_cat/ecommerce-product-page-scraper").call({
  urls: ["https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html"],
  maxItems: 1
});
console.log(run.defaultDatasetId);

Python:

from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("fetch_cat/ecommerce-product-page-scraper").call(run_input={
    "urls": ["https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html"],
    "maxItems": 1,
})
print(run["defaultDatasetId"])

cURL:

curl -X POST "https://api.apify.com/v2/acts/fetch_cat~ecommerce-product-page-scraper/runs?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"urls":["https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html"],"maxItems":1}'

MCP and AI agents

Use this Actor from MCP-compatible tools through the official Apify MCP Server.

claude mcp add --transport http apify "https://mcp.apify.com?tools=fetch_cat/ecommerce-product-page-scraper"
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=fetch_cat/ecommerce-product-page-scraper"
    }
  }
}

Example prompt: "Run Ecommerce Product Page Scraper for these three product URLs and summarize price, stock status, and missing fields."

Support

Open an issue from the Actor page if a run fails or output looks wrong. Include the run ID or run URL, input JSON, expected output, actual output, and one reproducible public URL.

Common questions

Questions and answers reused from the canonical actor README.

Can I export results?

Yes. Apify datasets support JSON, CSV, Excel, XML, RSS, and API access.

Why are some fields empty?

Stores expose different metadata. The Actor leaves unavailable fields empty instead of guessing.

Does it work for login-only or cart prices?

No. It only processes public product pages visible without private credentials.

What happens if a URL is invalid or blocked?

The Actor saves an error row with statusCode and/or error so one bad URL does not discard valid results beside it. A run with no verifiable product rows fails visibly.