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

Extract Rivyo product and store reviews, ratings, media, questions, and landing-page widgets from Shopify storefronts.

- **URL**: https://apify.com/lurkapi/shopify-rivyo-reviews-scraper-api.md
- **Developed by:** [LurkAPI](https://apify.com/lurkapi) (community)
- **Categories:** E-commerce, Automation, Agents
- **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 Rivyo Reviews Scraper API

Pull public Rivyo product reviews, store reviews, ratings, media, and product questions from Shopify storefronts into one clean spreadsheet. Export a store-wide review feed, research one product, or collect public Q\&A with filters and enrichments ready to use in minutes.

### 🎬 What it does

Paste a Shopify store URL, product URL, or storefront page with an embedded Rivyo product widget. Get back structured review data in a spreadsheet.

Three kinds of input:

1. **Store URL** returns a store rating summary, public reviews about the store, and public product reviews across the store. Good for store-wide sentiment analysis, competitor monitoring, and recurring review exports.
2. **Product URL** returns reviews for that exact product, with its public product details, average rating, review count, and rating histogram. Good for quote pulls, launch reports, and single-product research.
3. **Product landing page** returns exact-product reviews when the page contains a Rivyo product widget. Other readable storefront pages safely 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 most recent, highest rating, or lowest rating.
- **Paid keyword search**: pull only reviews mentioning a phrase such as "refund", "sizing", or "gift".
- **Paid verified, media, reply, and recommendation filters**: verified buyers only, photos only, videos only, either type of media, reviews with public store replies, or reviews whose author recommends the product.
- **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 for product inputs.

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

Good for: Shopify founders tracking their own reviews, 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, product, or landing page URLs**, one per line. Equivalent duplicates are cleaned up automatically.

- **Store URL**: `https://avelinademoray.com/`
- **Product URL**: `https://avelinademoray.com/products/jack-tonwson-vampire-ankh-pendant`
- **Landing page**: any public storefront page with an embedded Rivyo product widget

Minimum input, run as-is:

```json
{
  "startUrls": [
    "https://avelinademoray.com/products/jack-tonwson-vampire-ankh-pendant"
  ],
  "maxResultsPerUrl": 50
}
```

`maxResultsPerUrl` defaults to 50 and can be set as high as 50,000. It caps matching product-review rows independently for each input URL. Store summaries, public store-review rows, Product Q\&A, and explanatory rows do not consume that product-review cap.

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

Free filters and sorts sent to Rivyo:

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

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 Rivyo 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.
- **Recommended only**: only reviews whose author recommends the product.
- **Date range**: only reviews posted between two inclusive dates.
- **Written vs. rating-only**: keep reviews with text or 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 choices scan the complete matching feed before applying the result limit.
- **Language detection**: add `detectedLanguage` when detection succeeds.
- **Translation**: translate the review 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 product URLs and product-scoped landing pages.

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

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

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

- **Overview**: the most useful store, review, question, product, and status columns for every row.
- **Reviews**: product and store reviews with rating, text, reviewer, reply, recommendation, votes, product context, and media links.
- **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 data. Other status values are plain-English explanations, while `error` contains a stable code such as `rivyo_not_detected`, `reviews_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 delivered results and successful add-ons. No subscription and no minimum.

| Event | Price | When |
|---|---:|---|
| Actor Start | **$0.001 per event** | charged when the Actor starts, following Apify's memory-based start-event rules |
| Review | **$1.50 per 1,000 rows** | one product review, store review, or store summary 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, Rivyo's three 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 returns several useful row types.** You receive one aggregate `store` row, public `store_review` rows, and product `review` rows from Rivyo's store-wide feeds.
- **Store inputs do not crawl every product page.** Product price, currency, and availability are `null` on store-scope rows. Use an individual product URL when you need those fields.
- **Product runs include rating context.** Average rating, total review count, and rating histogram are included when Rivyo publishes them.
- **Product landing pages need an embedded widget.** A readable page without a Rivyo product ID falls back to the store-wide feed while preserving your original `inputUrl`.
- **Product Q\&A is product-scoped.** Questions are checked for product URLs and landing pages resolved to a product. Enabling Q\&A on a store URL does not create a question charge.
- **Dedup is automatic.** URL variants are normalized, and the same review or question identifier is delivered once per run when targets overlap.
- **Rivyo and Ryviu are different apps.** This Actor targets Rivyo Product Reviews, not the similarly named Ryviu widget.
- **Not on Rivyo?** When another supported review widget is detected, the status row names the matching sibling tool to run.
- **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; 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 Rivyo or Shopify account?**

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

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

You get one uncharged status row that explains it. When the Actor detects another supported review provider, the message links to the matching sibling scraper.

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

The Actor returns reviews available through the store's public Rivyo configuration. `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 Rivyo product widget on that page. A readable storefront page without one safely 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 public source did not expose it. Fields you toggle off are omitted entirely.

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

Questions are available only for product-scoped inputs. The product may have no public questions, or its public Q\&A feed may be temporarily 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 Rivyo 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 Loox Reviews Scraper API](https://apify.com/lurkapi/shopify-loox-reviews-scraper-api): same job for stores running Loox.
- [Shopify Okendo Reviews Scraper API](https://apify.com/lurkapi/shopify-okendo-reviews-scraper-api): same job for stores running Okendo.
- [Shopify Yotpo Reviews Scraper API](https://apify.com/lurkapi/shopify-yotpo-reviews-scraper-api): same job for stores running Yotpo.
- [Shopify Judge.me Reviews Scraper API](https://apify.com/lurkapi/shopify-judge-me-reviews-scraper-api): same job for stores running Judge.me.
- [Shopify Stamped Reviews Scraper API](https://apify.com/lurkapi/shopify-stamped-reviews-scraper-api): store-wide reviews and Product Q\&A from stores running Stamped.
- [Shopify Ryviu Reviews Scraper API](https://apify.com/lurkapi/shopify-ryviu-reviews-scraper-api): same job for the similarly named Ryviu app.
- [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.
- [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.

### ⚖️ Disclaimer

This tool is intended for personal, research, and educational use. You are responsible for complying with Shopify's and Rivyo'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, rivyo reviews, shopify review scraper, rivyo review scraper, product reviews export, store reviews export, product Q\&A export, shopify product ratings, review dataset, ecommerce review data

# Actor input Schema

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

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

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

Cap on matching product-review rows returned for each input URL. Store summaries, store-review rows, Product Q\&A, and explanatory rows use separate result paths.

## `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`):

Rivyo's built-in orders (most recent, highest rating, and lowest rating) 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 Rivyo 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.

## `recommendedOnly` (type: `boolean`):

Only keep reviews whose author recommends the product.

## `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. This filter turns on 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 remain available without this add-on. Charged per file successfully stored.

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

Return public product questions and merchant answers for product URLs and landing pages resolved to a product. Store URL inputs do not support this option.

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

Normalized store host, for example avelinademoray.com.

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

Canonical store home page URL.

## `outputProductId` (type: `boolean`):

Shopify product identifier represented as a string.

## `outputProductHandle` (type: `boolean`):

Product slug used in Shopify URLs.

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

Public product name.

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

Canonical product page URL.

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

Primary public product image URL.

## `outputPrice` (type: `boolean`):

Public product price when available. Store URL rows use null.

## `outputCurrency` (type: `boolean`):

Storefront currency code when available. Store URL rows use null.

## `outputAvailable` (type: `boolean`):

Public product availability when known. Store URL rows use null.

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

Average rating for the store or product.

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

Total public review count for the store or product.

## `outputRatingHistogram` (type: `boolean`):

Review counts grouped by star rating.

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

Public reviewer display name.

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

Review publication time in ISO format when it can be parsed safely.

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

Whether the review is marked as a verified purchase.

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

Public merchant reply to the review.

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

Photo, video, and archived file references.

## `outputHelpfulVotes` (type: `boolean`):

Helpful and unhelpful vote counts.

## `outputRecommendsProduct` (type: `boolean`):

Whether the reviewer recommends the product.

## `outputOriginalLanguage` (type: `boolean`):

Source language when publicly provided.

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

Original input URL that produced the row.

## Actor input object example

```json
{
  "startUrls": [
    "https://avelinademoray.com/products/jack-tonwson-vampire-ankh-pendant"
  ],
  "maxResultsPerUrl": 50,
  "filterRatings": [],
  "sortBy": "most_recent",
  "verifiedOnly": false,
  "onlyWithMedia": false,
  "onlyWithPhotos": false,
  "onlyWithVideos": false,
  "merchantReplyOnly": false,
  "recommendedOnly": false,
  "reviewContent": "all",
  "filterLanguages": [],
  "detectLanguage": false,
  "translateReviews": false,
  "translationTarget": "en",
  "downloadMedia": false,
  "includeQuestions": false,
  "outputStoreDomain": true,
  "outputStoreUrl": true,
  "outputProductId": true,
  "outputProductHandle": true,
  "outputProductTitle": true,
  "outputProductUrl": true,
  "outputProductImageUrl": true,
  "outputPrice": true,
  "outputCurrency": true,
  "outputAvailable": true,
  "outputAverageRating": true,
  "outputReviewCount": true,
  "outputRatingHistogram": true,
  "outputReviewerName": true,
  "outputPublishedAt": true,
  "outputVerifiedBuyer": true,
  "outputReply": true,
  "outputMediaUrls": true,
  "outputHelpfulVotes": true,
  "outputRecommendsProduct": true,
  "outputOriginalLanguage": true,
  "outputInputUrl": true
}
```

# Actor output Schema

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

All store summary, review, Product Q\&A, and explanatory rows.

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

Mixed table of store summaries, reviews, Product Q\&A, and explanatory rows.

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

One row per product or store review with rating, text, reviewer, product context, 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://avelinademoray.com/products/jack-tonwson-vampire-ankh-pendant"
    ],
    "maxResultsPerUrl": 50,
    "filterRatings": [],
    "sortBy": "most_recent",
    "filterLanguages": [],
    "translationTarget": "en"
};

// Run the Actor and wait for it to finish
const run = await client.actor("lurkapi/shopify-rivyo-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://avelinademoray.com/products/jack-tonwson-vampire-ankh-pendant"],
    "maxResultsPerUrl": 50,
    "filterRatings": [],
    "sortBy": "most_recent",
    "filterLanguages": [],
    "translationTarget": "en",
}

# Run the Actor and wait for it to finish
run = client.actor("lurkapi/shopify-rivyo-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://avelinademoray.com/products/jack-tonwson-vampire-ankh-pendant"
  ],
  "maxResultsPerUrl": 50,
  "filterRatings": [],
  "sortBy": "most_recent",
  "filterLanguages": [],
  "translationTarget": "en"
}' |
apify call lurkapi/shopify-rivyo-reviews-scraper-api --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/qG9jhqkWEgh2SFlli/builds/lPrcOab4npmpfrT7y/openapi.json
