Normalize G2 and Capterra B2B review pages into one ratings dataset
Collect public G2 and Capterra software-review pages into a normalized product row: overall rating, rating breakdown, and individual reviews with title, body, pros, cons, and verified flags. This Actor accepts review-page URLs, auto-detects G2 versus Capterra, and routes each URL to the matching parser. It is not a Shopify App Store listing tool and not an Apple Podcasts review RSS tool — those jobs belong on Shopify App Store Review Scraper and Apple Podcasts Reviews Scraper.
Open G2 & Capterra Review Scraper on Apify
G2 and Capterra software reviews, not Shopify apps or podcasts
Use this page when the job is B2B software reputation on G2 or Capterra: category benchmarks, competitor proof points, and a single schema across both sites. Use Shopify App Store Review Scraper when the source is a merchant listing at apps.shopify.com/{slug}. Use Apple Podcasts Reviews Scraper when the source is Apple/iTunes Customer Reviews RSS for podcast collection IDs.
| This Actor | Shopify App Store Review Scraper | Apple Podcasts Reviews Scraper | |
|---|---|---|---|
| Source | Public G2 and Capterra review-page HTML | Public apps.shopify.com/{slug} listing and review pages |
Official iTunes Customer Reviews RSS JSON |
| Primary input | reviewPageUrls (G2 or Capterra review URLs) |
appUrls (listing URLs or slugs) |
podcastIds, countries, maxPagesPerPair |
| Reviewer fields | Normalized author, pros, cons, verified |
Merchant storeName, location, usage duration, developer replies |
Podcast reviewerName, rating, title, content, storefront |
| Deliverable | Per-product row: ratings, breakdown, review samples, status | One app-level report: rating, pricing hints, AI summary, samples, theme rollups | Raw podcast_review rows or one podcast_review_report |
This Actor does not accept Shopify slugs, podcast IDs, Apple show URLs, or episode feeds.
Use cases
- B2B product marketers: benchmark category leaders and review themes across G2 and Capterra.
- RevOps / sales enablement: track competitor proof points, objections, and complaint patterns.
- Analysts: consolidate G2 and Capterra into one normalized review dataset.
- Agencies: monitor multiple software products with a reusable schema.
- Data / ML teams: extract normalized user feedback for sentiment analysis, review-theme extraction, or training datasets.
What it does
For each review-page URL you provide, the Actor:
- Classifies the URL as G2 (
g2.com/products/*/reviews) or Capterra (capterra.com/p/*/reviews/) and routes it to the matching parser. - Tries JSON-LD structured data first, then embedded app data (for example
__NEXT_DATA__on Capterra), thenog:titlemeta for product-name fallback, then HTML pattern matching for reviews. - Extracts product metadata —
productName,vendorName,categoryNamewhen available. - Parses overall rating, total review count, and rating breakdown.
- Collects normalized review rows —
title,rating,date,author,body,pros,cons,verified. - Returns
statusand explicitwarningswhen a page is partial, blocked, or structurally changed, instead of failing silently.
How is G2 & Capterra Review Scraper different from Shopify App Store Review Scraper and Apple Podcasts Reviews Scraper?
This Actor reads public G2 and Capterra product review pages. Required input is reviewPageUrls in the published formats g2.com/products/{slug}/reviews and capterra.com/p/{id}/{slug}/reviews/. It auto-detects source and normalizes product metadata, ratings, and review rows with pros and cons. Shopify App Store Review Scraper reads apps.shopify.com/{slug} merchant listings (appUrls) and delivers app-level rating, pricing-hint, AI-summary, and theme-rollup reports. Apple Podcasts Reviews Scraper reads Apple/iTunes Customer Reviews RSS for podcast collection IDs and storefronts. This Actor does not accept Shopify slugs, podcast IDs, Apple show URLs, or episode feeds.
What input is required?
reviewPageUrls is required. The published schema accepts G2 or Capterra review page URLs. Other published fields:
| Field | Type | Default | Notes |
|---|---|---|---|
reviewPageUrls |
string[] | required | G2 or Capterra review URLs (for example https://www.g2.com/products/notion/reviews or https://www.capterra.com/p/147384/Notion/reviews/) |
reviewLimit |
integer | 200 | Max reviews per product page. README documents 1–5000; the published schema does not publish a min/max constraint |
delivery |
string | dataset |
dataset or webhook |
webhookUrl |
string | — | POST target when delivery is webhook |
dryRun |
boolean | false | Validate input and return scaffold output without fetching live data |
The schema sets additionalProperties to false. Use reviewPageUrls, not unpublished aliases. The published input schema does not include products, source, slug, maxReviewsPerProduct, or emitDeltas.
Published Store quickstart (matches the schema):
{
"reviewPageUrls": [
"https://www.g2.com/products/notion/reviews",
"https://www.capterra.com/p/147384/Notion/reviews/"
],
"dryRun": false
}
Published input-object example:
{
"reviewPageUrls": [
"https://www.g2.com/products/notion/reviews",
"https://www.capterra.com/p/147384/Notion/reviews/"
],
"reviewLimit": 200,
"delivery": "dataset",
"dryRun": false
}
Start with 1–5 review URLs and a modest reviewLimit (25–50). Mix G2 and Capterra in one run only after you validate the schema on a small sample. Use dryRun: true for validation-only checks before larger monitoring runs.
Run a G2 or Capterra review-page sample on Apify
What does a product result contain?
A good first run gives you a per-product row with ratings and review samples, plus status / warnings when a page is thin, blocked, or structurally changed. The published README lists each product in a products array. meta.implementationStatus is live, partial, degraded, or no_valid_sources.
Published README sample shape:
{
"source": "g2",
"status": "ok",
"sourceUrl": "https://www.g2.com/products/notion/reviews",
"productName": "Notion",
"vendorName": "Notion Labs",
"overallRating": 4.5,
"totalReviewCount": 4321,
"ratingBreakdown": { "5": 1200, "4": 800, "3": 300, "2": 50, "1": 10 },
"reviews": [
{
"title": "Great tool",
"rating": 5,
"author": "Alice",
"pros": "Fast setup",
"cons": "Needs offline mode",
"verified": true
}
],
"warnings": []
}
That sample is the published README illustration, not a live coverage guarantee. README field lists also include categoryName (when available), date and body on reviews[], fetchError, and status values ok, partial, blocked, or error. README intro prose also mentions reviewer backgrounds such as industry, role, and company size; those names are not in the published reviews[] field list. There is no separate published dataset/output JSON schema on the Store page.
What happens if a G2 or Capterra page is blocked or the HTML changes?
The Actor emits explicit warnings when page shapes change or access is blocked, rather than silently returning bad data. It degrades gracefully and can return partial results (metadata without reviews) with status ok, partial, blocked, or error. Reviews are extracted from server-rendered HTML; pages that render reviews only via client-side JavaScript may return partial results. G2 and Capterra protect against automated access — blocked requests are reported honestly. HTML parsing is fragile; the Actor emits warnings when expected patterns are missing.
How is G2 & Capterra Review Scraper priced?
Billing is pay-per-event. The published Store card is from $10.00 / 1,000 results. Published events are Actor Start at $0.001 (charged when the Actor starts; number of events depends on Actor memory, one event per GB, minimum one event) and result at $0.01 (single result in the default dataset). You are not charged for Apify platform usage, only the fixed event price.
Total cost mainly follows how many reviewPageUrls you process and how deep you sample reviews. Keep batches small while validating source mix. Lower reviewLimit for faster exploratory runs. Use dataset delivery first to inspect blocked or partial results. Check the Store pricing card for the current per-event rates.
From $10.00 per 1,000 results ($0.01 per default-dataset result; Actor Start $0.001)
See G2 & Capterra Review Scraper pricing on Apify
How do dataset, webhook, and dry-run delivery work?
delivery defaults to dataset. Set delivery to webhook and provide webhookUrl to POST results. dryRun true validates input and returns scaffold output without fetching live data. The Store quickstart starts with a small reviewPageUrls sample in dataset mode, mixes G2 and Capterra only after a small-sample schema check, then uses dryRun before larger monitoring runs.
Open G2 & Capterra Review Scraper on Apify
Related pages
- Tools
- Shopify App Store Review Scraper — Shopify merchant listings, not G2 or Capterra
- Apple Podcasts Reviews Scraper — public podcast review RSS, not B2B software review sites
- Apple Podcasts Scraper — show search, episodes, and watchlists
- Google News Scraper
- Website Content Extractor
- Article Content Extractor
- RSS & Atom Feed Extractor