GG APIgg.deals ↗
Search games, browse current deals across stores, and retrieve historical price data from GG.deals via 4 structured API endpoints.
What is the GG API?
The GG.deals API exposes 4 endpoints for querying game prices, active deals, and historical price charts across PC and console storefronts. Use search_games to find titles by name and get their current lowest prices, get_deals to paginate through live discounts with DRM and platform filters, and get_game_price_history to retrieve timestamped price data points for both official retailers and keyshops.
curl -X GET 'https://api.parse.bot/scraper/f8279109-dfa1-45a0-bc90-5d88dca62914/search_games?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 gg-deals-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.
from parse_apis.gg_deals_api import GGDeals, DealSort
gg = GGDeals()
# Search for games
for game in gg.games.search(query="cyberpunk"):
print(game.name, game.lowest_price, game.slug)
# Get detailed info for a specific game
detail = gg.games.get(slug="elden-ring")
print(detail.name, detail.game_id)
print(detail.ratings.score, detail.ratings.count)
for offer in detail.offers:
print(offer.store_name, offer.price, offer.drm)
# Get price history via the constructible game
game = gg.game(slug="elden-ring")
history = game.price_history()
print(history.currency.prefix, history.currency.suffix)
for point in history.chart_data.retail:
print(point.shop, point.y, point.name)
# Browse deals sorted by best discount
for deal in gg.deals.list(sort=DealSort.BEST, min_discount=50):
print(deal.name, deal.current_price, deal.discount, deal.store_name)
Search for games by title on GG.deals. Returns a list of matching games with their current lowest prices and discounts. Results are not paginated — the site returns all matches for the query in a single response.
| Param | Type | Description |
|---|---|---|
| queryrequired | string | Search query for game title (e.g. 'elden ring', 'cyberpunk') |
{
"type": "object",
"fields": {
"games": "array of game objects with game_id, name, slug, image_url, link, lowest_price, and discount"
},
"sample": {
"data": {
"games": [
{
"link": "https://gg.deals/game/elden-ring/",
"name": "ELDEN RING",
"slug": "elden-ring",
"game_id": "119003",
"discount": "Discount: -32%",
"image_url": "https://img.gg.deals/31/ef/b655fb330dcd049aa385e36c1de20ed8d0df_249xr143.jpg",
"lowest_price": "Cheapest price: $40.55"
}
]
},
"status": "success"
}
}About the GG API
Searching and Browsing
The search_games endpoint accepts a query string and returns an array of matching game objects, each including game_id, name, slug, image_url, link, lowest_price, and discount. The slug and game_id values returned here feed directly into the two detail endpoints.
The get_deals endpoint lists current deals with a range of optional filters: drm (e.g., Steam, GOG), platform (1 for PC, 2 for Xbox, 3 for PlayStation, 4 for Switch), min_discount, min_price, max_price, store, and sort (by date, best, expiry, or price). Results are paginated via the page parameter, and each deal object includes current_price, original_price, discount, store_name, store_logo, and drm.
Game Detail and Price Offers
The get_game_detail endpoint takes a slug and returns a full picture of a game's current availability: an offers array with per-store entries showing store_type, store_name, price, drm, and any active coupon. It also returns aggregate ratings (score and count) and metadata covering description, release_date, and brand.
Price History
The get_game_price_history endpoint accepts either a slug or a game_id and returns chartData with separate retail and keyshops arrays. Each data point carries x (timestamp in milliseconds), y (price), shop (store name), and name (date range label). The currency object in the response includes decimals, prefix, and suffix for formatting prices correctly in any display context.
The GG API is a managed, monitored endpoint for gg.deals — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when gg.deals 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 gg.deals 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?+
- Alert users when a specific game drops below a target price using
get_game_price_historytimestamp data - Build a multi-store deal aggregator filtered by DRM platform (Steam, GOG) using
get_deals - Compare official retailer vs. keyshop pricing for any title via the
offersarray inget_game_detail - Track discount trends over time for a wishlist by querying
chartDataretail and keyshop arrays - Filter deals by platform ID to surface Switch or PlayStation-specific discounts
- Show coupon codes alongside store prices by reading the
couponfield inget_game_detailoffers - Populate a game search autocomplete with cover images and lowest prices from
search_gamesresults
| 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 GG.deals have an official developer API?+
What does `get_game_price_history` distinguish between retail and keyshop prices?+
chartData object contains two separate arrays: retail for prices from official storefronts and keyshops for third-party key sellers. Each entry in both arrays includes a Unix timestamp in milliseconds (x), a price value (y), the store name (shop), and a human-readable date range label (name), so you can plot or compare the two series independently.Can I filter `get_deals` results by both DRM type and platform at the same time?+
get_deals endpoint accepts drm (e.g., 'Steam') and platform (integer: 1 PC, 2 Xbox, 3 PlayStation, 4 Switch) as independent optional parameters. You can pass both in a single request along with min_discount, min_price, max_price, and sort to narrow results further.Does the API return user reviews or community wishlists from GG.deals?+
get_game_detail endpoint returns aggregate ratings with a score and count, but individual user reviews, community wishlists, and forum activity are not covered by the current endpoints. You can fork this API on Parse and revise it to add an endpoint targeting that data.Is historical price data available for all platforms, or only PC?+
get_game_price_history endpoint resolves data by slug or game_id regardless of platform. However, the depth and availability of keyshop history may vary by title — games with low keyshop activity may return sparse or empty keyshops arrays in chartData.