CheapShark Game Deals Scraper avatar

CheapShark Game Deals Scraper

Pricing

from $0.65 / 1,000 item extracteds

Go to Apify Store
CheapShark Game Deals Scraper

CheapShark Game Deals Scraper

Search current CheapShark PC game deals across stores and export IDs, regular and sale prices, savings, ratings, timestamps, thumbnails, and deal links.

Pricing

from $0.65 / 1,000 item extracteds

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 days ago

Last modified

Categories

Share

Export CheapShark game deals as clean, monitoring-ready records. Search by game title or browse the current cross-store feed, filter it, and save stable game IDs, deal IDs, store names, regular prices, sale prices, savings, ratings, timestamps, thumbnails, and clickable deal links.

The Actor uses CheapShark's anonymous public JSON interface. It does not need a CheapShark account, API key, browser, or proxy. Results are written to the run's default dataset for JSON, CSV, Excel, API, and integration use.

What can you do with this Actor?

  • Search current offers for one or more PC game titles.
  • Build a current deal feed for selected CheapShark stores.
  • Filter by sale price, savings, Metacritic score, or Steam rating.
  • Schedule recurring snapshots for price-change monitoring.
  • Feed current prices into spreadsheets, dashboards, alerts, or databases.
  • Keep stable source identifiers and timestamps for downstream comparisons.

This Actor returns current source records. It does not calculate historical price changes or send alerts by itself. Use scheduled runs and compare datasets in your own workflow when history is needed.

Who is it for?

Deal publishers can assemble a filtered feed with links and images.

Game publishers and studios can monitor cross-store discount positioning.

Pricing analysts can compare sale price, regular price, and savings across CheapShark-tracked storefronts.

Developers and data teams can consume a stable normalized schema instead of maintaining API pagination, store lookup, retries, and data conversion.

Researchers can create timestamped snapshots for analysis while respecting CheapShark's terms and rate limits.

Why use this CheapShark exporter?

CheapShark exposes useful structured data, but production exports still need input validation, pagination, stable deduplication, store-name resolution, timestamp conversion, and dataset delivery. This Actor packages those steps into a schedule-ready Apify workflow.

The implementation is deliberately lightweight:

  • direct JSON requests instead of browser rendering;
  • a descriptive client User-Agent as required by CheapShark;
  • bounded retries only for transient network, rate-limit, and server failures;
  • no automatic residential-proxy fallback;
  • one store metadata request per run;
  • deduplication by stable CheapShark deal ID;
  • a hard maximum of 1,000 saved deals per run.

What data is extracted?

FieldMeaning
gameIdStable CheapShark game identifier
dealIdCheapShark deal identifier
titleDisplayed game title
internalNameCheapShark normalized internal title
storeIdCheapShark storefront identifier
storeNameResolved storefront name
salePriceCurrent sale price in USD
regularPriceRegular retail price in USD
currencyUSD for CheapShark price fields
savingsPercentPercentage saved from regular price
isOnSaleWhether the offer is marked as on sale
dealRatingCheapShark deal quality rating
metacriticScoreMetacritic score when exposed
metacriticUrlMetacritic game link when exposed
steamAppIdSteam app ID when exposed
steamRatingTextSteam review sentiment label
steamRatingPercentPositive Steam review percentage
steamRatingCountSteam review count exposed by CheapShark
releaseDateISO 8601 game release timestamp
lastChangeAtISO 8601 timestamp of the latest deal change
thumbnailUrlGame thumbnail URL
dealUrlClickable CheapShark storefront redirect
sourceApiUrlExact API page used for the record
searchQueryTitle search that produced the record, or null
scrapedAtISO 8601 collection timestamp

Source fields can be absent for individual games. The dataset schema therefore treats fields as nullable even when normal deal rows usually contain them.

Getting started

  1. Open the Actor in Apify Console.
  2. Add one or more game titles, or leave the title list empty for the deal feed.
  3. Optionally enter CheapShark store IDs and price or rating filters.
  4. Choose the maximum number of unique deals.
  5. Click Start.
  6. Open Dataset to preview, download, or integrate the records.
  7. Add an Apify schedule if you need recurring snapshots.

A small first run is recommended before raising maxItems.

Input parameters

searchQueries

Optional array of up to 20 game-title searches. Each value may contain at most 100 characters. Leave the array empty to browse the current deal feed. Records are deduplicated when several searches return the same deal.

