# Product Data for AI Shopping Agents (`dynamict3ch/product-data-for-ai-shopping-agents`) Actor

Extracts clean, structured product data — price, brand, stock, rating, reviews — from any e-commerce page via schema.org/JSON-LD. Consistent, null-safe JSON built for AI shopping agents and RAG pipelines. Works across stores, not locked to one retailer.

- **URL**: https://apify.com/dynamict3ch/product-data-for-ai-shopping-agents.md
- **Developed by:** [Jigar Mehta](https://apify.com/dynamict3ch) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 product scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Product Data for AI Shopping Agents

Extracts e-commerce product data and normalizes it into one consistent,
null-safe schema — built for feeding AI shopping agents, RAG pipelines,
and price/catalog pipelines a data source they can actually trust.

### The problem this solves

Every e-commerce site structures its product pages differently. An AI
agent (or a script) trying to read raw HTML across multiple retailers
gets inconsistent results — different field names, missing data, broken
parsing on every redesign. This Actor reads structured data instead of
guessing from layout: `schema.org`/JSON-LD first (what most SEO-conscious
stores already embed for Google), falling back to Open Graph tags when
JSON-LD isn't present.

### Input

- **Product page URLs** — a list of URLs to process
- **Max pages to process** — safety limit per run (default 100)

### Output

One record per product, always the same shape:

```json
{
  "id": "SKU123",
  "name": "Product Name",
  "brand": "Brand",
  "price": 29.99,
  "currency": "USD",
  "availability": "InStock",
  "rating": 4.6,
  "reviewCount": 128,
  "url": "https://example.com/products/...",
  "imageUrl": "https://example.com/img.jpg",
  "description": "...",
  "embeddingText": "Name — Brand — Description",
  "source": "json-ld",
  "scrapedAt": "2026-09-11T04:01:52.791Z"
}
```

`source` tells you which extraction path fired — `"json-ld"` (richer:
includes brand, rating, reviews) or `"og-fallback"` (thinner, but still
usable — every field is present, explicitly `null` when unavailable, so
you never have to defensively check for missing keys).

### Why JSON-LD first

Reading structured markup the site already maintains for Google's own
crawler means far less breakage than scraping raw DOM — no per-site CSS
selectors to fix every time a theme changes.

### Using it with an AI agent

Point an agent's tool call at this Actor with a list of product URLs and
get back clean, structured data ready to embed, compare, or reason over —
no HTML parsing on the agent's side.

### Pricing

Pay-per-event: charged per product record returned, not per page crawled
or per run. No charge for pages that don't contain product data.

### Known limitation

Works on pages that carry `schema.org`/JSON-LD or Open Graph product
markup. Sites that render everything client-side in JavaScript without
either will return no data — there's no headless browser in this version.

# Actor input Schema

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

List of product page URLs to extract structured data from. Works best on pages carrying schema.org/JSON-LD Product markup (most Shopify, WooCommerce, and SEO-conscious stores have this).

## `maxRequestsPerCrawl` (type: `integer`):

Safety limit on number of pages processed in one run.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://mejuri.com/ca/en/products/bia-mini-hoops"
    }
  ],
  "maxRequestsPerCrawl": 100
}
```

# Actor output Schema

## `products` (type: `string`):

Crawled and normalized product records from the default dataset.

# 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://mejuri.com/ca/en/products/bia-mini-hoops"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("dynamict3ch/product-data-for-ai-shopping-agents").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://mejuri.com/ca/en/products/bia-mini-hoops" }] }

# Run the Actor and wait for it to finish
run = client.actor("dynamict3ch/product-data-for-ai-shopping-agents").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://mejuri.com/ca/en/products/bia-mini-hoops"
    }
  ]
}' |
apify call dynamict3ch/product-data-for-ai-shopping-agents --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,dynamict3ch/product-data-for-ai-shopping-agents"
        }
    }
}

```

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/dgnp7BUcdV8fJoHDx/builds/ZQDp93DmRApcYGAb6/openapi.json
