GPU Restock Monitor - Verified Alerts with Proof avatar

GPU Restock Monitor - Verified Alerts with Proof

Pricing

from $60.00 / 1,000 verified transition rows

Go to Apify Store
GPU Restock Monitor - Verified Alerts with Proof

GPU Restock Monitor - Verified Alerts with Proof

Track RTX 5080 and GPU restocks across Best Buy and Newegg (proven Oct 2026) with verified in-stock transitions and evidence URLs for PC builders. $0.10 per verified-transition-row; checks, blocks, suppressed soft-200s $0. Rows carry source URL, checked timestamp, and verified-transition notice.

Pricing

from $60.00 / 1,000 verified transition rows

Rating

0.0

(0)

Developer

steadyworks

steadyworks

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a month ago

Last modified

Categories

Security

Limited permissions

Share

Get verified GPU restock alerts with proof rows from retailer product pages. Paste one watchlist of GPU SKU URLs in, get one row per verified in-stock or price-drop transition with source URL, checked time, and verified-transition notice. GPU Restock Monitor tracks RTX 5080 and GPU restocks across retailer product pages for PC builders — checks cost $0, verified rows cost $0.10 each, capped at $5.00 per run. [Click Try for free — input opens prefilled. Start as-is, check rows, then raise your watchlist.]

What it does and what you get

Track GPU restocks without watching product pages all day. GPU restock data with verified alerts, restock monitor checks, and evidence URLs on every row.

  • One watchlist in (1–50 Newegg + Best Buy product-page URLs), verified transition rows out
  • Restock + price-drop detection against your stored baseline — price rises are never reported as restocks
  • Every row carries source URL + ISO checked timestamp + verified-transition notice
  • Quiet runs emit 0 rows and bill $0 — silence is a correct output, not a failure
  • Best Buy pages run on a guarded best-effort path with per-retailer health on every run
  • Hourly cadence only (scheduleHours: 1) — realtime polling is not offered
  • Buyer ceiling (ceilingUsd) + per-run cap (perRunCapUsd, max $5.00) bound every run

Quick start

  1. Click Try for free — input opens prefilled with the 4-URL demo watchlist ($0.20 demo with synthetic URLs, no retailer touched — or delete down to 1 URL for the $0 free check).
  2. Keep the prefilled watchlist + storedBaseline + observations for the first run (4 observations in → 2 finding rows out).
  3. Click Save & Start, then open the Dataset tab for findingRows and the Key-value store tab (OUTPUT record) for totals.
  4. Re-run the same input unchanged to see the quiet shape: 0 rows, quiet: true, $0.
  5. Swap in your own 1–50 Newegg / Best Buy product-page URLs and run again, then raise volume or set a schedule once row shape looks right.

Input

Minimal JSON (required-only, copy-paste — matches the Console prefill byte-for-byte):

{"watchlist":{"partition":"P1","partitionMode":"armed","priceDropPct":5,"scheduleHours":1,"skuUrls":["https://www.newegg.com/p/synthetic-rtx5080-01","https://www.bestbuy.com/site/synthetic-rtx5080-01","https://www.newegg.com/p/synthetic-rx9070-01","https://www.bestbuy.com/site/synthetic-rtx5080-02"],"watchlistId":"syn-watch-01"}}

Full demo JSON (all prefilled defaults — paste as-is for the 4-in → 2-out demo):