storeIds

Optional numeric CheapShark storefront IDs. For example, 1 is Steam and 7 is GOG at the time of writing. The Actor resolves IDs through the current CheapShark stores endpoint and rejects unknown IDs instead of silently returning misleading output.

Price and discount filters

  • minPrice: minimum sale price in USD.
  • maxPrice: maximum sale price in USD.
  • minimumSavings: minimum percentage saved, from 0 to 100.
  • onlyOnSale: limit results to active sales; defaults to true.

Rating filters

  • minimumMetacriticScore: minimum score from 0 to 100.
  • minimumSteamRating: minimum positive Steam rating percentage from 0 to 100.

Ratings are source-provided. Games without the required rating do not satisfy a rating filter.

Ordering and limit

sortBy supports deal rating, title, savings, price, Metacritic, Steam reviews, release date, store, and recent changes. Use descending to reverse the selected source order. maxItems accepts 1 to 1,000 and applies across every search and page.

Example inputs

Search two game families:

{
"searchQueries": ["Civilization", "Batman"],
"onlyOnSale": true,
"maxItems": 20
}

Export current Steam and GOG offers below $30:

{
"storeIds": ["1", "7"],
"maxPrice": 30,
"onlyOnSale": true,
"maxItems": 25
}

Create a high-savings monitoring feed:

{
"minimumSavings": 70,
"minimumSteamRating": 75,
"sortBy": "recent",
"descending": true,
"onlyOnSale": true,
"maxItems": 30
}

Output example

A current local run produced a normalized record shaped like this:

{
"gameId": "152578",
"dealId": "sampleDealId%3D",
"title": "Sid Meiers Civilization VI",
"internalName": "SIDMEIERSCIVILIZATIONVI",
"storeId": "3",
"storeName": "GreenManGaming",
"salePrice": 5.4,
"regularPrice": 59.99,
"currency": "USD",
"savingsPercent": 90.9985,
"isOnSale": true,
"dealRating": 9.4,
"metacriticScore": 88,
"steamAppId": "289070",
"steamRatingText": "Very Positive",
"steamRatingPercent": 85,
"steamRatingCount": 107476,
"lastChangeAt": "2026-09-04T12:00:00.000Z",
"thumbnailUrl": "https://shared.fastly.steamstatic.com/store_item_assets/steam/apps/289070/capsule_231x87.jpg",
"dealUrl": "https://www.cheapshark.com/redirect?dealID=sampleDealId%253D",
"searchQuery": "Civilization",
"scrapedAt": "2026-09-07T20:10:00.000Z"
}

The example deal ID and timestamps are anonymized. Actual runs preserve source values.

How much does it cost to export CheapShark game deals?

This Actor uses pay-per-event pricing:

  • one small start event per run;
  • one item event for each normalized deal saved to the dataset.

The per-item event is the primary charge. Filtered-out, duplicate, incomplete, or failed records are not charged as items.

Apify tierPrice per saved deal
Free$0.001242
Bronze$0.00108
Silver$0.0008424
Gold, Platinum, Diamond$0.000648

The start fee is $0.0015 per run. At Bronze pricing, 10 saved deals cost about $0.0123 and 100 saved deals cost about $0.1095, including one start event. Apify shows the exact applicable tier before a run starts. Infrastructure usage is handled according to the pricing shown in Console.

Recurring price monitoring workflow

  1. Choose a stable title list, storefront list, or filter set.
  2. Run once and store the dataset ID and scrapedAt timestamp.
  3. Schedule the same Actor input daily or weekly.
  4. Join snapshots by dealId, or by gameId plus storeId.
  5. Compare salePrice, regularPrice, savingsPercent, and lastChangeAt.
  6. Trigger your own notification only when the change meets your threshold.

A deal ID identifies a source deal, while game and store IDs are useful for longer-lived joins when deal IDs change.

Spreadsheet and database exports

Open the run dataset and select JSON, CSV, Excel, XML, or another supported Apify export format. For Google Sheets, databases, and BI tools, connect the dataset API or use an Apify integration after each scheduled run.

Keep numeric price fields as numbers. Use currency explicitly in downstream tables even though the current source contract is USD.

API usage with cURL

Start a run and wait for its dataset:

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~cheapshark-pc-game-deals/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"searchQueries":["Civilization"],"onlyOnSale":true,"maxItems":10}'

