Games & Comics — entry 007 of 75
CheapShark
CheapShark's keyless JSON API aggregates PC game deals across roughly three dozen storefronts (Steam, GOG, Epic, Humble Store, and more), returning live and historical-low prices, percentage savings, and Metacritic scores per deal. Separate /games and /stores endpoints support price-history lookups by title or Steam AppID; live testing confirmed open CORS and no documented rate limit or paid tier.
CheapShark is a keyless JSON API that aggregates PC game deals across roughly three dozen storefronts. A live GET this run against /deals?storeID=1&upperPrice=15&pageSize=1 returned a genuine 582 B one-item deal array at HTTP 200, with content-type: application/json and access-control-allow-origin: * — no key, signup, or header beyond a normal request.
GreatAPIs Score
Auth quickstart
- No API key, signup, or credit card required — the live GET above returned real deal data with no auth header of any kind attached, and the response still carried
access-control-allow-origin: *for direct browser use.
Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.
Find a cheap Steam deal under $15
GEThttps://www.cheapshark.com/api/1.0/deals?storeID=1&upperPrice=15&pageSize=1
[
{
"internalName": "BATTLEFIELD3",
"title": "Battlefield 3",
"metacriticLink": "/game/battlefield-3/",
"dealID": "FhBKK4XJ0dmqH9xN1YideiIrjTWPk6dXxgGVFlJzO7s%3D",
"storeID": "1",
"gameID": "1684",
"salePrice": "3.99",
"normalPrice": "39.99",
"isOnSale": "1",
"savings": "90.022506",
"metacriticScore": "89",
"steamRatingText": "Mixed",
"steamRatingPercent": "69",
"steamRatingCount": "5351",
"steamAppID": "1238820",
"releaseDate": 1319500800,
"lastChange": 1785437943,
"dealRating": "9.7",
"thumb": "https://shared.fastly.steamstatic.com/store_item_assets/steam/apps/1238820/capsule_231x87.jpg?t=1777326004"
}
]A live GET this run against /deals?id=FhBKK4XJ0dmqH9xN1YideiIrjTWPk6dXxgGVFlJzO7s%3D (the dealID above, passed back verbatim) returned HTTP 200 with a 531 B {gameInfo, cheaperStores, cheapestPrice} object — the price-history lookup for that specific deal.
Try it
Developer reference
https://www.cheapshark.com/api/1.0- GET/deals
- GET/games
- GET/stores
Gotchas & limits
dealIDvalues come back already percent-encoded — confirmed live above withFhBKK4XJ0dmqH9xN1YideiIrjTWPk6dXxgGVFlJzO7s%3D. Pass that string straight back as?id=and it works (200, 531 B); let an HTTP client URL-encode it a second time (...%253D) and a live GET this run returned HTTP 404 whose entire body is the 2-byte array[]— an empty result, not an error object.dealIDs rotate, so re-derive a fresh one rather than reusing this one verbatim.- Every price/rating field is a JSON string, not a number — confirmed live above:
"salePrice":"3.99","storeID":"1","savings":"90.022506","metacriticScore":"89". MeanwhilereleaseDateandlastChangeon the same object are real integers (unix epoch). Code that assumes numeric fields are consistently typed within one payload will get a string where it expects a number. pageSizeis silently capped — a live GET this run withpageSize=200and a separate one withpageSize=60both returned exactly 60 items, with no error, no warning field, and no 400./dealsalso exposesx-total-page-count(3000 live this run) viaaccess-control-expose-headers, but that count is a page ceiling at the currentpageSize, not a promise that every page is full.- An unknown route is not a JSON error — a live GET this run against
/api/1.0/nosuchendpointreturned HTTP 404 withcontent-type: text/html; charset=utf-8and an 11,735 B branded HTML page. Code that doesJSON.parse()unconditionally on a non-200 will throw on this path specifically. - The same
/gamesendpoint returns different top-level shapes depending on the query — a live GET this run against/games?title=batmanreturned an array of summaries, while/games?id=612returned a single object ({info, cheapestPriceEver, deals: [...]}).steamAppIDis also inconsistent within one array response:nullon "LEGO Batman", a real string ("502820") on "Batman: Arkham VR".
Availability
Changelog
- gained a docs link