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

Scrape Ali Reviews, product Q\&A, AI review summaries, and product ratings from Shopify stores.

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

Pull every public Ali Reviews review from any Shopify store into one clean spreadsheet. A store-wide sweep of a rival's launch quarter, the full review history for a single SKU, or a recurring agency export across a client roster. Ready to filter, sort, and download in minutes.

### 🎬 What it does

Paste a Shopify store URL or a product URL. Get back reviews in a spreadsheet.

Two kinds of input:

1. **Store URL** returns the store-wide review feed, every public review across the whole catalog in one stream. Good for competitor sweeps, launch-quarter audits, and building review datasets fast.
2. **Product URL** returns every individual review on that exact product. Good for quote pulls, monthly agency reports, and single-SKU deep dives.

Shape the results before you pay for them:

- **Free filters and sorts**: keep any mix of 1 to 5 stars, and search review text for a phrase like "refund", "sizing", or "gift". Sort by featured, newest, oldest, highest rating, lowest rating, most helpful, media-first, or content-first. All of these run on the storefront itself, so they never add a charge.
- **Paid media and reply filters**: photos only, videos only, either type of media, or reviews the store publicly replied to.
- **Paid date, content, country, source, and language filters**: narrow to a date window, keep only written reviews or only ratings without text, pick reviewer countries, split imported marketplace reviews from store-collected ones, or keep only the languages you actually read.
- **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.
- **Paid optional insights**: add public product Q\&A rows and the merchant's AI review summary rows.

Duplicate URLs collapse automatically once store identity is resolved, so a store URL and one of its product URLs in the same run never charges you twice. Status rows are always free.

Good for: Shopify founders watching their own reviews week over week, CMOs auditing a rival'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. Custom domains work as well as `myshopify.com` addresses. Duplicates are cleaned up so you never pay twice for the same store or product.

- **Store URL**: `https://www.plenthera.com/`
- **Product URL**: `https://www.plenthera.com/products/green-pasture-concentrated-butter-oil-boterolie-120-caps`

Minimum input, run as-is:

```json
{
  "startUrls": [
    "https://www.plenthera.com/products/green-pasture-concentrated-butter-oil-boterolie-120-caps"
  ],
  "maxResultsPerUrl": 50
}
```

`maxResultsPerUrl` is the only limit you need. Default 50, max 50,000. It caps review rows for every input URL, and product questions get the same separate cap.

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

Free filters and sorts (sent straight to the storefront):

- **Star rating filter**: keep any combination of 1 to 5 stars.
- **Review text search**: keep only reviews matching your phrase.
- **Sort order**: Featured, Newest, Oldest, Highest rating, Lowest rating, Most helpful, With media first, or Most content first.

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

- **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 published between two dates.
- **Written vs rating-only**: only reviews with text, or only star-ratings without text.
- **Reviewer country filter**: only reviews from the ISO-2 country codes you pick.
- **Review source filter**: only imported marketplace reviews, or only store-collected reviews.
- **Language filter**: only reviews in the languages you pick.
- **Language detection**: adds a language tag to each delivered written review, billed only when detection succeeds.
- **Translation**: uses the store's own published translation first, for free. A paid translator runs only when the store has none, and is billed only when it returns text.
- **Media archiving**: downloads and stores up to 10 photos or videos per review (3 MB per file cap), billed only per file stored.
- **Product Q\&A**: adds public questions and merchant answers as their own rows, when the store has Q\&A enabled.
- **AI review summaries**: adds the merchant's public AI summary and sentiment keywords, when the store has one prepared.

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

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

- **Overview**: high-level shape of every row.
- **Products**: product-level summary rows.
- **Reviews**: one row per review.
- **Questions and answers**: public Q\&A rows.
- **Language & Media**: detected languages, translated text, and archived media.

Every row starts with a plain-English `status` field, and `rowType` tells you what kind of row it is:

- `review`: a standard review row.
- `question`: a public product Q\&A row.
- `product`: a product summary or AI review summary row.
- `status`: an explanatory row for an unsupported store, an empty result, or a rejected URL.

Explanatory rows carry a stable `error` value such as `store_not_supported`, `no_matching_reviews`, `product_unavailable`, or `invalid_input`, so you can spot and fix problems without reading the logs. They are never charged.