{"watchlist":{"partition":"P1","partitionMode":"armed","priceDropPct":5,"scheduleHours":1,"skuUrls":["https://www.newegg.com/p/synthetic-rtx5080-01","https://www.bestbuy.com/site/synthetic-rtx5080-01","https://www.newegg.com/p/synthetic-rx9070-01","https://www.bestbuy.com/site/synthetic-rtx5080-02"],"watchlistId":"syn-watch-01"},"storedBaseline":{"watchlistId":"syn-watch-01","variants":[{"availability":"out-of-stock","checkedAt":"2026-09-28T11:15:00Z","lastPrice":999,"retailer":"newegg","sku":"SYN-RTX5080-16G-NE","variantId":"syn-rtx5080-ne-01"},{"availability":"in-stock","checkedAt":"2026-09-28T11:15:00Z","lastPrice":1099,"retailer":"bestbuy","sku":"SYN-RTX5080-16G-BB","variantId":"syn-rtx5080-bb-01"},{"availability":"in-stock","checkedAt":"2026-09-28T11:15:00Z","lastPrice":599,"retailer":"newegg","sku":"SYN-RX9070-16G-NE","variantId":"syn-rx9070-ne-01"}]},"observations":[{"adapterHealth":"ok","availability":"in-stock","checkedAt":"2026-09-28T12:00:00Z","price":999,"sourceUrl":"https://www.newegg.com/p/synthetic-rtx5080-01","variantId":"syn-rtx5080-ne-01"},{"adapterHealth":"degraded","availability":"in-stock","checkedAt":"2026-09-28T12:00:00Z","price":999,"sourceUrl":"https://www.bestbuy.com/site/synthetic-rtx5080-01","variantId":"syn-rtx5080-bb-01"},{"adapterHealth":"ok","availability":"in-stock","checkedAt":"2026-09-28T12:00:00Z","price":599,"sourceUrl":"https://www.newegg.com/p/synthetic-rx9070-01","variantId":"syn-rx9070-ne-01"},{"adapterHealth":"degraded","availability":"in-stock","checkedAt":"2026-09-28T12:00:00Z","price":899,"sourceUrl":"https://www.bestbuy.com/site/synthetic-rtx5080-02","variantId":"syn-rtx5080-bb-02"}],"nowIso":"2026-09-28T12:00:00Z"}
fieldtyperequireddefaultunitslimits
watchlist.watchlistIdstring (slug)yes—idlowercase a-z0-9-, 1–64 chars; same id reuses state, new id forks state
watchlist.skuUrlsarray of string (URL)yes—items1–50 https Newegg/Best Buy product-page URLs per run; 51st URL is rejected pre-run at $0; each URL max 500 chars
watchlist.partitionenum P1/P2/P3yes——P1 is day-1; P2/P3 stay quiet until their signal fires
watchlist.partitionModeenum armed/quietyes——armed checks this run; quiet emits nothing
watchlist.priceDropPctnumberyes—percent0–100; drop vs stored baseline that arms a price verdict
watchlist.scheduleHoursnumberyes—hoursconst 1; hourly only
watchlist.ceilingUsdnumber or nullnoomitted = noneUSDminimum 0; optional buyer price ceiling for drop alerts
storedBaselineobjectno——pass every run; watchlistId must match or every observation is ignored; unknown variantIds ignored, never billed
observationsarray of objectno——evidence vectors: price, availability, sourceUrl, checkedAt per variantId
partitionSignalobjectnoomitted—arming signal for P2/P3 only; omit when there is none
perRunCapUsdnumberno5USD0–5 max; worst case 50 URLs × $0.10 = $5.00; a capped run stops with counts published
capModeenum capped/complete-inputnocapped—capped = max $5.00 for up to 50 rows; complete-input = processes the entire input, worst case $Y (your URL count × $0.10) quoted before any charge, never above the absolute $5.00 ceiling; $Y over $5.00 fails closed to capped; schedules/tasks always run capped
nowIsostringno2026-09-28T12:00:00ZISO-8601 dateevidence clock; override for live timestamps

Job recipes (one line each):

  • single-GPU smoke check: 1 Newegg URL + 1 baseline variant + 1 observation → 1 restock row
  • buyer restock watch: 4-URL retailer-pair watchlist (above) → 1 restock + 1 price-drop
  • quiet re-run proof: resend settled state → 0 rows, quiet: true, $0
  • price-drop only: set priceDropPct: 10 on an in-stock baseline → drops ≥10% alert only
  • capped sweep: 50 URLs + perRunCapUsd: 5 → at most 50 rows / $5.00 per run

