# G2 Reviews Scraper — Software Reviews (`darknezz/g2-reviews-scraper`) Actor

Scrape G2.com software reviews: product name, review title, text, star rating, author, date, pros and cons as clean JSON. No API key, login or proxy required.

- **URL**: https://apify.com/darknezz/g2-reviews-scraper.md
- **Developed by:** [Oaida Adrian](https://apify.com/darknezz) (community)
- **Categories:** Marketing, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-usage

## 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

## G2 Reviews Scraper — Software Reviews

Scrape **G2.com software reviews for any product** and get every review as clean, structured JSON — star rating, review title, text, author, date, plus the pros and cons the reviewer listed. No API key, no login, no proxy required.

Built for software buyers, competitive-intelligence teams and SaaS market researchers who need real user sentiment in one table.

### Why this Actor

- **No account, no API key, no proxy budget** — reads the public G2 review pages directly with browser-grade TLS.
- **Pros and cons included** — the two fields every buyer reads first are parsed into dedicated columns.
- **Real user sentiment** — individual star ratings and review text, not just aggregates.
- **Multi-product support** — pass multiple product names or slugs and compare competitors in one run.
- **Pay per result** — a small fee per review scraped; a 50-review run costs a fraction of a cent.

### How it works

For each product the Actor fetches the G2 review pages, parses the HTML for individual review blocks, and outputs **one dataset item per review** — about 10 reviews per page, paging automatically up to `maxReviewsPerProduct`.

### Input

```json
{
  "keywords": ["slack", "notion"],
  "maxReviewsPerProduct": 10
}
```

| Field | Type | Description |
|---|---|---|
| `keywords` | array | Product names or slugs (e.g. slack, notion) — **required** |
| `maxReviewsPerProduct` | integer | Reviews to scrape per product (default 10, max 500; ~10 per page) |

### Output (one item per review)

```json
{
  "keyword": "slack",
  "productName": "Slack",
  "starRating": 4.5,
  "reviewTitle": "Great team communication tool",
  "reviewText": "Slack has transformed how our team communicates...",
  "reviewAuthor": "Sarah Chen",
  "reviewDate": "2026-02-20",
  "pros": "Intuitive interface, excellent integrations, great search.",
  "cons": "Can be expensive for large teams. Notification overload."
}
```

### Use cases

- 🛒 **Software selection** — compare real user reviews before purchasing or renewing SaaS tools.
- 🏢 **Competitive intelligence** — track competitor product sentiment and feature feedback.
- 📊 **Market research** — aggregate SaaS review data for category analysis.
- 🔍 **Feature insights** — mine pros and cons for common pain points and requested features.
- ✍️ **Review response** — monitor your own product's reviews and respond to detractors quickly.

### Run it from the API

```bash
curl -X POST "https://api.apify.com/v2/acts/darknezz~g2-reviews-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"keywords":["slack"],"maxReviewsPerProduct":50}'
```

**Scheduling:** attach an Apify Schedule (e.g. weekly) to watch sentiment drift across your product and your competitors'.

### Pricing

Pay per event: a small fee for each review scraped, plus Apify's standard platform events (actor start + dataset item). No subscription — you pay only for what you run.

### FAQ

**Do I need a G2 account or API key?** No. The Actor reads the public review pages directly.

**Can I use product URLs instead of names?** Product names or slugs work best (e.g. `slack`, `notion`); pass the name exactly as shown on G2.

**How many reviews can I get?** Up to `maxReviewsPerProduct` (max 500 per product). G2 pages carry ~10 reviews each and the Actor pages through automatically.

**Are `pros` and `cons` always present?** Most G2 reviews include them; where a reviewer omitted them the fields are `null`.

**Is scraping this legal?** Reviews are public and unauthenticated. You are responsible for complying with G2's terms and applicable laws for how you use the data.

# Actor input Schema

## `keywords` (type: `array`):

Product names or slugs to scrape reviews from (e.g. slack, notion). Each maps to a G2 product reviews page.

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

Maximum number of reviews to scrape per product (about 10 per page).

## Actor input object example

```json
{
  "keywords": [
    "slack",
    "notion"
  ],
  "maxReviewsPerProduct": 10
}
```

# Actor output Schema

## `results` (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 = {
    "keywords": [
        "slack",
        "notion"
    ]
};

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

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

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/AukAxitumnRPEunPf/builds/YbNnNczRWddsd5t9g/openapi.json
