G2A APIg2a.com ↗
Search G2A's product catalog, compare seller offers with ratings, and browse category trees via a structured JSON API. 3 endpoints covering products, offers, and categories.
What is the G2A API?
The G2A API provides 3 endpoints for querying G2A.com's digital marketplace: search the full product catalog with search_products, retrieve per-product seller offers and ratings with get_product_details, and pull the complete category tree with get_categories. Each search result carries up to 18 products per page and exposes fields like price, platform, region, stock status, and seller count.
curl -X GET 'https://api.parse.bot/scraper/e5220466-1443-45c1-ae07-fa5af85274ff/search_products?page=1&query=elden+ring' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace g2a-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""G2A SDK — search game keys, compare seller prices, browse categories."""
from parse_apis.g2a_api import G2A, ProductNotFound
client = G2A()
# Search for game keys — limit caps total items fetched across pages.
for product in client.products.search(query="elden ring", limit=5):
print(product.name, product.price, product.currency, product.platform)
# Drill down: take one product, fetch full details with seller offers.
product = client.products.search(query="cyberpunk", limit=1).first()
if product:
detail = product.details()
print(detail.product.name, detail.product.rating)
for offer in detail.offers[:3]:
print(offer.seller_name, offer.price, offer.seller_rating_percent)
# Browse categories — single-page fetch.
for cat in client.categories.list(limit=4):
print(cat.name, len(cat.subcategories), "subcategories")
# Typed error handling for a missing product.
try:
bad = client.product(slug="nonexistent-game-i9999999999999").details()
except ProductNotFound as exc:
print(f"Product not found: {exc.slug}")
print("exercised: products.search / product.details / categories.list / ProductNotFound")
Full-text search over G2A's product catalog. Returns a paginated list of products matching the query, each with pricing, platform, region, and stock info. Up to 18 items per page. Paginates via integer page counter. Returns has_next to indicate more pages available.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination (1-based) |
| queryrequired | string | Search keyword (e.g. 'elden ring', 'windows 11') |
{
"type": "object",
"fields": {
"page": "current page number (integer)",
"has_next": "boolean indicating whether more pages are available",
"products": "array of product objects with name, id, slug, price, currency, platform, region, type, sellers_count, stock_status",
"total_results": "total number of results across all pages (integer)",
"items_per_page": "number of items per page (typically 18)"
},
"sample": {
"data": {
"page": 1,
"has_next": true,
"products": [
{
"id": "10000273674023",
"name": "Elden Ring PC",
"slug": "elden-ring-pc-steam-account-account-global-i10000273674023",
"type": "Account",
"price": "28.06",
"region": "GLOBAL",
"currency": "USD",
"platform": "Steam",
"stock_status": "AVAILABLE",
"sellers_count": 10
},
{
"id": "10000273674037",
"name": "Elden Ring PC",
"slug": "elden-ring-pc-steam-key-united-states-i10000273674037",
"type": "Key",
"price": "54.29",
"region": "UNITED STATES",
"currency": "USD",
"platform": "Steam",
"stock_status": "AVAILABLE",
"sellers_count": 13
}
],
"total_results": 232,
"items_per_page": 18
},
"status": "success"
}
}About the G2A API
Product Search and Pagination
The search_products endpoint accepts a query string (e.g. 'elden ring', 'windows 11') and an optional integer page parameter for 1-based pagination. Each response returns the current page, a has_next boolean, total_results across all pages, items_per_page (typically 18), and a products array. Each product object includes name, id, slug, price, currency, platform, region, type, sellers_count, and stock_status. The slug field is what you pass to the next endpoint for full details.
Seller Offers and Product Details
get_product_details takes a slug from search results and returns two top-level objects. The product object holds name, rating, reviews_count, image, base_title, and description. The offers array contains every active seller listing, each with id, price, currency, seller_name, seller_rating_percent, seller_positives, seller_negatives, and seller_or (overall rating score). This makes it straightforward to rank sellers by reputation or find the cheapest offer for a specific title.
Category Tree
get_categories requires no input parameters and returns the complete categories array from G2A's navigation. Each top-level category object includes name, slug, and a subcategories array where each entry also carries name and slug. Top-level buckets include Gaming, Software, Subscriptions, and Gift Cards. The slugs returned here are not directly passable to the other endpoints but provide a reference map of how G2A organizes its catalog.
The G2A API is a managed, monitored endpoint for g2a.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when g2a.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official g2a.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Track price fluctuations for a specific game key across multiple G2A sellers using
search_productsandget_product_details - Build a price comparison tool that ranks sellers by
seller_rating_percentandpricefor a given product slug - Monitor
stock_statusacross a watchlist of game titles to alert users when items come back in stock - Aggregate
sellers_countandpriceacross search result pages to analyze market depth for a game category - Map G2A's full category hierarchy via
get_categoriesto build a browsable storefront or directory - Filter search results by
platformorregionfields to surface region-specific key availability - Calculate seller trust scores by combining
seller_positives,seller_negatives, andseller_rating_percentfrom offer objects
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does G2A have an official public developer API?+
What does get_product_details return beyond the basic search data?+
get_product_details returns the full offers array for a product, which search results do not include. Each offer exposes individual seller fields — seller_name, seller_rating_percent, seller_positives, seller_negatives, and seller_or — alongside price and currency. The product object also adds description, rating, reviews_count, and image, which are absent from search_products results.Can I filter search results by platform or region directly in the API?+
search_products endpoint accepts only query and page as inputs; there are no dedicated filter parameters for platform or region. Both platform and region are present as fields in each returned product object, so filtering must be applied client-side after fetching results. You can fork this API on Parse and revise it to add server-side filter parameters if you need pre-filtered responses.Does the API cover user reviews or review text for products?+
get_product_details returns aggregate rating and reviews_count for a product, but individual review text and reviewer metadata are not exposed by any of the three endpoints. You can fork this API on Parse and revise it to add a review-detail endpoint if per-review content is required.How does pagination work in search_products, and are there any limits?+
page parameter. Each page returns up to 18 items (items_per_page). The response includes total_results so you can calculate the total page count, and has_next as a direct boolean to check whether another page exists. There is no built-in parameter to change the page size.