# Shopify Stamped Reviews Scraper API (`lurkapi/shopify-stamped-reviews-scraper-api`) Actor

Extract every public Stamped.io product review from any Shopify store.

- **URL**: https://apify.com/lurkapi/shopify-stamped-reviews-scraper-api.md
- **Developed by:** [LurkAPI](https://apify.com/lurkapi) (community)
- **Categories:** AI, Automation, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 reviews

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/platform/actors/running/actors-in-store#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

## Shopify Stamped Reviews Scraper API

Pull every public Stamped.io review from any Shopify store into one clean spreadsheet. Export a complete store review history, collect every review for one product, or add public product questions and merchant answers. Ready to filter, sort, and download in minutes.

### 🎬 What it does

Paste a Shopify store URL, product URL, or storefront page with an embedded Stamped product widget. Get back reviews in a spreadsheet.

Three kinds of input:

1. **Store URL** returns reviews across the entire store, with product details on each row when Stamped publishes them. Good for store-wide sentiment analysis, competitor monitoring, and complete review exports.
2. **Product URL** returns reviews for that exact product, with its average rating and review count when the public product summary is available. Good for quote pulls, launch reports, and single-product research.
3. **Product landing page** returns exact-product reviews when the page contains a Stamped product widget. Other readable storefront pages fall back to the store-wide review feed.

Shape the results before you pay for them:

- **Free filters and sorts**: keep any mix of 1 to 5 stars. Sort by featured, newest, highest rating, lowest rating, or most helpful.
- **Paid keyword search**: pull only reviews mentioning a phrase such as "refund", "sizing", or "gift".
- **Paid verified, media, and reply filters**: verified buyers only, photos only, videos only, either type of media, or reviews the store publicly replied to.
- **Paid date, content, and language filters**: narrow to a date window, keep written reviews or rating-only entries, or select review languages.
- **Paid custom sorts**: sort the complete matching set by oldest, pictures first, or videos first.
- **Paid language detection and translation**: detect review language and translate titles and text into your chosen language.
- **Paid media archiving**: save review photos and direct videos to your run storage.
- **Paid product Q\&A**: return public questions and merchant answers as separate rows.

Duplicate URLs collapse automatically, and the same review reached through overlapping store and product inputs is delivered only once. Explanatory status rows are always free.

Good for: Shopify founders watching reviews week over week, CMOs auditing a competitor, agencies reporting across client stores, and analysts building review datasets they can trust.

### 📋 How to use it

#### Step 1: Paste your inputs

Drop any combination into **Store or product URLs**, one per line. Duplicates are cleaned up automatically.

- **Store URL**: `https://www.stonelux.co.uk/`
- **Product URL**: `https://www.stonelux.co.uk/products/miniature-paint`
- **Landing page**: any public storefront page with an embedded Stamped product widget

Minimum input, run as-is:

```json
{
  "startUrls": [
    "https://www.stonelux.co.uk/products/miniature-paint"
  ],
  "maxResultsPerUrl": 50
}
```

`maxResultsPerUrl` is the only result limit you need. It defaults to 50 and can be set as high as 50,000. The cap is applied independently to every input URL. Product Q\&A uses the same separate cap, so questions do not consume the review limit.

#### Step 2: Pick filters and add-ons

Free filters and sorts sent to Stamped:

- **Star rating filter**: keep any combination of 1 to 5 stars.
- **Sort order**: Featured, Newest, Highest rating, Lowest rating, or Most helpful.

Paid add-ons are billed only when they actually deliver a result:

- **Keyword search**: only reviews whose title or text contains your phrase.
- **Verified only**: only reviews Stamped marks as verified purchases.
- **Media filters**: only reviews with a photo, only with a video, or only with either.
- **Store-reply only**: only reviews the merchant has publicly replied to.
- **Date range**: only reviews posted between two inclusive dates.
- **Written vs. rating-only**: keep only reviews with text, or only star ratings without text.
- **Language filter**: only reviews in the languages you select. Language detection turns on automatically.
- **Custom sort**: Oldest, Pictures first, or Videos first. These options scan the complete matching feed before applying the result limit.
- **Language detection**: add `detectedLanguage` when detection succeeds.
- **Translation**: translate the title and text into your chosen language.
- **Media archiving**: save up to 10 verified photos or direct videos per review, with a 3 MB limit per file.
- **Product Q\&A**: add public questions and merchant answers as separate rows for reviewed products.

Use the **Output fields** section to turn off optional columns you do not need. Core IDs, rating, text, status, and error fields remain available for reliable downstream processing.

#### Step 3: Run it and get your results

Click **Start**. Reviews stream into the Output tab as they are collected. The output includes the complete dataset and four ready-made views:

- **Overview**: the most useful review, question, product, and status columns for every row.
- **Reviews**: review text, rating, reviewer, reply, product, vote, attribute, and media fields.
- **Product Q\&A**: public questions, merchant answers, authors, dates, votes, and product context.
- **Language & Media**: detected languages, translated text, source media, and archived files.

The Output tab also links to **Downloaded media**, which contains review photos and direct videos archived by the run.

Every row starts with `status` and `rowType`. `Success` means the row contains public review or question data. Other status values are plain-English explanations, while `error` contains a stable code such as `stamped_not_detected`, `stamped_feed_unavailable`, or `no_matching_reviews`. Explanatory rows are never charged.

Download the dataset as JSON, CSV, or Excel from the Storage tab, or fetch it through the Apify API.

### 💰 Pricing

Pay only for review results and successful add-ons. No subscription and no minimum.

| Event | Price | When |
|---|---:|---|
| Actor Start | **$0.001 per event** | charged once when the Actor starts |
| Review | **$1.50 per 1,000 rows** | one public review is delivered |
| Add-on: Advanced filter | **$0.50 per 1,000 rows** | a delivered review is kept by one or more paid filters; charged once per row, not once per filter |
| Add-on: Custom sort | **$0.50 per 1,000 rows** | a review is delivered using oldest, pictures-first, or videos-first order |
| Add-on: Language detected | **$0.50 per 1,000 rows** | language detection succeeds on a delivered review |
| Add-on: Review translated | **$2.00 per 1,000 rows** | translated title or text is returned for a delivered review |
| Add-on: Media downloaded | **$1.00 per 1,000 files** | one verified review photo or direct video is archived successfully |
| Add-on: Question scraped | **$1.50 per 1,000 rows** | one public product question is delivered |

Rating filters, Stamped's five built-in sort choices, original media source URLs, output-field controls, and explanatory status rows do not add an add-on charge.

### 💡 Good to know

- **One store link can collect the whole review feed.** You do not need to discover every product URL first.
- **Store inputs return reviews, not product summaries.** Products with zero reviews do not appear.
- **Product runs include rating context.** Average rating and total review count are included when the public product summary is available.
- **Product landing pages need an embedded widget.** A readable page without a Stamped product ID falls back to the store-wide review feed.
- **Dedup is automatic.** URL variants are normalized, and the same review ID for the same product is delivered once per run when targets overlap.
- **Product Q\&A follows reviewed products.** Questions are discovered only for products found in the public review feed. Products with zero reviews are outside the Q\&A discovery path.
- **Not on Stamped?** When Okendo, Loox, Yotpo, or Judge.me is detected, the status row names the matching tool to run instead.
- **Status rows are never charged.** Unsupported providers, unavailable storefronts, empty results, and rejected URLs return a stable `error` value with a plain-English explanation.
- **Field coverage matches the source.** A requested field the storefront did not publish is `null`; a field toggled off in the 📦 Output fields section is omitted.
- **Language detection is conservative.** Short or ambiguous reviews can keep `detectedLanguage` as `null` and do not incur a successful-detection charge.
- **Media limits are strict.** Up to 10 files per review and 3 MB per file. Only verified photo or direct video responses are archived; the source URLs remain in the review row either way.
- **Runs are independent.** No cross-run history is kept. Schedule runs and compare `reviewId` or `questionId` across datasets to track new records.
- Files and datasets live in your Apify storage. Retention depends on your Apify plan.

### ❓ FAQ

**Do I need a Stamped or Shopify account?**

No. Only publicly published storefront and review data is read.

**What if a store does not use Stamped?**

You get one uncharged status row that explains it. When the Actor detects Okendo, Judge.me, Loox, or Yotpo, the message links to the matching sibling scraper.

**Why did I get fewer reviews than the storefront shows?**

The Actor returns public reviews made available by the store. `maxResultsPerUrl`, overlapping-target deduplication, and any filters you selected can reduce the final count.

**Why did a landing page return store-wide reviews?**

Exact-product scope requires a readable Stamped product widget on that page. A readable storefront page without one falls back to the store-wide feed.

**Why are some fields null?**

Not every store publishes every field. `null` means the field was requested but the storefront did not expose it. Fields you toggle off are omitted entirely.

**Why did Product Q\&A return no question rows?**

Questions are checked only for products found in the review feed. The product may have no public questions, or its public Q\&A feed may be unavailable.

**Can I schedule this?**

Yes. Use Apify Schedules to run on any cadence and compare `reviewId` and `questionId` across snapshots.

**Can I export to Excel or Google Sheets?**

Yes. Open the run's Storage tab and choose Excel, CSV, JSON, or another supported format. CSV exports can be imported directly into Google Sheets.

**Which stores work?**

Public Shopify stores with a reachable Stamped review configuration and readable public review feed.

**How long are my results stored?**

Results live in your Apify dataset and archived files live in the run's key-value store. Retention depends on your Apify plan.

### 🔗 Other tools you might like

- [Shopify Okendo Reviews Scraper API](https://apify.com/lurkapi/shopify-okendo-reviews-scraper-api): same job for stores running Okendo.
- [Shopify Judge.me Reviews Scraper API](https://apify.com/lurkapi/shopify-judge-me-reviews-scraper-api): same job for stores running Judge.me.
- [Shopify Loox Reviews Scraper API](https://apify.com/lurkapi/shopify-loox-reviews-scraper-api): same job for stores running Loox.
- [Shopify Yotpo Reviews Scraper API](https://apify.com/lurkapi/shopify-yotpo-reviews-scraper-api): same job for stores running Yotpo.
- [Shopify Junip Reviews Scraper API](https://apify.com/lurkapi/shopify-junip-reviews-scraper-api): product and site reviews from stores running Junip.
- [Shopify TrustWILL (Trustoo) Reviews Scraper API](https://apify.com/lurkapi/shopify-trustwill-reviews-scraper-api): store-wide and product reviews from stores running TrustWILL or Trustoo.
- [Shopify Air / AG Product Reviews (Avada) Scraper API](https://apify.com/lurkapi/shopify-air-ag-product-reviews-scraper-api): store-wide and product reviews from stores running Air or AG Product Reviews.

### ⚖️ Disclaimer

This tool is intended for personal, research, and educational use. You are responsible for complying with Shopify's and Stamped's Terms of Service and any laws that apply in your jurisdiction. The developer is not liable for misuse. Data availability depends on the storefront's public configuration at run time.

**Keywords:** shopify reviews, stamped reviews, stamped.io reviews, shopify review scraper, stamped review scraper, product reviews export, product Q\&A export, review dataset, review sentiment data, verified buyer reviews, ecommerce review data

# Actor input Schema

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

Paste a Shopify store URL to collect public reviews across that store. Paste a product URL, or another storefront page with an embedded Stamped product widget, to collect reviews for that exact product. All forms can be mixed in one run.

## `maxResultsPerUrl` (type: `integer`):

Cap on review rows returned for each store or product URL. Product Q\&A uses the same separate cap.

## `filterRatings` (type: `array`):

Only keep reviews with the star ratings you pick. Leave empty to include every rating. Free with the base row price.

## `sortBy` (type: `string`):

Stamped's built-in orders (featured, newest, highest rating, lowest rating, and most helpful) are free. Oldest, pictures first, and videos first are custom sorts computed by the actor and count as add-ons.

## `filterKeyword` (type: `string`):

Only keep reviews whose title or body contains this phrase. Charged only on matching rows that are delivered.

## `verifiedOnly` (type: `boolean`):

Only keep reviews Stamped marks as verified purchases.

## `onlyWithMedia` (type: `boolean`):

Only keep reviews that include at least one photo or video.

## `onlyWithPhotos` (type: `boolean`):

Only keep reviews that include at least one customer photo.

## `onlyWithVideos` (type: `boolean`):

Only keep reviews that include a customer video.

## `merchantReplyOnly` (type: `boolean`):

Only keep reviews where the store replied publicly.

## `filterStartDate` (type: `string`):

Only keep reviews posted on or after this date (YYYY-MM-DD, inclusive).

## `filterEndDate` (type: `string`):

Only keep reviews posted on or before this date (YYYY-MM-DD, inclusive).

## `reviewContent` (type: `string`):

Keep every review, only reviews that have written text, or only star ratings without text.

## `filterLanguages` (type: `array`):

Only keep reviews in these languages. Use ISO codes such as en, eng, es, spa, or pt-BR. Stamped does not publish a language, so this filter turns on local language detection automatically.

## `detectLanguage` (type: `boolean`):

Adds a detectedLanguage field. Charged only when detection succeeds on a delivered row.

## `translateReviews` (type: `boolean`):

Translate each delivered review into the selected language. Charged only when a translation succeeds.

## `translationTarget` (type: `string`):

Target language for translations. Use a code such as en, es, fr, de, ja, or pt-BR.

## `downloadMedia` (type: `boolean`):

Save up to 10 verified photos or direct videos per review (max 3 MB each) to the run's key-value store. Original source URLs stay in the row either way. Charged per file successfully stored.

## `includeQuestions` (type: `boolean`):

Return public product questions and merchant answers. Questions are returned only for products that have at least one review.

## `outputStoreDomain` (type: `boolean`):

Normalized store host, for example stonelux.co.uk.

## `outputStoreUrl` (type: `boolean`):

Full canonical URL of the store's home page.

## `outputProductTitle` (type: `boolean`):

Public product name.

## `outputProductUrl` (type: `boolean`):

Canonical storefront product link when publicly resolvable.

## `outputProductImageUrl` (type: `boolean`):

Public product image URL.

## `outputAverageRating` (type: `boolean`):

Product-level average rating.

## `outputReviewCount` (type: `boolean`):

Product-level public review count.

## `outputReviewTitle` (type: `boolean`):

Review headline, when the store collects one.

## `outputPublishedAt` (type: `boolean`):

Timestamp when the review or question was posted.

## `outputReviewerName` (type: `boolean`):

Public reviewer display name.

## `outputReviewerLocation` (type: `boolean`):

Public reviewer location text.

## `outputReviewerCountry` (type: `boolean`):

Public reviewer ISO country code.

## `outputVerifiedBuyer` (type: `boolean`):

Whether the review is marked as a verified purchase.

## `outputVotes` (type: `boolean`):

Helpful and not-helpful vote counts.

## `outputHighlightFlags` (type: `boolean`):

Whether the review is featured and whether the reviewer recommends the product.

## `outputReply` (type: `boolean`):

Public merchant reply to a review or answer to a question, and when it was posted.

## `outputPurchasedVariant` (type: `boolean`):

Product SKU and variant attached to the review, when Stamped provides them.

## `outputMediaUrls` (type: `boolean`):

Source URLs for customer photos and videos on each review.

## `outputCustomAttributes` (type: `boolean`):

Merchant-defined review attributes flattened into one spreadsheet-friendly text field.

## `outputInputUrl` (type: `boolean`):

The URL from your input that produced this row. Useful for grouping results.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.stonelux.co.uk/products/miniature-paint"
  ],
  "maxResultsPerUrl": 50,
  "filterRatings": [],
  "sortBy": "featured",
  "verifiedOnly": false,
  "onlyWithMedia": false,
  "onlyWithPhotos": false,
  "onlyWithVideos": false,
  "merchantReplyOnly": false,
  "reviewContent": "all",
  "filterLanguages": [],
  "detectLanguage": false,
  "translateReviews": false,
  "translationTarget": "en",
  "downloadMedia": false,
  "includeQuestions": false,
  "outputStoreDomain": true,
  "outputStoreUrl": true,
  "outputProductTitle": true,
  "outputProductUrl": true,
  "outputProductImageUrl": true,
  "outputAverageRating": true,
  "outputReviewCount": true,
  "outputReviewTitle": true,
  "outputPublishedAt": true,
  "outputReviewerName": true,
  "outputReviewerLocation": true,
  "outputReviewerCountry": true,
  "outputVerifiedBuyer": true,
  "outputVotes": true,
  "outputHighlightFlags": true,
  "outputReply": true,
  "outputPurchasedVariant": true,
  "outputMediaUrls": true,
  "outputCustomAttributes": true,
  "outputInputUrl": true
}
```

# Actor output Schema

## `dataset` (type: `string`):

All review, product question, and explanatory rows.

## `overview` (type: `string`):

Mixed table of reviews, product questions, and explanatory rows.

## `reviews` (type: `string`):

One row per review with text, rating, reviewer, product, and media links.

## `questions` (type: `string`):

One row per public product question with its merchant answer and product context.

## `enrichments` (type: `string`):

Detected language, translations, source media, and archived file references.

## `mediaFiles` (type: `string`):

Photos and direct videos that this run archived to your Apify key-value store.

# 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": [
        "https://www.stonelux.co.uk/products/miniature-paint"
    ],
    "maxResultsPerUrl": 50,
    "filterRatings": [],
    "sortBy": "featured",
    "filterLanguages": [],
    "translationTarget": "en"
};

// Run the Actor and wait for it to finish
const run = await client.actor("lurkapi/shopify-stamped-reviews-scraper-api").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": ["https://www.stonelux.co.uk/products/miniature-paint"],
    "maxResultsPerUrl": 50,
    "filterRatings": [],
    "sortBy": "featured",
    "filterLanguages": [],
    "translationTarget": "en",
}

# Run the Actor and wait for it to finish
run = client.actor("lurkapi/shopify-stamped-reviews-scraper-api").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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": [
    "https://www.stonelux.co.uk/products/miniature-paint"
  ],
  "maxResultsPerUrl": 50,
  "filterRatings": [],
  "sortBy": "featured",
  "filterLanguages": [],
  "translationTarget": "en"
}' |
apify call lurkapi/shopify-stamped-reviews-scraper-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=lurkapi/shopify-stamped-reviews-scraper-api",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/ZDl9hlKVoOUAKEZXh/builds/VGBaIFaX6KFEurGVI/openapi.json
