# G2.Com Scraper (It works) (`coder_luffy/g2-scraper`) Actor

G2.com scraper that pulls software listings, ratings, pros and cons, and market segment data from any category page, so you can track a market without checking it manually.

- **URL**: https://apify.com/coder_luffy/g2-scraper.md
- **Developed by:** [Luffy](https://apify.com/coder_luffy) (community)
- **Categories:** Developer tools, Automation, Lead generation
- **Features:** Limited permissions
- **Stats:** 69 total users, 3 monthly users, 100.0% runs succeeded, 9 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $10.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.
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.com Scraper](https://i.imgur.com/4OwVZQu.png)

## G2.com Scraper

Extract software listings from G2.com category pages, including ratings, reviews, pricing, pros and cons highlights, market segment breakdowns, and direct product URLs.

### What it does

G2.com is a peer-to-peer software review platform with millions of verified reviews. This scraper takes any G2.com category page URL and collects all listings, paginating automatically.

For each listing it collects:

- Product name, slug, and direct URL to the G2 reviews page
- Logo URL
- Vendor name and vendor page URL
- Average star rating and total review count
- Entry level pricing
- Full product description
- Pros highlights (top positive aspects from reviewers)
- Cons highlights (top negative aspects from reviewers)
- Typical user roles and industries
- Market segment breakdown (Small-Business / Mid-Market / Enterprise percentages)
- Category name and ID

### Why it matters

G2 ratings come from verified buyers. The market segment field is the one worth paying attention to — a 4.2 from mostly SMB users reads differently than a 4.2 from enterprise teams. Same number, different story.

The pros and cons are aggregated from reviewer text. You get the recurring themes rather than individual opinions. When "Learning Curve" shows up in the cons column for five tools in a row, that's the category telling you something.

Schedule it and you get a running record. Useful for watching what happens to a competitor's score after a rough release, or spotting a newer product quietly picking up reviews before it shows up anywhere else.

### Input

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `urls` | Array of strings | required | One or more G2.com category page URLs |
| `maxItems` | Integer | 25 | Maximum listings to collect across all URLs (up to 50000) |
| `requestTimeoutSecs` | Integer | 30 | Per-request timeout in seconds (5 to 120) |

#### Example input

```json
{
  "urls": [
    "https://www.g2.com/categories/crm",
    "https://www.g2.com/categories/marketing-automation"
  ],
  "maxItems": 25
}
```

G2.com shows 15 listings per page. `maxItems: 15` = 1 page, `maxItems: 150` = 10 pages. Maximum supported value is `50000`.

#### Popular category URLs

**Marketing and sales**

- https://www.g2.com/categories/crm
- https://www.g2.com/categories/marketing-automation
- https://www.g2.com/categories/email-marketing
- https://www.g2.com/categories/lead-generation
- https://www.g2.com/categories/sales-intelligence
- https://www.g2.com/categories/sales-engagement

**Customer support**

- https://www.g2.com/categories/help-desk
- https://www.g2.com/categories/live-chat
- https://www.g2.com/categories/customer-success

**HR and finance**

- https://www.g2.com/categories/core-hr
- https://www.g2.com/categories/applicant-tracking-systems
- https://www.g2.com/categories/payroll
- https://www.g2.com/categories/accounting

**Collaboration and productivity**

- https://www.g2.com/categories/project-management
- https://www.g2.com/categories/team-collaboration
- https://www.g2.com/categories/video-conferencing
- https://www.g2.com/categories/task-management

Tip: G2 category slugs are predictable. If you know the category name, try `/categories/the-category-name` with hyphens. Most work on the first guess.

### Output

Each item represents one software listing.

```json
{
  "productId": 506,
  "productUuid": "16e299ae-0256-44e3-8989-7647815550d4",
  "productName": "Agentforce Sales (formerly Salesforce Sales Cloud)",
  "productSlug": "agentforce-sales-formerly-salesforce-sales-cloud",
  "productUrl": "https://www.g2.com/products/agentforce-sales-formerly-salesforce-sales-cloud/reviews",
  "logoUrl": "https://images.g2crowd.com/uploads/product/hd_favicon/826ce87155a61f72d3dfd92c5283eed8/agentforce.svg",
  "vendor": "Salesforce",
  "vendorUrl": "https://www.g2.com/sellers/salesforce",
  "ratingAvg": 4.4,
  "numReviews": 25619,
  "entryLevelPrice": "$25.00",
  "productDescription": "Accelerate revenue from pipeline to paycheck with Salesforce Sales Cloud...",
  "prosHighlights": ["Ease of Use", "Features", "Lead Management", "Customization"],
  "consHighlights": ["Learning Curve", "Pricing", "Complexity"],
  "userSentiment": "Reviewers appreciate Agentforce Sales for its powerful automation, customizable dashboards, and real-time insights. Users reported it can be complex to set up and has a steep learning curve.",
  "typicalUsers": "Account Executive, Account Manager, Sales Manager",
  "industries": "Computer Software, Information Technology and Services",
  "marketSegment": "46% Mid-Market, 34% Enterprise",
  "consultingServicesUrl": "https://www.g2.com/products/agentforce-sales-formerly-salesforce-sales-cloud/imp",
  "category": "CRM",
  "categoryId": 179,
  "pageNumber": 1,
  "sourceUrl": "https://www.g2.com/categories/crm",
  "scrapedAt": "2026-04-19T10:00:00.000000+00:00",
  "error": null
}
```

#### Output in Apify table view

![Table view](https://i.imgur.com/EkP8glK.png)

#### Output in Apify JSON view

![JSON view](https://i.imgur.com/1UnM5F0.png)

### Pagination

The actor reads the total page count from each category page and paginates automatically.

- `maxItems: 15` = 1 page per URL
- `maxItems: 150` = 10 pages per URL
- `maxItems: 975` = 65 pages (full CRM category)
- `maxItems: 50000` = maximum supported value

### Scheduled runs

1. Open your actor and click Schedules
2. Set a cron expression. `0 8 * * 1` runs every Monday at 8 AM
3. Save

Each run appends fresh data. Run weekly for a few months and you have a genuine time-series of category ratings, review counts, and market segment shifts.

### Best practices

Run with `maxItems: 15` first to confirm the URL works before scaling up.

Market segment data only appears when enough users from each company size have reviewed a product. Newer or lightly-reviewed products may return `null` here — that's expected.

The pros and cons highlights are G2's own aggregation of reviewer language, not individual quotes. They're better for bulk comparison across a category than reading individual reviews one by one.

If you want to track a specific set of tools rather than a whole category, collect the full category once, filter to the products you care about, then use their individual G2 review URLs for deeper scraping.

Export to Google Sheets via the Apify integration tab. New runs append rows automatically, giving you a live sheet that updates on every scheduled run without any manual work.

### About G2.com

G2.com is a software review platform with millions of verified reviews across thousands of categories. Reviews are verified through LinkedIn or business email. The G2 Score is calculated from satisfaction ratings, review volume, and market presence data. Products that clear a threshold on these metrics earn a G2 Leader badge and appear at the top of their category.

### Related actors

These actors cover other major software review platforms in the same family:

- [GetApp.com Scraper](https://apify.com/kawsar/getapp-com-scraper) — software listings from GetApp.com category pages
- [Capterra Scraper](https://apify.com/kawsar/capterra-scraper) — software listings from Capterra category pages
- [Capterra Reviews Scraper](https://apify.com/kawsar/capterra-reviews-scraper) — individual user reviews from Capterra product pages

***

[![Visit Apify](https://i.imgur.com/ZPi3odq.png)](https://apify.com/kawsar)

# Actor input Schema

## `urls` (type: `array`):

One or more G2.com category page URLs to scrape. Use the category page URL, e.g. https://www.g2.com/categories/crm or https://www.g2.com/categories/marketing-automation

## `maxItems` (type: `integer`):

Maximum number of software listings to collect in total across all URLs. Each G2.com category page shows 15 listings, so 15 = 1 page, 150 = 10 pages. Maximum supported value is 50000.

## `requestTimeoutSecs` (type: `integer`):

Per-request timeout in seconds.

## `enrichFromProductPage` (type: `boolean`):

Fetch each product's individual page to fill in entryLevelPrice, productDescription, full prosHighlights/consHighlights, and consultingServicesUrl. Doubles the number of HTTP requests but provides complete data. Disable to scrape faster with listing-page data only.

## Actor input object example

```json
{
  "urls": [
    "https://www.g2.com/categories/email-marketing"
  ],
  "maxItems": 25,
  "requestTimeoutSecs": 300,
  "enrichFromProductPage": true
}
```

# 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 = {
    "urls": [
        "https://www.g2.com/categories/crm"
    ]
};

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

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

```

## MCP server setup

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