# G2 Reviews Scraper — Ratings, Full Text & Dates (`foxlabs/g2-reviews-scraper`) Actor

Scrape G2 software reviews by product: star rating, review title, full text, author, publish date & aggregate score. Clean JSON, pay per review. For competitive intelligence, product research & review monitoring.

- **URL**: https://apify.com/foxlabs/g2-reviews-scraper.md
- **Developed by:** [Berkan Kaplan](https://apify.com/foxlabs) (community)
- **Categories:** Lead generation
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 reviews

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

### 🔍 What is G2 Reviews Scraper — and when should you use it?

**G2 Reviews Scraper extracts software reviews from [G2](https://www.g2.com) by product** — the star **rating**, review **title**, the **full review text**, the **author**, and **publish dates**, plus the product's **aggregate rating and total review count**. Give it a product URL or slug (e.g. `asana`) and get clean JSON, **paying only per review returned**.

Use it for competitive intelligence, voice-of-customer analysis, product research, investment due diligence, or to **monitor new reviews** of your own product over time. Runs on the Apify platform with API access, scheduling, integrations, proxy rotation and monitoring built in.

### 🤖 Use with AI agents

The Actor exposes a typed input schema and returns structured JSON, so it plugs straight into agent and RAG pipelines (MCP, LangChain, or direct API calls). It can also run in **Standby mode** as a real-time HTTP endpoint (`GET /?productUrls=asana,slack&maxReviews=50`) returning JSON, and supports **pay-per-event** billing suitable for x402 agent payments.

### 📋 Overview

G2 is the largest B2B software review marketplace. This Actor reads a product's public reviews page, paginates through it, and returns each review as a row. Access to G2 is anti-bot protected; the Actor handles that for you via an unblocking proxy — no cookies, logins or tokens required from you.

### ✨ Features

- Reviews by product **URL or slug**, several products per run.
- **Full review text** (what they like, dislike and the problems solved — combined), title, rating, author, dates.
- **Aggregate rating** and total review count per product.
- **`minDatePublished`** to fetch only newer reviews — ideal for recurring monitoring.
- Optional **`includeQnA`** to split each review into `likeBest` / `dislike` / `problemsSolved`.
- **Pay per review** — error and summary rows are never charged.

### 🎬 Quick Start

```json
{ "productUrls": ["asana", "slack"], "maxReviews": 50 }
```

### 🚀 Getting Started (3 steps)

1. **Add products** — paste G2 product URLs or slugs in `productUrls`, one per line.
2. **Set the cap** — `maxReviews` limits reviews per product (default 100; 0 = all).
3. **Run** — download the dataset as JSON, CSV, Excel or HTML, or call it over the API.

### 📥 Input

| Field | Type | Description |
|---|---|---|
| `productUrls` | array | G2 product URLs or slugs, one per line (e.g. `asana`, `https://www.g2.com/products/slack/reviews`). |
| `maxReviews` | integer | Reviews per product (default 100; 0 = all available). ~10 per page. |
| `minDatePublished` | string | ISO date (e.g. `2026-01-01`). Reads newest-first and stops at older reviews — use it to monitor only new reviews across runs. |
| `includeQnA` | boolean | Also split each review into `likeBest` / `dislike` / `problemsSolved` (best-effort; full text is always in `body`). |
| `maxConcurrency` | integer | Products fetched in parallel (default 2). |

### 📤 Output

```json
{
  "product": "Asana",
  "rating": 4.5,
  "title": "Flexible, powerful task management",
  "body": "I appreciate that Asana offers multiple layers of options for organizing tasks ...",
  "author": "Kyungjun P.",
  "datePublished": "2026-09-30",
  "dateModified": "2026-09-30",
  "productRating": 4.4,
  "productReviewCount": 14048,
  "reviewUrl": "https://www.g2.com/products/asana/reviews"
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

### 📊 Data table

| Field | Description |
|---|---|
| `product` | Product name as shown on G2. |
| `rating` | This review's star rating. |
| `title` | Review headline. |
| `body` | Full review text. |
| `author` | Reviewer display name. |
| `datePublished` / `dateModified` | Review dates (ISO). |
| `productRating` / `productReviewCount` | Product's aggregate score and total reviews. |
| `likeBest` / `dislike` / `problemsSolved` | Present when `includeQnA` is on. |

### 💼 Use cases

- **Competitive intelligence** — track how a competitor's product is reviewed.
- **Voice of customer** — mine pros, cons and problems across hundreds of reviews.
- **Review monitoring** — schedule with `minDatePublished` to capture only new reviews.
- **Due diligence** — gauge sentiment and volume before buying or investing.

### 🔗 Integration

Call it from the Apify API or client SDKs, schedule it, or chain it into other Actors. In Standby mode it answers HTTP `GET` requests with JSON for real-time use.

### 📊 Pricing

Pay per review returned. A typical product page yields ~10 reviews; error and summary rows are free. How much does it cost to scrape G2? For 1,000 reviews you pay for 1,000 review events — see the Actor's pricing on its page.

### ❓ FAQ

- **Do I need a G2 login or cookies?** No. The Actor handles access for you.
- **How many reviews can I get?** Up to a product's full public history; set `maxReviews: 0` for all.
- **Can I get only new reviews?** Yes — set `minDatePublished`.

### 🐛 Troubleshooting

- **A product returns nothing** — check the slug/URL is a real G2 product `/products/<slug>` page.
- **Fewer reviews than expected** — raise `maxReviews`, or the product simply has fewer public reviews.

### ⚖️ Is it legal to scrape this data?

The Actor collects **publicly available** review data. You are responsible for using it in line with G2's Terms and applicable laws (including data-protection rules). It does not access anything behind a login.

### 🤝 Support & contact

Found a bug or need a field added? Open an issue on the Actor's **Issues** tab. Custom extraction (reviewer firmographics, segments) available on request.

### Changelog

#### 0.1 — 2026-10-23 — first release

- Reviews by product URL/slug: rating, title, full text, author, date + product aggregate rating.
- Deep pagination with per-review de-duplication; `maxReviews`, `minDatePublished` (monitoring), optional `includeQnA` split.
- Pay-per-review billing; Standby mode for real-time HTTP use.

# Changelog

This Actor's version history is a separate document: https://apify.com/foxlabs/g2-reviews-scraper/changelog.md

# Actor input Schema

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

One per line. A full G2 URL (e.g. `https://www.g2.com/products/asana/reviews` or `https://www.g2.com/products/asana`) or just the slug (`asana`).

## `maxReviews` (type: `integer`):

Cap on reviews returned per product (default 100; 0 = all available). Each page holds ~10 reviews.

## `minDatePublished` (type: `string`):

ISO date (e.g. `2026-01-01`). Reviews are read newest-first; the Actor stops a product once it reaches an older review. Leave empty for all. Use it to monitor only new reviews across runs.

## `includeQnA` (type: `boolean`):

Also parse each review's "What do you like best?", "What do you dislike?" and "What problems is it solving?" sections as separate fields (best-effort HTML parse; the full combined text is always in `body`).

## `maxConcurrency` (type: `integer`):

How many products to scrape at once. Kept low by default because each page goes through the unblocking proxy.

## Actor input object example

```json
{
  "productUrls": [
    "asana",
    "slack"
  ],
  "maxReviews": 100,
  "minDatePublished": "",
  "includeQnA": false,
  "maxConcurrency": 2
}
```

# Actor output Schema

## `dataset` (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": [
        "asana",
        "slack"
    ],
    "maxReviews": 100,
    "maxConcurrency": 2
};

// Run the Actor and wait for it to finish
const run = await client.actor("foxlabs/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 = {
    "productUrls": [
        "asana",
        "slack",
    ],
    "maxReviews": 100,
    "maxConcurrency": 2,
}

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,foxlabs/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/88TpVDGAKTIL8ai7K/builds/1WQSOzmi5STXyUphi/openapi.json