Download as JSON, CSV, or Excel from the Storage tab, or pull them 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 Actor start |
| Review | **$1.50 per 1,000 rows** | per review, question, or AI summary row delivered |
| Add-on: Advanced filter | **$0.50 per 1,000 rows** | per delivered review a paid filter kept |
| 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 the paid fallback actually translated |
| Add-on: Media downloaded | **$1.00 per 1,000 files** | per media file archived successfully |
| Add-on: Question scraped | **$1.50 per 1,000 rows** | per public Q\&A row delivered |
| Add-on: AI summary | **$2.00 per 1,000 rows** | per ready AI review summary delivered |

Rating filters, review text search, every sort order, source photo and video URLs, the store's own published translations, and status rows are all free.

### 💡 Good to know

- **Store URLs return the store-wide review feed.** A store scan streams reviews across the whole catalog rather than one summary row per product, so a single store URL is the fastest way to pull a competitor's full review history.
- **Import provenance is exposed.** Ali Reviews lets merchants import reviews from AliExpress and Amazon. `sourceMarketplace` and its source ID tell you which rows were imported and which the store collected itself, and the paid **Review source** filter can keep just one kind.
- **Dedup is automatic**. The same store or product reached through several URL variants (custom domain, `www.`, trailing slash, extra query strings, mixed case) is fetched once, after the canonical store identity is resolved.
- **Not on Ali Reviews?** You get one uncharged status row. When the Actor spots a supported sibling widget on the store, the row names the matching tool to run instead.
- **Featured reviews stay pinned.** The storefront keeps its featured reviews at the top of the feed regardless of the sort you pick. Your chosen sort applies to everything after that block.
- **Status rows are never charged**. Unsupported stores, empty filtered results, and rejected URLs come back with a stable `error` value that explains the fix.
- **Field coverage matches the source**. Ali Reviews does not publish review titles or a verified-buyer badge, so those fields do not exist here. If the storefront did not publish a value, the field comes back `null`. Fields you toggle off in the 📦 Output fields section are omitted from the row entirely.
- **Media limits are strict**. Up to 10 files per review, 3 MB per file. Public photo and video URLs are always free in `imageUrls` and `videoUrls`; archiving the actual files is the paid part.
- **Q\&A and AI summaries depend on the merchant.** Both are optional storefront features. If the store has Q\&A switched off, or has not prepared an AI summary, those rows simply do not appear and nothing is charged.
- **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 an Ali Reviews or Shopify account?**
No. Only publicly published storefront and review data is read.

**What if a store does not use Ali Reviews?**
You get one uncharged status row that explains it. When the Actor detects a different supported review app on the store, the row names the sibling scraper to run instead.

**What if a product has no reviews?**
You get a status row that says no reviews matched. It is not charged.

**Why is a translation missing?**
The store's own published translation is used first and is free. A paid translation runs only when the store has not published one for your target language, and it is billed only when it returns text.

**Why are there no Q\&A or AI summary rows?**
Both are optional merchant features. Q\&A rows appear only when the store has Q\&A enabled for that product, and AI summary rows appear only when the merchant has a prepared summary published.

**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.

