Skip to main content
GET
G2 Product Index
Read G2’s public product-review URL catalogue, 100 products per page. Each item contains id, the product slug, and its public review-page url. Use the slug with the product or reviews endpoint. The catalogue includes English URLs from all product-review sitemap groups; localized duplicates are omitted and slugs are sorted. Use pagination.next_cursor to continue on the same snapshot. data.next_cursor contains the same token. pagination.has_more is the stop signal. A cursor remains usable until its snapshot expires, at most 48 hours after collection. Expired or unavailable cursor snapshots return an uncharged 409 CURSOR_EXPIRED. Alternatively, use one-based page to read the current snapshot; do not combine page and cursor. Page numbers across a refresh can refer to different rows. The catalogue refreshes separately from requests. A refresh validates every numbered source file and rechecks the sitemap directory before publishing. Failed or incomplete refreshes retain the previous complete snapshot; snapshots older than 48 hours are not served. collected_at, expires_at and snapshot_id identify exactly which index you received. This indexes public URLs, not proof that every product is still active or has reviews. A nonempty uncached page costs 5 credits. An empty page beyond the catalogue, errors, cache hits and successful idempotent replays cost zero. X-Max-Credits: 5 caps the request. Cache-Control: no-cache bypasses the API response cache and reads the current validated snapshot; it does not download the entire source catalogue again. Background refresh currently uses a bounded existing Firecrawl trial allowance; exhausted source capacity prevents further refreshes. total is the number of unique products in this snapshot, returned_count is the page size and dropped is zero. No partial catalogue is presented as complete. A response-cache hit cannot extend snapshot expiry. A successful idempotent replay preserves its original dated payload under the normal 24-hour replay contract; it does not represent a fresh catalogue snapshot.

Authorizations

x-api-key
string
header
required

Headers

Cache-Control
string
Idempotency-Key
string
X-Max-Credits
integer

Optional nonnegative integer cap on the maximum request hold. A live request whose hold exceeds this cap returns 422 CREDIT_BUDGET_EXCEEDED before spending. Metered holds use the requested limit; cache hits and successful idempotent replays cost zero.

Required range: x >= 0

Query Parameters

page
integer
default:1

One-based page in the current complete snapshot. Cannot be combined with cursor. Beyond the last page returns an empty list at zero credits.

Required range: 1 <= x <= 2501
cursor
string

Opaque cursor returned in pagination.next_cursor or data.next_cursor. Keeps the same complete snapshot for up to 48 hours; expired cursors return uncharged 409. Cannot be combined with page.

Response

Page through a complete, validated snapshot of G2 public English product-review URLs, 100 rows per page in slug order. Each row contains id (product slug) and url. Use the opaque cursor to stay on one snapshot, or page for the current snapshot. Snapshots refresh daily and expire after 48 hours. Partial refreshes are never published. A nonempty uncached page costs five credits; empty pages, errors, cache hits and idempotent replays are free. Cache-Control no-cache bypasses the API response cache but does not force a full catalogue refresh.

success
boolean
required
platform
string
required
endpoint
string
required
credits_used
integer
required
Required range: x >= 0
credits_remaining
integer | null
required
request_id
string
required
cached
boolean
required
data
object
required

The selected operation determines the resource fields in this object. Source data can omit a metric or report it as null.

pagination
object
required