# Reviews Monitor: Shopify Review Apps & Amazon (`cleanpull/reviews-monitor`) Actor

New reviews, rating moves and complaint and praise themes for products on Shopify shops using Judge.me, Yotpo, Okendo, Loox or Stamped, for Amazon ASINs and for Trustpilot businesses. Changes-only watchlists, from $0.50 per 1,000 reviews; compact JSON for AI agents.

- **URL**: https://apify.com/cleanpull/reviews-monitor.md
- **Developed by:** [CleanPull](https://apify.com/cleanpull) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.40 / 1,000 product rating summaries

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Reviews Monitor: Shopify Review Apps, Amazon & Trustpilot

Give it **product page URLs from shops that use Judge.me, Yotpo, Okendo, Loox or Stamped** (most Shopify stores), or **Amazon ASINs**, or **businesses on Trustpilot**, and get each product's (or company's) **average rating, review count, share per star**, its **newest reviews** (rating, title, text, date, verified flag, review id) and **complaint and praise themes** such as "sizing runs small" or "arrived damaged", each with example review ids. Schedule it and it says **what changed since your last run**: new reviews, the rating moving, the review count jumping or dropping, a product taken down. From **$0.50 per 1,000 reviews**.

### What you can do with it

- **"Tell me when a competitor gets a bad review."** Put their product URLs in a watchlist, turn on Changes only and schedule it daily: only new reviews come back, with a change row giving their lowest rating.
- **"What do shoppers complain about?"** Every product's summary row lists complaint and praise themes from the reviews read, with how many reviews mention each and which ones.
- **"Is my rating slipping?"** A rating move of 0.1 stars or more, and a review count jumping or dropping by 10% or more, become change rows. Both thresholds are yours to set.
- **"Compare my product with theirs."** Mix your own and competitors' URLs and ASINs in one run: every row has the same fields, whatever the source.
- **"Feed reviews to an AI agent or a spreadsheet."** Compact JSON with stable review keys, a field picker and a dataset view per job.

### How it reads reviews

1. **Shop product pages:** the actor reads the page, finds the review app it uses and the public ids that app's widget needs (shop, app key, subscriber, store id), then reads the same public review data the widget loads in a shopper's browser, newest first:
   - **Judge.me:** reviews from its widget endpoint; totals and stars per level from the widget rendered in the page.
   - **Yotpo:** reviews, totals and stars per level from its widget API.
   - **Okendo:** reviews (with the variant reviewed) and its aggregate with stars per level.
   - **Loox:** reviews and totals from its widget.
   - **Stamped:** reviews and totals from its widget API.
2. **Amazon ASINs:** the product page signed out: star rating, ratings count, the share per star and the top reviews it shows (about 8 to 13). Outside the US, the page is read from addresses in that marketplace's country.
3. **Trustpilot businesses** (a domain such as `allbirds.com`, or its `trustpilot.com/review/…` page): the company's reviews, newest first, with its overall rating, review count and share per star. Trustpilot is read through **CleanPull's marketplace data service**, a third-party web data provider; CleanPull holds the account and its key, which never appears in your input, logs or results.
   - **The newest first, up to `maxReviewsPerProduct`,** within `sinceDays` (the service filters by 30 days, 3, 6 or 12 months, so the smallest of those covering `sinceDays` is asked for, and older reviews are dropped). With Changes only, each business reads only its `trustpilotWatchlistReviews` most recent reviews (5 by default): new ones are returned, the others are reported as re-checked. Raise it for a business that gets more new reviews than that between runs.
   - **Each review delivered, and each recent review re-checked on a watchlist run, is a provider record** on your bill (`RUN_SUMMARY` gives `recheckedReviews`, and the status says "N recent reviews re-checked"). Reviews the service brings back from before `sinceDays` are dropped and not charged per record: the business's provider search covers them. A read takes about 30 to 60 seconds and businesses are read up to 4 at once (`maxConcurrency`), so 100 businesses take about 15 to 25 minutes.
   - With `maxReviewsPerProduct` at 0, one review is read for the company's totals and no review rows are returned.
   - A business with no review in the window gets no totals from the service on that run: the last known rating and count stand.

Reading stops at the first review older than your window (`sinceDays`) or at your limit per product, so a product with 5,000 reviews costs no more than one with 20.

In tests from Apify's servers, every source above answered every request from Apify's own addresses (no proxy needed; Loox refused one datacenter proxy address in three), and a watchlist of 7 products from all six sources read twice gave **no false changes**.

