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

Scrape Ryviu reviews from Shopify product URLs, or scan a store sitemap for product ratings and review counts.

- **URL**: https://apify.com/lurkapi/shopify-ryviu-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 Ryviu Reviews Scraper API

Pull every publicly retrievable Ryviu review from any Shopify store into one clean spreadsheet. Run a 1-star sweep of a competitor, export the review history available for one SKU, or map ratings across an entire storefront from a single link. Ready to filter, sort, and download in minutes.

### 🎬 What it does

Paste a Shopify store, product, or public storefront-page URL. Get back ratings and reviews in a spreadsheet.

Three kinds of input:

1. **Store URL** returns one store summary plus one summary row per public product, including products sitting at zero reviews. Good for catalog-wide dashboards, launch-week rating sweeps, and spotting the quiet products in your own store.
2. **Product URL** returns every individual review that Ryviu's public widget makes retrievable for that exact product. Good for quote pulls, monthly agency reports, and single-SKU deep dives.
3. **Other storefront page** checks the page for an embedded Ryviu product widget. When one is present, it returns that product's reviews; otherwise it safely falls back to the store summary and catalog scan.

Shape the results before you pay for them:

- **Free filters and sorts**: keep any mix of 1 to 5 stars, require a photo or video, and sort by newest or oldest.
- **Paid keyword search**: pull only reviews mentioning a phrase like "refund", "sizing", or "gift".
- **Paid media, reply, and featured filters**: photos only, videos only, reviews the store publicly replied to, or reviews Ryviu marks as featured.
- **Paid date, content, country, and language filters**: narrow to a date window, keep only written reviews or only ratings without text, require a minimum text length, or select reviewer countries and review languages.
- **Paid custom sorts**: highest rating, lowest rating, most helpful, or photos first.
- **Paid enrichments**: tag each review with a detected language, translate reviews into your chosen language, and archive photo or video files to your run storage.

Equivalent duplicate URLs collapse automatically, including www variants, query strings, and hash fragments. Status rows like `no_products_found` are always free.

Good for: Shopify founders watching their own reviews week over week, CMOs auditing a competitor's launch quarter, agencies scoring a client roster monthly, and analysts building review datasets they can actually trust.

### 📋 How to use it

#### Step 1: Paste your inputs

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

- **Store URL**: `https://www.gaslandchef.com.au/`
- **Product URL**: `https://www.aquasonic.com/products/black-series-pro`
- **Storefront page**: `https://www.aquasonic.com/collections/all/products/black-series-pro`

Minimum input, run as-is:

```json
{
  "startUrls": [
    "https://www.aquasonic.com/products/black-series-pro"
  ],
  "maxResultsPerUrl": 50
}
```

`maxResultsPerUrl` is the only limit you need. Default 50, max 50,000. It caps product summary rows for store-scope pages and individual review rows for product-widget pages.

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

Free filters and sorts sent straight to Ryviu:

- **Star rating filter**: keep any combination of 1 to 5 stars.
- **Media filter**: keep only reviews with at least one public photo or video.
- **Sort order**: Newest or Oldest.

Paid add-ons (billed only when they actually deliver a row):

- **Keyword search**: only reviews whose title or text contains your phrase.
- **Photo and video filters**: only reviews with a photo, or only reviews with a video.
- **Store-reply only**: only reviews with a publicly available merchant reply.
- **Featured only**: only reviews Ryviu marks as featured.
- **Date range**: only reviews posted between two dates.
- **Written vs rating-only**: only reviews with text, or only star ratings without text.
- **Minimum review length**: remove one-word and other short reviews.
- **Country filter**: only reviewers from the countries you select.
- **Language filter**: only reviews in the languages you select; language detection turns on automatically.
- **Highest, lowest, most-helpful, or photos-first sort**: order reviews by rating, public helpful votes, or photo presence.
- **Language detection**: adds a language tag when enough review text is available.
- **Translation**: translates review titles and text into your chosen language.
- **Media archiving**: downloads and stores up to 10 photos or videos per review, with a 3 MB limit per file.

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

Click **Start**. Rows stream into the Output tab as they come in. The dataset ships with four ready-made views:

- **Overview**: high-level shape of every row.
- **Products**: store and product summaries from a store scan.
- **Reviews**: one row per review from a product scan.
- **Language & Media**: detected languages, translated text, source media, and archived files.

Every row starts with a `status` field. `Success` means the row is real data. Anything else is a plain-English explanation; the stable machine-readable code is in `error`, such as `no_products_found`, `no_matching_reviews`, `plan_limited`, or `ryviu_not_detected`. Explanatory rows are never charged.

Download as JSON, CSV, or Excel from the Storage tab, or pull the data straight into your app through the Apify API.

### 💰 Pricing

Pay only for results you actually get back. No subscription, no minimum.

