# G2 Reviews API Documentation

<p><strong>G2 Reviews API</strong> returns full G2 reviews of one product. Each review has the id, title, URL, publish date, reviewer name, rating from 0 to 5 in half steps (0 is a real rating and stays 0), <code>role</code> (the G2 user role, such as User or Administrator), industry and company size when the reviewer gave them, the answers to the standard questions (<code>like_best</code>, <code>dislike</code>, <code>problems_solved</code>; other questions are kept in <code>answers</code>), <code>badges</code> (<code>validated</code>, <code>current_user</code>, <code>incentivized</code>, <code>ai_translated</code>), <code>source</code> (for example <code>seller_invite</code>), <code>avatar_url</code> (only when the reviewer has a photo, else <code>null</code>) and <code>vendor_response</code> (<code>null</code> when there is none). Answers keep all their paragraphs, separated by a blank line.</p><p><strong>Newest reviews.</strong> A request with only <code>slug</code>, <code>stars</code>, <code>company_size</code> or <code>coverage</code> returns the 25 newest reviews, newest first. <code>coverage=extended</code> (legacy) merges up to 15 filter combinations into about 375 unique reviews.</p><p><strong>Pages.</strong> Any of <code>page</code>, <code>sort</code>, <code>role</code>, <code>industry</code>, <code>region</code> or <code>category_id</code> returns the paged list: real G2 page <em>N</em> with 10 reviews. Pages 1 to 10 exist, so one combination of filters and sort gives at most 100 reviews. Slice by filters (stars, company size, region, role, industry) and merge by review id to go deeper. A page the filter set does not have returns 422 <code>INVALID_PAGE</code>. G2 data is never returned under another page number.</p><p>In the paged list each review also has <code>job_title</code> (the reviewer's own job title, <code>null</code> when the reviewer hid it), <code>published_at</code> with the full time G2 published the review and <code>updated_at</code> when the reviewer edited it later (else <code>null</code>). G2 does not show the user role on paged cards: <code>role</code> is set only when the request filters on exactly one role, else <code>null</code>. Anonymous reviewers appear as <code>Verified User</code> with their industry in <code>industry</code>. The newest-25 list can show an earlier date for the same review because it uses the submission date. <code>sort=most_recent</code> follows G2's own order, which also moves recently edited reviews up.</p><p>The paged response adds <code>pagination</code> (<code>page</code>, <code>last_page</code>, <code>total</code> of matching reviews, <code>per_page</code>, <code>cap</code>, <code>has_next</code>), the star split <code>distribution</code>, <code>facets</code> with the review count per company size, role, category, industry and region (use their <code>id</code> values in the filters), <code>pros</code>, <code>cons</code> with mention counts and the <code>ai_summary</code>. Filters are always honoured: no review outside the requested stars is returned. A filter with no match returns an empty, billed result. An unknown slug returns 404 and is not billed. One request costs one credit.</p><p>Star buckets: 5 = 4.5 to 5.0, 4 = 3.5 to 4.0, 3 = 2.5 to 3.0, 2 = 1.5 to 2.0, 1 = 0 to 1.0. The company segment is G2's own class (<code>small_business</code>, <code>mid_market</code>, <code>enterprise</code>), not an exact employee band.</p> <p>A filtered page with no matching reviews still returns the product name, rating, review count and categories. For that case the call makes up to 2 upstream lookups (<code>upstream_calls</code> shows 2) and costs 1 credit.</p>

- **Documentation:** [https://scrappa.co/docs/g2-api/g2_reviews](https://scrappa.co/docs/g2-api/g2_reviews)
- **API group:** G2 API
- **Endpoint:** `GET https://scrappa.co/api/g2/reviews`

## Authentication

Send your Scrappa API key in the `X-API-KEY` request header. Paid endpoints also support accountless x402 payments when called without an API key.

## Parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `slug` | string | Yes | G2 product slug, the last part of the product URL. Example: slack. |
| `stars` | array | No | Star buckets 1 to 5 (5 = 4.5 to 5.0 stars). Repeat the parameter or send a comma list. Example: 5. |
| `company_size` | array | No | G2 company segment: small_business, mid_market or enterprise. Repeat the parameter or send a comma list. Example: enterprise. |
| `coverage` | string | No | latest (default, the 25 newest) or extended (merges filter combinations, up to about 375 unique reviews, newest first). |
| `page` | integer | No | Page 1 to 10 with 10 reviews each. Returns the paged list. Example: 2. |
| `sort` | string | No | most_relevant (default), most_recent, most_helpful, highest_rated or lowest_rated. Returns the paged list. |
| `role` | array | No | Reviewer role id from facets.role. Repeat the parameter or send a comma list. Example: 2. |
| `industry` | array | No | Industry id from facets.industry. Repeat the parameter or send a comma list. Example: 333. |
| `region` | array | No | north_america, asia, europe, latin_america, anz, middle_east or africa. Repeat the parameter or send a comma list. |
| `category_id` | array | No | Category id from facets.category. Repeat the parameter or send a comma list. Example: 14. |

## Example response

```json
{
    "data": {
        "count": 1,
        "filters": {
            "stars": [
                5
            ],
            "company_size": [
                "enterprise"
            ]
        },
        "product": {
            "name": "Slack",
            "slug": "slack",
            "reviews_url": "https://www.g2.com/products/slack/reviews"
        },
        "reviews": [
            {
                "id": "13886619",
                "url": "https://www.g2.com/products/slack/reviews/slack-review-13886619",
                "role": "User",
                "title": "Fast, Easy Communication with Channels and Groups",
                "rating": 5,
                "answers": [],
                "dislike": "Older messages disappear and are hard to find.",
                "segment": "enterprise",
                "industry": "Computer Software",
                "like_best": "Can quickly communicate with colleagues and partners. Can create channel and groups.",
                "published_at": "2026-10-28T02:48:50-05:00",
                "reviewer_name": "Verified User",
                "problems_solved": "Communicating with my colleagues",
                "company_size_text": "1,001-5,000 employees"
            }
        ],
        "coverage": "latest",
        "upstream_calls": 1
    },
    "meta": {
        "billable": true,
        "endpoint_family": "reviews"
    },
    "success": true
}
```

## Errors

| Status | Error | Description |
| --- | --- | --- |
| 404 | Not Found | The product slug does not exist on G2. This response is not billable. |
| 422 | Validation Error | A required parameter or a value is invalid. This response is not billable. |
| 503 | Upstream Unavailable | G2 could not be reached or returned data that does not match the request. This response is not billable and is retryable. |
| 422 | Invalid Page | The page is above the last page of this filter set. This response is not billable. |

## More Scrappa resources

- [API documentation](https://scrappa.co/docs)
- [Full LLM-readable API reference](https://scrappa.co/llms-full.txt)
- [OpenAPI specification](https://scrappa.co/docs/api.json)
- [Pricing](https://scrappa.co/pricing)
