# Gartner Peer Insights Scraper - Reviews & Ratings (`dami_studio/gartner-peer-insights-scraper`) Actor

Scrape Gartner Peer Insights reviews for any software product, no login. Full review text, 1-5 star rating, date, reviewer job title, function, industry and company size, plus product and vendor. At $0.75 per 1,000 reviews, the lowest price of any Gartner scraper on Apify; next cheapest is $0.85.

- **URL**: https://apify.com/dami\_studio/gartner-peer-insights-scraper.md
- **Developed by:** [Dami's Studio](https://apify.com/dami_studio) (community)
- **Categories:** Lead generation, Automation
- **Stats:** 2 total users, 1 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 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

## Gartner Peer Insights Scraper — reviews API for enterprise software

Pulls verified user reviews from [Gartner Peer Insights](https://www.gartner.com/reviews) for any
product on the site. You give it a product URL; you get one row per review with the review body, the
headline, the 1–5 star rating, the date, and who wrote it — job title, function, industry, company
size — plus the product, vendor and Gartner market it belongs to.

No Gartner account, no cookie, no token. Everything here is what a logged-out visitor can read.

### What a row looks like

Real output, Zoom Meetings, unedited:

```json
{
  "reviewId": "6786406",
  "reviewUrl": "https://www.gartner.com/reviews/market/meeting-solutions/vendor/zoom/product/zoom-meetings/review/view/6786406",
  "headline": "Difficulty Managing Participant Controls Raises Concerns About Zoom Usability",
  "reviewText": "I signed up to manage the Zoom presence on the National Day of Prayer. However, when I started the meeting I was notified someone was 'waiting' to be admitted...",
  "rating": 3,
  "reviewDate": "May 7, 2026",
  "reviewerJobTitle": "Software Developer",
  "reviewerFunction": "Software Development",
  "reviewerIndustry": "Education",
  "companySize": "Gov't/PS/ED <5,000 Employees",
  "isPartnerReview": false,
  "reviewSourceCode": 4,
  "reviewIncentiveCode": 2,
  "upVotes": 0,
  "pros": null,
  "cons": null,
  "productName": "Zoom Meetings",
  "vendorName": "Zoom",
  "marketName": "Meeting Solutions",
  "productUrl": "https://www.gartner.com/reviews/product/zoom-meetings"
}
```

Every run also returns one free summary row per product: average rating, the full 1–5 rating
distribution, Gartner's own review count, the markets the product sits in, the product description
and its pricing model. Summary, sample and diagnostic rows carry `_charged: false` and cost nothing.

### Input

Paste the URL from your address bar. All of these work:

```json
{
  "productUrls": [
    "https://www.gartner.com/reviews/product/azure-data-factory",
    "https://www.gartner.com/reviews/market/meeting-solutions/vendor/zoom/product/zoom-meetings/reviews",
    "snowflake"
  ],
  "maxReviewsPerProduct": 200,
  "recentMonths": 12
}
```

| Field | What it does |
|---|---|
| `productUrls` | Product URL, long market/vendor/product URL, or the bare slug. A URL that names a market pins the run to that market; otherwise every market the product sits in is walked. |
| `searchTerms` | Product name instead of a URL. Costs one extra request and takes Gartner's top match. |
| `maxReviewsPerProduct` | Billing cap. You are charged per review returned. |
| `recentMonths` | Only reviews from the last N months. Applied by Gartner, so you are never charged for older rows. |
| `starRatings` | Keep only certain star ratings. Filtered locally — see the honest bit below. |
| `includeProductSummary` | The free summary row. On by default. |
| `includeProsAndCons` | Fills `pros`/`cons` on the reviews Gartner spotlights. On by default. |
| `concurrency` | Parallel requests, default 8. |

### Speed and scale

Gartner hands back one review per request, so throughput is simply how many requests you can make.
No proxy is needed for the usual path. Measured on the Apify platform, wall-clock, container start
included:

| Reviews | Requests | Run time |
|---|---|---|
| 5 | 13 | 3.9 s |
| 250 | 265 | 18.2 s |

Zoom Meetings has 6,322 reviews on Gartner, so a 250-review pull is a small slice of one product.

### What this does not do

Being straight about the login wall, because it is the whole story on this site.

- **Per-review pros/cons are login-walled.** Gartner publishes verbatim "what I liked / what I
  disliked" text for exactly two reviews per market — the one favourable and one critical review it
  spotlights. Those two rows get real `pros` and `cons`. Every other row leaves both fields `null`.
  Nothing here fakes them.
- **Per-review sub-ratings are login-walled too.** There are no per-review evaluation, deployment,
  support or "likelihood to recommend" scores in the public data, so this actor does not emit any.
  Product-level aggregates (average rating, 1–5 distribution) are public and are in the summary row.
- **There is no date sort.** Gartner's endpoint honours its own helpfulness ranking and silently
  ignores every date-sort value it is given. Use `recentMonths` to get recent reviews — it is a real
  server-side filter and it is cheaper, because you are not charged for the rows it removes.
- **Star filtering is done here, not by Gartner.** Gartner has no rating filter on this endpoint, so
  the actor reads reviews and drops the ones you did not ask for. You are only charged for rows you
  keep, but a rare rating costs reading time; scanning stops after about 12 reads per requested
  review.
- **Review counts differ between screens on Gartner's own site**, because ratings and written
  reviews are counted differently and a product's reviews are split across its markets. The summary
  row reports both `reviewsOnGartner` (what the review endpoint says) and `ratingsCount` (what the
  ratings endpoint says) rather than pretending they agree.
- **Duplicates exist in Gartner's index.** One 132-review market answered 132 index positions with
  126 distinct review ids. Rows are deduplicated by `reviewId`, so you are charged for 126, not 132.
- **A few markets are slower than the rest.** Gartner's own edge blocks a handful of market slugs on
  the fast route — `ai-platforms-for-data-science-and-machine-learning` is one — and those fall back
  to a slower, rate-limited path. Other markets of the same product are unaffected, and a market
  that cannot be read at all is reported as a free diagnostic row rather than silently skipped.

### Pricing

Pay per review returned, plus a small per-run start fee. You are only charged for genuine review
rows — summary, sample and diagnostic rows are free. A run with no input, or with input that is not
a Gartner product reference at all, is not charged anything, not even the start fee.

### FAQ

**Does this need a Gartner login or a Peer Insights account?**
No. It reads the same public endpoints the logged-out product page reads. There is no account, no
password and no session cookie anywhere in this actor.

**Can I get the full text of every review?**
Yes. `reviewText` is the reviewer's own written review, in full, on every row — not a truncated
teaser. What is *not* public is the separate pros/cons breakdown and per-review sub-scores.

**How do I scrape Gartner Peer Insights reviews for a specific product?**
Copy the product URL from Gartner (for example
`https://www.gartner.com/reviews/product/azure-data-factory`), put it in `productUrls`, set
`maxReviewsPerProduct`, and run. That is the whole setup.

**How do I get only recent reviews?**
Set `recentMonths`. A product with 6,322 lifetime reviews returns 48 at `recentMonths: 12` and 3 at
`recentMonths: 1`.

**Why do some rows have `pros` and `cons` and most do not?**
Because Gartner only publishes that breakdown for the two reviews it spotlights per market. Filling
the other rows would mean inventing text, so those stay `null`.

**Can I monitor a product for new reviews?**
Yes — schedule the actor with `recentMonths: 1` and a small `maxReviewsPerProduct`. Reviews are keyed
by `reviewId`, so deduplicating across runs is a one-line join.

**What are `reviewSourceCode` and `reviewIncentiveCode`?**
Gartner's own internal codes for how a review was solicited and whether it was incentivised. Gartner
does not publish a legend for them, so they are passed through as raw numbers rather than guessed at.

**Does it work for products in more than one Gartner market?**
Yes. Gartner splits a product's reviews by market. If your URL does not name a market, the actor
walks every market the product appears in and deduplicates the results.

**What about Capterra, G2 or Software Advice?**
Different sites, different scrapers. This one covers Gartner Peer Insights only.

# Actor input Schema

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

One entry per product. Paste the Peer Insights URL straight from your address bar (https://www.gartner.com/reviews/product/azure-data-factory), the long market/vendor/product form, or just the product slug (azure-data-factory). If the URL names a market, only that market's reviews are collected; otherwise every market the product sits in is walked.

## `searchTerms` (type: `array`):

Optional. A product name such as "Snowflake". Each term costs one extra request and takes Gartner's top match, so a URL is always more precise.

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

Hard cap on billable review rows for each product. You are charged per review returned, so this is also your budget cap. Large products carry 1,000+ reviews.

## `recentMonths` (type: `integer`):

Optional recency window, applied by Gartner itself, so you are never charged for older rows. 0 means all time. Example: a product with 6,322 lifetime reviews returns 48 at 12 months and 3 at 1 month. Reviews always arrive in Gartner's own helpfulness ranking; Gartner's API has no date sort, so this is the way to get recent ones.

## `starRatings` (type: `array`):

Optional. Keep only reviews with these star ratings. Gartner has no server-side rating filter, so the actor reads reviews and drops the ones you did not ask for. You are only charged for rows you keep, but a rare rating costs extra reading time; scanning stops after roughly 12 reads per requested review.

## `includeProductSummary` (type: `boolean`):

On by default. Adds one extra, never-charged row per product with the product and vendor name, markets, average rating, the 1-5 rating distribution, Gartner's own review count, the product description and its pricing model.

## `includeProsAndCons` (type: `boolean`):

On by default. Gartner publishes verbatim pros/cons only for the two reviews it spotlights per market (one favourable, one critical); this fills the pros and cons fields on those rows. Costs one extra, never-charged request per market. Every other row leaves pros and cons null.

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

Gartner returns one review per request, so this is the main speed dial. 8 is a good default; raise it only if you are pulling thousands of reviews.

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

Leave empty. The actor picks its own egress and does not need a proxy for Gartner. Supply proxyUrls only if you need requests to leave from addresses you control.

## Actor input object example

```json
{
  "productUrls": [
    "https://www.gartner.com/reviews/product/azure-data-factory",
    "https://www.gartner.com/reviews/market/meeting-solutions/vendor/zoom/product/zoom-meetings/reviews",
    "snowflake"
  ],
  "searchTerms": [
    "Snowflake",
    "ServiceNow IT Service Management"
  ],
  "maxReviewsPerProduct": 100,
  "recentMonths": 0,
  "starRatings": [
    "5",
    "4"
  ],
  "includeProductSummary": true,
  "includeProsAndCons": true,
  "concurrency": 8,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

Results in the default dataset. Only genuine review rows are billable; \_summary, \_sample and \_diagnostic rows carry \_charged: false and are never charged.

# 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/azure-data-factory"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("dami_studio/gartner-peer-insights-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 = { "productUrls": ["https://www.gartner.com/reviews/product/azure-data-factory"] }

# Run the Actor and wait for it to finish
run = client.actor("dami_studio/gartner-peer-insights-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 '{
  "productUrls": [
    "https://www.gartner.com/reviews/product/azure-data-factory"
  ]
}' |
apify call dami_studio/gartner-peer-insights-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/gartner-peer-insights-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/3hOPlrZa6yMf8ttr0/builds/BHKIwakbLWWDa9MX7/openapi.json