| Event | Price | When |
|---|---|---|
| Actor Start | **$0.001 per launch** | one-time charge when each Actor run starts |
| Review | **$1.50 per 1,000 rows** | per store summary, product summary, or review delivered |
| Add-on: Advanced filter | **$0.50 per 1,000 rows** | per delivered review a paid filter kept |
| Add-on: Custom sort | **$0.50 per 1,000 rows** | per delivered review from a highest, lowest, most-helpful, or photos-first sort |
| Add-on: Language detected | **$0.50 per 1,000 rows** | per delivered review where the actor detected the language |
| Add-on: Review translated | **$2.00 per 1,000 rows** | per delivered review that was translated successfully |
| Add-on: Media downloaded | **$1.00 per 1,000 files** | per media file archived successfully |

Rating filters, Ryviu's newest and oldest sorts, the media-presence filter, source photo and video URLs, and status rows are all free.

### 💡 Good to know

- **Zero-review products are included** on store scans. Your catalog view stays complete.
- **Equivalent URL dedup is automatic**. The same store, product, or page reached through www variants, query strings, or hash fragments is fetched once. Store and product targets remain separate because they return different row types.
- **Public Ryviu plan limits are reported**. Some stores report more reviews than their public widget allows callers to retrieve. The Actor sweeps distinct public rating and media windows where possible, sets `planLimited`, and returns an uncharged `plan_limited` status instead of claiming complete coverage.
- **Ryviu and Rivyo are separate apps**. This Actor targets the `ryviu` widget, not `rivyo-product-review`.
- **Not on Ryviu?** If the store runs a different supported review widget, the status row tells you which sibling tool to run.
- **Status rows are never charged**. Unsupported providers, empty filtered results, unavailable storefronts, and rejected URLs come back with a stable `error` value that explains the next step.
- **Dates are only returned when Ryviu exposes them.** Date filters exclude reviews without a public date.
- **Store replies depend on the public response shape.** The field is `null` when Ryviu does not expose the reply for that review.
- **Field coverage matches the source**. If the storefront did not publish a value, the field comes back `null`. Fields you toggle off are omitted from the row entirely.
- **Runs are independent**. No cross-run history is kept. Schedule runs and compare `reviewId` on your side to track what is new.
- Files and datasets live in your Apify storage. How long they are kept depends on your Apify plan.

### ❓ FAQ

**Do I need a Ryviu or Shopify account?**
No. Only publicly published storefront and review data is read.

**What if a store does not use Ryviu?**
You get one uncharged status row that explains it. When the Actor spots a supported sibling widget on the store, the row names the matching tool to run instead.

**What if a product has no reviews?**
On a store scan you still get the product summary row with `reviewCount: 0` and empty rating fields. On a product scan pointing at a review-less product you get a status row with `no_reviews_yet`.

**Why did I receive fewer reviews than the store reports?**
Some Ryviu plans limit how many reviews the public widget lets callers retrieve even though the storefront displays a larger total. The Actor tries distinct public rating and media windows to recover more. If the public limit is still lower than the reported total, the product context sets `planLimited: true` and the run adds an uncharged `plan_limited` status row.

**Why are some fields null?**
Not every store publishes every field. Dates, country details, replies, media, price, currency, and other values appear only when the public storefront or Ryviu response exposes them. `null` means the field was requested but the source did not publish it. Fields you toggle off are omitted entirely.

**Can I schedule this?**
Yes. Use Apify Schedules to run on any cadence and compare `reviewId` across snapshots to track new reviews.

**Can I export to Excel or Google Sheets?**
Yes. Open the run's Storage tab and pick CSV, Excel, JSON, or one of the other formats.

**Which stores work?**
Any Shopify store whose review widget is powered by Ryviu and whose public storefront and catalog are reachable.

