# Review Discovery — Find a Brand's Review Profiles (`memo23/review-discovery-scraper`) Actor

Look up any brand and instantly see where it has review profiles — App Store, Google Play, Trustpilot, Trustmate & more — each with its score, review count, profile URL and a link to the matching scraper. One call maps a brand's whole review footprint. JSON/CSV

- **URL**: https://apify.com/memo23/review-discovery-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Lead generation, AI, Agents
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Review Discovery — Find a Brand's Review Profiles Across Platforms

<p align="center"><img src="https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/review-discovery-card.png" alt="Review Discovery" width="720"></p>

Give it a brand name (and ideally a domain), and it tells you **where that brand has review profiles** — App Store, Google Play, Trustpilot, Trustmate and more — each with the **score, review count, profile URL**, and a link to the dedicated scraper that pulls that platform in full. One call, every platform, no hunting.

| You give it | You get back (one row per platform) |
|---|---|
| `brands: ["Notion"]`, `domain: "notion.so"` | App Store 4.8★/87k · Google Play 4.6★/374k · Trustpilot 2.3★/416 · Trustmate … · plus a funnel link per platform |

> A presence map, not a full scrape. It answers "where is this brand reviewed, and how well?" in seconds — then hands you the exact actor to pull the reviews.

### Why use it

- **One lookup, every platform.** Stop checking Trustpilot, the App Store, Google Play, etc. one by one — get them all in a single run.
- **Live scores where it counts.** App Store, Google Play, Trustpilot and Trustmate return the real rating + review count via their public/official endpoints.
- **A built-in funnel.** Every row carries a `runWith` field pointing at the dedicated scraper for that platform — so discovery flows straight into full extraction.
- **Reputation-audit ready.** Perfect for agencies and brands answering "where do we (or a competitor) have reviews, and what's the score everywhere?"

### Supported platforms

| Platform | Live score/count? | Pull full reviews with |
|---|---|---|
| App Store | ✅ live (iTunes API) | `memo23/app-store-scraper` |
| Google Play | ✅ live | `memo23/google-play-scraper` |
| Trustpilot | ✅ live (mobile API) | `memo23/trustpilot-scraper-ppe` |
| Trustmate | ✅ live (account API) | `memo23/trustmate-reviews-scraper` |
| Clutch, G2, Capterra, TrustRadius, Feedaty | funnel hint (URL + scraper link) | respective memo23 scraper |

