G2 Scraper - Reviews, Products, Analytics & Discussions
Pricing
from $0.04 / 1,000 reviews
G2 Scraper - Reviews, Products, Analytics & Discussions
๐ฅ ~$0.05/1K reviews ๐ฅ Scrape G2.com software reviews, products, analytics, comparisons, and discussions. Faceted filtering, facet-value discovery, 72 review fields, NLP sentiment, switching intelligence.
Pricing
from $0.04 / 1,000 reviews
Rating
0.0
(0)
Developer
Kai
Maintained by CommunityActor stats
0
Bookmarked
15
Total users
6
Monthly active users
2 days ago
Last modified
Categories
Share
G2 Scraper
Collect structured G2 product profiles, software reviews, analytics, facet values, and product discussions. Use product URLs or slugs, or find products by keyword, category, or vendor.
Review intelligence
| Area | Available data |
|---|---|
| Review text | Title, structured pros, cons, benefits, full source text, and matching search snippets |
| Dimension ratings | Overall star value plus ease of use, setup, administration, support, requirements, security, and business ratings when G2 supplies them |
| Reviewer context | Company segment, industry, role, region, review source, contract length, and discount fields |
| Themes and switching | Loved and disliked themes, products switched from, switching reasons, and nested switching themes |
| Product analysis | Rating distributions, percentiles, trends, demographics, top themes, and switching-reason counts |
Choose a collection mode
| Goal | Main input | Dataset output |
|---|---|---|
| Collect product reviews | products, search, category, or vendor | default and products |
| Search review text | reviewSearch, with an optional product selector | default |
| Find similar reviews | similarTo | default |
| Fetch known reviews | reviewIds | default |
| Collect product analytics | products with analytics: true | products and analytics |
| Compare products | compare | products and analytics |
| Add valid filter values to a run | enumFields | metadata, followed by the selected main output |
enumFields is additive. It writes the requested filter values to metadata,
then the selected review, product, analytics, or comparison job continues. If
you provide only enumFields, the run finishes after it writes metadata.
Collect reviews for one product
{"products": ["https://www.g2.com/products/slack/reviews"]}
Use maxReviewsPerProduct: 0 only when you want all available matching
reviews.
Find products before you collect reviews
Find products by keyword:
{"search": "project management","maxProducts": 5,"maxReviewsPerProduct": 20}
Browse a category:
{"category": "CRM","maxProducts": 10,"maxReviewsPerProduct": 20}
Browse products from one vendor:
{"vendor": "Salesforce","maxProducts": 5,"maxReviewsPerProduct": 10}
Filter product reviews
This example keeps low-rating enterprise reviews from the selected date:
{"products": ["slack"],"dateFrom": "2025-01-01","ratings": ["1", "2"],"companySegment": ["enterprise"],"maxReviewsPerProduct": 100}
Facet filters use the values that G2 returns. First, list the values in the
metadata Dataset:
{"enumFields": ["source_type", "response_type"]}
Then use a returned value in a product review run:
{"products": ["slack"],"primaryRegions": ["Americas"],"sourceTypes": ["organic"],"responseTypes": ["video"],"maxReviewsPerProduct": 50}
Search review text
Use a product selector to search within selected products:
{"products": ["slack"],"reviewSearch": "customer support","includeHighlights": true}
Omit the product selector to search reviews across products:
{"reviewSearch": "customer support","maxReviews": 50,"collapseByProduct": true}
Analyse or compare products
{"products": ["slack"],"analytics": true}
{"compare": ["slack", "clickup", "jira"]}
Comparison mode writes one product record and one analytics record for each resolved product. It does not create a separate comparison record.
Find known or similar reviews
Find reviews that are similar to supplied text:
{"similarTo": "The API was difficult to integrate","maxReviews": 20}
Fetch known review IDs:
{"reviewIds": ["13038740"]}
Add product discussions
Set includeDiscussions in product review mode. Discussion records go to the
discussions Dataset.
{"products": ["slack"],"maxReviewsPerProduct": 10,"includeDiscussions": true}
Input
| Field | Type | Default | Description |
|---|---|---|---|
products | string[] | Product URLs, product slugs, or G2 category URLs | |
maxReviewsPerProduct | integer | 20 | Maximum reviews for each product; 0 removes this limit |
sortBy | string | DATE_DESC | DATE_DESC, DATE_ASC, RATING_DESC, RATING_ASC, HELPFUL_DESC, G2_DEFAULT |
ratings | string[] | ["1","2","3","4","5"] | 1, 2, 3, 4, 5 |
companySegment | string[] | small_business, mid_market, enterprise | |
dateFrom | string | Lower date bound sent to G2; use YYYY-MM-DD | |
dateTo | string | Upper date bound sent to G2; use YYYY-MM-DD | |
primaryRegions | string[] | Americas, Asia Pacific, EMEA | |
sourceTypes | string[] | Collection-source facets; use enumFields to list available values | |
responseTypes | string[] | Review-medium facets, such as text or video | |
loveThemes | string[] | Themes that reviewers liked | |
hateThemes | string[] | Themes that reviewers disliked | |
switchingThemes | string[] | Reasons that reviewers switched products | |
discounts | string[] | Reported discount facets | |
reviewSources | string[] | Review-source channel facets | |
reviewSearch | string | Search review text; without a product selector, the search is global | |
search | string | Find products by keyword | |
category | string | Find products in a G2 category | |
vendor | string | Find products by vendor name | |
maxProducts | integer | 10 | Maximum products in search, category, or vendor mode; 0 removes this limit |
compare | string[] | Product selectors for product and analytics output | |
analytics | boolean | false | Write analytics instead of individual reviews for resolved product selectors |
enumFields | string[] | source_type, response_type, love_theme_humanized, hate_theme_humanized, switching_theme_humanized, discount, review_source | |
similarTo | string | Find reviews that are similar to this text | |
reviewIds | string[] | Fetch reviews by G2 review ID | |
maxReviews | integer | 100 | Maximum global or similar-search reviews; 0 removes the global-search limit, while Similar search stays limited to 1,000 |
collapseByProduct | boolean | false | Keep one review per product in global or Similar search |
includeDiscussions | boolean | false | Also collect discussions in product review mode; ignored in analytics mode |
includeHighlights | boolean | true | Include matching snippets when reviewSearch is set |
proxyConfiguration | object | {"useApifyProxy":true} | Connection settings passed to Apify |
The Actor requires at least one selector. enumFields always runs first and
does not replace the main job. Of the dedicated main selectors, the Actor uses
reviewIds before similarTo, and similarTo before compare, when more than
one is present. A reviewSearch without a product selector runs globally. With
products, search, category, or vendor, it filters the selected products
instead. Repeated product selectors are preserved and can produce repeated
records.
ratings, companySegment, date, region, facet, and reviewSearch filters apply to
product reviews, global search, Similar search, analytics, and comparison. They
do not apply to review-ID or facet-discovery modes. sortBy controls product
and global review searches.
The Actor sends dateFrom and dateTo to G2 as supplied. It does not reject
unsupported date formats or compare their order. Use YYYY-MM-DD, and make
sure dateFrom is not later than dateTo.
The next example shows valid syntax for every input field. It is a field reference, not a recommended combination of modes.
Output
The Actor can write to five Datasets. Open the Dataset named in the table for the selected mode.
| Dataset | When it is used | Record type |
|---|---|---|
| default | Product review, global search, Similar search, or review-ID mode | Review |
| products | Product, analytics, or comparison mode | Product |
| analytics | Analytics or comparison mode | Analytics |
| discussions | Product review mode with includeDiscussions | Discussion |
| metadata | Facet discovery mode | Facet values |
Unavailable optional review values are null. Missing text can be an empty string. Lists can be empty.
Review example
This selected-field projection contains point-in-time values dated 28 June 2026. Reviewer identity and other fields are omitted. Use the field reference for the complete record.
{"id": "13038740","productId": 3437,"productName": "Slack","reviewUrl": "https://www.g2.com/products/slack/reviews/13038740","title": "One-Click Integrations That Just Work for slack","pros": "Integration with other apps has to be 1 click","cons": "UI when you send the messages. The typing window should be adjustable","benefits": "connect and chatting with the team One-Click Integrations That Just Work for slack","responseType": "text","nps": 8,"npsScore": 4,"submittedAt": "2026-06-26T17:10:48.781-05:00","publishedAt": "2026-06-26T19:30:00.900-05:00","status": "approved","isPublic": true,"highlightedSnippets": null,"scrapedAt": "2026-06-28T06:00:34.982Z"}
Review field reference
All fields in this table are present. A nullable field has the JSON value
null when G2 does not return it.
| Group | JSON field contract |
|---|---|
| Identity | id, productName, and reviewUrl: string; productId: number |
| Text | title, rawText, and responseType: string; pros, cons, and benefits: string or null |
| Ratings | nps, npsScore, easeOfUse, easeOfSetup, easeOfAdmin, easeOfDoingBusinessWith, meetsRequirements, qualityOfSupport, securityConfidence, securityImportance, and direction: number or null |
| Reviewer | userName: string; country, region, primaryRegion, companySegmentLabel, industryLabel, and roleLabel: string or null; companySegment, industry, and role: number or null |
| Sentiment | loveTheme, loveThemeHumanized, loveThemeParentHumanized, hateTheme, hateThemeHumanized, and hateThemeParentHumanized: string or null |
| Switching | switchedFromOtherProduct and switchedReason: string or null; switchedFromProductIds: number array or null; switchingThemes: string array or null; switchingThemesNested: object array or null, with string name and humanizedName in each item |
| Publication | submittedAt and status: string; publishedAt, reviewSource, sourceType, contractLength, and discount: string or null; helpful: number; englishAvailable, isPublic, published, and productPaidProfile: boolean; price: number or null |
| Product context | productIds and categoryIds: number array or null |
| Additional source values | defaultSort, serviceLocation, contractLengthWeight, and discountWeight: number or null; templateKeyword, videoReviewSubmittedAt, and userUpdatedAt: string or null; editionIds and expertiseIds: string array or null; everApproved, isInLimbo, read, and reportable: boolean |
| Search and collection | highlightedSnippets: string array or null; scrapedAt: string |
Reviewer job titles and avatar URLs are not available. industry and role
are numeric source codes, and their label fields are present only for mapped
values. They are output values, not filters. country and region are also
output values; use primaryRegions for geography filtering.
Product field reference
All product fields are present.
| Group | JSON field contract |
|---|---|
| Identity | name, slug, description, productUrl, and vendorName: string |
| Ratings | starRating, g2Rating, and mozPageAuthority: number or null; averageRating: string; reviewCount: number |
| Classification | categoryNames, featureKeywords, and tagNames: string array; categoryIds: number array |
| Images | thumbImageUrl and faviconUrl: string or null |
| Source values | type, uuid, and scrapedAt: string; isConsumer and isFeatured: boolean |
Analytics field reference
All analytics fields are present. Arrays can be empty.
| Group | JSON field contract |
|---|---|
| Identity and totals | productId, totalReviews, and totalHelpfulVotes: number; productName, productSlug, and scrapedAt: string |
| Rating statistics | nps, easeOfUse, easeOfSetup, easeOfAdmin, qualityOfSupport, meetsRequirements, easeOfDoingBusinessWith, securityConfidence, securityImportance, and direction: objects; each has number-or-null avg, stdDev, min, and max, plus number count |
| Distribution | ratingDistribution: object whose rating keys map to number counts; npsPercentiles: object with number p10, p25, p50, p75, and p90 |
| Counts | uniqueCountries and uniqueIndustries: number |
| Top themes | topLoveThemes and topHateThemes: object arrays; each item has string theme, number count, and object-array sampleReviews; each sample has string title and userName, and number npsScore |
| Unique themes | uniquelyLoved and uniquelyHated: object arrays; each item has string theme and number score and count |
| Switching | switchingReasons: object array; each item has string reason and number count |
| Demographics | bySegment and byIndustry: object arrays with number code, string-or-null label, and number count; byRegion: object array with string region and number count; bySourceType: object array with string type and number count |
| Trends | reviewsOverTime: object array; each item has string month and number count |
This analytics projection contains point-in-time values. It omits the other fields listed above.
{"productId": 3437,"productName": "Slack","productSlug": "slack","totalReviews": 20201,"totalHelpfulVotes": 69,"nps": {"avg": 9.211870699470323,"stdDev": 1.1668658162744323,"min": 0,"max": 10,"count": 20201},"ratingDistribution": {"1": 40,"2": 93,"3": 468,"4": 3646,"5": 15954},"npsPercentiles": {"p10": 8,"p25": 9,"p50": 10,"p75": 10,"p90": 10},"uniqueCountries": 140,"uniqueIndustries": 145,"reviewsOverTime": [{ "month": "2014-02", "count": 1 },{ "month": "2026-06", "count": 73 }]}
Discussion and facet-value fields
Discussion records have this contract:
| Group | JSON field contract |
|---|---|
| Identity | id: string; productId and categoryId: number or null; productName and categoryName: string or null |
| Content | title and content: string; tagNames: string array |
| Counts | commentsCount, votesUp, votesTotal, and helpful: number |
| Flags | isPublic, unanswered, seeded, pinned, and vendorQuestion: boolean |
| Dates | createdAt, updatedAt, and scrapedAt: string |
Some discussions contain a title without content. In a facet-value record,
field is a string, type is the string enum_values, values is a string
array, and count is a number equal to values.length.
This facet projection contains point-in-time values. The values array is
shortened; count describes the unshortened source array.
{"field": "source_type","type": "enum_values","values": ["organic", "user_profile", "vendor"],"count": 21}
Mode and result behaviour
- Product review and analytics modes return public, approved reviews. A requested review ID is omitted when it does not resolve to such a review.
- Similar search returns at most 1,000 reviews and keeps relevance order. Review-ID records do not have a guaranteed order.
maxReviewsPerProduct: 0,maxProducts: 0, or globalmaxReviews: 0can produce a long run.- Product
reviewCountis the source total. It can be higher than the number of reviews available to this Actor. - Unknown products, empty searches, and modes with no matches can finish with empty Datasets.
- If one product fails, completed sibling products remain available. Pagination can also keep partial output if G2 stops returning more pages. If all requested product targets fail, the run completes with empty output.
- Some reviews do not have distinct pros, cons, or benefits. The Actor does not create missing text.