G2 Software Reviews Scraper — Ratings, Pros/Cons & Confidence avatar

G2 Software Reviews Scraper — Ratings, Pros/Cons & Confidence

Under maintenance

Pricing

from $3.87 / 1,000 review items

Go to Apify Store
G2 Software Reviews Scraper — Ratings, Pros/Cons & Confidence

G2 Software Reviews Scraper — Ratings, Pros/Cons & Confidence

Under maintenance

Scrape G2.com software reviews for any product. Full fields per review: star rating, title, review body, pros, cons, reviewer role, company size and date. Resilient structural parser keyed on schema.org review microdata — survives CSS churn. parse_confidence per record for drift detection.

Pricing

from $3.87 / 1,000 review items

Rating

0.0

(0)

Developer

Vitalii Bondarev

Vitalii Bondarev

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

2

Monthly active users

7 days ago

Last modified

Share

G2 Software Reviews Scraper

Scrape software reviews from G2.com — the leading B2B software review platform. Extract structured review data including ratings, pros/cons, reviewer role, and company size.

What you get

FieldDescription
product_nameG2 product display name
product_slugURL slug (e.g. notion, hubspot-marketing-hub)
review_idUnique G2 review ID
ratingStar rating (1–5)
titleReview headline
textFull review body
reviewer_nameReviewer display name
reviewer_roleJob title (B2B-critical field for buyer intent analysis)
company_sizeCompany size bracket (e.g. 51-100, 201-500)
prosPros text (G2 signature structured field)
consCons text (G2 signature structured field)
review_dateISO 8601 publish date
urlDirect link to review on G2
parse_confidencePer-record parse quality (0.0–1.0) for drift detection
warningsMachine-readable warning codes

Use cases

  • Competitive intelligence — monitor competitor reviews; track sentiment changes over time
  • CRM enrichment — identify leads by role/company size from verified buyer reviews
  • Product research — extract structured pros/cons for feature analysis
  • Market research — aggregate review sentiment across software categories
  • Sales enablement — understand objections (cons) at scale

Proxy requirement

⚠️ Residential proxy required. G2 blocks datacenter IPs with HTTP 403. Configure Apify Residential proxy in the input. Without a proxy, all runs will fail.

This is the same requirement as other review platforms (Trustpilot, Booking.com). The buyer pays proxy costs as part of their Apify actor usage budget.

Input

