# Ecwid Product Review Extractor & Monitor (`clintsa/ecwid-product-review-extractor`) Actor

Extract public Ecwid product reviews with reviewer names, ratings, texts, dates, product IDs and per-product review counts.

- **URL**: https://apify.com/clintsa/ecwid-product-review-extractor.md
- **Developed by:** [Andy Besos](https://apify.com/clintsa) (community)
- **Categories:** E-commerce, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 review records

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

Turn a public Ecwid storefront into a clean, row-per-review dataset. Ecwid Product Review Extractor & Monitor finds the public storefront ID, checks every visible product, and returns reviewer names, 1–5 ratings, review text, dates, product IDs, product URLs, and a review-count summary for every reviewed product.

Paste a storefront URL and export public reviews as JSON, CSV, Excel, XML, or RSS. You do not need an Ecwid account, a merchant API key, browser automation, or a proxy for normally reachable public storefronts. The Actor reads only reviews that public shoppers can already see.

### Why use this Ecwid product review extractor?

- Get one normalized record per public product review with reviewer, rating, text, date, product ID, storefront ID, and product URL.
- Receive an additional product summary for each reviewed product. It contains the current review count and review sources, so spreadsheets and dashboards can rank products without grouping raw rows.
- Read both Ecwid's built-in published reviews and public Fera product-review widgets. The review source field tells workflows which public system supplied each row.
- Start with an Ecwid Instant Site, a normal storefront domain, an embedded catalog page, or a numeric Ecwid store ID. Tracking parameters and fragments are removed automatically.
- Schedule repeated runs with the same monitor ID to find new, edited, and disappeared review rows and changed product review counts.

The Actor uses direct HTTP requests to public storefront endpoints and retries temporary errors. When one storefront in a multi-store run is unavailable, its failure is logged while the remaining storefronts continue.

### Pricing

This Actor uses pay per event pricing: $0.001 per run plus $0.0008 per Dataset record. A Dataset record is either a product-review row or a per-product review summary; the minimum total charge is $0.002.

| Dataset records | Actor event price |
| ---: | ---: |
| 1 | $0.002 minimum |
| 100 | $0.081 |
| 1,000 | $0.801 |
| 10,000 | $8.001 |

For example, a product with one review normally produces two Dataset records: the review and its product summary. Prices cover the Actor's chargeable run and Dataset-record events. Standard Apify charges for retention or downloads may apply.

### How to use this Actor

Add one or more public Ecwid storefront URLs to the storefrontUrls input. A numeric Ecwid store ID such as 110505292 is also accepted. Use the storefront page that contains the product catalog when the store is embedded in another website.

#### Quick start

```json
{
  "storefrontUrls": ["https://ferademo.company.site/"],
  "maxReviews": 100
}
```

Set maxReviews to 0 to export every public review. The prefilled example uses 1 to keep the Store health check small, but the Actor still snapshots the complete review set for accurate scheduled monitoring.

#### Compare several storefronts

```json
{
  "storefrontUrls": [
    "https://example.company.site/",
    "https://merchant.example/shop/"
  ],
  "maxReviews": 0,
  "useApifyProxy": false
}
```

Use Apify Proxy only for a merchant domain that rejects direct requests. Ecwid's public storefront and Fera endpoints normally work directly.

### Monitor new, updated, and removed reviews

Run the Actor on a schedule with the same monitor ID and storefront URLs. The first successful run creates a baseline. Later successful runs compare the current review rows and product summaries against that baseline.

```json
{
  "storefrontUrls": ["https://ferademo.company.site/"],
  "monitorId": "competitor-review-watch",
  "onlyChangesSince": "2026-09-01T00:00:00.000Z",
  "maxReviews": 0
}
```

| Change type | Meaning |
| --- | --- |
| new | The public review or product summary was not in the prior snapshot. |
| updated | A monitored field changed; changedFields names it. |
| unchanged | The record is still public and has not changed. |
| removed | The record was public in the prior snapshot but is no longer returned. |

When onlyChangesSince is set, unchanged records are excluded. A removal is emitted once, on the first successful run that detects it.

### API example

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/Clintsa~ecwid-product-review-extractor/run-sync-get-dataset-items" \
  -H "Authorization: Bearer YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"storefrontUrls":["https://ferademo.company.site/"],"maxReviews":10}'