### What makes the data right

- **A block is never an empty result.** Each site gets its own proxy ladder (direct, then datacenter, then residential only where a site blocks the others), so one strict site never makes the rest of the run pricier.
- **New means new.** A review counts as new only when it was not seen before and is not older than what the last run read, so raising your limit is not a flood of "new" reviews. Amazon's top reviews count as new only when written in the last 14 days.
- **Noise is not a change.** Rating moves below 0.1 stars and small count moves are not reported, and a read that lacks a total carries the last one over instead of reading as a change.
- **Removed is confirmed.** A product page that answers 404 or redirects away is reported as removed only when two runs in a row see it; the first is a warning and is not billed. A redirect to the same brand's site for another country (brand.com to brand.co.uk) is followed.
- **Themes are reproducible.** They are computed in the actor with keyword and phrase matching (no AI call), with a negation check ("not comfortable" is no praise), so the same reviews always give the same themes.
- **Each review once.** A review a source repeats within one read (Trustpilot's data can hold a review twice) is delivered, counted in themes and charged once, by its id.
- **Only delivered rows are billed.** A page without a supported review app, a block or a missing product is listed in the run summary with the reason, never charged.
- **Only public addresses are read.** A URL or redirect pointing into a private network is never fetched, and no site gets more than 2 requests at once.

### Privacy: reviewer names

Reviewer names are personal data, so **they are off by default** (`includeReviewerNames: false`). Review rows still carry the review id, rating, text, date and verified flag, which is what themes, alerts and comparisons need. Turn names on only if you have a lawful reason to process them; you then get the display name the source itself shows publicly (often a first name and an initial), never anything more.

### Input

| Field                                            | What it does                                                                                               |
| ------------------------------------------------ | ---------------------------------------------------------------------------------------------------------- |
| `productUrls`                                    | Product pages of shops using Judge.me, Yotpo, Okendo, Loox or Stamped; Amazon product URLs too             |
| `asins`, `amazonMarketplace`                     | Amazon ASINs (or URLs), and the marketplace for plain ASINs (US by default)                                |
| `trustpilotDomains`                              | Businesses on Trustpilot: domains or trustpilot.com/review/… pages (those URLs also work in `productUrls`) |
| `sinceDays`                                      | Only reviews from the last N days (30 by default)                                                          |
| `maxReviewsPerProduct`                           | The most reviews per product (20 by default; 0 = the rating summary only)                                  |
| `trustpilotWatchlistReviews`                     | With Changes only, the most recent Trustpilot reviews read per business (5 by default)                     |
| `includeThemes`                                  | Complaint and praise themes on each summary row (on by default)                                            |
| `includeReviewerNames`                           | The public display name on each review (off by default, see Privacy)                                       |
| `changesOnly`, `monitorName`                     | Return only what changed since the last run with the same monitor name                                     |
| `minRatingChange`, `countJumpPercent`            | Noise thresholds: smallest rating move (0.1 stars) and count move (10%, at least 3 reviews)                |
| `maxRunCostUsd`                                  | Stop starting products once the run's charges plus the worst case in progress would pass this              |
| `fields`, `maxConcurrency`, `proxyConfiguration` | Field selection, pace and your own proxy                                                                   |
| `startUrls`                                      | Accepted for compatibility with other actors (same as `productUrls`)                                       |

#### Example inputs

A competitor watchlist, checked daily for new reviews:

```json
{
  "productUrls": [
    "https://www.beardbrand.com/products/beard-oil-variety-pack",
    "https://www.tentree.com/products/kessler-sweater-warm-oak-heather-fade"
  ],
  "asins": ["B07C1YFV6D"],
  "changesOnly": true,
  "monitorName": "competitors",
  "maxRunCostUsd": 0.5
}
```

The last 90 days of reviews with themes, up to 100 per product:

```json
{
  "productUrls": ["https://mvmt.com/products/odyssey-ii-ceramic-fusion-grey-40mm-28000461"],
  "sinceDays": 90,
  "maxReviewsPerProduct": 100
}
```

Ratings only (average, count, share per star) for a list of ASINs in the UK:

```json
{ "asins": ["B000MXIB0G"], "amazonMarketplace": "GB", "maxReviewsPerProduct": 0 }
```

### Output

Three kinds of rows; `recordType` says which. A real rating summary:

```json
{
  "recordType": "rating-summary",
  "source": "yotpo",
  "sourceName": "Yotpo",
  "productUrl": "https://mvmt.com/products/odyssey-ii-ceramic-fusion-grey-40mm-28000461",
  "productKey": "cbf4e98e01272e1b",
  "domain": "mvmt.com",
  "productTitle": "Odyssey II Ceramic Fusion Grey 40mm",
  "productId": "10221707821304",
  "average": 4.83,
  "count": 6,
  "histogram": { "1": 0, "2": 0, "3": 0, "4": 1, "5": 5 },
  "histogramUnit": "count",
  "reviewsRead": 5,
  "newReviews": 0,
  "newestReviewDate": "2026-09-08T00:00:00.000Z",
  "oldestReviewDate": "2025-11-30T00:00:00.000Z",
  "themes": [
    {
      "theme": "uncomfortable",
      "polarity": "complaint",
      "kind": "known",
      "reviews": 1,
      "share": 0.2,
      "exampleReviewIds": ["882971486"]
    },
    {
      "theme": "looks great",
      "polarity": "praise",
      "kind": "known",
      "reviews": 4,
      "share": 0.8,
      "exampleReviewIds": ["894671816", "882971386", "882971411"]
    }
  ],
  "topComplaints": ["uncomfortable"],
  "topPraise": ["looks great", "durable"],
  "changes": [],
  "firstSeen": false,
  "readThroughResidentialProxy": false,
  "scrapedAt": "2026-10-14T23:13:47.822Z"
}
```

A review:

```json
{
  "recordType": "review",
  "source": "okendo",
  "sourceName": "Okendo",
  "productUrl": "https://www.tentree.com/products/kessler-sweater-warm-oak-heather-fade",
  "productTitle": "Womens Kessler Sweater",
  "reviewId": "0c3c5dc4-3d01-4c81-8590-4ee671ba3fda",
  "reviewKey": "9f2f9369161887dd4a52eaa1ee1bee61234851ca23a6c435bde0572cf4c94663",
  "rating": 5,
  "title": "Girlfriend love it",
  "text": "Same old quality as tentree always offered",
  "date": "2026-10-14T12:23:30.510Z",
  "verified": true,
  "variant": "DEEP BURGUNDY HEATHER FADE / XS",
  "helpfulVotes": 0,
  "language": "en",
  "isNew": null,
  "scrapedAt": "2026-10-14T23:15:03.782Z"
}
```

A change looks like `{ "recordType": "change", "changeType": "new-reviews", "newReviews": 2, "reviewIds": ["r3", "r2"], "lowestRating": 1, "averageOfNew": 1.5 }`; the other types are `rating-moved` (`from`, `to`, `delta` in stars), `count-jumped` and `count-dropped` (`delta`, `percent`) and `removed`.

- `histogramUnit` is `count` for the review apps and `percent` for Amazon (Amazon publishes shares, not counts). Stamped and Loox publish no counts per star (`histogram: null`).
- `isNew` is `null` on a product's first run (the baseline), then `true` or `false`.
- `reviewKey` is a SHA-256 of source, product and review id: stable across runs, for joining and deduplication.
- Also: `asin`, `marketplace` (Amazon), `finalUrl` (after a redirect), `country` (Amazon, Stamped), `mediaCount`, `previous` (last run's average and count, on rows with changes).

Dataset views: **Rating summaries**, **Reviews**, **Changes** and **Themes** (one row per theme). `RUN_SUMMARY` in the key-value store gives the outcome (`COMPLETE`, `PARTIAL`, `NO_CHANGES`, `EMPTY`, `FAILED`), the sources seen, charges, and every product that could not be read, with the reason.

### Pricing

| Event                                                                             | Free and Bronze | Silver | Gold and above |
| --------------------------------------------------------------------------------- | --------------- | ------ | -------------- |
| Product rating summary (one product read, with totals, stars and themes)          | $3.00           | $2.70  | $2.40          |
| Review                                                                            | $0.50           | $0.45  | $0.40          |
| Product checked: unchanged in Changes only, or a removal confirmed                | $0.50           | $0.45  | $0.40          |
| Request through residential addresses (add-on, only where a site blocks others)   | $6.00           | $6.00  | $6.00          |
| Provider record (a Trustpilot review delivered, or re-checked on a watchlist run) | $3.00           | $2.70  | $2.40          |
| Provider search (one Trustpilot business read)                                    | $3.00           | $3.00  | $3.00          |

Per 1,000. Each run also has a $0.00005 start fee. The add-on applies per request a site made us send through residential addresses; such requests are capped at 600 KB transferred (a larger page is not read or charged). In tests no review app or US Amazon page needed it; Amazon outside the US is read from that country's residential addresses, so each of those products carries one or two. Change rows (new reviews, rating moved, count jumped or dropped) are free: they come with the product's rating summary. A removed product's row is billed as a product check. Trustpilot's provider search and re-checked reviews are billed with the business's first row (or its check), and a delivered review's provider record with its row; a read that fails or is blocked is not billed. A Trustpilot business on a daily watchlist with the default 5 reviews costs at most $0.0185 on a day with nothing new (a check, a search and 5 re-checked reviews): about $0.56 a month. A daily watchlist of 100 products with Changes only is about 3,000 checks a month: $1.50, plus the summaries and new reviews on days something changed.

### Limits

- **Sources this actor does not read:** Amazon's full review list needs a sign-in; Google Shopping publishes reviews only inside pages that need a browser running scripts. Undated Amazon reviews (a date line Amazon wrote in a way the actor cannot read) never count as new. Pages from shops using Bazaarvoice, Junip, REVIEWS.io, PowerReviews and other apps are named in the run summary and not charged.
- **Review apps loaded from a theme's own scripts** (some large stores) expose no ids in the page; the run summary says so.
- **Loox** shows no review dates in some widget layouts: those reviews are not cut by `sinceDays` (the limit per product still applies), and stars per level are not published.
- **Judge.me** shops can group several products under one review set (for example one per scent); the totals and reviews are the group's, as the shop shows them.
- **Amazon** shows the top reviews, not the newest, and sometimes leaves them out of a page: the actor then reads the page's sections, and a run where Amazon still shows none delivers the rating summary with a warning.
- **Pace:** at most 2 requests at once per site. Read at a pace and scale the sites' terms allow.
- **Nothing found**: when nothing could be read because it is not there (a product page that is gone, a page with no supported review app, input naming no product), the run still succeeds, with one free `recordType: "unreadable"` row per item giving the `reason`; nothing is charged. A run near its time limit stops starting products, delivers what it read and lists the rest the same way.

### Changelog

- **0.2.x, reliability** (2026-10-24): runs that find nothing (a product page that is gone, a page with no supported review app, input naming no product) end SUCCEEDED with a free `unreadable` row per item saying why, instead of FAILED; a run stops starting products before its time limit and ends with what it read, never TIMED-OUT. A run where the site refused on every route for every product still fails. Prices and events unchanged.
- **0.2, fix** (23 October 2026): a review the source delivers twice in one read is kept once (Trustpilot could return the same 10 reviews twice, doubling rows, theme counts and charges).
- **0.2** (October 2026): Trustpilot businesses, read through CleanPull's marketplace data service (no setup): reviews newest first, incremental between runs, with the company's rating, count and share per star. New events: provider record (a review delivered, or re-checked on a watchlist run; reviews dropped by the date filter are not charged) and provider search ($0.003 per business read). Watchlists read 5 recent reviews per business by default (`trustpilotWatchlistReviews`).
- **0.1** (October 2026): reviews and totals from Judge.me, Yotpo, Okendo, Loox and Stamped widget data and from Amazon product pages; complaint and praise themes; watchlists with new reviews, rating and count changes and confirmed removals; spending-limit and per-run cost caps; reviewer names off by default.

# Actor input Schema

## `productUrls` (type: `array`):

Product page addresses, one per line, from shops whose reviews come from Judge.me, Yotpo, Okendo, Loox or Stamped (most Shopify stores). The actor finds the review app on the page and reads its public review data. Amazon product URLs work here too.

## `asins` (type: `array`):

Optional. Amazon ASINs (or product URLs), one per line. Each gives the star rating, ratings count, share per star and the top reviews the product page shows. Amazon's full review list needs a sign-in and is not read.

## `trustpilotDomains` (type: `array`):

Optional. Businesses' domains (allbirds.com) or Trustpilot review pages (trustpilot.com/review/allbirds.com), one per line. Their Trustpilot reviews, newest first, with the company's rating, count and share per star. Read through CleanPull's marketplace data service: about 30 to 60 seconds per business, and each review read is a provider record.

## `amazonMarketplace` (type: `string`):

The marketplace for plain ASINs (URLs keep their own). Outside the US, pages are read through addresses in that country (residential add-on).

## `sinceDays` (type: `integer`):

Only reviews written in this many days. Reviews are read newest first and reading stops at the first older one.

## `maxReviewsPerProduct` (type: `integer`):

The most reviews returned per product. 0 returns the rating summary only (average, count, share per star).

## `trustpilotWatchlistReviews` (type: `integer`):

With Changes only, the most recent Trustpilot reviews read per business on each run (and never more than Reviews per product). New ones are returned; the others are re-checked and charged as provider records, so keep it small. Raise it for a business that gets more new reviews than this between runs.

## `includeThemes` (type: `boolean`):

Group the reviews read into themes such as "sizing runs small", "arrived damaged" or "great quality", with example review ids, on each product's summary row. Computed in the actor with keyword and phrase matching; no extra cost.

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

Off by default: reviewer names are personal data. On: each review row also gets the display name the source itself shows publicly (often a first name and initial). Turn it on only if you have a lawful reason to process names.

## `changesOnly` (type: `boolean`):

Return only what changed since the last run with the same monitor name: new reviews, the rating moving, the review count jumping or dropping, a product removed. The first run is the baseline. Products with nothing new cost $0.50 per 1,000. Schedule it daily or weekly.

## `monitorName` (type: `string`):

Runs with the same name compare against each other. Use one name per watchlist.

## `minRatingChange` (type: `number`):

A rating move smaller than this is not reported (averages wobble by a hundredth as reviews come in). Amazon shows one decimal.

## `countJumpPercent` (type: `number`):

Report the review count jumping (or dropping) when it moves by at least this percentage and at least 3 reviews since the last run. 0 reports any move.

## `maxRunCostUsd` (type: `number`):

Optional. Stop starting new products once a run's charges, plus the most the products in progress could still cost, would pass this. Use it for scheduled runs, which may have no spending limit of their own. Empty: only the run's spending limit applies.

## `fields` (type: `array`):

Optional. Keep only these fields, for example \["productUrl", "rating", "text", "date"]. recordType is always kept.

## `maxConcurrency` (type: `integer`):

Products read in parallel. No site gets more than 2 requests at once.

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

Optional. The actor picks proxies itself per site: direct, then datacenter, then residential only for sites that block the others.

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

Optional. Accepted for compatibility with other actors: product URLs, same as Product URLs.

## Actor input object example

```json
{
  "productUrls": [
    "https://www.beardbrand.com/products/beard-oil-variety-pack",
    "https://www.tentree.com/products/kessler-sweater-warm-oak-heather-fade"
  ],
  "asins": [
    "B07C1YFV6D"
  ],
  "amazonMarketplace": "US",
  "sinceDays": 30,
  "maxReviewsPerProduct": 20,
  "trustpilotWatchlistReviews": 5,
  "includeThemes": true,
  "includeReviewerNames": false,
  "changesOnly": false,
  "monitorName": "default",
  "minRatingChange": 0.1,
  "countJumpPercent": 10,
  "maxConcurrency": 4
}
```

# Actor output Schema

## `results` (type: `string`):

Rating summaries, reviews and changes (recordType says which).

## `summaries` (type: `string`):

No description

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

No description

## `changes` (type: `string`):

No description

## `themes` (type: `string`):

No description

## `summary` (type: `string`):

Outcome (COMPLETE, PARTIAL, NO_CHANGES, EMPTY, FAILED), counts, charges and every product that could not be read, with the reason.

# 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 = {
    "productUrls": [
        "https://www.beardbrand.com/products/beard-oil-variety-pack",
        "https://www.tentree.com/products/kessler-sweater-warm-oak-heather-fade"
    ],
    "asins": [
        "B07C1YFV6D"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("cleanpull/reviews-monitor").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 = {
    "productUrls": [
        "https://www.beardbrand.com/products/beard-oil-variety-pack",
        "https://www.tentree.com/products/kessler-sweater-warm-oak-heather-fade",
    ],
    "asins": ["B07C1YFV6D"],
}

# Run the Actor and wait for it to finish
run = client.actor("cleanpull/reviews-monitor").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 '{
  "productUrls": [
    "https://www.beardbrand.com/products/beard-oil-variety-pack",
    "https://www.tentree.com/products/kessler-sweater-warm-oak-heather-fade"
  ],
  "asins": [
    "B07C1YFV6D"
  ]
}' |
apify call cleanpull/reviews-monitor --silent --output-dataset

```

## MCP server setup

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

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/8wEZE5kw4B01lTsnD/builds/z4ZsvXj4MWhOseYdd/openapi.json
