# G2 Reviews Scraper (`silentflow/g2-review-intelligence`) Actor

Scrape G2.com reviews at scale with no compute costs. Get 35 fields per review: star ratings, NPS scores, dimension ratings, reviewer company size, industry and country, pros, cons, switching signals, and LLM-ready markdown. Search by product URL, name, or seller.

- **URL**: https://apify.com/silentflow/g2-review-intelligence.md
- **Developed by:** [SilentFlow](https://apify.com/silentflow) (community)
- **Categories:** AI, Lead generation
- **Features:** Limited permissions
- **Stats:** 8 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 review extracteds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

**Turn G2's 5 million reviews into structured, actionable data.** Ratings, NPS scores, pros/cons, reviewer demographics, and switching signals for any B2B software product. In seconds, not hours.

### How it works

![How G2 Reviews Scraper works, 3 steps from G2.com to structured data](https://api.apify.com/v2/key-value-stores/PHH4td3yHEGpTAcMU/records/how-it-works-v8.png)

### ✨ Why teams choose this over other G2 scrapers

Spending hours copying reviews from G2 tabs? Running scrapers that fail half the time? Missing the data that actually matters for your analysis?

- ⚡ **Get 1,000+ reviews per minute.** Other G2 scrapers take 30x longer. Paste a URL, get structured data back before your coffee gets cold.
- 📊 **38 fields per review, not 15.** Star ratings, NPS scores, dimension ratings (ease of use, setup, support), each answer in its own field (likes, dislikes, problems solved, recommendations), reviewer country, company size, industry, and switching data. The fields competitors skip are often the ones you need most.
- 📅 **Collect only what is new.** Set `publishedAfter` to a date or a period like `7 days` and a weekly schedule returns just the reviews published since the last run.
- 🤖 **Ready for your LLM pipeline.** Every review includes a `markdownContent` field you can feed directly into ChatGPT, Claude, or any RAG system. No preprocessing needed.
- 🔍 **Search inside reviews.** Filter by keyword like "slow", "integration", or "support" to find exactly the feedback you're looking for across thousands of reviews.
- 🏢 **Scrape an entire vendor in one run.** Paste a seller URL like `/sellers/salesforce` and get reviews across all 72 of their products at once.
- 💰 **Pay per review, nothing else.** No compute costs, nothing to set up, no monthly fees. You only pay for data you actually receive.

### 🎯 What you can do with G2 review data

| Team | What they build |
|------|----------------|
| **Product** | Find the 3 features your competitor gets praised for that you don't have yet |
| **Sales** | Create battle cards with real quotes from verified G2 reviewers |
| **AI / LLM** | Feed thousands of structured reviews into your RAG pipeline or fine-tuning dataset |
| **Research** | Compare software adoption by company size and region across 220K+ products |
| **Customer Success** | Discover who switches away from your product and the exact reasons why |
| **VCs** | Run due diligence on any SaaS product using NPS trends and sentiment data |
| **Content** | Pull real testimonials and use cases mentioning specific keywords |

### 📥 Input parameters

#### Product or Seller URLs

| Parameter | Type | Description |
|-----------|------|-------------|
| `productUrls` | string\[] | G2 product or seller URLs (e.g., `https://www.g2.com/products/slack/reviews` or `https://www.g2.com/sellers/salesforce`) |

#### Search by Name

| Parameter | Type | Description |
|-----------|------|-------------|
| `productNames` | string\[] | Search for products by name (e.g., `Slack`, `Notion`, `Salesforce`) |

#### Limits

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `maxReviews` | integer | 100 | Maximum reviews to scrape per product (up to 50,000) |

#### Sorting & Filtering

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `sort` | select | Most recent | Sort by: most recent, highest rated, or lowest rated |
| `publishedAfter` | date | All dates | Only reviews published on or after this date (`2026-08-01`) or within a period (`7 days`, `2 weeks`, `1 month`). Maximum reviews still caps each product |
| `starRatings` | integer\[] | All | Filter by star rating (1-5). Leave empty for all ratings |
| `searchQuery` | string | | Filter reviews containing this keyword (e.g., "integration", "slow", "support") |

#### Options

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `includeSummary` | boolean | true | Add an analytics summary with rating distribution, avg NPS, the top pros and cons with their mention counts, top regions, and company segments |

#### Advanced

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `debugMode` | boolean | false | Enable detailed logging for troubleshooting |

### 📊 Output data

#### Review example

```json
{
    "reviewId": "12601006",
    "url": "https://www.g2.com/products/slack/reviews/12601006",
    "productName": "Slack",
    "productSlug": "slack",
    "productId": 3437,
    "reviewTitle": "Good tool for communication management",
    "pros": "Navigation is very easy, and I like having the option to organize different group chats.",
    "cons": "The only issue I have had was archiving old chats where there were people who already left.",
    "problemsSolved": "Communication with the team, all our project updates live in one place.",
    "recommendations": null,
    "reviewText": "Communication with the team, all our project updates live in one place.",
    "markdownContent": "# Good tool for communication management\n\n**Rating:** 5/5 | **NPS:** 9/10...",
    "starRating": 5,
    "npsScore": 9,
    "easeOfUse": 10,
    "easeOfSetup": 8.5,
    "qualityOfSupport": 7.1,
    "meetsRequirements": 8.5,
    "reviewerName": "Elis L.",
    "country": "Estonia",
    "region": "EMEA",
    "companySegment": "Mid-Market",
    "industry": "Information Technology and Services",
    "submittedAt": "2026-04-08T06:38:48.161-05:00",
    "publishedAt": "2026-04-08T14:02:11Z",
    "reviewSource": "g2",
    "switchedFrom": false,
    "responseType": "text",
    "dataType": "review"
}
```

#### Analytics summary example

```json
{
    "productName": "Slack",
    "productSlug": "slack",
    "totalReviews": 21099,
    "ratingDistribution": {"1": 43, "2": 97, "3": 480, "4": 3788, "5": 16691},
    "prosSummary": [
        {"keyword": "Chat", "mentions": 3438},
        {"keyword": "Collaboration", "mentions": 2253},
        {"keyword": "Usability", "mentions": 1021}
    ],
    "consSummary": [
        {"keyword": "Chat", "mentions": 2473},
        {"keyword": "Notification", "mentions": 1942},
        {"keyword": "Platform", "mentions": 843}
    ],
    "avgNps": 9.2,
    "avgEaseOfUse": 9.3,
    "avgEaseOfSetup": 9.3,
    "avgQualityOfSupport": 9.0,
    "avgMeetsRequirements": 9.3,
    "topRegions": {"Americas": 12470, "Asia Pacific": 4537, "EMEA": 2405},
    "topCompanySegments": {"Small-Business": 7886, "Mid-Market": 7849, "Enterprise": 3394},
    "topSources": {"g2": 13617, "organic": 3981, "vendor": 450},
    "dataType": "summary"
}
```

### 🗂️ Data fields

| Category | Fields |
|----------|--------|
| **Review** | `reviewId`, `reviewTitle`, `pros`, `cons`, `problemsSolved`, `recommendations`, `reviewText`, `markdownContent`, `submittedAt`, `publishedAt` |
| **Ratings** | `starRating` (1-5), `npsScore` (0-10), `easeOfUse`, `easeOfSetup`, `easeOfAdmin`, `qualityOfSupport`, `meetsRequirements` |
| **Reviewer** | `reviewerName`, `companySegment`, `industry`, `country`, `region` |
| **Product** | `productName`, `productSlug`, `productId`, `url` |
| **Competitive** | `switchedFrom`, `switchedReason`, `loveTheme`, `hateTheme` |
| **Metadata** | `reviewSource`, `sourceType`, `isIncentivized`, `helpfulCount`, `responseType` |
| **Summary** | `totalReviews`, `ratingDistribution`, `avgNps`, `avgEaseOfUse`, `prosSummary`, `consSummary`, `topRegions`, `topCompanySegments`, `topSources` |

`problemsSolved` is the reviewer's answer to "What problems is the product solving and how is that benefiting you?". `recommendations` is the answer to "Recommendations to others considering the product", a question G2 asked until mid-2022, so it is filled on older reviews and `null` on recent ones. `publishedAt` is the date the review went live on G2.

### 🚀 Examples

#### Get the latest Slack reviews

```json
{
    "productUrls": ["https://www.g2.com/products/slack/reviews"],
    "maxReviews": 100
}
```

#### Collect only last week's new reviews (weekly schedule)

```json
{
    "productUrls": ["https://www.g2.com/products/slack/reviews"],
    "publishedAfter": "7 days",
    "maxReviews": 1000
}
```

#### Find reviews mentioning "integration"

```json
{
    "productUrls": ["https://www.g2.com/products/notion/reviews"],
    "maxReviews": 500,
    "searchQuery": "integration"
}
```

#### Pull only negative reviews for competitive analysis

```json
{
    "productUrls": ["https://www.g2.com/products/hubspot-sales-hub/reviews"],
    "maxReviews": 200,
    "sort": "lowest_rated",
    "starRatings": [1, 2]
}
```

#### Scrape all products from a vendor at once

```json
{
    "productUrls": ["https://www.g2.com/sellers/salesforce"],
    "maxReviews": 50
}
```

#### Compare multiple products by name

```json
{
    "productNames": ["Slack", "Notion", "Asana"],
    "maxReviews": 1000,
    "sort": "most_recent",
    "includeSummary": true
}
```

### 💻 Integrations

#### Python: Feed reviews into your LLM

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")

run_input = {
    "productUrls": ["https://www.g2.com/products/slack/reviews"],
    "maxReviews": 1000,
    "sort": "most_recent",
}

run = client.actor("silentflow/g2-review-intelligence").call(run_input=run_input)

reviews = []
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    if item["dataType"] == "review":
        reviews.append(item)
        print(f"{item['starRating']}⭐ {item['reviewTitle']}")
        print(f"  Pros: {item['pros'][:100]}...")
        print(f"  Cons: {item['cons'][:100]}...")
    elif item["dataType"] == "summary":
        print(f"\nSummary: {item['totalReviews']} reviews, avg NPS: {item['avgNps']}/10")

## Use markdownContent for RAG pipelines
for review in reviews:
    # Feed review["markdownContent"] to your LLM
    pass
```

#### JavaScript

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });

const run = await client.actor('silentflow/g2-review-intelligence').call({
    productUrls: ['https://www.g2.com/products/slack/reviews'],
    maxReviews: 1000,
    sort: 'most_recent',
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();

const reviews = items.filter(i => i.dataType === 'review');
const summaries = items.filter(i => i.dataType === 'summary');

reviews.forEach(item => {
    console.log(`${item.starRating}⭐ ${item.reviewTitle}`);
});

summaries.forEach(s => {
    console.log(`${s.productName}: ${s.totalReviews} reviews, NPS ${s.avgNps}/10`);
});
```

### 📈 Performance

| Metric | Value |
|--------|-------|
| Speed | 1,000+ reviews per minute |
| Max reviews per product | 50,000 |
| Total reviews accessible | 5,300,000+ |
| Total products | 224,000+ |
| Memory usage | 256 MB (minimal) |

### 💡 Tips for best results

1. **Search inside reviews**: `searchQuery: "slow"` finds every review mentioning performance issues across thousands of reviews. Great for competitive analysis.
2. **Scrape entire vendors**: Paste a seller URL like `/sellers/salesforce` to get reviews across all of their products in one run.
3. **Filter by stars for sentiment analysis**: `starRatings: [1, 2]` for negative feedback, `[4, 5]` for testimonials.
4. **Use the summary**: The analytics summary gives you rating distribution, avg NPS, the most mentioned pros and cons, and reviewer demographics without processing individual reviews.
5. **Monitor new reviews**: Schedule a weekly run with `publishedAfter: "7 days"` to receive only the reviews published since the last run.
6. **Feed markdownContent to your LLM**: Each review includes a pre-formatted markdown version ready for ChatGPT, Claude, or your vector database.

### ❓ FAQ

**Q: Do I need a G2 account?**
A: No. The scraper extracts publicly available review data. No login, no API key, no account.

**Q: Why is this so much faster than other G2 scrapers?**
A: We read G2's review data directly instead of rendering pages in a browser, so a run of thousands of reviews finishes in seconds.

**Q: Can I get only the reviews published since my last run?**
A: Yes. Set `publishedAfter` to a date like `2026-08-01` or a period like `7 days`, `2 weeks` or `1 month`. Pair it with a weekly or monthly schedule and each run delivers just the new reviews. Maximum reviews still caps each product, so keep it high enough for your window.

**Q: Do I get the pros and cons summary?**
A: Yes. With the summary on, each product gets a summary item with the themes reviewers like and dislike most and how many reviews mention each, for example "Chat: 3,438 mentions".

**Q: What is the markdownContent field?**
A: A pre-formatted markdown version of each review with structured headers (pros, cons, comments) and metadata. Drop it straight into your LLM prompt or vector database.

**Q: Can I scrape all products from a single vendor?**
A: Yes. Paste a seller URL like `https://www.g2.com/sellers/salesforce` and the scraper finds and scrapes reviews from every product under that vendor.

**Q: What are the dimension ratings (easeOfUse, etc.)?**
A: G2 asks reviewers to rate products on specific dimensions (ease of use, setup, admin, support, meets requirements). We normalize these to a 0-10 scale.

**Q: How fresh is the data?**
A: Live data, every run. New reviews appear within minutes of being published on G2.

### 📬 Support

Need something this scraper doesn't do yet? We ship features fast.

- 💡 **Feature requests** go straight to our backlog
- ⚙️ **Enterprise needs?** We do custom integrations and high-volume setups

Response time: usually under 24 hours.

Check out our other scrapers: [SilentFlow on Apify](https://apify.com/silentflow)

# Actor input Schema

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

G2 product or seller URLs (e.g., https://www.g2.com/products/slack/reviews or https://www.g2.com/sellers/salesforce).

## `productNames` (type: `array`):

Search for products by name (e.g., 'Slack', 'HubSpot Sales Hub').

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

Maximum number of reviews to scrape per product.

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

Sort order for reviews.

## `publishedAfter` (type: `string`):

Only reviews published on or after this date: <code>2026-08-01</code>, or a period such as <code>7 days</code>, <code>2 weeks</code> or <code>1 month</code> for a scheduled run that collects only new reviews. Maximum reviews still caps each product. Empty keeps every date.

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

Only include reviews with these star ratings (leave empty for all).

## `searchQuery` (type: `string`):

Filter reviews containing this keyword (e.g., 'integration', 'slow', 'support'). Only reviews matching will be returned.

## `includeSummary` (type: `boolean`):

Add a summary item per product: rating distribution, average scores, the top pros and cons with the number of reviews that mention each, top regions, company segments, and review sources.

## `debugMode` (type: `boolean`):

Enable detailed logging for troubleshooting.

## Actor input object example

```json
{
  "productUrls": [
    "https://www.g2.com/products/slack/reviews"
  ],
  "maxReviews": 100,
  "sort": "most_recent",
  "includeSummary": true,
  "debugMode": false
}
```

# Actor output Schema

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

Complete review data including: productName, reviewTitle, starRating, pros, cons, problemsSolved, recommendations, reviewerName, publishedAt, and more.

## `resultsCSV` (type: `string`):

CSV format export for spreadsheet analysis

## `resultsExcel` (type: `string`):

Excel format export

# 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.g2.com/products/slack/reviews"
    ],
    "maxReviews": 100,
    "sort": "most_recent"
};

// Run the Actor and wait for it to finish
const run = await client.actor("silentflow/g2-review-intelligence").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.g2.com/products/slack/reviews"],
    "maxReviews": 100,
    "sort": "most_recent",
}

# Run the Actor and wait for it to finish
run = client.actor("silentflow/g2-review-intelligence").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.g2.com/products/slack/reviews"
  ],
  "maxReviews": 100,
  "sort": "most_recent"
}' |
apify call silentflow/g2-review-intelligence --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,silentflow/g2-review-intelligence"
        }
    }
}
```

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/6lzwIvVe4fAkDLgII/builds/Kh4D0kSyc7qAHGfaq/openapi.json
