# G2 Reviews Scraper - $1 / 1000 Reviews (`scrapeunblocker/g2-reviews-scraper`) Actor

Scrape G2 software reviews: title, rating, date, likes, dislikes, problems solved, reviewer role, industry and company size, badges, vendor response, plus each product's rating, star histogram, AI summary, pros and cons. Up to 500 per product. $1 per 1000 reviews.

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

## Pricing

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

## G2 Reviews Scraper

Scrape **G2 software reviews** as clean structured JSON - review title, star rating, date, what the reviewer likes best and dislikes, the problems the product solves, the reviewer's role, industry and company size, G2's validation and incentive badges and the vendor's response - with the product slug and name on every row. Each product's **rating, star histogram, categories, AI summary, top pros and cons and reviewer segments** are saved alongside. Many products in one run. No G2 account, no API key, no proxies to configure.

### Features

- **Any product input** - the G2 slug (`slack`, `hubspot-sales-hub`) or a g2.com product URL.
- **Full review data** - id, URL, title, rating (0.5-5), date and G2 "fresh review" update date, every question and answer, `likeBest` / `dislike` / `problemsSolved` / `recommendations`, combined `text`, reviewer name (when not anonymous), job title, industry, company size and profile URL, current-user / validated-reviewer / incentivized / source / AI-translated badges, and the vendor's response.
- **Order and filters** - most recent, most helpful, highest rated, lowest rated or G2's default order; only chosen star ratings; only reviews mentioning a keyword; only reviews since a date.
- **Up to 500 reviews per product** - G2 shows visitors at most 100 reviews per order and star filter. When you ask for more, the Actor reads further views (each star rating, then the other orders) and removes duplicates by review id.
- **Product summary** - the `PRODUCTS` record holds rating, review count, 1-5 star counts, categories, G2's AI summary, pros and cons with mention counts, reviewer segments (company size, role, industry, region) and, with `details`, vendor, description, website, languages and logo.

### Use cases

- **Competitive intelligence** - what customers like and dislike about competing products, by company size and industry.
- **Win/loss and battlecards** - collect 1- and 2-star reviews of a rival with the `stars` filter.
- **Review monitoring** - a scheduled run with `since` and "Most recent" returns only the new reviews of your product.
- **Product research and LLM analysis** - feed structured pros, cons and problems solved into topic or sentiment analysis.

### Input

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `products` | array | `["slack"]` | G2 product slugs or g2.com product URLs. |
| `maxReviewsPerProduct` | integer | `20` | Reviews per product (1-500). |
| `sort` | string | `most_recent` | `most_recent`, `most_helpful`, `highest_rated`, `lowest_rated` or `g2_default`. |
| `stars` | array | - | Only these star ratings (`"1"`-`"5"`). |
| `search` | string | - | Only reviews whose answers mention this keyword. |
| `since` | string | - | Only reviews written on or after this date (YYYY-MM-DD). |
| `details` | boolean | `false` | Add vendor, description, website, languages and logo to `PRODUCTS`. |

#### Example input

```json
{
  "products": [
    "slack",
    "https://www.g2.com/products/notion/reviews"
  ],
  "maxReviewsPerProduct": 200,
  "sort": "most_recent",
  "stars": ["1", "2"],
  "details": true
}
```

### Output

One dataset item per review:

```json
{
  "productSlug": "slack",
  "productName": "Slack",
  "productUrl": "https://www.g2.com/products/slack/reviews",
  "id": 13679926,
  "url": "https://www.g2.com/products/slack/reviews/slack-review-13679926",
  "title": "Slack Makes Team Communication Simple and Fast Across Devices",
  "rating": 4.5,
  "date": "2026-10-01",
  "updatedDate": null,
  "reviewerName": "Masna A.",
  "reviewerAnonymous": false,
  "reviewerTitle": "Research Associate",
  "reviewerIndustry": "Research",
  "reviewerCompanySize": "Mid-Market (51-1000 emp.)",
  "reviewerProfileUrl": "https://www.g2.com/users/85f61e54-9ad6-4e69-ab51-80662d963d09",
  "reviewerId": 10005717,
  "likeBest": "What I like about Slack is that it's easy to set up and really simple to use day to day...",
  "dislike": "One thing I don't like is that the desktop app takes up too much RAM memory...",
  "problemsSolved": "For quick questions and messy, cluttered email threads, it's very beneficial...",
  "recommendations": null,
  "text": "What I like about Slack is...",
  "answers": [
    {"question": "What do you like best about Slack?", "answer": "What I like about Slack is..."}
  ],
  "videoReview": false,
  "currentUser": true,
  "validatedReviewer": true,
  "validationMethod": "Validated through a business email account added to their profile",
  "incentivized": false,
  "source": "Organic Review from User Profile",
  "aiTranslated": false,
  "translatedFrom": null,
  "g2Icon": false,
  "badges": ["Current User", "Validated Reviewer", "Source: Organic Review from User Profile"],
  "vendorResponseAuthor": null,
  "vendorResponseText": null,
  "viewSort": "most_recent",
  "viewStars": null,
  "productInput": "slack"
}
```

The key-value store also holds:

- `PRODUCTS` - one summary per product (rating, review count, star counts, categories, AI summary, pros, cons, segments, optional vendor details, reviews collected and the views read).
- `ERRORS` - products that returned no reviews (unknown product, no match for the filters, or blocked) with the reason. These are **not billed**.

### Pricing

**$1 per 1000 reviews.** You pay only for unique reviews delivered; failed products and the optional product details are not charged.

### Notes

- G2 shows visitors at most **100 reviews per order and star filter**. Up to 100 reviews per product follow the chosen order exactly; above that, reviews come from further views (one per star rating, then the other orders), so the extra reviews are not in one global order. `viewSort` and `viewStars` on each item say which view a review came from.
- G2 pages load slowly (a real browser renders each one), so expect roughly a minute per 20-40 reviews. Large runs take several minutes per product.

# Actor input Schema

## `products` (type: `array`):

G2 products to collect reviews for: the product slug (slack, hubspot-sales-hub) or a g2.com product URL such as https://www.g2.com/products/slack/reviews.

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

How many reviews to collect for each product (1-500). G2 lists at most 100 reviews per order and star filter; above that the scraper reads further views (each star rating, then the other orders) and removes duplicates. Each 10 reviews take one page load, so large numbers take several minutes per product.

## `sort` (type: `string`):

Which reviews G2 lists first.

## `stars` (type: `array`):

Optional. Only reviews with these star ratings, e.g. 1 and 2 for complaints. Each chosen rating is its own G2 view of up to 100 reviews.

## `search` (type: `string`):

Optional. Only reviews whose answers mention this keyword, e.g. 'pricing' or 'onboarding'.

## `since` (type: `string`):

Optional. Only reviews written on or after this date (YYYY-MM-DD). With 'Most recent' order, paging stops at the first older review, which makes monitoring runs fast.

## `details` (type: `boolean`):

Also read each product's page for its vendor, description, website, languages and logo (added to the PRODUCTS record). One more page load per product; you still pay per review only.

## Actor input object example

```json
{
  "products": [
    "slack"
  ],
  "maxReviewsPerProduct": 20,
  "sort": "most_recent",
  "details": false
}
```

# Actor output Schema

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

One item per review, with the product slug and name

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

Per product: rating, review count, star histogram, categories, AI summary, pros and cons, reviewer segments and the views read

## `errors` (type: `string`):

Products that returned no reviews (unknown product, no match for the filters, or blocked), with the reason (not billed)

# 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 = {
    "products": [
        "slack"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapeunblocker/g2-reviews-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 = { "products": ["slack"] }

# Run the Actor and wait for it to finish
run = client.actor("scrapeunblocker/g2-reviews-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 '{
  "products": [
    "slack"
  ]
}' |
apify call scrapeunblocker/g2-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapeunblocker/g2-reviews-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/5K9EJSbGnXoWBr6Nr/builds/yd5l8pv46kldNHVl5/openapi.json
