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

What it does

For each review-page URL you provide, the Actor:

  1. Classifies the URL as G2 (g2.com/products/*/reviews) or Capterra (capterra.com/p/*/reviews/) and routes it to the matching parser.
  2. Tries JSON-LD structured data first, then embedded app data (for example __NEXT_DATA__ on Capterra), then og:title meta for product-name fallback, then HTML pattern matching for reviews.
  3. Extracts product metadata — productName, vendorName, categoryName when available.
  4. Parses overall rating, total review count, and rating breakdown.
  5. Collects normalized review rows — title, rating, date, author, body, pros, cons, verified.
  6. Returns status and explicit warnings when 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