Platforms marked "funnel hint" return the likely profile URL + the scraper to run (they're being upgraded to live checks incrementally).

### Input

| Field | Type | Notes |
|---|---|---|
| `brands` | array | Brand/product names. |
| `domain` | string | Optional domain applied to all brands — unlocks exact Trustpilot/Trustmate matches. |
| `brandDomains` | array | Advanced: explicit `{brand, domain}` pairs. |
| `platforms` | array | Limit to specific platforms; empty = all. |
| `maxItems` | integer | Optional row cap. |
| `proxy` | object | Optional; only used by adapters that opt in. |

#### Example input

```json
{
  "brands": ["Notion"],
  "domain": "notion.so"
}
````

### Output

One row per (brand × platform):

```jsonc
{
  "rowType": "review_presence",
  "brand": "Notion",
  "domain": "notion.so",
  "platform": "Trustpilot",
  "found": true,
  "checked": true,
  "profileUrl": "https://www.trustpilot.com/review/notion.so",
  "score": 2.3,
  "reviewCount": 416,
  "runWith": "memo23/trustpilot-scraper-ppe"
}
```

- `found`: `true` (present), `false` (checked, absent), or `null` (not live-checked — a funnel hint).
- `checked`: whether a live request was made.
- `runWith`: the dedicated Apify actor that scrapes this platform in full.

### How it works

1. **You submit** a brand (+ optional domain).
2. For each platform, a lightweight **adapter** does the cheapest available presence check — a public API (App Store, Google Play), an official mobile API (Trustpilot), or an account API (Trustmate). Platforms without a cheap path return a funnel hint.
3. **All platforms run in parallel** per brand.
4. **You get** one clean row per platform, ready to filter, export, or feed into the linked scraper.

### Use cases

- **Reputation audit** — "Where does my brand have review profiles, and what's the score on each?"
- **Competitor mapping** — the same, for a rival, in one call.
- **Lead qualification** — check a prospect's review footprint before outreach.
- **Funnel into full extraction** — discover presence, then run the linked scraper to pull every review.

### Notes & limitations

- Domain-keyed platforms (Trustpilot, Trustmate) match best when you supply a `domain`.
- "Funnel hint" platforms (Clutch, G2, Capterra, TrustRadius, Feedaty) return a likely URL + scraper link, not a verified live score — yet.
- This is a discovery tool: for full review text, ratings breakdowns, etc., run the `runWith` actor for that platform.

### ⚠️ Disclaimer

This actor performs lightweight presence checks against **publicly available** endpoints and does not log in, bypass paywalls, or access private data. You are responsible for using the output in compliance with each platform's Terms of Service and applicable laws (including GDPR/CCPA where relevant). It is provided for legitimate research, reputation-monitoring, and market-analysis purposes and is not affiliated with, endorsed by, or sponsored by any of the platforms named. All trademarks belong to their respective owners.

### SEO Keywords

review discovery, brand review checker, multi-platform review lookup, where is my brand reviewed, review presence, reputation audit, Trustpilot checker, App Store rating lookup, Google Play rating, Trustmate reviews, review aggregator, competitor review monitoring, brand reputation scanner, review profile finder, review score checker.

# Actor input Schema

## `brands` (type: `array`):

Brand or product names to look up (e.g. "Notion", "Spotify"). Pass a domain too for the most accurate matches on domain-keyed platforms like Trustpilot & Trustmate.

## `domain` (type: `string`):

Optional domain to pair with every brand in the list above (e.g. "notion.so"). Unlocks exact matches on Trustpilot and Trustmate. For per-brand domains, use "Brand + domain pairs" below instead.

## `brandDomains` (type: `array`):

Add a row per brand, each with its own domain. Key = brand name, Value = domain. Best for checking many brands at once — the domain unlocks exact Trustpilot & Trustmate matches.

## `platforms` (type: `array`):

Limit the check to specific platforms. Leave empty to check them all.

## `maxItems` (type: `integer`):

Optional cap on total rows returned (brands × platforms).

## `proxy` (type: `object`):

Optional proxy. The public-API platforms don't need one; a proxy is only used where an adapter opts into it.

## Actor input object example

```json
{
  "brands": [
    "Notion"
  ],
  "domain": "notion.so",
  "brandDomains": [
    {
      "key": "Notion",
      "value": "notion.so"
    }
  ],
  "proxy": {
    "useApifyProxy": false
  }
}
```

# 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 = {
    "brands": [
        "Notion"
    ],
    "brandDomains": [
        {
            "key": "Notion",
            "value": "notion.so"
        }
    ],
    "proxy": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/review-discovery-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 = {
    "brands": ["Notion"],
    "brandDomains": [{
            "key": "Notion",
            "value": "notion.so",
        }],
    "proxy": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/review-discovery-scraper").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 '{
  "brands": [
    "Notion"
  ],
  "brandDomains": [
    {
      "key": "Notion",
      "value": "notion.so"
    }
  ],
  "proxy": {
    "useApifyProxy": false
  }
}' |
apify call memo23/review-discovery-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=memo23/review-discovery-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Review Discovery — Find a Brand's Review Profiles",
        "description": "Look up any brand and instantly see where it has review profiles — App Store, Google Play, Trustpilot, Trustmate & more — each with its score, review count, profile URL and a link to the matching scraper. One call maps a brand's whole review footprint. JSON/CSV",
        "version": "0.0",
        "x-build-id": "ZKj5nrwpPRrjH7yRG"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/memo23~review-discovery-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-memo23-review-discovery-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/memo23~review-discovery-scraper/runs": {
            "post": {
                "operationId": "runs-sync-memo23-review-discovery-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/memo23~review-discovery-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-memo23-review-discovery-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "brands": {
                        "title": "Brand names",
                        "type": "array",
                        "description": "Brand or product names to look up (e.g. \"Notion\", \"Spotify\"). Pass a domain too for the most accurate matches on domain-keyed platforms like Trustpilot & Trustmate.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "domain": {
                        "title": "Domain (applies to all brands above)",
                        "type": "string",
                        "description": "Optional domain to pair with every brand in the list above (e.g. \"notion.so\"). Unlocks exact matches on Trustpilot and Trustmate. For per-brand domains, use \"Brand + domain pairs\" below instead."
                    },
                    "brandDomains": {
                        "title": "Brand → domain pairs",
                        "type": "array",
                        "description": "Add a row per brand, each with its own domain. Key = brand name, Value = domain. Best for checking many brands at once — the domain unlocks exact Trustpilot & Trustmate matches.",
                        "items": {
                            "type": "object",
                            "required": [
                                "key",
                                "value"
                            ],
                            "properties": {
                                "key": {
                                    "type": "string",
                                    "title": "Key"
                                },
                                "value": {
                                    "type": "string",
                                    "title": "Value"
                                }
                            }
                        }
                    },
                    "platforms": {
                        "title": "Platforms to check",
                        "type": "array",
                        "description": "Limit the check to specific platforms. Leave empty to check them all.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "App Store",
                                "Google Play",
                                "Trustpilot",
                                "Trustmate",
                                "Clutch",
                                "G2",
                                "Capterra",
                                "TrustRadius",
                                "Feedaty"
                            ]
                        }
                    },
                    "maxItems": {
                        "title": "Max rows",
                        "type": "integer",
                        "description": "Optional cap on total rows returned (brands × platforms)."
                    },
                    "proxy": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Optional proxy. The public-API platforms don't need one; a proxy is only used where an adapter opts into it."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
