# Stamped Reviews & Q\&A Scraper (`piotrv1001/stamped-reviews-scraper`) Actor

The Stamped Reviews & Q\&A Scraper exports reviews and product questions from Shopify stores using Stamped — ratings, text, photos, merchant replies and nested answers, with exact-product attribution and rating/date filters. Ideal for product research and review monitoring.

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

## Pricing

from $1.00 / 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/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

### 🚀 Stamped Reviews & Q\&A Scraper

Export product reviews and product questions with their answers from Shopify stores that use Stamped. The **Stamped Reviews & Q\&A Scraper** turns a product page URL into clean, structured rows: star ratings, review text, verified-buyer flags, photos, merchant replies, and every public answer to every question.

### ✨ Features

- ⭐ **Full review data**: rating, title, text, date, verified-buyer status, variant, helpful votes, photos, videos, product-specific custom answers (for example "Fit" or "Size purchased") and the store's reply.
- ❓ **Questions & answers**: every public question on the product, with all of its answers nested in one row. Collect questions on their own, without scraping reviews first.
- 🎯 **Exact product attribution**: stores often show reviews of related products (other colors, bundles) on a product page. Each review carries `requestedProductId`, `sourceProductId` and `isExactProduct`, and one switch keeps only reviews written for the product you asked for.
- 🔎 **Filters included**: star ratings (for example only 1–2 star reviews) and "only newer than" a date, at no extra cost.
- 📋 **Honest coverage report**: the `SUMMARY` record lists, for every URL, how many reviews and questions the store advertises, how many were fetched and returned, why collection stopped, and whether Q\&A is switched off on that store (`disabled`) or simply has no questions yet (`empty`).
- 🔒 **Privacy by default**: reviewer names are off unless you turn them on, and custom answers about the reviewer (age, location, body measurements, "where did you hear about us") are never returned.

### 🛠️ How It Works

1. **Paste product URLs** – any product page of a Shopify store that shows Stamped reviews, e.g. `https://www.everymanjack.com/products/body-wash`.
2. **Choose what to collect** – reviews, questions, or both, and how many of each.
3. **Run the scraper** – get one row per review and one row per question in the dataset, plus a per-URL coverage summary.

### 💰 Pricing

Pay only for the rows you get:

| Event | Price |
|---|---|
| Review | $0.001 ($1 per 1,000 reviews) |
| Question (with all of its answers) | $0.001 ($1 per 1,000 questions) |

Filters and the coverage summary are free. A question with three answers is billed as one row.

### 📥 Input

| Field | Description |
|---|---|
| `startUrls` | Product page URLs from Stamped-powered Shopify stores. |
| `mode` | `both` (default), `reviews` or `questions`. |
| `maxReviews` / `maxQuestions` | Caps across all URLs (default 50 each). |
| `reviewScope` | `widget` keeps everything shown on the product page; `exactProduct` drops reviews written for related products. |
| `ratings` | Only return reviews with these star ratings. |
| `newerThan` | Only return reviews and questions published on or after this date. |
| `includeReviewerNames` | Add public display names (off by default). |

### 📊 Sample Output Data

A review:

```json
{
    "type": "review",
    "reviewId": "163049666",
    "rating": 2,
    "title": "Well…",
    "body": "The product itself is fine, though it doesn’t match the description above...",
    "publishedAt": "2026-07-14",
    "publishedAtRaw": "07/14/2026",
    "isVerifiedBuyer": true,
    "helpfulCount": 1,
    "unhelpfulCount": 0,
    "variant": "Cedarwood Amber / Standard",
    "options": [],
    "images": ["https://cdn.stamped.io/tr:h-800:/uploads/photos/262286_7346569117858_0865e38b_8f14_4ffe_bc13_255bdcc0c02a.jpg?"],
    "videos": [],
    "merchantReply": null,
    "requestedProductId": "7346569117858",
    "sourceProductId": "7346569117858",
    "isExactProduct": true,
    "productTitle": "Body Wash",
    "productSku": "01645",
    "productUrl": "https://www.everymanjack.com/products/body-wash",
    "shopDomain": "everymanjack.myshopify.com"
}
```

A question:

```json
{
    "type": "question",
    "questionId": "4589436",
    "question": "Are any of your body wash Soaps anti bacterial?",
    "publishedAt": "2024-10-28",
    "publishedAtRaw": "10/28/2024",
    "answerCount": 1,
    "answers": [
        {
            "ordinal": 1,
            "text": "No, they aren’t in the sense that they don’t have triclosan or other ‘antibacterial’ ingredients, though washing with soap and water gets rid of bacteria very effectively.",
            "publishedAt": "2024-10-30",
            "publishedAtRaw": "10/30/2024"
        }
    ],
    "requestedProductId": "7346569117858",
    "sourceProductId": null,
    "productTitle": "Body Wash",
    "productUrl": "https://www.everymanjack.com/products/body-wash",
    "shopDomain": "everymanjack.myshopify.com"
}
```

### ⚠️ Good to Know

- **Dates**: Stamped shows dates in each store's own format. `publishedAtRaw` is always the text shown on the page. `publishedAt` (YYYY-MM-DD) is filled whenever the format is unambiguous; for short histories with dates like `07/09/2026`, where the day and month order cannot be proven, it stays `null` instead of guessing.
- **Questions** are only the answered questions a store publishes. Pending questions are not public. The Q\&A feed does not say which grouped product a question was asked on, so `sourceProductId` is `null` for questions.
- **Store-wide exports** are not supported: each input must be a product page.

Monitor customer feedback and product questions across Stamped stores with the **Stamped Reviews & Q\&A Scraper** today! 🚀

# Actor input Schema

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

Product pages of Shopify stores that show Stamped reviews.

## `mode` (type: `string`):

Reviews, product questions with their answers, or both.

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

Maximum number of reviews returned across all URLs.

## `maxQuestions` (type: `integer`):

Maximum number of questions returned across all URLs. Each question includes all of its answers.

## `reviewScope` (type: `string`):

Stores often group related products, so a product page also shows reviews written for its siblings. 'As shown on the product page' keeps them and marks each review with isExactProduct; 'This product only' drops reviews written for other products.

## `ratings` (type: `array`):

Only return reviews with these star ratings. Leave empty for all ratings.

## `newerThan` (type: `string`):

Only return reviews and questions published on or after this date. Leave empty for the full history.

## `includeReviewerNames` (type: `boolean`):

Add the public display name shown on each review, question and answer (usually first name and initial).

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

Proxy servers used to load pages.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.everymanjack.com/products/body-wash"
    }
  ],
  "mode": "both",
  "maxReviews": 50,
  "maxQuestions": 50,
  "reviewScope": "widget",
  "includeReviewerNames": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `reviews` (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 = {
    "startUrls": [
        {
            "url": "https://www.everymanjack.com/products/body-wash"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/stamped-reviews-scraper").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.everymanjack.com/products/body-wash" }],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("piotrv1001/stamped-reviews-scraper").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.everymanjack.com/products/body-wash"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call piotrv1001/stamped-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,piotrv1001/stamped-reviews-scraper"
        }
    }
}
```

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/See2eXGf6chnTrH4s/builds/5TyRjMzHw7GYGk0J2/openapi.json
