# G2 Reviews Scraper & Competitor Intel Report (`davidbenittah/g2-competitor-review-intel`) Actor

Collect public G2 reviews for your product and up to five competitors, then get one report per product: average rating, rating spread, repeated pros and cons, switch reasons and recent critical reviews. Reviewer names and profile fields are stripped before output.

- **URL**: https://apify.com/davidbenittah/g2-competitor-review-intel.md
- **Developed by:** [David](https://apify.com/davidbenittah) (community)
- **Categories:** Marketing, Automation
- **Stats:** 2 total users, 1 monthly users, 90.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $120.00 / 1,000 results

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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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

## G2 Reviews Scraper & Competitor Intel Report

**G2 reviews scraper and SaaS competitor intel report.** It collects public G2 reviews for your product and up to five competitors, then returns one report per product: average rating, rating spread, the pros buyers repeat, the cons buyers repeat, the reasons they give for switching, and the recent critical reviews. Reviewer names and profile fields are stripped by code before anything is written.

### What the G2 reviews scraper collects

- Compare one client product against up to five G2 competitors.
- Aggregate average rating, rating distribution, frequent pros, frequent cons, and switch reasons.
- Surface recent critical reviews without exposing reviewer names or profile data.
- Emit clean dataset rows for dashboards, scheduled monitoring, or AI agents.
- Bound review volume per run so costs stay predictable.

### Use cases

- PMM teams tracking why buyers choose or leave competitors.
- Founders preparing sales battlecards from recent public reviews.
- Product teams watching recurring complaints after a competitor launch.
- Agencies producing SaaS competitor intelligence snapshots.

### Ready-made tasks

- **Sales battlecard from G2 pros, cons and ratings** — one product against two rivals, 12 months of reviews.
- **Why buyers switch, last 90 days of G2 reviews** — switch reasons and every review at 2★ or lower.
- **Recent critical G2 reviews of one direct rival** — a single competitor, 6 months, 1★ and 2★.

### Input

```json
{
  "clientProductUrl": "https://www.g2.com/products/hubspot-marketing-hub/reviews",
  "competitorProductUrls": [
    "salesforce-sales-cloud",
    "zoho-crm"
  ],
  "maxReviewsPerProduct": 50,
  "lookbackDays": 365,
  "minCriticalRating": 3
}
````

Hard limits:

- 1 client product + 5 competitors per run.
- 50 reviews per product by default.
- 200 reviews per product maximum.
- Public G2 reviews only. No login, no paywall, no private data.

### G2 review data you get

One `product_report` row per product plus one `competitor_compare_summary` row, readable as JSON, CSV or Excel and available from the Apify API: product reference, role, review count, average rating, rating distribution, top pros, top cons, top switch reasons, and the recent critical reviews with rating, date, title and snippet.

Example product row:

```json
{
  "type": "product_report",
  "role": "competitor",
  "productRef": "salesforce-sales-cloud",
  "reviewCount": 50,
  "averageRating": 4.21,
  "prosTop": [{ "term": "automation", "count": 14 }],
  "consTop": [{ "term": "setup", "count": 9 }],
  "switchReasonsTop": [{ "term": "pricing", "count": 5 }],
  "criticalRecentReviews": [
    { "rating": 2, "publishedAt": "2026-06-12", "title": "Hard to configure", "snippet": "Setup took longer than expected..." }
  ],
  "identityFieldsRemoved": true
}
```

### Pricing

Recommended pay-per-event pricing: `$0.12` per analyzed product report item plus a small Actor start fee. This is calibrated above the upstream G2 review scraper cost because this Actor pays for bounded upstream review collection and adds competitive aggregation.

### FAQ

#### Do I get the raw reviews or a report?

A report. This Actor runs an upstream G2 review scraper to collect public reviews, then aggregates them: ratings, repeated pros and cons, switch reasons, and short snippets of the recent critical reviews. If you want every review row as-is, use a plain G2 reviews scraper instead.

#### Does this include reviewer names?

No. Reviewer identity fields are stripped by code. The output keeps only aggregate intelligence and short review snippets needed for the report.

#### Does this scrape Capterra too?

No. v1 is G2 only. Capterra is a later extension.

#### Can I schedule it?

Yes. Schedule the same input weekly or monthly and compare the dataset rows over time.

#### Does it bypass G2 protections?

No. It delegates public review collection to an existing Apify G2 Actor and does not bypass logins, paywalls, or private areas.

> This is an unofficial tool and is not affiliated with, endorsed by, or sponsored by G2.

# Actor input Schema

## `clientProductUrl` (type: `string`):

The G2 product page URL or slug for your product. Example: hubspot-marketing-hub.

## `competitorProductUrls` (type: `array`):

Competitor G2 product URLs or slugs to compare against the client product. Hard maximum: 5 competitors.

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

Safety cap for upstream reviews per product. Hard maximum: 200. The upstream G2 scraper requires at least 50.

## `lookbackDays` (type: `integer`):

Only request reviews published within this many days when supported by the upstream scraper. 0 means all time.

## `minCriticalRating` (type: `integer`):

Reviews with this rating or lower are included in the critical recent review section.

## `upstreamActorId` (type: `string`):

Advanced: upstream Actor used to collect public G2 reviews before aggregation.

## `upstreamInputOverrides` (type: `object`):

Advanced: extra fields merged into each upstream Actor run input.

## Actor input object example

```json
{
  "clientProductUrl": "hubspot-marketing-hub",
  "competitorProductUrls": [
    "salesforce-sales-cloud"
  ],
  "maxReviewsPerProduct": 50,
  "lookbackDays": 365,
  "minCriticalRating": 3,
  "upstreamActorId": "automation-lab/g2-scraper",
  "upstreamInputOverrides": {}
}
```

# Actor output Schema

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

Structured result items.

# 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 = {
    "clientProductUrl": "hubspot-marketing-hub",
    "competitorProductUrls": [
        "salesforce-sales-cloud"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("davidbenittah/g2-competitor-review-intel").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 = {
    "clientProductUrl": "hubspot-marketing-hub",
    "competitorProductUrls": ["salesforce-sales-cloud"],
}

# Run the Actor and wait for it to finish
run = client.actor("davidbenittah/g2-competitor-review-intel").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "clientProductUrl": "hubspot-marketing-hub",
  "competitorProductUrls": [
    "salesforce-sales-cloud"
  ]
}' |
apify call davidbenittah/g2-competitor-review-intel --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=davidbenittah/g2-competitor-review-intel",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "G2 Reviews Scraper & Competitor Intel Report",
        "description": "Collect public G2 reviews for your product and up to five competitors, then get one report per product: average rating, rating spread, repeated pros and cons, switch reasons and recent critical reviews. Reviewer names and profile fields are stripped before output.",
        "version": "1.0",
        "x-build-id": "hopYUjixYowJioFe9"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/davidbenittah~g2-competitor-review-intel/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-davidbenittah-g2-competitor-review-intel",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/davidbenittah~g2-competitor-review-intel/runs": {
            "post": {
                "operationId": "runs-sync-davidbenittah-g2-competitor-review-intel",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/davidbenittah~g2-competitor-review-intel/run-sync": {
            "post": {
                "operationId": "run-sync-davidbenittah-g2-competitor-review-intel",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "clientProductUrl",
                    "competitorProductUrls"
                ],
                "properties": {
                    "clientProductUrl": {
                        "title": "Client G2 product URL or slug",
                        "type": "string",
                        "description": "The G2 product page URL or slug for your product. Example: hubspot-marketing-hub.",
                        "default": "hubspot-marketing-hub"
                    },
                    "competitorProductUrls": {
                        "title": "Competitor G2 product URLs or slugs",
                        "type": "array",
                        "description": "Competitor G2 product URLs or slugs to compare against the client product. Hard maximum: 5 competitors.",
                        "default": [
                            "salesforce-sales-cloud"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxReviewsPerProduct": {
                        "title": "Max reviews per product",
                        "minimum": 50,
                        "maximum": 200,
                        "type": "integer",
                        "description": "Safety cap for upstream reviews per product. Hard maximum: 200. The upstream G2 scraper requires at least 50.",
                        "default": 50
                    },
                    "lookbackDays": {
                        "title": "Published within last N days",
                        "minimum": 0,
                        "maximum": 3650,
                        "type": "integer",
                        "description": "Only request reviews published within this many days when supported by the upstream scraper. 0 means all time.",
                        "default": 365
                    },
                    "minCriticalRating": {
                        "title": "Critical review rating threshold",
                        "minimum": 1,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Reviews with this rating or lower are included in the critical recent review section.",
                        "default": 3
                    },
                    "upstreamActorId": {
                        "title": "Upstream G2 reviews Actor",
                        "type": "string",
                        "description": "Advanced: upstream Actor used to collect public G2 reviews before aggregation.",
                        "default": "automation-lab/g2-scraper"
                    },
                    "upstreamInputOverrides": {
                        "title": "Upstream input overrides",
                        "type": "object",
                        "description": "Advanced: extra fields merged into each upstream Actor run input.",
                        "default": {}
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
