# G2 Reviews Scraper - Software Reviews, Ratings & Product Data (`scrapersdelight/g2-reviews-scraper`) Actor

Scrape G2 software reviews: title, stars, likes, dislikes, problems solved, reviewer role, industry, company size and date. Filter by stars, company size, role, region, industry, keyword or date; newest first; monitor mode. Optional product rows with the G2 profile. No login.

- **URL**: https://apify.com/scrapersdelight/g2-reviews-scraper.md
- **Developed by:** [Scrapers Delight](https://apify.com/scrapersdelight) (community)
- **Categories:** Marketing, Business, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.05 / 1,000 reviews

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

### What does G2 Reviews Scraper do?

**G2 Reviews Scraper** extracts software reviews from [g2.com](https://www.g2.com) and turns a product URL, a product name, a G2 search term or a G2 category into structured rows: one row per review with the title, star rating, what the reviewer likes, dislikes and the problems the product solves for them, every other answer, the reviewer's role, company size and industry, and the publication date. It can also deliver one row per product: G2 rating, review count and categories, and, on request, the full G2 profile (vendor, description, star distribution, pros and cons themes, review counts per segment, role, industry and region, pricing plans and comparisons). Built for product marketers, competitive-intelligence teams, analysts, investors and AI pipelines.

G2 scraper · G2 reviews API alternative · G2 Crowd review export · G2.com software review data

- **The newest reviews first:** ask for 100 reviews and you get the 100 most recent ones that match your filters, not 25 of each star level
- **G2's own review filters, applied by G2:** star rating, company size segment, reviewer role, region, **industry (all 149 G2 industries)**, G2 category and G2's own keyword search inside the reviews, in any combination, plus a date window
- **Full histories:** set **Max reviews per product** to 0 and the actor walks G2's filters until every review it can reach is read: 138 of 138 PhantomBuster reviews, 663 of 669 Apify reviews (measured)
- **Many products per run:** paste product URLs, slugs, G2 ids or exact names, a search term or a category; each product is read once
- **Coverage on every product:** G2's own review count next to what was read and delivered, in `RUN_SUMMARY` and on product rows
- **Monitor mode:** schedule it and receive only reviews published since the last run; optional webhook at the end of each run
- **No login, cookies, API key or proxy:** reads G2's public review feed; a product page profile is read through Apify's Unblocker only when you ask for it
- **Export anywhere:** JSON, CSV, Excel, XML; API, schedules, webhooks, Make, Zapier, n8n, Google Sheets, MCP

### What data can you get from G2?

<table>
<tr><td>🔗 Review id and link (`reviewUrl`)</td><td>📝 Review title</td><td>📅 Published date</td></tr>
<tr><td>⭐ Star rating, 0-5 in half stars</td><td>👍 What the reviewer likes best (`likes`)</td><td>👎 What they dislike (`dislikes`)</td></tr>
<tr><td>🧩 Problems solved and benefits</td><td>💡 Recommendations to others</td><td>📚 Every question and answer (`answers`)</td></tr>
<tr><td>👤 Reviewer name (first name + initial)</td><td>🕶️ Verified anonymous reviewer flag</td><td>💼 Role on the product (User, Administrator ...)</td></tr>
<tr><td>🏭 Reviewer industry</td><td>🏢 Company size (e.g. 51-200 employees)</td><td>🌍 Region and market segment (when filtered)</td></tr>
<tr><td>📦 Product name, slug, G2 rating, review count</td><td>🗂️ G2 categories</td><td>✅ Reviews delivered and whether all were read</td></tr>
<tr><td>🏷️ Vendor, seller, description, logo</td><td>📊 Star distribution, pros and cons themes with mention counts</td><td>🧮 Review counts per segment, role, category, industry, region</td></tr>
<tr><td>💲 Pricing plans the vendor lists</td><td>🌐 Languages, integrations count</td><td>🆚 G2 comparison pages</td></tr>
</table>

### How to scrape G2 reviews with G2 Reviews Scraper

1. [Create a free Apify account](https://console.apify.com/sign-up) (it comes with monthly free credit).
2. Open **G2 Reviews Scraper** and paste one or more G2 product URLs (or slugs such as `hubspot-sales-hub`, or exact product names such as `Postman`), a search term or a category.
3. Pick any filters: stars, company size, role, region, industry, keyword, date window.
4. Set **Max reviews per product** (0 = every review the feed reaches) and switch on **Product rows** or **Product details** if you also want product data.
5. Click **Start**, then download the dataset as JSON, CSV or Excel, or read it through the API.

### ⬇️ Input

| Parameter | Type | What it does |
|---|---|---|
| `products` | list | Product or reviews URLs (`https://www.g2.com/products/slack/reviews`), slugs (`hubspot-sales-hub`), G2 numeric ids (`3437`) or exact product names (`Postman`) |
| `searchTerms` | list | Words for G2's product search (`web scraping`): the best matches, up to 10 per term |
| `categories` | list | G2 category URLs or slugs (`https://www.g2.com/categories/crm`): the products G2 ranks first, up to 15 |
| `maxProductsPerSource` | number | Products each search term or category adds (default 10, 1-15) |
| `scrapeReviews` | switch | One row per review (default on); off = product rows only |
| `includeProducts` | switch | One product row per product: name, rating, review count, categories, reviews delivered (default off) |
| `productDetails` | switch | Product rows also carry the G2 profile (default off; one Unblocker page per product) |
| `starRatings` | multi-select | 5, 4, 3, 2, 1 (G2's buckets: 5 = 4.5-5 stars, 4 = 3.5-4, 3 = 2.5-3, 2 = 1.5-2, 1 = 0-1) |
| `companySizes` | multi-select | `small_business` (50 or fewer employees), `mid_market` (51-1,000), `enterprise` (more than 1,000) |
| `reviewerRoles` | multi-select | User, Administrator, Executive sponsor, Internal consultant, Consultant, Agency, Industry analyst, Tech writer |
| `regions` | multi-select | North America, Europe, Asia, Latin America, Middle East, Africa, ANZ |
| `industries` | list | G2 industry names or ids, e.g. `Computer Software`, `Financial Services`, `Hospital & Health Care` |
| `keyword` | text | G2's own search inside the review answers, e.g. `pricing` |
| `reviewCategoryIds` | list | Reviews written for these G2 categories of the product, by G2 category id (listed on a product row with details) |
| `reviewsNewerThan` / `reviewsOlderThan` | text | A date (`2026-01-31`) or an age (`30 days`, `6 months`) |
| `maxReviewsPerProduct` | number | The newest N reviews per product (default 100; 0 = every review the feed reaches) |
| `maxItems` | number | Reviews across the run (default 1,000; 0 = no cap) |
| `maxRequestsPerProduct` | number | G2 feed calls per product (default 400); raise it for the full history of products with thousands of reviews |
| `monitorMode`, `monitorKey` | switch, text | Deliver only reviews published since earlier runs (memory in a named key-value store) |
| `webhookUrl` | text | POST a JSON summary (reviews per product + dataset link) when the run ends |
| `maxConcurrency`, `proxyConfiguration` | advanced | Feed calls in parallel (default 6); optional proxy (not needed) |

#### Input JSON

```json
{
  "products": ["https://www.g2.com/products/hubspot-sales-hub/reviews", "Postman"],
  "starRatings": ["1", "2", "3"],
  "companySizes": ["enterprise"],
  "industries": ["Financial Services", "Computer Software"],
  "reviewsNewerThan": "1 year",
  "maxReviewsPerProduct": 200,
  "includeProducts": true
}
```

#### Let G2 filter before you do

Stars, company size, role, region, industry, category and the keyword are sent to G2, so only matching reviews are read. Values in a list are combined with OR (stars 1, 2 and 3 = any of them); different filters combine with AND. The date window is checked on each review: with **Reviews newer than**, the actor stops reading once it is past the date.

#### Paste products the way you have them

Product pages, reviews pages, slugs and G2 ids all work, and an old slug or alias (`hubspot`) is followed to the product it now points to (`hubspot-marketing-hub`). A product name must match G2's name exactly (`Postman`); when it does not, `RUN_SUMMARY` lists the closest products so you can paste the right URL. The same product given twice is read once.

#### How "every review" works

G2 publishes the newest 25 reviews of any combination of its review filters. For more, the actor reads the product filter by filter: star level, then industry groups, then region, company size and role, splitting only the combinations that still hold 25 or more, always the one that limits the newest reviews first. Products with a few hundred reviews come out complete; on products with thousands the walk reaches most of them and `RUN_SUMMARY` says how many (see Limits).

### ⬆️ Output

Each review is one row (`"type": "review"`); product rows have `"type": "product"`. A real review row (Slack, read 2026-10-16; the answers shortened here):

```json
{
  "type": "review",
  "reviewId": "13800348",
  "reviewUrl": "https://www.g2.com/products/slack/reviews/slack-review-13800348",
  "title": "Clean, Intuitive Slack with Powerful Integrations for Remote Teamwork",
  "rating": 5,
  "publishedAt": "2026-10-16T18:02:06.000Z",
  "reviewerName": null,
  "reviewerAnonymous": true,
  "reviewerRole": "User",
  "reviewerIndustry": "Legal Services",
  "companySize": "11-50 employees",
  "likes": "I use Slack every day at work. Our team is fully remote and spread across a few countries ...",
  "dislikes": "My biggest frustration is search. When I'm trying to track down something from a few months ago ...",
  "problemsSolved": "Being a remote team spread across different countries, our biggest challenge is keeping everyone aligned ...",
  "answers": [{ "question": "What do you like best about Slack?", "answer": "I use Slack every day at work. ..." }],
  "productSlug": "slack",
  "productName": "Slack",
  "productRating": 4.5,
  "productReviewCount": 39944
}
```

A product row carries `productName`, `productSlug`, `rating`, `reviewCount`, `categories`, `via` and `position` (where it came from), `reviewsDelivered` and `allReviewsRead`. With **Product details** it adds `productId`, `vendorId`, `vendor`, `seller`, `description`, `logoUrl`, `starDistributionPct`, `prosThemes`, `consThemes`, `themeMentions`, `reviewFacets` (review counts with the filter id for every company segment, role, category, industry and region), `pricingPlans`, `languages`, `integrationsCount`, `compareWith` and `categoryPath`. HubSpot Sales Hub on 2026-10-16: 4.4 from 14,364 reviews, 67% five-star, top pro theme "Ease of Use" (1,215 mentions), 8,612 reviews from small businesses.

#### Fields and how often they are filled

Measured 2026-10-16 on three runs: Slack's 20 and 100 newest reviews and all 138 PhantomBuster reviews.

| Field | Filled |
|---|---|
| review id, link, title, stars, date, role, likes, dislikes, problems solved, all answers, product name, rating, review count | 100% |
| company size | 70-93% |
| reviewer name (G2 shows first name + initial; the rest are verified anonymous reviewers) | 64-74% |
| reviewer industry (every anonymous reviewer; named reviewers when you filter by one industry) | 20-36% |
| recommendations to others (G2 stopped asking it; older reviews) | 0-9% |
| region, market segment | 100% when you filter by one region or segment, else only where the walk split by them |
| product rows (rating feed) | 100%; product details 100% on pages that open, pricing plans only where the vendor lists prices |

G2's per-review sub-ratings, NPS, "validated" or "incentivized" badges and helpful votes are not in G2's public review feed, so they are not columns.

### How can I use G2 review data?

- 🎯 **Product marketing:** what buyers praise and criticise, by company size, industry and role, for messaging and battlecards
- 🥊 **Competitive intelligence:** a competitor's lowest-rated reviews from enterprises, with what they dislike and what they switched for
- 🧩 **Feature gaps:** mine `dislikes` across a whole category with the keyword filter (`integrations`, `pricing`, `support`)
- 📊 **Market research:** ratings, review counts, star distributions and pros/cons themes for the top products of a category
- 💬 **Customer success:** monitor your own product daily and catch new low ratings
- 🤖 **AI and LLM pipelines:** clean plain-text answers for summarisation, sentiment and feature-request mining

### How much does it cost to scrape G2?

Pay per result, no start fee:

| Event | Price | When |
|---|---|---|
| Review | $0.000045 per review ($0.045 per 1,000) | every review row |
| Product row | $0.00009 per product ($0.09 per 1,000) | every product row from the rating feed |
| Product row with G2 profile | $0.0027 per product | every product row with **Product details** on (instead of the product row) |

| Run | Cost |
|---|---|
| 20 reviews (the prefilled demo) | $0.0009 |
| 100 reviews | $0.0045 |
| 1,000 reviews | $0.045 |
| 10 products from a category, rows only | $0.0009 |
| 10 products with the G2 profile | $0.027 |

Filtered-out reviews, duplicates and reviews a monitor run has already delivered are not delivered and not charged. The free monthly credit on an Apify account covers tens of thousands of reviews.

### Integrations, API, scheduling and MCP

Run it on a **schedule** (every morning, for example) with **monitor mode** to receive only new reviews, and set **Webhook URL** to get a summary in Slack, Discord, Zapier, Make or n8n when each run ends. Send results to **Google Sheets** or any app through Apify integrations. Call it from your code with the [Python](https://apify.com/scrapersdelight/g2-reviews-scraper/api/python) or [JavaScript](https://apify.com/scrapersdelight/g2-reviews-scraper/api/javascript) client, or connect AI assistants through the [MCP server](https://apify.com/scrapersdelight/g2-reviews-scraper/api/mcp).

### More review scrapers

- 🧾 [Capterra Reviews Scraper](https://apify.com/scrapersdelight/capterra-reviews-scraper) — Capterra software reviews with sub-ratings and vendor replies
- 🧭 [TrustRadius Reviews Scraper](https://apify.com/scrapersdelight/trustradius-reviews-scraper) — TrustRadius reviews with pros, cons, ROI and feature ratings
- 📱 [App Store Reviews Scraper](https://apify.com/scrapersdelight/appstore-reviews-scraper) — iOS app reviews with developer replies, many countries
- 🤖 [Google Play Reviews Scraper](https://apify.com/scrapersdelight/google-play-reviews-scraper) — Android app reviews, replies and versions
- 🏢 [Clutch.co Agency Scraper](https://apify.com/scrapersdelight/clutch-scraper) — B2B agencies with ratings and reviews
- 🧳 [Tripadvisor Reviews Scraper](https://apify.com/scrapersdelight/tripadvisor-reviews-scraper) — hotel, restaurant and attraction reviews

All our actors: [apify.com/scrapersdelight](https://apify.com/scrapersdelight).

### Limits and empty runs

- G2's public review feed carries the newest 25 reviews of a filter combination; the actor combines G2's filters to go further. Measured on a direct connection: Slack's 100 newest reviews in 27 feed calls (11 s), HubSpot Sales Hub's in 39 (15 s), Postman's in 91 (40 s); every one of PhantomBuster's 138 reviews in 24 calls (12 s); 663 of Apify's 669 in 158 calls (78 s); 1,000 of lemlist's 2,433 in 285 calls (2 min).
- On products with thousands of reviews, some combinations still hold 25+ reviews after every G2 filter is applied; older reviews inside them are out of the feed's reach. A breadth-first walk of the whole history read 84% of lemlist (2,433) and 73% of Postman (1,796); `RUN_SUMMARY` reports `coveragePct` against G2's own count on unfiltered runs.
- Reviews come newest first in G2's own order, which follows the published date closely (a few reviews sit days off it).
- Categories and product profiles are read through Apify's Unblocker, about 30-50 s per page. When a product page cannot be opened, the product row carries the rating-feed fields and is charged as a plain product row; the reason is in `RUN_SUMMARY`.
- When G2 refuses a connection, the actor moves by itself to proxies; nothing refused is ever delivered or charged.
- An empty run (nothing matches) costs nothing. `RUN_SUMMARY` lists, per product, G2's review count, reviews read and delivered, whether every review was read, why the walk stopped, products that do not exist and inputs it could not resolve.

### ❓ FAQ

#### How much does G2 Reviews Scraper cost?

$0.045 per 1,000 reviews and $0.09 per 1,000 product rows; product rows with the G2 profile are $0.0027 each. There is no start fee, and nothing is charged for an empty run.

#### How many reviews can G2 Reviews Scraper get?

Every review of the product that G2's public feed reaches for your filters: complete histories on products with a few hundred reviews, most of the history on larger ones. Set **Max reviews per product** to 0 for the full history; the run reports G2's own count next to what it delivered.

#### Does G2 Reviews Scraper return the newest reviews?

Yes. Reviews are delivered newest first, and a capped run (for example 100 per product) returns the newest 100 that match your filters.

#### Can G2 Reviews Scraper monitor new reviews?

Yes. Turn on **Monitor mode** and schedule the run. Each run delivers only reviews published since the reviews earlier runs delivered, and the webhook can post a summary when it ends.

#### Can G2 Reviews Scraper filter by industry, company size or role?

Yes, and G2 applies those filters itself: star rating, company size segment, reviewer role, region, all 149 G2 industries, G2 category and a keyword inside the reviews, plus your own date window.

#### Does G2 Reviews Scraper need a login, cookies or an API key?

No. It reads G2's public review feed with no account, cookie or API key, and needs no proxy.

#### Can G2 Reviews Scraper get product data such as ratings, pros and cons and pricing?

Yes. **Product rows** give the G2 rating, review count and categories for every product; **Product details** adds the vendor, description, star distribution, pros and cons themes with mention counts, review counts per segment, role, industry and region, pricing plans and comparisons. Turn **Scrape reviews** off to get product rows only, for example for the top products of a category.

#### Can I use G2 Reviews Scraper with the Apify API?

Yes. Start runs and read datasets with the Apify API or its Python and JavaScript clients; every input above is a JSON key.

#### Can AI agents use G2 Reviews Scraper through MCP?

Yes. Add it to the Apify MCP server and let your assistant pull G2 reviews as plain-text rows.

#### Why did G2 Reviews Scraper return no results?

Usually the filters exclude everything, or a product name did not match exactly. Open `RUN_SUMMARY`: it shows reviews read and delivered per product, products not found, and the closest names for inputs it could not resolve.

#### Why are some reviewer names empty in G2 Reviews Scraper?

G2 shows many reviewers as "Verified User" without a name (26-36% of reviews in our runs). For those, `reviewerAnonymous` is true and G2 prints their industry instead.

#### Is it legal to scrape G2 reviews?

The actor reads review data that is public and needs no login, and collects only what G2 already publishes. How you may store and use that data depends on your jurisdiction and on G2's terms, so check both before running at scale. This is not legal advice.

#### Your feedback

Found a bug or need a field? Open an issue on the [Issues tab](https://apify.com/scrapersdelight/g2-reviews-scraper/issues/open); we read every one.

# Actor input Schema

## `products` (type: `array`):

G2 products to read: a product or reviews URL, a slug, G2's numeric product id or an exact product name, e.g. "https://www.g2.com/products/slack/reviews", "hubspot-sales-hub", "Postman". Several per run.

## `searchTerms` (type: `array`):

Words searched in G2's product directory, e.g. "crm", "web scraping", "password manager". Each term adds its best matches (up to 10, see Products per search / category).

## `categories` (type: `array`):

G2 category URLs or slugs, e.g. "https://www.g2.com/categories/crm", "help-desk". Adds the products G2 ranks first in that category (up to 15). Read through Apify's Unblocker, about 30-50 s per category.

## `maxProductsPerSource` (type: `integer`):

How many products each search term or category adds, best match or highest ranked first. 1-15.

## `scrapeReviews` (type: `boolean`):

One row per review (the billed `review` event). Turn off to collect product rows only.

## `includeProducts` (type: `boolean`):

Add one row per product (`product` event): name, G2 rating, review count, categories, and how many of its reviews this run delivered.

## `productDetails` (type: `boolean`):

Product rows also carry the product's G2 profile: vendor, description, logo, star distribution, pros and cons themes with mention counts, review counts per company size, role, category, industry and region (with the filter ids), pricing plans, languages, integrations count and G2's comparisons. One Unblocker page per product (about 30-50 s); billed as `product-details` instead of `product`. Turns on Product rows.

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

Keep only these star levels (G2's own buckets: 5 = 4.5-5 stars, 4 = 3.5-4, 3 = 2.5-3, 2 = 1.5-2, 1 = 0-1). Empty = all.

## `companySizes` (type: `array`):

Keep reviews from these G2 market segments. Empty = all.

## `reviewerRoles` (type: `array`):

Keep reviewers with any of these roles on the product. Empty = all.

## `regions` (type: `array`):

Keep reviewers from these regions. Empty = all.

## `industries` (type: `array`):

Keep reviewers from these industries, by G2 name or numeric id, e.g. "Computer Software", "Financial Services", "Hospital & Health Care". All 149 G2 industry names are accepted. Empty = all.

## `keyword` (type: `string`):

G2's own review search: keep reviews whose answers mention this, e.g. "pricing", "customer support".

## `reviewCategoryIds` (type: `array`):

Keep reviews written for these G2 categories of the product, by G2's numeric category id (a product row with Product details lists them under reviewFacets.categories), e.g. "2174" = Business Instant Messaging for Slack.

## `reviewsNewerThan` (type: `string`):

Only reviews published on or after this date: "2026-01-31" or a relative window such as "30 days", "6 months".

## `reviewsOlderThan` (type: `string`):

Only reviews published on or before this date: "2025-12-31" or "1 year".

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

The newest N reviews of each product that match the filters. 0 = every review G2's feed reaches (see the README for how far that goes on large products).

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

Stop the run after this many review rows across all products. 0 = no cap.

## `maxRequestsPerProduct` (type: `integer`):

Upper bound on G2 feed calls per product (each returns up to 25 reviews of one filter combination). Raise it for complete histories of products with thousands of reviews. 1-5,000.

## `maxConcurrency` (type: `integer`):

G2 feed calls in flight at once. 1-8.

## `monitorMode` (type: `boolean`):

Deliver only reviews published since earlier runs with the same products and filters (remembered in a named key-value store). Schedule it daily or weekly.

## `monitorKey` (type: `string`):

Optional name for the monitor memory, so several schedules keep separate memories (e.g. "crm-weekly"). Empty = derived from the products and filters.

## `webhookUrl` (type: `string`):

Optional: at the end of the run, POST a JSON summary (reviews delivered per product + the dataset link) to this URL - Zapier, Make, n8n, Slack or Discord incoming webhooks all accept it.

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

G2's review feed answers without a proxy; leave this off. If G2 refuses the direct connection, the run moves to Apify proxies on its own. Your own proxy URLs are used before Apify's.

## Actor input object example

```json
{
  "products": [
    "https://www.g2.com/products/slack/reviews"
  ],
  "maxProductsPerSource": 10,
  "scrapeReviews": true,
  "includeProducts": false,
  "productDetails": false,
  "starRatings": [],
  "companySizes": [],
  "reviewerRoles": [],
  "regions": [],
  "maxReviewsPerProduct": 20,
  "maxItems": 1000,
  "maxRequestsPerProduct": 400,
  "maxConcurrency": 6,
  "monitorMode": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `reviews` (type: `string`):

The dataset: one item per review (type "review") and, with product rows on, one per product (type "product").

## `summary` (type: `string`):

Per product: reviews on G2, read, delivered, whether every review of the filter set was read, feed calls; inputs not resolved; transport and billing totals.

# 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 = {
    "products": [
        "https://www.g2.com/products/slack/reviews"
    ],
    "maxReviewsPerProduct": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapersdelight/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 = {
    "products": ["https://www.g2.com/products/slack/reviews"],
    "maxReviewsPerProduct": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("scrapersdelight/g2-reviews-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 '{
  "products": [
    "https://www.g2.com/products/slack/reviews"
  ],
  "maxReviewsPerProduct": 20
}' |
apify call scrapersdelight/g2-reviews-scraper --silent --output-dataset

```

## MCP server setup

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