Output

Dataset default (findingRows): one row per verified transition. Key-value record OUTPUT (runReport): billedRows, billedAmountUsd, rowIds, quiet flag, per-retailer health, typed misses. Runs that verify with no new transitions emit 0 rows with quiet: true — a correct-empty SUCCEEDED run.

fieldtypenotes
rowIdstring slugstable <variantId>-<transition> id
watchlistIdstring slugback-reference to input watchlist
sku / variantIdstringnormalized SKU + baseline identity
retailerenum newegg/bestbuynewegg full-fidelity; bestbuy guarded best-effort
partitionenum P1/P2/P3scope key part 2
transitionenum restock/price-drop/price-riseprice-rise is reserved and never emitted by the detector
sourceUrlstring (URL)evidence URL of the transition
checkedAtstringISO-8601 verification time
noticestring ≤280 charsrequired notice with verified-transition literal
oldPrice / newPricenumber or nullbaseline vs post-transition price; null on pure availability moves
adapterHealthenum ok/degradedper-row adapter health
billable / billableEvent / unitPriceUsdboolean / const / consttrue / verified-transition-row / 0.1 on every emitted row

Real example rows (shortened for viewing — full rows carry all 16 fields above):

{"rowId":"syn-rtx5080-ne-01-restock","watchlistId":"syn-watch-01","sku":"SYN-RTX5080-16G-NE","retailer":"newegg","partition":"P1","variantId":"syn-rtx5080-ne-01","transition":"restock","sourceUrl":"https://www.newegg.com/p/synthetic-rtx5080-01","checkedAt":"2026-09-28T12:00:00Z","notice":"verified transition: restock; evidence URL https://www.newegg.com/p/synthetic-rtx5080-01; checked at 2026-09-28T12:00:00Z; partition P1","adapterHealth":"ok","billable":true,"billableEvent":"verified-transition-row","unitPriceUsd":0.1,"oldPrice":999,"newPrice":999}
{"rowId":"syn-rtx5080-bb-01-price-drop","watchlistId":"syn-watch-01","sku":"SYN-RTX5080-16G-BB","retailer":"bestbuy","partition":"P1","variantId":"syn-rtx5080-bb-01","transition":"price-drop","sourceUrl":"https://www.bestbuy.com/site/synthetic-rtx5080-01","checkedAt":"2026-09-28T12:00:00Z","notice":"verified transition: price-drop; evidence URL https://www.bestbuy.com/site/synthetic-rtx5080-01; checked at 2026-09-28T12:00:00Z; partition P1","adapterHealth":"degraded","billable":true,"billableEvent":"verified-transition-row","unitPriceUsd":0.1,"oldPrice":1099,"newPrice":999}

Rows above shortened for viewing. Input URLs match output sourceUrl values. Login-walled pages return requiresAuth with no row — never a guessed value. Oversize, unreachable, or unknown-variant observations are skipped at $0 with typed misses in OUTPUT.

How much will it cost?

from $100.00 / 1,000 verified-transition rows. Billable event: verified-transition-row — fires once per row that passes verification and is published. Checks, blocks, suppressed soft-200 pages, seed runs, and quiet re-runs are never billed. Empty runs bill $0 plus the platform run-start line below.

plan$/1k verified rows
Free / Starter / Scale / Business$100.00 (that is $0.10 per row on every tier)