```

For longer runs, start the Actor asynchronously and read its default Dataset once the run succeeds.

### Input options

| Field | Type | What it controls |
| --- | --- | --- |
| storefrontUrls | string array | Required public Ecwid storefront or catalog URLs, or numeric store IDs. |
| maxReviews | integer | Review rows exported per storefront; 0 means no review limit. |
| monitorId | string | Persistent namespace used for review change tracking. |
| onlyChangesSince | ISO timestamp | Returns only new, updated, or removed records detected since the timestamp. |
| requestDelayMillis | integer | Optional delay between storefronts. |
| useApifyProxy | boolean | Enables Apify Proxy as an optional fallback. |
| proxyConfiguration | object | Proxy settings used only when proxy use is enabled. |

### Output

The default Dataset contains both review and product summary records. A review row contains the stable record ID, storefront URL and ID, product name and ID, reviewer, rating, text, date, review source, and change state. The associated product summary contains the current review count and review sources. Each run also writes a SUMMARY record with target counts, review and summary totals, change totals, and completion time.

### Use cases

- Monitor competitors for newly published product feedback and changes in review volume.
- Export review text and ratings for sentiment, topic, or complaint analysis.
- Compare review velocity between merchant storefronts and product categories.
- Build a normalized review feed for a marketplace, research database, or dashboard.
- Audit which public Ecwid products have reviews and which review system supplied them.

### FAQ

#### Do I need an Ecwid account or API key?

No. The Actor uses public storefront endpoints and does not use the OAuth-protected Ecwid Admin API.

#### Can I extract every product review from an Ecwid store?

It checks every publicly visible catalog product and returns public reviews from Ecwid's built-in review feature or Fera. Products with no public reviews are skipped. A store with reviews disabled, no published reviews, or an unsupported review widget can legitimately return an empty Dataset without being an error.

#### Does it support Fera reviews on an Ecwid storefront?

Yes. Public Fera product-review widgets are detected from storefront configuration and normalized alongside Ecwid-native public reviews.

#### Does it extract Yotpo, TrustSpot, or every other review widget?

Not in this version. Third-party widgets have different public contracts and may require separate source support. The reviewSource field makes supported coverage explicit rather than guessing from page text.

#### Can I monitor new reviews?

Yes. Schedule the Actor, keep the same monitor ID, and use changeType or onlyChangesSince to consume the change feed.

#### Why are some review texts empty?

Ecwid permits a customer to submit a rating without review text. The Actor preserves that public rating and returns an empty text value.

### Limitations and responsible use

- Only publicly visible reviews are returned; unpublished, account-only, or private reviews are not accessed.
- Review availability depends on merchant settings, moderation, plan, and public review widget.
- A missing row means the public endpoint did not return it during the run; it does not prove a merchant has never received that review.
- Respect applicable laws, target-site terms, and the privacy expectations of public reviewers when using exported data.

### Support

Report a problem or request a review-source integration through the Issues tab on this Actor's page. Include the run ID, storefront URL, and input used so the issue can be reproduced.

# Actor input Schema

## `storefrontUrls` (type: `array`):

Required. Paste public Ecwid storefront or catalog URLs. The Actor discovers the storefront ID and accepts an Ecwid Instant Site, a page with an embedded Ecwid catalog, a normal storefront domain, or a numeric store ID.

## `maxReviews` (type: `integer`):

Limit review rows exported for each storefront. Set to 0 to export every public review. Matching product-summary rows are retained for the exported reviews; the complete review set is still snapshotted for monitoring.

## `monitorId` (type: `string`):

Persistent namespace for review change tracking. Keep the same value for the same storefront URLs; use another value for an independent watchlist.

## `onlyChangesSince` (type: `string`):

Optional ISO 8601 timestamp such as 2026-09-01T00:00:00.000Z. Returns only newly detected, updated, or removed review records since that time. The first run creates the baseline.

## `requestDelayMillis` (type: `integer`):

Optional delay between storefronts. Usually unnecessary because the Actor retries temporary upstream failures with backoff.

## `useApifyProxy` (type: `boolean`):

Use Apify Proxy only if a storefront rejects direct requests. Public Ecwid and Fera review endpoints normally work without a proxy.

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

Optional proxy configuration used only when Use Apify Proxy is enabled.

## Actor input object example

```json
{
  "storefrontUrls": [
    "https://ferademo.company.site/"
  ],
  "maxReviews": 1,
  "monitorId": "default",
  "requestDelayMillis": 0,
  "useApifyProxy": false
}
```

# Actor output Schema

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

No description

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

No description

# 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 = {
    "storefrontUrls": [
        "https://ferademo.company.site/"
    ],
    "maxReviews": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("clintsa/ecwid-product-review-extractor").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 = {
    "storefrontUrls": ["https://ferademo.company.site/"],
    "maxReviews": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("clintsa/ecwid-product-review-extractor").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 '{
  "storefrontUrls": [
    "https://ferademo.company.site/"
  ],
  "maxReviews": 1
}' |
apify call clintsa/ecwid-product-review-extractor --silent --output-dataset

```

## MCP server setup

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

```

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/rTnSV7cGgsXhGK5ew/builds/syjiKX6LA9uvmtp7j/openapi.json
