# Loox Reviews Scraper (`piotrv1001/loox-reviews-scraper`) Actor

The Loox Reviews Scraper exports product reviews from Shopify stores using Loox — star ratings, full text, dates, merchant replies, and every customer photo and video link, with rating, media and date filters. Ideal for product research, review monitoring and UGC collection.

- **URL**: https://apify.com/piotrv1001/loox-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.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/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

### 🚀 Loox Reviews Scraper

Export product reviews from any Shopify store that uses Loox. The **Loox Reviews Scraper** turns a product URL into structured reviews with star ratings, full review text, dates, merchant replies, and every customer photo and video. Use it for product research, competitor review analysis, sentiment tracking and collecting user-generated content.

### ✨ Features

- ⭐ **Complete reviews**: rating, full review text (not the shortened card text), publish date, verified badge, merchant reply and the "Item type" or other product option the reviewer picked.
- 📸 **All photos and videos**: every full-size customer photo of a review, plus a video player link and poster image for video reviews.
- 🎯 **Product or whole store**: collect the reviews shown for one product, or the store's full product-review feed with the reviewed product named on each row.
- 🔍 **Filters included**: star ratings, reviews with photos/videos or videos only, and "only newer than" a date. No extra charge for filtering.
- 📋 **Coverage summary**: for each URL, the `SUMMARY` record lists the advertised review count, how many reviews were checked and returned, and why collection stopped. An empty or failed feed is never reported as "zero reviews".
- 🔒 **Privacy by default**: reviewer names are left out unless you switch them on, and personal custom answers (age, body measurements, location…) are never exported.

### 🛠️ How It Works

1. **Enter product URLs**: paste product pages from Shopify stores that show Loox reviews (e.g. `https://citybonfires.com/products/the-chair-blanket`).
2. **Choose scope and filters**: keep the default "This product", or switch to "All products in the store". Optionally filter by stars, media or date.
3. **Set a limit**: "Maximum reviews" caps the reviews returned across all URLs (default 50).
4. **Run the scraper**: reviews go to the dataset. The per-URL coverage report goes to the `SUMMARY` record in the key-value store.

### ⚙️ Input

| Field | Description |
|---|---|
| `startUrls` | Product page URLs of Shopify stores using Loox. |
| `maxReviews` | Maximum reviews returned across all URLs. Default 50. |
| `scope` | `product` (default): reviews shown for this product. `allProducts`: the store's whole product-review feed. |
| `ratings` | Only these star ratings, e.g. `["1","2"]`. |
| `media` | `any` (default), `withMedia` (photos or videos) or `withVideo`. |
| `newerThan` | Only reviews published on or after this date. Stores that hide dates keep their reviews, with `publishedAt: null`. |
| `includeReviewerNames` | Add the public display name (e.g. "Ann B."). Off by default. |

Filters are checked against the reviews Loox returns. A very selective filter therefore stops after checking about 10 × "Maximum reviews" + 200 reviews per URL. The log and `SUMMARY` show this as `scanLimit`.

### 📊 Sample Output Data

```json
[
    {
        "reviewId": "GWbsJnDZs",
        "rating": 5,
        "body": "We have eight of these chair blankets so far … they work just as well inside the camper as outside",
        "publishedAt": "2026-06-07T10:06:20.865Z",
        "isVerified": true,
        "isAutoTranslated": false,
        "reviewedProductName": null,
        "options": [],
        "mediaType": "photo",
        "media": [
            { "type": "photo", "url": "https://images.loox.io/uploads/2026/6/7/LfJDtbrcw.jpg" }
        ],
        "merchantReply": {
            "author": "City Bonfires",
            "text": "Thank you so much for your continued support! Having so many chair blankets in your collection truly means a lot to us. We appreciate you being part of our community and hope they continue to bring comfort wherever your adventures take you."
        },
        "scope": "product",
        "requestedProductId": "7963925577914",
        "productTitle": "The Chair Blanket",
        "productUrl": "https://citybonfires.com/products/the-chair-blanket",
        "shopDomain": "portable-bonfire-store.myshopify.com",
        "inputUrl": "https://citybonfires.com/products/the-chair-blanket",
        "scrapedAt": "2026-09-23T06:20:50.033Z"
    },
    {
        "reviewId": "LRiOxvSpqf",
        "rating": 4,
        "body": "This eye cream is my absolute favorite! It smells great, it gives a nice, bright glow to your face, and plumps your skin with hydration.",
        "publishedAt": null,
        "isVerified": true,
        "mediaType": "video",
        "media": [
            {
                "type": "video",
                "url": "https://iframe.videodelivery.net/fdcef18fdd484d78bba062ce57dc8933",
                "thumbnailUrl": "https://images.loox.io/uploads/2023/9/13/LRiOxvSpqf.jpg"
            }
        ],
        "merchantReply": null,
        "scope": "product",
        "requestedProductId": "7213754253375"
    }
]
```

#### Good to know

- **Video links** open the hosted video player. They are not direct MP4 files, and the scraper downloads no media.
- **Dates** are empty when the store hides them in its review widget.
- **Verified**: `isVerified` is `true` when Loox shows the verified badge and `null` otherwise. A missing badge does not prove the buyer is unverified.
- **Grouped products**: stores can show the same reviews on related products or bundles. "This product" returns what Loox shows for that product.
- **Translations**: `isAutoTranslated: true` marks reviews that Loox shows machine-translated into the store's language.

### 💰 Pricing

Pay per event: **$1.50 per 1,000 reviews** returned, filters included, plus a tiny actor start fee ($0.00005). You only pay for reviews delivered to your dataset.

Start collecting **Loox reviews** with the **Loox Reviews Scraper** today! 🚀

# Actor input Schema

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

Product pages of Shopify stores that show Loox reviews.

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

Maximum number of reviews returned across all URLs.

## `scope` (type: `string`):

'This product' returns the reviews Loox shows for the product (stores can group related products or bundles). 'All products in the store' returns the store's full product-review feed and names the reviewed product on each row.

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

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

## `media` (type: `string`):

Only return reviews with customer photos or videos.

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

Only return reviews published on or after this date. Some stores hide review dates; their reviews are kept with an empty publishedAt.

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

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

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

Proxy servers used to load pages. Residential proxies are recommended.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://citybonfires.com/products/the-chair-blanket"
    }
  ],
  "maxReviews": 50,
  "scope": "product",
  "media": "any",
  "includeReviewerNames": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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://citybonfires.com/products/the-chair-blanket"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/loox-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://citybonfires.com/products/the-chair-blanket" }],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("piotrv1001/loox-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://citybonfires.com/products/the-chair-blanket"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call piotrv1001/loox-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,piotrv1001/loox-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/nWdNaCf6rqIzkiXbX/builds/pfDBDIzOnaL4c2Wlf/openapi.json
