# G2 Scraper - Software Ratings, Reviews & Vendors (`scrapesage/g2-scraper`) Actor

Scrape G2 software products by search term with star rating, review count, vendor, description and related categories. Build software shortlists, competitor rating benchmarks and vendor lead lists.

- **URL**: https://apify.com/scrapesage/g2-scraper.md
- **Developed by:** [Scrape Sage](https://apify.com/scrapesage) (community)
- **Categories:** Lead generation, E-commerce, Agents
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$3.00 / 1,000 product scrapeds

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.

- **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 Scraper - Software Ratings, Reviews & Vendors

Scrape **G2** — the largest business-software review site — by search term, and get every product back with its **star rating**, **review count**, **vendor** and description. **No login, no cookies.**

Built for software shortlists, competitor rating benchmarks, SaaS market maps and vendor lead lists.

***

### What you get

One row per product, every row carrying the same fields:

| Field | What it is |
|---|---|
| `productName` | Product name, from G2's own payload |
| `vendorName`, `vendorUrl`, `vendorId` | Who makes it |
| `starRating` | e.g. `4.1` (out of 5) |
| `reviewCount` | e.g. `2946` |
| `description` | G2's product blurb |
| `relatedCategories` | Category slugs the product sits in |
| `productUrl`, `reviewsUrl` | Canonical G2 links |
| `productId`, `productUuid` | Stable G2 identifiers |
| `searchQuery`, `page`, `rank` | Which search found it and where it ranked |
| `categoryName`, `categoryProductCount` | The category headline, when G2 shows one |

About **20 products per search page**, and pagination works.

### Filters

`requireRating` · `minRating` · `minReviews` · `maxPagesPerQuery` · `maxResults`

Filters run **inside** the crawl, so a filtered-out product never costs you anything.

***

### Example input

```json
{
  "queries": ["crm", "project management"],
  "minRating": 4,
  "minReviews": 50,
  "maxPagesPerQuery": 3,
  "maxResults": 100,
  "proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}
```

### Example output

```json
{
  "type": "product",
  "productName": "Zoho CRM",
  "vendorName": "Zoho",
  "starRating": 4.1,
  "reviewCount": 2946,
  "description": "Zoho CRM helps you to attract, retain, delight customers and grow your company into a customer-focused organization.",
  "relatedCategories": ["client-portal", "customer-journey-mapping", "quote-to-cash"],
  "productUrl": "https://www.g2.com/products/zoho-crm",
  "reviewsUrl": "https://www.g2.com/products/zoho-crm/reviews",
  "categoryName": "CRM",
  "categoryProductCount": 1098,
  "rank": 1
}
```

***

### Pricing

**$0.003 per product.** You are charged only for rows actually delivered to your dataset. A search that matches nothing costs **$0** and tells you why.

### Honest limits

Please read this before buying — it defines what this actor is:

- **This scrapes G2's SEARCH results, not individual review text.** G2's category pages, product pages and product-review pages are all **HTTP 403** for logged-out clients (verified, including via Googlebot). Search is the only surface that serves. So you get each product's **aggregate** rating and review *count* — not the individual written reviews.
- **G2 blocks a share of requests.** Measured 7 of 8 fresh sessions succeeded; the actor retries on a fresh proxy session, and the **residential proxy is required**.
- **`categoryName` / `categoryProductCount` appear only on category-style searches** (like "crm"), because that's the only time G2 renders the headline. Every product still carries `relatedCategories`.

### Tips

- `minReviews` is the most useful filter — it strips the long tail of products with 2 reviews and leaves the real market.
- Run the same queries on a schedule and dedupe on `productSlug` to track **rating and review-count drift** over time; that's a genuine competitive-intelligence signal.
- `rank` plus `searchQuery` lets you monitor where you sit in G2's own search ordering.

### Related actors

- **Capterra Scraper** — the same job on Capterra: software reviews, ratings and leads

# Actor input Schema

## `queries` (type: `array`):

Software categories or product names to search G2 for, e.g. crm, project management, accounting, help desk.

## `startUrls` (type: `array`):

Paste g2.com search URLs directly. Note that G2 category and product pages are not accessible without a login - only search pages are.

## `requireRating` (type: `boolean`):

Drop products G2 has not rated yet.

## `minRating` (type: `integer`):

Keep only products rated at least this (1-5). 0 disables the filter.

## `minReviews` (type: `integer`):

Keep only products with at least this many reviews - useful for filtering out long-tail products. 0 disables the filter.

## `maxPagesPerQuery` (type: `integer`):

G2 returns about 20 products per search page.

## `maxResults` (type: `integer`):

Total cap across every search. Set 0 for no limit (explicit opt-in).

## `proxyConfiguration` (type: `object`):

A residential proxy is required - G2 blocks a share of requests and the actor retries on a fresh session.

## Actor input object example

```json
{
  "queries": [
    "crm",
    "project management"
  ],
  "requireRating": false,
  "minRating": 0,
  "minReviews": 0,
  "maxPagesPerQuery": 3,
  "maxResults": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

Every scraped product as a JSON item in the default dataset.

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

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

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

```

## MCP server setup

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