# Gartner Peer Insights Reviews Scraper - Role, Industry & Size (`lanternlab318/gartner-peer-insights`) Actor

Get Gartner Peer Insights product ratings and public reviews: star rating, headline, reviewer job title, industry, company size and date (no review body: Gartner shows it only after sign-up). No login, no cookies. Reviews deduplicated; every product link gets a free status row.

- **URL**: https://apify.com/lanternlab318/gartner-peer-insights.md
- **Developed by:** [Lantern Lab](https://apify.com/lanternlab318) (community)
- **Categories:** Business, Marketing, Lead generation
- **Security:** Limited permissions
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.59 / 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

## Gartner Peer Insights Reviews Scraper

Paste Gartner Peer Insights product links and get back the product's overall rating and review count, plus its public reviews: star rating, headline, reviewer job title, industry, company size and review date, exactly what Gartner's public review cards show. No Gartner login, no cookies, no account of your own. The review body is not included: Gartner shows it only after sign-up.

**Price:** you pay per review row, plus a small fee per run that covers passing Gartner's bot check. Product rows, empty results and the run summary are free.

### What you get

- **Product row** for every link: product name, vendor, every Gartner market it is listed in, overall star rating and review count as the product page shows them, and how many reviews this run collected.
- **Review rows**: `rating` (1-5), `title` (the review headline), `reviewerJobTitle`, `companyIndustry`, `companySize`, `publishedAt`, and the market the review was written in.
- Gartner's own `reviewId` on every review. Reviews are deduplicated across the whole run, so a review is written and charged once.
- A clear answer for every link. A product with no reviews, a link Gartner has no product for, a link that is not a product link, and a product cut short by a limit are four different rows, never confused.

### Input

| Field | Default | Meaning |
| --- | --- | --- |
| `productUrls` | required | Gartner Peer Insights product links, one per line. The short form `https://www.gartner.com/reviews/product/<product>` reads every market the product is listed in. The long form `.../reviews/market/<market>/vendor/<vendor>/product/<product>` reads that market only. |
| `maxReviewsPerProduct` | `100` | Upper bound on review rows per product link. `0` returns product details only. |
| `maxUpstreamRequests` | derived | Hard ceiling on requests to Gartner for the whole run. Leave empty and the Actor works one out from your input. |
| `proxyConfiguration` | Apify residential, US | Gartner's bot protection does not let datacenter IPs through. |

```json
{
  "productUrls": [
    "https://www.gartner.com/reviews/product/crowdstrike-falcon",
    "https://www.gartner.com/reviews/market/endpoint-protection-platforms/vendor/sophos/product/sophos-endpoint"
  ],
  "maxReviewsPerProduct": 50
}
```

### Output

A review row (`recordType: "review"`):

```json
{
  "recordType": "review",
  "reviewId": "6446956",
  "productName": "CrowdStrike Falcon",
  "productSeoName": "crowdstrike-falcon",
  "vendor": "CrowdStrike",
  "market": "endpoint-protection-platforms",
  "marketName": "Endpoint Protection Platforms (Transitioning to Endpoint Protection)",
  "rating": 5,
  "title": "Threat Grading and Device Scanning Facilitate Efficient Incident Remediation Process",
  "reviewerJobTitle": "IT Security & Risk Management Associate",
  "companyIndustry": "Transportation",
  "companySize": "250M - 500M USD",
  "publishedAt": "2025-10-22",
  "publishedAtRaw": "Oct 22, 2025",
  "productUrl": "https://www.gartner.com/reviews/product/crowdstrike-falcon",
  "position": 1,
  "sort": "most_helpful",
  "partial": false,
  "partialReason": null,
  "collectedAt": "2026-10-23T17:40:12.311Z"
}
```

A product row (`recordType: "product"`, free):

```json
{
  "recordType": "product",
  "input": "https://www.gartner.com/reviews/market/endpoint-protection-platforms/vendor/sophos/product/sophos-endpoint",
  "outcome": "found",
  "name": "Sophos Endpoint",
  "vendor": "Sophos",
  "markets": [
    "Endpoint Protection Platforms (Transitioning to Endpoint Protection)",
    "Extended Detection and Response (Retired)"
  ],
  "marketsQueried": [
    "Endpoint Protection Platforms (Transitioning to Endpoint Protection)"
  ],
  "rating": 4.8,
  "reviewCount": 2424,
  "url": "https://www.gartner.com/reviews/product/sophos-endpoint",
  "reviewsAvailable": 2225,
  "reviewsRequested": 100,
  "reviewsReturned": 100,
  "duplicatesSkipped": 1,
  "partial": false,
  "partialReason": null,
  "statusText": "Collected 100 review(s) of 2225 offered in the markets read."
}
```

`outcome` is `found`, `not_found` (Gartner has no product at that link) or `invalid_url` (not a product link). `partial: true` means the product's reviews are incomplete, with `partialReason` `upstream_request_cap`, `charge_limit_reached`, `blocked`, `upstream_error` or `not_collected`. It never means the product has no reviews. The last row of the dataset, also stored as `RUN_SUMMARY` in the key-value store, has the run's totals.

### Limits

- **Speed:** Gartner gives a visitor who is not logged in one review per request, and refuses more than about one request every two seconds from one IP. The Actor spreads a large run over up to three browser sessions on separate IPs, which works out to about one review per second. 1,000 reviews take about 17 minutes.
- **No review body:** Gartner shows the review text, and the full review behind "Read Full Review", only to signed-up visitors. This Actor collects only what a visitor who is not logged in sees on the review card: headline, rating, date, job title, industry and company size.
- **Order:** reviews come in Gartner's "most helpful" order, the only order Gartner keeps stable for a visitor who is not logged in. Two reviews with the same score can still swap places between requests. When a position repeats a review already collected, the Actor asks that position again (up to three times) to recover the other one, then reads further to make up the count. A full crawl of a very large product can still miss a small share of its reviews.
- **Markets:** Gartner counts reviews per market. `reviewCount` is the product page's total across all markets. `reviewsAvailable` is the total in the markets this run read.
- **Public data only:** no login, no cookies imported from outside the run, no reviewer names. The browser passes Gartner's Cloudflare check on its own in every run.
- No scheduling or monitoring built in; use Apify schedules.

# Actor input Schema

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

One Gartner Peer Insights product link per line, as it appears in your browser: https://www.gartner.com/reviews/product/crowdstrike-falcon, or the long form https://www.gartner.com/reviews/market/endpoint-protection-platforms/vendor/crowdstrike/product/crowdstrike-falcon. The short form reads the product's reviews in every Gartner market it is listed in; the long form reads only the market in the link. A link that is not a product link, or a product Gartner does not have, gets a free status row saying so.

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

Upper bound on review rows per product link, across all the markets read. Reviews come in Gartner's "most helpful" order. Set 0 to get product details (rating, review count, markets) without reviews. Gartner serves one review per request to a visitor who is not logged in, so large numbers take time: about one review per second per run.

## `maxUpstreamRequests` (type: `integer`):

Hard ceiling on the requests this run sends to Gartner: product records, product pages, review requests and retries together. At the ceiling collection stops - the products not finished are written with partialReason "upstream_request_cap" and the run then ends normally. Leave empty and the Actor works a ceiling out from your links and limits, so a run is never unbounded.

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

The proxy the browser goes through. Gartner sits behind a Cloudflare challenge that datacenter IPs do not pass; the default, Apify residential proxy in the US, is what this Actor is measured on.

## Actor input object example

```json
{
  "productUrls": [
    "https://www.gartner.com/reviews/product/crowdstrike-falcon"
  ],
  "maxReviewsPerProduct": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

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

No description

## `runSummary` (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 = {
    "productUrls": [
        "https://www.gartner.com/reviews/product/crowdstrike-falcon"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("lanternlab318/gartner-peer-insights").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.gartner.com/reviews/product/crowdstrike-falcon"] }

# Run the Actor and wait for it to finish
run = client.actor("lanternlab318/gartner-peer-insights").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.gartner.com/reviews/product/crowdstrike-falcon"
  ]
}' |
apify call lanternlab318/gartner-peer-insights --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,lanternlab318/gartner-peer-insights"
        }
    }
}
```

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/Uccu395foQWgRwuLc/builds/uWco2ih3yDVc1DzX8/openapi.json
