# Amazon Product Research & Opportunity Finder (`herazur/amazon-product-research-opportunity-finder`) Actor

Research Amazon products by keyword. Get prices, ratings, purchase signals, brands, sellers, negative-review pain points, price gaps and review-count velocity. Rank products with transparent Demand, Competition and Opportunity Scores. Amazon.com (US).

- **URL**: https://apify.com/herazur/amazon-product-research-opportunity-finder.md
- **Developed by:** [Furkan Toluç](https://apify.com/herazur) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $20.00 / 1,000 researched products

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?

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

## Amazon Product Research & Opportunity Finder

Find Amazon.com products with visible demand and relatively less crowded competition. Enter a keyword such as **portable air conditioner** to get product data, transparent scores, negative-review themes and a market price-gap report.

Built for Amazon sellers, ecommerce researchers, agencies, affiliates and product research applications. Use the results to prioritize further research, compare listings and identify product improvements mentioned by reviewers.

### Quick start

```json
{"query":"portable air conditioner","maxProducts":20,"includeDetails":true,"includeReviews":true}
```

Select **Start**, then open the **Product opportunities** dataset. Export JSON, CSV, Excel or integrate the Actor through Apify's API. The default marketplace is **Amazon.com / US / USD**. Other marketplaces are not supported in this release.

### What you receive

- Product title, ASIN, URL, image, price in USD, star rating and rating count (`reviewCount`). Amazon's count can include ratings without written reviews.
- Brand and currently displayed seller, when visible on the product page.
- The lower bound from a public monthly purchase badge, such as “100+ bought in past month”, and the original signal text. This is not exact sales volume.
- Demand Score, Competition Score, Opportunity Score (0–100), score components and evidence coverage.
- Competitor count within the sampled results and within ±20% of each product's price.
- Difference from the sampled median price and large adjacent price gaps in the market report.
- Rule-based negative-review pain points with short supporting excerpts from accessible reviews rated 1–3 stars.
- Review-count velocity when a comparable earlier snapshot exists.

The **REPORT** key-value record contains the products, market statistics, price gaps, coverage and partial failures. **SNAPSHOT** holds the baseline for future comparisons.

### How the scores work

Scores are transparent heuristics, not validated sales forecasts or recommendations to purchase inventory. They reuse the missing-evidence weighting approach from our Digital Product Opportunity Radar.

**Demand Score:** 65% monthly purchase badge, 20% historical rating count, 15% observed review-count growth. Each component is log-scaled to 0–100 using ceilings of 10,000 monthly purchases, 20,000 ratings and 100 additional ratings/day. Missing components are excluded and remaining weights renormalized. Without a purchase badge or a usable historical comparison, demand is explicitly labelled a historical proxy.

**Competition Score:** 55% competitors' historical rating strength, 30% share of competitors within ±20% of the product's price, 15% sponsored share. At least five sampled products are required. Higher means stronger observed competition. This describes the sample, not the total Amazon market or number of sellers.

**Opportunity Score = Demand Score × (1 − Competition Score / 100).** Higher scores indicate stronger demand relative to observed competitive pressure. Unknown demand or insufficient competition evidence produces a null score. Evidence coverage is a completeness percentage, not statistical confidence.

Prices across product sizes, bundles, capacities and accessories are not necessarily comparable. A price gap is an observation, not proof that buyers want a missing product. Search results may include ads and adjacent products; inspect titles and specifications before making decisions.

### Review velocity and repeat runs

Set `historyStoreName` to a unique private store name and reuse it with the same keyword. After at least 24 hours, the Actor calculates `(current rating count − previous rating count) / elapsed days`. Alternatively, paste an earlier **SNAPSHOT** into `previousSnapshot`. The first run returns `baseline_required`; short intervals and decreasing counts are labelled explicitly. This measures net rating-count change, not new written-review volume. Listings, variations and removed ratings can affect counts. No historical velocity is invented.

### Inputs

| Input | Default | Purpose |
| --- | --- | --- |
| `query` | portable air conditioner | Amazon.com keyword |
| `maxProducts` | 20 | 1–100 unique products |
| `maxPages` | 2 | 1–5 search pages |
| `includeDetails` | true | Brand, seller, detail metrics and reviews |
| `includeReviews` | true | Accessible review evidence and one critical-review page attempt |
| `historyStoreName` | omitted | Optional persistent comparison store |
| `previousSnapshot` | omitted | Explicit earlier SNAPSHOT |
| `concurrency` | 2 | 1–3 enrichment workers |
| `proxyConfiguration` | US residential | Proxy used for Amazon requests |

### Coverage and limitations

Amazon can block requests, suppress prices for a delivery location or require sign-in for review pages. The Actor retries bounded requests, preserves successful search data when details fail and reports missing fields explicitly. No products means a failed run, not an empty successful report. Reviews are a limited, non-representative sample; unavailable reviews never become fabricated pain points. Brand and seller remain null if not observed. Search order and market prices can change between requests.

There are no guarantees of profitability, product-market fit, exact sales, complete market coverage or future demand. There is no affiliation with Amazon. Do not use the scores alone to commit inventory spend.

### Support

Use the Actor's **Issues** tab and include the run URL, keyword and a description of the missing or unexpected data. Do not share account credentials. For best reproducibility, keep the keyword, sample size and US proxy configuration consistent across comparison runs.

### Pricing

Pay per event: **$0.01 per Actor start** (per GB, minimum one event) plus **$0.02 per researched product** written to the dataset. At the default 1 GB memory, 20 delivered products cost **$0.41**. The price includes platform and proxy usage. Missing optional fields do not make a product free; review coverage is always reported. No extra event is charged for the market report or snapshot. The Actor limits work and dataset output to the remaining run budget. Small budgets may yield fewer than five products and therefore no Competition or Opportunity Score.

`saveHtml` is an optional diagnostic switch (default false). It saves the first fetched product page as `SAMPLE-PRODUCT.html` in the run's key-value store. No Amazon login is used.

# Actor input Schema

## `query` (type: `string`):

Product or niche to research on Amazon.com (US).

## `maxProducts` (type: `integer`):

Maximum unique products to enrich and score.

## `maxPages` (type: `integer`):

Search pages to sample. More pages provide broader competitor coverage.

## `includeDetails` (type: `boolean`):

Fetch product pages for brand, seller, ratings and review evidence.

## `includeReviews` (type: `boolean`):

Requires detail enrichment. Analyze product-page reviews and attempt one critical-review page per product. Amazon may require sign-in, in which case coverage is reported explicitly.

## `saveHtml` (type: `boolean`):

Save the first product detail response as SAMPLE-PRODUCT.html in this run's key-value store for parsing diagnostics.

## `historyStoreName` (type: `string`):

A private named key-value store in your Apify account. Reuse the same name and keyword across runs at least 24 hours apart to measure review-count velocity.

## `previousSnapshot` (type: `object`):

Paste a SNAPSHOT output from an earlier run of the same query and marketplace to calculate review-count velocity.

## `concurrency` (type: `integer`):

Parallel product enrichment workers.

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

US residential proxies are recommended for Amazon. Their cost is included in paid Actor events.

## Actor input object example

```json
{
  "query": "portable air conditioner",
  "maxProducts": 20,
  "maxPages": 2,
  "includeDetails": true,
  "includeReviews": true,
  "saveHtml": false,
  "concurrency": 2,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

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

No description

## `report` (type: `string`):

No description

## `snapshot` (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 = {
    "query": "portable air conditioner"
};

// Run the Actor and wait for it to finish
const run = await client.actor("herazur/amazon-product-research-opportunity-finder").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 = { "query": "portable air conditioner" }

# Run the Actor and wait for it to finish
run = client.actor("herazur/amazon-product-research-opportunity-finder").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 '{
  "query": "portable air conditioner"
}' |
apify call herazur/amazon-product-research-opportunity-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,herazur/amazon-product-research-opportunity-finder"
        }
    }
}

```

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/d4lny43Kuu9XiJZLB/builds/LzZLTeJbltCLhqIBe/openapi.json
