G2 Scraper - Reviews, Products, Analytics & Discussions avatar

G2 Scraper - Reviews, Products, Analytics & Discussions

Pricing

from $0.04 / 1,000 reviews

Go to Apify Store
G2 Scraper - Reviews, Products, Analytics & Discussions

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

Kai

Maintained by Community

Actor stats

0

Bookmarked

15

Total users

6

Monthly active users

2 days ago

Last modified

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

AreaAvailable data
Review textTitle, structured pros, cons, benefits, full source text, and matching search snippets
Dimension ratingsOverall star value plus ease of use, setup, administration, support, requirements, security, and business ratings when G2 supplies them
Reviewer contextCompany segment, industry, role, region, review source, contract length, and discount fields
Themes and switchingLoved and disliked themes, products switched from, switching reasons, and nested switching themes
Product analysisRating distributions, percentiles, trends, demographics, top themes, and switching-reason counts

Choose a collection mode

GoalMain inputDataset output
Collect product reviewsproducts, search, category, or vendordefault and products
Search review textreviewSearch, with an optional product selectordefault
Find similar reviewssimilarTodefault
Fetch known reviewsreviewIdsdefault
Collect product analyticsproducts with analytics: trueproducts and analytics
Compare productscompareproducts and analytics
Add valid filter values to a runenumFieldsmetadata, 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

FieldTypeDefaultDescription
productsstring[]Product URLs, product slugs, or G2 category URLs
maxReviewsPerProductinteger20Maximum reviews for each product; 0 removes this limit
sortBystringDATE_DESCDATE_DESC, DATE_ASC, RATING_DESC, RATING_ASC, HELPFUL_DESC, G2_DEFAULT
ratingsstring[]["1","2","3","4","5"]1, 2, 3, 4, 5
companySegmentstring[]small_business, mid_market, enterprise
dateFromstringLower date bound sent to G2; use YYYY-MM-DD
dateTostringUpper date bound sent to G2; use YYYY-MM-DD
primaryRegionsstring[]Americas, Asia Pacific, EMEA
sourceTypesstring[]Collection-source facets; use enumFields to list available values
responseTypesstring[]Review-medium facets, such as text or video
loveThemesstring[]Themes that reviewers liked
hateThemesstring[]Themes that reviewers disliked
switchingThemesstring[]Reasons that reviewers switched products
discountsstring[]Reported discount facets
reviewSourcesstring[]Review-source channel facets
reviewSearchstringSearch review text; without a product selector, the search is global
searchstringFind products by keyword
categorystringFind products in a G2 category
vendorstringFind products by vendor name
maxProductsinteger10Maximum products in search, category, or vendor mode; 0 removes this limit
comparestring[]Product selectors for product and analytics output
analyticsbooleanfalseWrite analytics instead of individual reviews for resolved product selectors
enumFieldsstring[]source_type, response_type, love_theme_humanized, hate_theme_humanized, switching_theme_humanized, discount, review_source
similarTostringFind reviews that are similar to this text
reviewIdsstring[]Fetch reviews by G2 review ID
maxReviewsinteger100Maximum global or similar-search reviews; 0 removes the global-search limit, while Similar search stays limited to 1,000
collapseByProductbooleanfalseKeep one review per product in global or Similar search
includeDiscussionsbooleanfalseAlso collect discussions in product review mode; ignored in analytics mode
includeHighlightsbooleantrueInclude matching snippets when reviewSearch is set
proxyConfigurationobject{"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.

DatasetWhen it is usedRecord type
defaultProduct review, global search, Similar search, or review-ID modeReview
productsProduct, analytics, or comparison modeProduct
analyticsAnalytics or comparison modeAnalytics
discussionsProduct review mode with includeDiscussionsDiscussion
metadataFacet discovery modeFacet 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.

GroupJSON field contract
Identityid, productName, and reviewUrl: string; productId: number
Texttitle, rawText, and responseType: string; pros, cons, and benefits: string or null
Ratingsnps, npsScore, easeOfUse, easeOfSetup, easeOfAdmin, easeOfDoingBusinessWith, meetsRequirements, qualityOfSupport, securityConfidence, securityImportance, and direction: number or null
RevieweruserName: string; country, region, primaryRegion, companySegmentLabel, industryLabel, and roleLabel: string or null; companySegment, industry, and role: number or null
SentimentloveTheme, loveThemeHumanized, loveThemeParentHumanized, hateTheme, hateThemeHumanized, and hateThemeParentHumanized: string or null
SwitchingswitchedFromOtherProduct 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
PublicationsubmittedAt 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 contextproductIds and categoryIds: number array or null
Additional source valuesdefaultSort, 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 collectionhighlightedSnippets: 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.

GroupJSON field contract
Identityname, slug, description, productUrl, and vendorName: string
RatingsstarRating, g2Rating, and mozPageAuthority: number or null; averageRating: string; reviewCount: number
ClassificationcategoryNames, featureKeywords, and tagNames: string array; categoryIds: number array
ImagesthumbImageUrl and faviconUrl: string or null
Source valuestype, uuid, and scrapedAt: string; isConsumer and isFeatured: boolean

Analytics field reference

All analytics fields are present. Arrays can be empty.

GroupJSON field contract
Identity and totalsproductId, totalReviews, and totalHelpfulVotes: number; productName, productSlug, and scrapedAt: string
Rating statisticsnps, easeOfUse, easeOfSetup, easeOfAdmin, qualityOfSupport, meetsRequirements, easeOfDoingBusinessWith, securityConfidence, securityImportance, and direction: objects; each has number-or-null avg, stdDev, min, and max, plus number count
DistributionratingDistribution: object whose rating keys map to number counts; npsPercentiles: object with number p10, p25, p50, p75, and p90
CountsuniqueCountries and uniqueIndustries: number
Top themestopLoveThemes 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 themesuniquelyLoved and uniquelyHated: object arrays; each item has string theme and number score and count
SwitchingswitchingReasons: object array; each item has string reason and number count
DemographicsbySegment 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
TrendsreviewsOverTime: 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:

GroupJSON field contract
Identityid: string; productId and categoryId: number or null; productName and categoryName: string or null
Contenttitle and content: string; tagNames: string array
CountscommentsCount, votesUp, votesTotal, and helpful: number
FlagsisPublic, unanswered, seeded, pinned, and vendorQuestion: boolean
DatescreatedAt, 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 global maxReviews: 0 can produce a long run.
  • Product reviewCount is 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.