**How long are my results stored?**
Results live in your Apify dataset. How long they are kept 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 Air / AG Product Reviews Scraper API](https://apify.com/lurkapi/shopify-air-ag-product-reviews-scraper-api): same job for stores running Air or AG Product Reviews.
- [Shopify Junip Reviews Scraper API](https://apify.com/lurkapi/shopify-junip-reviews-scraper-api): same job for stores running Junip.
- [Shopify TrustWILL Reviews Scraper API](https://apify.com/lurkapi/shopify-trustwill-reviews-scraper-api): same job for 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 Ryviu'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 and Ryviu plan at run time.

**Keywords:** shopify reviews, ryviu reviews, shopify review scraper, ryviu review scraper, product reviews export, shopify product ratings, review dataset, shopify catalog audit, ecommerce review data

# Actor input Schema

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

A store URL returns one product summary per public product, including products with zero reviews. A product URL or storefront page containing one product's Ryviu widget returns individual reviews. Store, product, and landing-page URLs can be mixed in one run.

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

Cap on rows returned for each input URL. A store URL returns up to this many product summaries; a product or landing-page URL returns up to this many individual reviews.

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

Newest and oldest use Ryviu's native order and are included in the base row price. Rating, helpfulness, and photo-first orders are custom paid enhancements.

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

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

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

Only keep reviews with at least one public photo or video. This uses Ryviu's native filter and is free with the base row price.

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

Only keep reviews containing at least one photo. Charged as an advanced filter on each delivered review.

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

Only keep reviews containing at least one video. Charged as an advanced filter on each delivered review.

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

Only keep reviews with a publicly available store reply. Charged as an advanced filter on each delivered review.

## `featuredOnly` (type: `boolean`):

Only keep reviews Ryviu marks as featured. Charged as an advanced filter on each delivered review.

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

Only keep reviews published on or after this date (YYYY-MM-DD, inclusive). Reviews without a date are excluded.

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

Only keep reviews published on or before this date (YYYY-MM-DD, inclusive). Reviews without a date are excluded.

## `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. Region tags such as pt-BR and en-US match the base language too. Language detection is also charged when it succeeds.

## `minContentLength` (type: `integer`):

Only keep reviews whose body contains at least this many characters.

## `filterCountries` (type: `array`):

Only keep reviews from these ISO 3166-1 alpha-2 country codes, such as US, GB, or AU.

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

Add a detectedLanguage field when enough review text is available. Charged only when detection succeeds.

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

Translate review titles and bodies into the selected target language. Charged only when translation succeeds.

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

Language code for translated review text, such as en, es, de, ja, or pt-BR.

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

Save up to 10 verified photos or 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.

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

Normalized store host, for example aquasonic.com.

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

Full canonical URL of the store's home page.

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

The URL slug Shopify uses in product paths.

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

Public product name.

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

Canonical link to the product page.

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

URL of the primary product image.

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

Public price shown on the storefront.

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

Storefront currency code, when it can be detected.

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

Whether the product is publicly for sale.

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

Ryviu's product-level average rating.

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

Total number of Ryviu reviews on the product.

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

Review counts broken down by star rating.

## `outputPlanLimit` (type: `boolean`):

The number of reviews Ryviu currently allows the public widget to retrieve, and whether that is below the reported total.

## `outputStoreCounts` (type: `boolean`):

Store-level counts of reviews with media and public store replies.

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

Public review title.

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

Timestamp when the review was posted.

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

Public display name Ryviu shows for the reviewer.

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

Public reviewer country name and country code, when Ryviu exposes them.

## `outputFeatured` (type: `boolean`):

Whether Ryviu marks the review as featured.

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

Public like and dislike counts.

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

Public store reply when its Ryviu response shape is available.

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

Source URLs for customer photos and videos on each review.

## `outputLanguage` (type: `boolean`):

Detected language code when language detection succeeds.

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

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

## Actor input object example

```json
{
  "startUrls": [
    "https://www.aquasonic.com/products/black-series-pro"
  ],
  "maxResultsPerUrl": 50,
  "filterRatings": [],
  "sortBy": "newest",
  "onlyWithMedia": false,
  "onlyWithPhotos": false,
  "onlyWithVideos": false,
  "merchantReplyOnly": false,
  "featuredOnly": false,
  "reviewContent": "all",
  "filterLanguages": [],
  "filterCountries": [],
  "detectLanguage": false,
  "translateReviews": false,
  "translationTarget": "en",
  "downloadMedia": false,
  "outputStoreDomain": true,
  "outputStoreUrl": true,
  "outputProductHandle": true,
  "outputProductTitle": true,
  "outputProductUrl": true,
  "outputProductImageUrl": true,
  "outputPrice": true,
  "outputCurrency": true,
  "outputAvailable": true,
  "outputAverageRating": true,
  "outputReviewCount": true,
  "outputRatingHistogram": true,
  "outputPlanLimit": true,
  "outputStoreCounts": true,
  "outputReviewTitle": true,
  "outputPublishedAt": true,
  "outputReviewerName": true,
  "outputReviewerCountry": true,
  "outputFeatured": true,
  "outputHelpfulVotes": true,
  "outputReply": true,
  "outputMediaUrls": true,
  "outputLanguage": true,
  "outputInputUrl": true
}
```

# Actor output Schema

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

All delivered review, product, store, and explanatory rows.

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

Store and product summary fields.

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

Review text, ratings, reviewer details, and source media.

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

Language, translation, and archived media fields.

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

Review media archived by the media add-on.

# 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.aquasonic.com/products/black-series-pro"
    ],
    "maxResultsPerUrl": 50,
    "sortBy": "newest",
    "reviewContent": "all",
    "translationTarget": "en"
};

// Run the Actor and wait for it to finish
const run = await client.actor("lurkapi/shopify-ryviu-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.aquasonic.com/products/black-series-pro"],
    "maxResultsPerUrl": 50,
    "sortBy": "newest",
    "reviewContent": "all",
    "translationTarget": "en",
}

# Run the Actor and wait for it to finish
run = client.actor("lurkapi/shopify-ryviu-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.aquasonic.com/products/black-series-pro"
  ],
  "maxResultsPerUrl": 50,
  "sortBy": "newest",
  "reviewContent": "all",
  "translationTarget": "en"
}' |
apify call lurkapi/shopify-ryviu-reviews-scraper-api --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/fhSPsVwd3PFXnzsba/builds/9niFcuLqaqnKFsqp3/openapi.json