Keep tokens in environment variables or a secret manager. Do not commit them to source code.

API usage with JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/cheapshark-pc-game-deals').call({
storeIds: ['1', '7'],
maxPrice: 30,
maxItems: 25,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

API usage with Python

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/cheapshark-pc-game-deals').call(run_input={
'minimumSavings': 70,
'minimumSteamRating': 75,
'maxItems': 30,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

Use through MCP

Add the Apify MCP server to Claude Code:

claude mcp add --transport http apify \
"https://mcp.apify.com?tools=automation-lab/cheapshark-pc-game-deals"

Equivalent configuration for Claude Desktop, Cursor, and VS Code:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/cheapshark-pc-game-deals"
}
}
}

In Claude Desktop, Cursor, or VS Code, add this JSON to the client's MCP server configuration, restart the client, and select the automation-lab/cheapshark-pc-game-deals tool.

Example prompts:

  • “Search CheapShark for current Civilization deals and return 20 rows.”
  • “Export Steam and GOG sales below $20 into a table.”
  • “Run my 70%-savings game-deal snapshot and summarize changed timestamps.”

Reliability and retry behavior

Each API request has a 30-second timeout. The Actor retries network errors, HTTP 429, and temporary HTTP 5xx responses at most three times with bounded backoff. It does not blindly retry malformed requests or stable client errors.

CheapShark requires a descriptive, non-generic User-Agent. The Actor supplies one automatically. No proxy, browser, cookie bootstrap, account, or user credential is required.

If the source exhausts its pages before maxItems, the Actor finishes with the available matching records. An expected no-match search completes with an empty dataset. An invalid input or unexpected upstream response fails the run visibly.

Limits and freshness

The Actor reflects CheapShark's current API response at collection time. It cannot guarantee that a storefront still shows the same price after a deal changes. Open dealUrl to verify before purchasing or publishing a price.

maxItems is capped at 1,000. CheapShark controls source coverage, ratings, timestamps, thumbnails, store availability, and update cadence. This Actor does not enrich missing fields from third-party services.

The Actor does not provide all-time price history. Build history by scheduling snapshots and retaining datasets.

Troubleshooting

The dataset is empty. Broaden the title, remove a store or rating filter, raise maxPrice, lower minimumSavings, or disable onlyOnSale. An uncommon title can legitimately have no current matching deals.

A store ID is rejected. CheapShark's current stores endpoint did not recognize it. Use a current numeric CheapShark store ID rather than a store name.

Fewer records were returned than requested. The filtered source feed ended, duplicate deal IDs were removed, or records lacked fields needed for a valid deal row.

A run fails after retries. Check the run log for the final status. Retry later if CheapShark reports a temporary rate limit or server problem; do not add a proxy unless direct API access has actually changed.

Responsible use and legality

CheapShark provides the anonymous API used by this Actor, but users remain responsible for their use of the data. Review CheapShark's current API guidance and terms, respect rate limits, and use reasonable schedules and result limits.

Do not misrepresent stale prices as guaranteed storefront offers. Respect storefront terms, trademarks, consumer-protection rules, and applicable laws when republishing or commercializing deal data. The Actor does not access accounts or personal data.

Choose the CheapShark Actor for cross-store current deal comparison. Choose the Steam Actor when you need Steam regional pricing and app-specific platform metadata.

FAQ

Does it require a CheapShark API key?

No. It uses the public anonymous JSON interface with the descriptive client identity requested by CheapShark.

Can I search several games in one run?

Yes. Add up to 20 title searches. The Actor paginates each search and removes duplicate deal IDs globally.

Can I monitor prices over time?

Yes, by scheduling recurring snapshots and comparing datasets. The Actor emits stable identifiers and timestamps but does not store or alert on historical differences itself.

Are prices localized?

No. CheapShark's deal API price fields are represented as USD in this Actor. There is no country or currency input.

Are null ratings an error?

No. Ratings and some external IDs are not available for every game. Use rating filters only when you want records that meet a source-provided score.

Does the Actor download thumbnail images?

No. It records the source image URL, avoiding unnecessary media transfer.

Can I request more than 1,000 records?

Not in one run. Split the workflow by title or store and keep the per-run limit bounded.

Does it follow the deal redirect?

No. It creates the CheapShark redirect URL but does not visit the destination storefront. This keeps extraction fast and avoids imposing storefront-specific behavior.