G2 Comparison Scraper
Pricing
from $25.00 / 1,000 dataset items
G2 Comparison Scraper
Scrape G2 head-to-head comparisons at scale: side-by-side star ratings, all seven G2 criteria scores with respondent counts, entry pricing, top pros & cons, integrations, alternatives, reviewer company-size and industry splits, AI summaries and FAQs. Structured JSON for competitive research.
Turn G2's head-to-head comparison pages into structured, analysis-ready data.
Every software buyer's shortlist ends up on a G2 /compare/ page — "Asana vs
monday", "HubSpot vs Pipedrive", "Slack vs Teams". Those pages hold the single
richest public dataset on how B2B software products stack up against each other:
real user ratings, G2's seven scoring criteria, entry pricing, the pros and cons
buyers actually mention, and who is doing the reviewing. This Actor extracts all
of it as clean JSON — one row per comparison.
Most G2 scrapers return products or raw reviews. This one returns the head-to-head verdict, already normalized into side-by-side columns.
Who uses this
| Buyer | Job to be done |
|---|---|
| Competitive intelligence | Track exactly how your product scores against each rival, criterion by criterion, and watch it move |
| Product marketing | Build battlecards and comparison pages from real review evidence instead of guesswork |
| Product management | Find the features and criteria where you lose, with the respondent count behind every score |
| Investors & analysts | Benchmark entire software categories on rating, review volume, pricing and reviewer mix |
| SEO & affiliate publishers | Power "X vs Y" content and comparison tables at scale |
| Sales enablement | Arm reps with the objections buyers raise about each competitor |
What you get
One dataset row per comparison. The two products are flattened into
product_a_* and product_b_* columns so the output drops straight into a
spreadsheet or BI tool, while a nested products array keeps the full structure
for programmatic use.
| Field | Type | Description |
|---|---|---|
url, slug, title | string | Canonical comparison page, its slug, and the page title |
requested_slug | string | What you asked for, before G2 canonicalized pair order or product renames |
scraped_at | string | UTC ISO-8601 timestamp |
product_a_name / product_b_name | string | Product names as listed on G2 |
product_a_slug / product_b_slug | string | G2 product slugs |
product_a_url / product_b_url | string | G2 product page URLs |
product_a_image / product_b_image | string | Product logo URLs |
product_a_category / product_b_category | string | G2 application category |
product_a_rating / product_b_rating | number | Average star rating out of 5 |
product_a_review_count / product_b_review_count | integer | Total G2 reviews behind that rating |
product_a_price / product_b_price | string | Entry price as displayed, e.g. $25.00 or Free |
product_a_price_unit / product_b_price_unit | string | Billing unit, e.g. 1 User Per Month |
product_a_price_plan / product_b_price_plan | string | Entry plan name, e.g. Starter Edition |
product_a_free_trial / product_b_free_trial | boolean | Whether G2 shows a free-trial badge |
product_a_pros / product_b_pros | array | Most-mentioned positives with review counts: [{label, count}] |
product_a_cons / product_b_cons | array | Most-mentioned negatives with review counts |
product_a_integrations / product_b_integrations | array | Integrations G2 highlights |
product_a_alternatives / product_b_alternatives | array | Top alternatives G2 lists |
product_a_company_size / product_b_company_size | object | Reviewer split across Small-Business / Mid-Market / Enterprise, in percent |
product_a_industries / product_b_industries | object | Reviewer split by industry, in percent |
criteria | array | All seven G2 criteria side by side, with scores out of 10 and respondent counts |
criteria_wins_product_a / criteria_wins_product_b | integer | How many criteria each product wins |
overall_winner | string | Product winning the most criteria, or null when tied |
ai_summary | string | G2's AI-generated head-to-head summary, derived from real reviews |
faqs | array | G2's comparison FAQs as [{question, answer}] |
features | array | Optional: every rated feature with both scores, respondent counts and the winner |
feature_count | integer | Optional: number of rated features returned |
products | array | Full nested product objects |
The seven criteria are Meets Requirements, Ease of Use, Ease of Setup, Ease of Admin, Quality of Support, Good Partner in Doing Business, and Product Direction — each scored out of 10, each with the number of reviewers behind it.
High-value use cases
- Live competitive scorecard. Schedule your product against each rival
weekly and alert when a criterion score or
overall_winnerflips. - Battlecards that cite evidence.
product_b_consgives you the exact complaints buyers raise about a competitor, with volume behind each one. - Category benchmarking. Enable automatic discovery to pull thousands of comparisons and rank an entire category by rating, review volume and pricing.
- Segment fit analysis.
company_sizeandindustriesshow whether a rival wins because it dominates Small-Business while you serve Enterprise. - Feature gap analysis. Turn on the full feature table to get hundreds of scored features per comparison and find precisely where you lose.
- Programmatic SEO. Generate accurate "X vs Y" pages backed by real data.
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
comparisonUrls | array | — | Full G2 comparison URLs. The most precise way to target what you want |
productPairs | array | — | Slugs like asana-vs-monday-com, or free text like Slack vs Microsoft Teams |
productA / productB | string | — | A single pair, given as product slugs or G2 product URLs |
discoverFromSitemap | boolean | false | Top the list up automatically from G2's official comparison sitemaps |
maxComparisons | integer | 10 | Stop after this many comparisons; each produces exactly one row |
includeReviewerInsights | boolean | true | Add company-size and industry breakdowns (one extra fetch per comparison) |
includeFeatureScores | boolean | false | Add the full per-feature score table (one extra fetch; large output) |
proxyConfiguration | object | residential | Apify Proxy settings — residential strongly recommended |
useResidentialProxy | boolean | true | Use the built-in residential pool when Apify Proxy is off |
proxyCountry | string | US | Exit country for the built-in fallback |
You can mix inputs freely — URLs, pairs and a single A/B pair are merged and
de-duplicated. Product order does not matter: G2 canonicalizes it, and renamed
products are followed automatically, with the original preserved in
requested_slug.
Example input
{"productPairs": ["asana-vs-monday-com", "Slack vs Microsoft Teams"],"comparisonUrls": [{ "url": "https://www.g2.com/compare/hubspot-sales-hub-vs-pipedrive" }],"maxComparisons": 3,"includeReviewerInsights": true,"includeFeatureScores": false,"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }}
Example output (abridged)
{"url": "https://www.g2.com/compare/hubspot-sales-hub-vs-pipedrive","slug": "hubspot-sales-hub-vs-pipedrive","title": "HubSpot Sales Hub vs. Pipedrive","scraped_at": "2026-09-19T01:48:19+00:00","product_a_name": "HubSpot Sales Hub","product_a_rating": 4.4,"product_a_review_count": 14302,"product_a_price": "$0.00","product_a_price_plan": "Free HubSpot CRM","product_a_free_trial": true,"product_a_pros": [{ "label": "Ease of Use", "count": 1216 },{ "label": "Features", "count": 702 }],"product_a_company_size": { "Small-Business": 60.5, "Mid-Market": 35.5, "Enterprise": 4.0 },"product_b_name": "Pipedrive","product_b_rating": 4.3,"product_b_review_count": 3793,"product_b_price": "$24.00","product_b_price_unit": "1 Seats Per Month","product_b_company_size": { "Small-Business": 74.1, "Mid-Market": 22.1, "Enterprise": 3.9 },"criteria": [{"criterion": "Ease of Use","product_a_score": 8.7,"product_a_responses": 11269,"product_b_score": 8.8,"product_b_responses": 3324,"winner": "Pipedrive"}],"criteria_wins_product_a": 2,"criteria_wins_product_b": 3,"overall_winner": "Pipedrive","ai_summary": "Users report that Pipedrive excels in pipeline visibility...","faqs": [{ "question": "What is the difference between...", "answer": "..." }]}
Scheduling, webhooks and integrations
- Schedule a run daily or weekly to build a competitive time series — store
each run's dataset and diff
criteriascores andoverall_winnerover time. - Webhooks can push every finished run into your own service.
- Export to JSON, CSV, Excel or XML, or connect the dataset to Google Sheets, Make, Zapier, Airbyte, S3 and other Apify integrations.
- Pull results from the Apify API in any language.
Use it from an AI assistant (MCP)
This Actor is callable over the Apify MCP server, so assistants like Claude and other MCP-aware agents can run it as a tool and reason over the results — for example "compare our product against these three rivals on G2 and tell me where we lose". Point your MCP client at Apify's server and call this Actor by name.
FAQ
Which comparisons can I scrape?
Any public G2 /compare/ page. G2 publishes over a million of them across its
comparison sitemaps, which discoverFromSitemap can walk automatically.
Do I need exact slugs?
No. Pass full URLs, slugs, or free text like Slack vs Microsoft Teams. Product
order does not matter and renamed products are followed automatically.
How fresh is the data? Every run fetches the live page, so results reflect G2 at that moment. Ratings and criteria scores move slowly, so weekly or monthly scheduling is usually enough to track meaningful change.
Is the AI summary G2's or yours? It is G2's own AI-generated summary, shown on the comparison page and derived from real user reviews. We extract it verbatim and never generate text.
Why do I need a residential proxy? G2 is protected by DataDome bot detection, which blocks nearly all datacenter IPs. The Actor drives a real browser through a residential exit and rotates automatically when an exit is refused. Keep residential proxying enabled for reliable results.
What happens if a comparison fails to load? The run continues. Failing pages are logged and skipped so one bad URL never costs you the whole run. If every comparison fails, the run fails loudly rather than returning an empty dataset silently.
Can I resume an interrupted run? Yes. Progress is checkpointed after every comparison. Re-running the same input resumes where it stopped and never writes duplicate rows.
How large is the output with feature scores on?
Comparisons commonly carry 200–700 rated features, so rows get big. Leave
includeFeatureScores off unless you specifically need feature-level gaps.
Is scraping G2 legal? This Actor collects only publicly available information, with no login and no personal data beyond what G2 publishes publicly. You are responsible for using the output in line with applicable law and G2's terms.
Support
Found a bug or need an extra field? Open an issue on the Actor's Issues tab — runtime errors are monitored and fixes ship quickly.