Worked math (realistic transition rates, + $0.00005 platform run-start per run):

  • Demo run: 4 URLs → 2 verified rows = 2 × $0.10 = $0.20 + start.
  • Quiet month: 10 SKUs × hourly checks × 30 days, 0 transitions → $0.00 + starts (720 starts ≈ $0.04).
  • Active builder month: 8 verified transitions → 8 × $0.10 = $0.80 + starts.
  • Spike month: 15 verified transitions → 15 × $0.10 = $1.50 + starts.
  • Capped worst case: full 50-URL run → at most 50 × $0.10 = $5.00; the run stops with counts published.
  • Max $5.00/run for up to 50 rows — lands SUCCEEDED at the cap; complete-input keeps the same $5.00 ceiling with an explicit quote (worst case $Y computed from your input, never above $5.00). A complete-input run quotes its $Y in the first log line + OUTPUT before any charge; $Y over $5.00 fails closed to capped; schedules and tasks always run capped.

Cap and quiet-cost notes: perRunCapUsd (max $5.00) is the spend ceiling — omitted caps default to $5.00 and the ceiling never rises above $5.00. A buyer max-charge pin only lowers how many rows publish before the same counts-published stop. Machine line: one $0.00005 platform run-start per run; no proxy or AI add-on charges from this Actor; compute units apply per platform pricing. See the Pricing tab — the Console price is authoritative.

event:verified-transition-row | $/1k per tier Free/Starter/Scale/Business 100.00/100.00/100.00/100.00 | includes_usage:false | billed_on_empty:false | caps:[perRunCapUsd,maxItems:50] | quiet:[actor-start]

Trial and free tier

Click Try for free — input opens prefilled. Start as-is, check rows, then raise cap.

  • $5 platform credit ≈ 50 verified rows at $0.10 each (or hundreds of $0 quiet checks).
  • Free check: 1 SKU URL one-shot per watchlistId at $0 — run once with a single SKU to see a verified transition with proof; 0 charge calls.
  • Second use of the same watchlistId converts to the paid full watch with an upgrade notice (Free check used — full watch $0.10 per verified-transition-row; checks $0; per-run cap $5.00), $0 billed on the conversion run, nothing emitted, state unchanged.
  • No card required for the trial. Paid plans unlock higher caps and volume.

Compatibility

Works with any retailer product page exposing price + availability literals. Verified live:

  • Newegg — in-stock / out-of-stock product-page pair, Oct 2026 (one verified restock row, out-of-stock side correctly quiet)
  • Best Buy — live in-stock product page, Oct 2026 (correctly quiet clean-read on the guarded path)

Not covered: search / list result pages, login-walled pages, JavaScript-rendered prices with no readable literals. These return nothing (quiet) or requiresAuth — never a guessed price.

Not affiliated with, sponsored, or endorsed by Newegg or Best Buy. Store names belong to their owners.

What people use it for and what it does NOT do

  • PC-builder RTX 5080 restock watch across Newegg + Best Buy
  • Single-GPU smoke check before wiring a schedule or task
  • Quiet re-run proof that no-change nights cost $0
  • Price-drop watch with a buyer ceiling on stocked SKUs
  • Hourly standing watch via schedule with alert-only-on-rows handling

What this Actor does NOT do:

  • Does not buy, reserve, checkout, or hold any GPU
  • Does not read search / list pages, login-walled pages, or cart state
  • Does not poll faster than hourly; does not render bot-walled pages into guessed rows
  • Does not report price rises as restocks

Use with schedules, webhooks, API, and MCP

Schedule (alert only when rows > 0): create a daily/hourly schedule on the Actor or its published task, then add a webhook on ACTOR.RUN.SUCCEEDED that posts run + dataset IDs to your URL; your receiver fetches dataset items and alerts only when item count > 0.

Webhook (ID-only payload): ACTOR.RUN.SUCCEEDED + ACTOR.RUN.FAILED → POST JSON with run ID + dataset ID; fetch rows via Get-Dataset-Items in batches. Never push row contents through the webhook body.

MCP (Apify Actors MCP server):

{"mcpServers":{"apify":{"command":"npx","args":["-y","@apify/mcp-server"],"env":{"APIFY_TOKEN":"<your-token>"}}}}