**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 Ali Reviews and whose public storefront is 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 Okendo Reviews Scraper API](https://apify.com/lurkapi/shopify-okendo-reviews-scraper-api): same job for stores running Okendo.
- [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 Judge.me Reviews Scraper API](https://apify.com/lurkapi/shopify-judge-me-reviews-scraper-api): same job for stores running Judge.me.

### ⚖️ Disclaimer

This tool is intended for personal, research, and educational use. You are responsible for complying with Shopify's and Ali Reviews' 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, ali reviews, shopify review scraper, ali reviews scraper, aliexpress review export, product reviews export, shopify product ratings, review dataset, review sentiment data, shopify catalog audit, ecommerce review data

# Actor input Schema

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

Paste Shopify store URLs for store-wide reviews or product URLs for individual product reviews. Custom domains are supported.

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

Maximum review rows for each input URL. Product questions use the same separate per-input cap.

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

Only return reviews with selected ratings. This is a free filter.

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

Return reviews matching this phrase. This is a free search.

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

Choose the storefront's review order. Featured reviews may remain pinned at the beginning.

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

Only return reviews containing a photo or video. Charged only on delivered matching rows.

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

Only return reviews containing at least one photo.

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

Only return reviews containing at least one video.

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

Only return reviews marked as having a public merchant reply.

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

Only return reviews published on or after this date, inclusive.

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

Only return reviews published on or before this date, inclusive.

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

Return every review, only written reviews, or only rating-only reviews.

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

Only return reviews from these ISO-2 country codes, such as US, GB, or BR.

## `filterSource` (type: `string`):

Return all reviews, imported marketplace reviews, or store-collected reviews.

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

Only return reviews detected in these ISO language codes, such as en, es, or pt-BR.

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

Detect the language of each delivered written review.

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

Add a translation to each delivered review. The store's own published translation is used first and is free. Paid translation runs only when the store has none, and is charged only when it actually returns translated text.

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

Target language code such as en, es, de, ja, or pt-BR.

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

Save up to 10 verified photos or videos per review, at most 3 MB each, to the run's key-value store.

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

Add public product questions and merchant answers when the store has Q\&A enabled. Charged per delivered question row.

## `includeAiSummary` (type: `boolean`):

Add the merchant's public AI review summary and sentiment keywords when ready. Charged once per delivered summary.

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

Canonical myshopify.com domain.

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

Public storefront URL used for this result.

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

Shopify product URL slug.

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

Public product title.

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

Canonical public product URL.

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

Primary public product image URL.

## `outputProductDescription` (type: `boolean`):

Plain-text public product description.

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

Public product price.

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

Store currency code when available.

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

Whether the product is publicly available.

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

Product-level average rating.

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

Product-level public review count.

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

Counts for ratings one through five.

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

Public reviewer display name.

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

Public ISO-2 reviewer country code.

## `outputReviewerAvatar` (type: `boolean`):

Absolute public avatar URL when available.

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

Review publication and pin timestamps.

## `outputPinned` (type: `boolean`):

When the review was pinned, when applicable.

## `outputHelpfulCounts` (type: `boolean`):

Public like and dislike counts.

## `outputSourceMarketplace` (type: `boolean`):

Whether the review was imported from Amazon or AliExpress, plus its source ID.

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

Reply flag and public reply text when available.

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

Public photo and video source URLs.

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

Original language code when available.

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

Original URL that produced the row.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.plenthera.com/products/green-pasture-concentrated-butter-oil-boterolie-120-caps"
  ],
  "maxResultsPerUrl": 50,
  "filterRatings": [],
  "sortBy": "featured",
  "onlyWithMedia": false,
  "onlyWithPhotos": false,
  "onlyWithVideos": false,
  "merchantReplyOnly": false,
  "reviewContent": "all",
  "filterCountries": [],
  "filterSource": "all",
  "filterLanguages": [],
  "detectLanguage": false,
  "translateReviews": false,
  "translationTarget": "en",
  "downloadMedia": false,
  "includeQuestions": false,
  "includeAiSummary": false,
  "outputStoreDomain": true,
  "outputStoreUrl": true,
  "outputProductHandle": true,
  "outputProductTitle": true,
  "outputProductUrl": true,
  "outputProductImageUrl": true,
  "outputProductDescription": true,
  "outputPrice": true,
  "outputCurrency": true,
  "outputAvailable": true,
  "outputAverageRating": true,
  "outputReviewCount": true,
  "outputRatingHistogram": true,
  "outputReviewerName": true,
  "outputReviewerCountry": true,
  "outputReviewerAvatar": true,
  "outputPublishedAt": true,
  "outputPinned": true,
  "outputHelpfulCounts": true,
  "outputSourceMarketplace": true,
  "outputReply": true,
  "outputMediaUrls": true,
  "outputOriginalLanguage": true,
  "outputInputUrl": true
}
```

# Actor output Schema

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

Mixed table of products, reviews, and explanatory rows.

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

One product summary per public store product.

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

One row per public review.

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

One row per public product question, with the merchant answer when available.

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

Language, translations, and archived file references.

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

Review media archived by this run.

# 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.plenthera.com/products/green-pasture-concentrated-butter-oil-boterolie-120-caps"
    ],
    "maxResultsPerUrl": 50,
    "filterRatings": [],
    "sortBy": "featured",
    "filterCountries": [],
    "filterLanguages": [],
    "translationTarget": "en"
};

// Run the Actor and wait for it to finish
const run = await client.actor("lurkapi/shopify-ali-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.plenthera.com/products/green-pasture-concentrated-butter-oil-boterolie-120-caps"],
    "maxResultsPerUrl": 50,
    "filterRatings": [],
    "sortBy": "featured",
    "filterCountries": [],
    "filterLanguages": [],
    "translationTarget": "en",
}

# Run the Actor and wait for it to finish
run = client.actor("lurkapi/shopify-ali-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.plenthera.com/products/green-pasture-concentrated-butter-oil-boterolie-120-caps"
  ],
  "maxResultsPerUrl": 50,
  "filterRatings": [],
  "sortBy": "featured",
  "filterCountries": [],
  "filterLanguages": [],
  "translationTarget": "en"
}' |
apify call lurkapi/shopify-ali-reviews-scraper-api --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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