# Product Page Scraper: URL to JSON (Price, Stock, GTIN) (`mrslm_data/product-page-json`) Actor

Paste product URLs from any online store and get clean JSON: name, brand, price, currency, stock, SKU, GTIN, rating, images, variants. No AI guessing.

- **URL**: https://apify.com/mrslm_data/product-page-json.md
- **Developed by:** [shawn slam](https://apify.com/mrslm_data) (community)
- **Categories:** E-commerce, AI, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.40 / 1,000 product pages

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Product Page Scraper: URL to JSON (Price, Stock, GTIN)

**Turn any product page URL into clean JSON: name, brand, price, currency, stock, SKU/GTIN, rating, images and variants. $0.50 per 1,000 pages.**

Works across Shopify, WooCommerce, Magento, BigCommerce and custom stores by reading the product data that stores publish for Google (schema.org JSON-LD and microdata) and social previews (OpenGraph). No AI guessing, no browser, so it is fast and cheap.

### Quick start

1. Press **Start**. The form is already filled with this example input, so the first run returns real rows in under a minute:

```json
{
  "startUrls": [
    {
      "url": "https://www.allbirds.com/products/mens-tree-runners"
    },
    {
      "url": "https://porterandyork.com/product/whole-turkey-12-14lb/"
    }
  ]
}
```

2. Swap in your own values, or call the Actor through the Apify API, Make, Zapier, n8n or the Python/JS clients with the same JSON.
3. Download the results as JSON, CSV or Excel from the **Output** tab, or schedule the run to repeat.

### What you get

| domain | name | sku | price | currency | availability | ratingValue | reviewCount | source |
|---|---|---|---|---|---|---|---|---|
| nutribullet.com | nutribullet Cold Press Juicer | ECOM01731 | 149.99 | USD | InStock | 4.7 | 19 | json-ld |

Sample row (real output, trimmed):

```json
{
  "url": "https://www.nutribullet.com/shop/juicers/cold-press-juicer/",
  "domain": "nutribullet.com",
  "name": "nutribullet Cold Press Juicer",
  "brand": null,
  "sku": "ECOM01731",
  "gtin": null,
  "mpn": null,
  "category": null,
  "description": "Make fresh juice in one go with the nutribullet® Cold Press Batch Juicer. Equipped with a 1.5Qt hopper, this masticating juicer fits multiple whole ingredients at once, allowing you to make larger batches of juice with l…",
  "price": 149.99,
  "priceMax": 149.99,
  "currency": "USD",
  "availability": "InStock",
  "itemCondition": null,
  "seller": null,
  "priceValidUntil": null,
  "ratingValue": 4.7,
  "reviewCount": 19,
  "images": [
    "https://nbmedia.imgix.net/NBJ50500AK_NB-Cold-Press-Juicer_Ecomm_PDP-1_Config_1500x1201.jpg?auto=compress%2Cformat&ixlib=php-3.3.0"
  ],
  "variantCount": 0,
  "variants": [],
  "canonicalUrl": "https://www.nutribullet.com/shop/juicers/cold-press-juicer/",
  "siteName": "nutribullet",
  "source": "json-ld",
  "scrapedAt": "2026-10-27T07:46:47.249Z"
}
```

### Who uses this

- **Price monitoring**: a list of product URLs across many shops, checked daily.
- **Feeds and catalogs**: turn supplier product pages into structured rows.
- **AI agents and RAG**: give your agent clean product facts instead of raw HTML.
- **SEO teams**: audit whether product pages publish complete structured data (`source` shows which kind).

### How to use it

1. Paste product page URLs into **Product page URLs** (or upload a list). Press **Start**.
2. Optional: turn off **Include description** or **Include variants** for leaner rows.

### Pricing

**$0.50 per 1,000 product pages** (Silver $0.45, Gold $0.40) plus a $0.00005 start fee. Pages with no product data, missing pages and blocked pages are **free**.
Worked example: 2,000 URLs checked daily for a month = 60,000 pages = **$30**.

### FAQ

**What if a page has no structured data?** You get a free row saying so. The Actor never invents a price from page text.

**Does it work on Amazon/Walmart?** Large marketplaces often block automated visits; this Actor does not bypass bot checks. It works best on brand and independent stores.

**Can I schedule it?** Yes. Create a Task with your input and add a Schedule (daily, weekly, any cron). Each run gets a fresh dataset you can download or fetch via API.

**Does it work with Make, Zapier, n8n or Google Sheets?** Yes. Use the Apify app in Make/Zapier/n8n ("Run Actor" then "Get dataset items"), or the Google Sheets integration on the run's Integrations tab to append rows to a sheet automatically.

**How do I keep costs predictable?** Set *Max results*, or the *Maximum cost per run* in run options. The Actor stops cleanly at the cap and you are never billed past it.

### Is it legal?

This Actor only reads pages and feeds that the website itself publishes to every visitor without a login. It obeys each site's robots.txt, keeps a polite request rate, and never tries to get past logins, paywalls, captchas or bot checks. It does not collect personal data such as emails, phone numbers or names of private individuals. You are responsible for how you use the data: follow the source site's terms, copyright and the privacy laws that apply to you (GDPR, CCPA, etc.). This tool is independent and not affiliated with or endorsed by the platforms it reads.

# Actor input Schema

## `startUrls` (type: `array`):

Product pages from any online store (Shopify, WooCommerce, Magento, BigCommerce, custom...). One page = one clean JSON row.

## `includeDescription` (type: `boolean`):

Plain-text product description, cut to 1,000 characters.

## `includeVariants` (type: `boolean`):

Sizes/colors with their own price, SKU and stock when the page lists them (up to 100).

## `maxResults` (type: `integer`):

Hard cap on pages saved (and paid for). 0 = no cap.

## `proxyConfiguration` (type: `object`):

Optional. Some big retailers need a residential proxy.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.allbirds.com/products/mens-tree-runners"
    },
    {
      "url": "https://porterandyork.com/product/whole-turkey-12-14lb/"
    }
  ],
  "includeDescription": true,
  "includeVariants": true,
  "maxResults": 0,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

All results as a dataset (JSON, CSV, Excel and more via the API or Console).

## `summary` (type: `string`):

Counts of results, targets that succeeded or failed, and the stop reason.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        {
            "url": "https://www.allbirds.com/products/mens-tree-runners"
        },
        {
            "url": "https://porterandyork.com/product/whole-turkey-12-14lb/"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("mrslm_data/product-page-json").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "startUrls": [
        { "url": "https://www.allbirds.com/products/mens-tree-runners" },
        { "url": "https://porterandyork.com/product/whole-turkey-12-14lb/" },
    ] }

# Run the Actor and wait for it to finish
run = client.actor("mrslm_data/product-page-json").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://www.allbirds.com/products/mens-tree-runners"
    },
    {
      "url": "https://porterandyork.com/product/whole-turkey-12-14lb/"
    }
  ]
}' |
apify call mrslm_data/product-page-json --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,mrslm_data/product-page-json"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/BtYWQYfozXs82KbKl/builds/2D83N3J1lNpWNPvmj/openapi.json