{
"productSlugs": ["notion", "hubspot-marketing-hub"],
"maxReviews": 100,
"sort": "most_helpful",
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

Finding the product slug

The slug is the last part of any G2 product URL:

  • https://www.g2.com/products/notion/reviews → slug is notion
  • https://www.g2.com/products/hubspot-marketing-hub/reviews → slug is hubspot-marketing-hub
  • https://www.g2.com/products/salesforce/reviews → slug is salesforce

Sort options

ValueDescription
most_helpfulHighest-quality reviews (default, best for analysis)
most_recentNewest reviews first (best for monitoring)
highest_rated5-star reviews first
lowest_rated1-star reviews first (surface pain points)

Output example

{
"product_name": "Notion",
"product_slug": "notion",
"product_url": "https://www.g2.com/products/notion/reviews",
"review_id": "abc-review-123",
"rating": 5,
"title": "Best collaboration tool we have used",
"text": "We switched from Confluence and never looked back...",
"reviewer_name": "Sarah M.",
"reviewer_role": "Product Manager",
"company_size": "51-100",
"pros": "Extremely flexible, great templates, excellent for documentation",
"cons": "Can be slow with large databases, search could be better",
"review_date": "2024-03-15T10:00:00.000Z",
"url": "https://www.g2.com/reviews/abc-review-123",
"parse_confidence": 1.0,
"warnings": []
}

Parse confidence

Every record includes parse_confidence (0.0–1.0). This is our reliability edge:

  • 1.0 — all core fields extracted successfully
  • 0.7–0.99 — some optional fields missing (normal)
  • < 0.5 — structural issue (G2 schema change) — check warnings

Use parse_confidence < 0.8 as a filter for high-quality data, or to detect if G2 changed their page structure.

Pricing

Pay-per-result (PPE): $2.00 per 1,000 reviews.

G2 shows 20 reviews per page, so a 100-review run = 5 page fetches.

Technical notes

  • Parser approach: Extracts __NEXT_DATA__ JSON embedded in G2's Next.js HTML — not fragile CSS class scraping
  • Pagination: Uses G2's /_next/data/ JSON API for pages 2+ (no HTML parsing overhead)
  • Rate limiting: 3-second delay between pages; automatic retry on transient blocks
  • Schema stability: JSON key paths are more stable than CSS class names across G2 UI updates

Limitations

  1. Residential proxy required — datacenter IPs are blocked
  2. 20 reviews per page — 10,000 reviews = 500 proxy requests
  3. Not affiliated with G2 — this actor scrapes public review data from G2.com

Integrations

Built for B2B marketers and product teams mining competitor reviews, ratings, and buyer-persona signals on G2 — the JSON/dataset output drops into the tools you already run, no glue code:

  • n8n / Make / Zapier — trigger a run or pipe every new dataset item into 500+ apps (Google Sheets, Airtable, Slack, HubSpot, your database) with no code: n8n, Make, Zapier.
  • Webhooks — fire your own endpoint the moment a run finishes, to push results straight into your pipeline (docs).
  • MCP server — expose this actor as a tool to Claude, Cursor, or any MCP client so an AI agent can pull this data mid-conversation (guide).
  • API & SDKs — fetch the dataset as JSON, CSV, or Excel through the Apify REST API or the Python / JS SDKs.

See all Apify integrations.

Disclaimer

This actor scrapes publicly available data from G2.com. Use in compliance with G2's Terms of Service and applicable data protection laws.

Usage statistics

This Actor creates a small, content-free summary at the end of each run. It is used only to monitor reliability and improve this Actor. A copy is saved as USAGE_STATS in your own Apify key-value store, so you can see the exact record created for your run.

Set disableUsageStats to true in the input to opt out. Nothing is sent then; your USAGE_STATS record only says that statistics were disabled.

Only these fields are recorded:

  • schema version, Actor name and build number;
  • UTC start and finish hour (not a precise timestamp);
  • run duration, number of results and time to the first result, each as a coarse range;
  • whether the result was empty, the end status, and an error type from a fixed list;
  • memory setting and counts of charged events;
  • names of the input fields you set, never their values;
  • the selected option for input fields that offer a fixed list of choices (for example a sort order).

We do not collect input text, search terms, URLs, domains, usernames, email addresses, names, proxy credentials, tokens, scraped records, output items, raw error messages, stack traces, or hashes of any of those values. Records are kept for no longer than 13 months, used only as aggregated operational statistics, and never sold or shared.

Additional fields (Phase 2)

This Actor also records your Apify user ID, whether Apify marks the account as paying, the size range of list inputs, the selected country when the input offers a fixed list of countries, and one category from a fixed Actor taxonomy. We use these fields only for aggregate reliability, repeat-use and cross-Actor analysis; reports suppress any cell with fewer than five distinct users.

The same disableUsageStats: true input flag turns these fields off too. The user ID is removed after 13 months; we do not export, sell, share, or attempt to re-identify this data.

Run-outcome signals (v2)

To learn whether a run did what it was asked to do, the record also holds a few more coarse ranges and yes/no flags. None of them contains content:

  • the result limit you asked for (a range, when the input has one) and what share of it was delivered;
  • results delivered per input item you listed (a range);
  • output quality as ranges: how fully the result fields were filled, the share of rows that look like errors, the share of duplicate rows, and how many different fields appeared. These are counted in memory while results are saved; no result content is kept;
  • how the run was started (console, API, schedule, webhook, another Actor);
  • how it ended: stopped by you, timed out, reached the requested limit, stopped by the charge limit, and how many times the platform moved the run;
  • if this Actor reports it: how many items to process worked or failed (ranges) and one failure reason from a fixed list;
  • a short code made from the names of the input fields you set, never their values.

Repeat-run fingerprint (v2)

When your Apify user ID is recorded (see above), the record also holds an 8-character one-way code made from your input (proxy settings left out) and this Actor's name. It only lets us see that the same account ran the same input again soon after an unsatisfying run; we never see the input itself. It is stored only in the database, never published, and reports use it in aggregate with the same five-user minimum. It is the one exception to the statement above that no hashes are collected, and disableUsageStats: true turns it off.