Then call call-actor on steadyworks/gpu-restock-monitor with the Input JSON above, poll get-actor-run, then get-dataset-items. call-actor waits ≤45s — poll the run or use webhooks for longer watches, never block.

API one-liners (replace <TOKEN>, <RUN-ID>, <DATASET-ID>):

$curl -H "Authorization: Bearer <TOKEN>" -H "Content-Type: application/json" -d '{"watchlist":{"watchlistId":"syn-watch-01","skuUrls":["https://www.newegg.com/p/synthetic-rtx5080-01"],"partition":"P1","partitionMode":"armed","priceDropPct":5,"scheduleHours":1}}' "https://api.apify.com/v2/acts/steadyworks~gpu-restock-monitor/runs?token=<TOKEN>"
await client.actor("steadyworks/gpu-restock-monitor").call({ watchlist: { watchlistId: "syn-watch-01", skuUrls: ["https://www.newegg.com/p/synthetic-rtx5080-01"], partition: "P1", partitionMode: "armed", priceDropPct: 5, scheduleHours: 1 } });
client.actor("steadyworks/gpu-restock-monitor").call(run_input={"watchlist": {"watchlistId": "syn-watch-01", "skuUrls": ["https://www.newegg.com/p/synthetic-rtx5080-01"], "partition": "P1", "partitionMode": "armed", "priceDropPct": 5, "scheduleHours": 1}})

Troubleshooting

symptomcausefix
0 rows on first runsettled state — baseline already matches observationsexpected when nothing changed; check OUTPUT.quiet: true and misses for the per-variant reason
0 rows on a live watchout-of-stock pages or quiet partitionscheck sourceUrl pages show an in-stock literal; set partitionMode: armed and send a partition signal for P2/P3
requiresAuth in misseslogin-walled pageuse a public product URL; login-walled pages are never guessed
51st URL rejected, $0over the 50-URL per-run boundarysplit across runs or schedules; each run takes 1–50 URLs
run stops with counts onlyper-run cap, lifted-ceiling trip, or buyer max-charge reachedcapped runs: raise perRunCapUsd (max $5.00) and re-run to collect rows; complete-input runs already cover the whole input up to $5.00 — re-check the lifted-cap-trip / pin line in OUTPUT; counts stay in OUTPUT
unknown variantIds ignoredobservation id has no baseline matchadd the variant to storedBaseline.variants with matching watchlistId
degraded Best Buy healthguarded path under load or blocksretry next hour; repeated blocks pause that adapter per its kill-switch, Newegg rows still publish

FAQ and legality

Does this change my data? No — read-only checks of public product pages; it never edits carts, accounts, or listings.

How much for one watch? Demo watch (4 URLs → 2 rows) ≈ $0.20. A quiet 10-SKU month ≈ $0 + starts. An 8-transition month ≈ $0.80. Worst case is $5.00 per run (50 rows).

Why did a quiet run bill $0? Only published verified-transition rows bill. Checks, blocks, suppressed pages, and re-runs of settled state emit nothing and bill nothing.

Do I need logins or API keys? No. Public https product pages only; sign-in-walled pages return requiresAuth, never a row.

Personal data / GDPR? Processes public price + availability literals only. No buyer credentials are collected; pass only product-page URLs you are allowed to check.

Terms? Check retailer Terms and robots rules before scheduling watches; hourly cadence is the maximum. Store names belong to their owners; no affiliation, endorsement, or sponsorship implied.

Other Actors you might need

needactor
single-product price historysearch Store for a price-tracker with history charts
multi-site search-page breadthsearch Store for a search-results scraper (this Actor reads product pages, not search pages)
full-catalog crawlsearch Store for a site crawler, then feed URLs here as a watchlist

Changelog and support

./CHANGELOG.md · Questions or breakage: Actor Discussion / Issues tab (replies stay visible); charge disputes to platform support. No SLA on this validation build.