G2 Reviews API
Pull G2 software reviews for any product: star rating, what reviewers like and dislike, problems solved, market segment, and G2's rating rubric as clean JSON.
Provider network
Providers ranked by traffic
capped at $0.00446 per request1 result$0.0001144 results$0.0022688 results$0.00446 capYou are charged for what comes back. Lower the limit to pay less - and no single request can cost more than the cap, however much comes back.
capped at $0.143 per request1 result$0.0068850 results$0.0745100 results$0.143 capYou are charged for what comes back. Lower the limit to pay less - and no single request can cost more than the cap, however much comes back.
Try it
Make your first request
{
"data": {
"items": [
{
"author": "Alex Rivera",
"authorCountry": "Alex Rivera",
"createdUtc": 12.5,
"dislikes": "example",
"helpfulVotes": 42,
"id": "a1b2c3d4",
"likes": "example",
"marketSegment": "example",
"nps": 42,
"problemsSolved": "example",
"productName": "Example title",
"productSlug": "alex_rivera",
"rating": 4.6,
"ratings": {
"easeOfAdmin": 42,
"easeOfDoingBusinessWith": 42,
"easeOfSetup": 42,
"easeOfUse": 42,
"meetsRequirements": 42,
"qualityOfSupport": 42
},
"responseType": "general",
"reviewSource": "https://example.com/page",
"switchedFrom": true,
"title": "Example title",
"url": "https://example.com/page"
}
]
},
"found": true
}interface G2ReviewsResponse {
data: {
items: {
author?: string;
authorCountry?: string;
createdUtc?: number;
dislikes?: string;
helpfulVotes?: number;
id: string;
likes?: string;
marketSegment?: string;
nps?: number;
problemsSolved?: string;
productName?: string;
productSlug?: string;
rating: number;
ratings?: {
easeOfAdmin?: number;
easeOfDoingBusinessWith?: number;
easeOfSetup?: number;
easeOfUse?: number;
meetsRequirements?: number;
qualityOfSupport?: number;
};
responseType?: string;
reviewSource?: string;
switchedFrom?: boolean | null;
title?: string;
url?: string;
}[];
} | null;
found: boolean;
}Full parameter and response reference - every field, type, and example for this endpoint.
Reference
Request, response, and price
Last verified 2026-09-16 · uptime and latency measured over 30dcurl -X POST https://api.getanyapi.com/v1/run/g2.reviews \
-H "Authorization: Bearer $ANYAPI_KEY" \
-H "Content-Type: application/json" \
-d '{"limit":50,"product":"hubspot-marketing-hub","sortBy":"recent"}'| Field | Type | Example value |
|---|---|---|
| Request body | ||
| product | string | "hubspot-marketing-hub"G2 product slug, for example hubspot-marketing-hub. A full G2 product URL is also accepted and reduced to its slug. |
| limit | integer | 50Maximum number of reviews to return. The minimum is 50 because G2 review sources will not serve a smaller page. You are billed per returned result, so a lower limit costs less. |
| requireFields | array | Optional; omit it and routing is unchanged, with the cheapest source serving. Name the output fields this request must be able to return, for example `productSlug`, and it is served only by a source that returns every one of them. Fields you do not name are still returned whenever the serving source has them. This can raise your price: when the cheapest source cannot return a named field, a dearer source serves, and you are quoted and charged its price. A named field can still be absent on a review that genuinely lacks it. Naming a combination that no single source returns together is refused as invalid input, with no charge. |
| sortBy | enum | "recent"Sort order for the returned reviews: newest first, most helpful first, highest or lowest rated first, or G2's own default ordering. |
| Response | ||
| data | object | |
| data.items | object[] | G2 reviews for the requested product. Populated whenever the provider has data for the entity. |
| data.items[].author | string | Reviewer's display name. G2 abbreviates most reviewers, for example Michael D. Populated whenever the provider has data for the entity. |
| data.items[].authorCountrycan require | string | Country the reviewer is based in. |
| data.items[].createdUtc | number | UTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds. Populated whenever the provider has data for the entity. |
| data.items[].dislikes | string | The reviewer's answer to G2's question about what they dislike. Populated whenever the provider has data for the entity. |
| data.items[].helpfulVotescan require | integer | Number of readers who marked the review helpful. |
| data.items[].id | string | G2 identifier for the review. Populated whenever the provider has data for the entity. |
| data.items[].likes | string | The reviewer's answer to G2's question about what they like best. Populated whenever the provider has data for the entity. |
| data.items[].marketSegment | string | G2 market segment of the reviewer's company: Small-Business, Mid-Market, or Enterprise. Populated whenever the provider has data for the entity. |
| data.items[].nps | integer | Likelihood the reviewer would recommend the product, on a 0 to 10 scale. Populated whenever the provider has data for the entity. |
| data.items[].problemsSolved | string | The reviewer's answer to G2's question about what problems the product solves and how that benefits them. Populated whenever the provider has data for the entity. |
| data.items[].productName | string | Name of the product the review is about. Populated whenever the provider has data for the entity. |
| data.items[].productSlugcan require | string | G2 slug of the product the review is about. |
| data.items[].rating | number | Star rating the reviewer gave, on a 0.5 to 5 scale in half-star steps. Populated whenever the provider has data for the entity. |
| data.items[].ratingscan require | object | G2's rating rubric, each on a 0 to 10 scale. A reviewer may skip any of them, and the last two are asked far less often. |
| data.items[].ratings.easeOfAdmin | integer | Rating for how easy the product is to administer. |
| data.items[].ratings.easeOfDoingBusinessWith | integer | Rating for how easy the vendor is to do business with. |
| data.items[].ratings.easeOfSetup | integer | Rating for how easy the product is to set up. |
| data.items[].ratings.easeOfUse | integer | Rating for how easy the product is to use. |
| data.items[].ratings.meetsRequirements | integer | Rating for how well the product meets the reviewer's requirements. |
| data.items[].ratings.qualityOfSupport | integer | Rating for the quality of the vendor's support. |
| data.items[].responseTypecan require | string | Form the review was submitted in, for example text or video. |
| data.items[].reviewSourcecan require | string | How G2 collected the review, for example organic or vendor. |
| data.items[].switchedFromcan require | boolean | Whether the reviewer switched from another product. Null when G2 does not record an answer. |
| data.items[].title | string | Headline the reviewer gave the review. Populated whenever the provider has data for the entity. |
| data.items[].url | string | Canonical G2 URL for the review. Populated whenever the provider has data for the entity. |
| found | boolean | |
| Price | ||
| Price per request (ceiling) | USD | $0.00446 |
| Price /1k results | USD | $0.050682 |
FAQ
About the G2 Reviews API
The AnyAPI G2 Reviews API returns G2 reviews data as normalized JSON from one POST call to /v1/run/g2.reviews. Pull G2 software reviews for any product: star rating, what reviewers like and dislike, problems solved, market segment, and G2's rating rubric as clean JSON. AnyAPI routes each request across 2 sources and falls back automatically when one fails. It costs $0.05 per 1,000 results, and never more than $0.00446 for a single request, in US dollars with no subscription and no monthly minimum. Over the last 30 days, 98.5% of G2 reviews calls through AnyAPI succeeded, with a median response time of 5.2 seconds across 65 measured calls.