Cyber Monday Price Tracker: Schedule, Costs & Scripts10 min read2,062 words

Cyber Monday Price Tracker: Schedule, Costs & Scripts

Plan Cyber Monday price checks, estimate hourly tracking costs, compare the same products with Black Friday and spot when deals change.

Cyber Monday price trackerCyber Monday price monitoringBlack Friday price comparisonhourly price trackingretail price history
Cyber Monday Price Tracker: Schedule, Costs & Scripts

How to Track Cyber Monday Prices Hour by Hour

Cyber Monday deals can show up early, change overnight, or vanish once stock runs out. If you only check once in the morning, you can easily miss the price that actually mattered. But checking every hour for every product also means more runs - and a higher bill.

For Cyber Monday 2026 (November 30), a practical tracking window starts Sunday evening, November 29, and runs into Tuesday morning, December 1. That covers early online promotions, the main shopping day, and the first round of post-sale price changes. The best schedule depends on how many products you're watching, how fast your tracker finishes each run, and what each run costs.

This guide lays out a schedule, estimates the cost of hourly checks versus checks every three hours, and shows how to compare Black Friday and Cyber Monday prices for the same products. It also includes scripts for comparing two snapshots and reviewing price changes by hour. Retailers haven't confirmed every part of their 2026 promotion schedule yet, so use last year as planning context - not a promise.

What should your Cyber Monday tracking schedule cover?

Cyber Monday is an online shopping event, but the useful price window often starts before the calendar day itself. In 2025, Walmart offered Walmart+ members early access from Sunday evening, and Target started an online Cyber Monday event Sunday as well. Amazon's Black Friday Week also spilled into Cyber Monday. That's why starting your tracker Monday morning can mean missing real changes.

It helps to keep the big picture in mind, but it won't tell you exactly what any one product will do. Adobe Analytics reported $14.25 billion in US online spending on Cyber Monday 2025, up 7.1% from 2024. Adobe also reported that spending peaked between 8 p.m. and 10 p.m. Those numbers are historical, not a forecast for 2026. For tracking, the takeaway is straightforward: Sunday night and Monday evening are often the times when both access and demand move.

A schedule that covers the important window

If you need frequent checks, schedule runs from 6 p.m. Eastern on Sunday, November 29, through 5 a.m. Eastern on Tuesday, December 1. That's 36 hourly runs. If you want a cheaper baseline, the same window at three-hour intervals gives you 12 runs.

The cron expressions below assume the scheduler uses America/New_York. They cover the same window, with the end time exclusive at 6 a.m. Tuesday.

Cadence Cron entries Runs
Hourly 0 18-23 29 11 *, 0 * 30 11 *, 0 0-5 1 12 * 36
Every three hours 0 18-23/3 29 11 *, 0 */3 30 11 *, 0 0-5/3 1 12 * 12

Use these as additional schedules on the task that already does your regular checks. Just make sure the extra schedule doesn't overlap the daily run. If two jobs start close together, you'll end up with confusing results.

Choose cadence based on the decision you need to make

Hourly checks help when a short-lived price or stock change could change your decision. They're less useful if your only goal is the lowest observed price by the end of the event - then every three hours may be enough resolution at one-third the run count.

Often, a mix makes more sense than going all-in on one cadence. Check hourly on Sunday evening and during Monday's busier stretches, then switch to every three hours overnight. Whatever you choose, keep a daily check running for about a week afterward. Prices that jump on Tuesday or Wednesday might have been a temporary promo; prices that hold steady may be the retailer's new baseline.

One limitation to keep in mind: a tracker can only "see" what the session it uses can access. Member-only offers (like Walmart+ early access or Prime-exclusive pricing) may not show up to a signed-out shopper. If you're missing an offer, confirm whether your setup can access it before concluding that the deal never existed.

How much do hourly price checks cost?

Your cost depends on the tracker's pricing model, how many products you track, how many runs you schedule, and how many products change.

For an event-based actor, a run can include a start fee and a per-product fee. With monitoring enabled and unchanged products excluded from output, an unchanged product may cost less than a new or changed product that has to be scraped and written.

Using the example table below, a run has a $0.005 start fee. Each unchanged product costs $0.0012 on the FREE tier or $0.0002 on GOLD. Each product written as new or changed costs $0.0048 on FREE or $0.0008 on GOLD. These are estimates based on that table, not a guarantee for every scraping service or configuration.

Event FREE GOLD
Actor start, 1 GB $0.005 $0.005
Product scraped $0.0048 $0.0008
Product checked, unchanged $0.0012 $0.0002

Estimate a 150-product watchlist

For 150 products, the lowest-cost case is that nothing changes. The upper bound assumes every product is written as changed on every run.

  • FREE, unchanged: $0.005 + 150 × $0.0012 = $0.185 per run.
  • FREE, all changed: $0.005 + 150 × $0.0048 = $0.725 per run.
  • GOLD, unchanged: $0.005 + 150 × $0.0002 = $0.035 per run.
  • GOLD, all changed: $0.005 + 150 × $0.0008 = $0.125 per run.

Now multiply by the scheduled run count for the full event window:

Cadence FREE range GOLD range GOLD at 10% changed per run
Hourly, 36 runs $6.66-$26.10 $1.26-$4.50 About $1.58
Every three hours, 12 runs $2.22-$8.70 $0.42-$1.50 About $0.53

The 10% figure is just an illustration. It assumes 15 changed products at $0.0008, 135 unchanged at $0.0002, plus the $0.005 start fee, for $0.044 per run. Your real spend will vary based on product behavior and site response.

Account for runtime and variable fees

Hourly checks only work smoothly if a run finishes before the next one starts. If jobs overlap, you might compare against the same prior state or just get messy timing.

Small lists on datacenter sites can finish quickly. In one example, a three-product run took about 25 seconds. A larger list takes longer: the example README estimates roughly 30-40 Shopify products per minute at 1 GB, so 1,000 products could take around half an hour.

Some sites also add costs for residential proxies or browser rendering - often calculated per megabyte or per render. Keep those separate from the event-fee estimate above. Also set a maximum cost per run in your task options. That cap limits damage if there's a configuration mistake or an unexpected product count that makes one run more expensive than planned.

How do you compare Black Friday and Cyber Monday prices?

A change-only monitor is great for alerts, but it isn't automatically ideal for a side-by-side comparison. If unchanged products aren't written to output, the Cyber Monday run may not include a row for every item. To compare apples to apples, you need a complete snapshot from both dates.

The simplest approach is to run the same product list twice in separate tasks: once on Black Friday evening and once on Cyber Monday evening. Turn off monitor mode for these snapshot runs so every product is written. Keeping them separate from your change-monitoring task also avoids messing with its stored change history.

Before comparing, verify that both snapshots cover the same products and that currency matches. If a product shows up in only one snapshot, that's not proof of a price change - it's a coverage issue you'll want to investigate.

Compare snapshots by product URL

The script below joins product rows by URL, reports price differences, and flags currency changes. It assumes the run datasets contain recordType, url, price, currency, and scrapedAt fields. Install and configure the relevant client library and API token before running it.

import os

import sys

from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])

def prices(run_id):

"""Return url -> (price, currency, scrapedAt) for product rows."""

dataset = client.run(run_id).dataset()

return {

row["url"]: (row["price"], row["currency"], row["scrapedAt"])

for row in dataset.iterate_items()

if row.get("recordType") == "product"

and row.get("price") is not None

}

black_friday = prices(sys.argv[1])

cyber_monday = prices(sys.argv[2])

matched = black_friday.keys() & cyber_monday.keys()

for url in sorted(matched):

old_price, old_currency, old_time = black_friday[url]

new_price, new_currency, new_time = cyber_monday[url]

if old_currency != new_currency:

print(f"{url}: currency changed; not comparable")

continue

difference = new_price - old_price

cheaper = (

"Cyber Monday" if difference < 0

else "Black Friday" if difference > 0

else "same"

)

print(

f"{old_price:>8.2f} ({old_time[:10]}) "

f"{new_price:>8.2f} ({new_time[:10]}) "

f"{difference:+7.2f} {old_currency} "

f"cheaper: {cheaper:<12} {url}"

)

print(

f"{len(matched)} products in both runs; "

f"{len(black_friday.keys() - cyber_monday.keys())} only in the first, "

f"{len(cyber_monday.keys() - black_friday.keys())} only in the second"

)

Run it with the Black Friday run ID first, and the Cyber Monday run ID second. The matched and unmatched counts are a basic quality check. If you meant to compare an identical list, the "only in" counts should usually be zero. If not, investigate missing products before concluding anything.

Also, a lower listed price isn't always the better deal. Check whether shipping, membership requirements, stock status, or product variants differ between snapshots. This script compares the recorded price and currency; it doesn't calculate a delivered total or confirm that two listings represent identical bundles.

How can you review price changes hour by hour?

Two snapshots tell you which date had the lower observed price. A change-history export can show when the move happened, whether the item went out of stock, and whether it came back later. That distinction matters: a low price on an unavailable item isn't the same buying opportunity as an in-stock offer.

If your tracker exports change rows to price_history.csv, sort by timestamp and convert each timestamp to Eastern time before labeling it Sunday, Monday, or Tuesday. Many systems store scrapedAt in UTC. If you read the raw timestamp as local time, you can shift a change into the wrong hour - or even the wrong date.

Print changes in Eastern time

This example filters the Cyber Monday window and skips new or unchanged rows. It expects CSV columns like changeType, previousPrice, price, inStock, and name.

import csv

import sys

from datetime import datetime

from zoneinfo import ZoneInfo

ET = ZoneInfo("America/New_York")

start = datetime(2026, 11, 29, 18, tzinfo=ET)

end = datetime(2026, 12, 2, 6, tzinfo=ET)

with open(sys.argv[1], encoding="utf-8", newline="") as file:

rows = sorted(

csv.DictReader(file),

key=lambda row: row["scrapedAt"]

)

for row in rows:

timestamp = datetime.fromisoformat(

row["scrapedAt"].replace("Z", "+00:00")

).astimezone(ET)

if not start <= timestamp < end:

continue

if row["changeType"] in ("new", "unchanged"):

continue

print(

f"{timestamp:%a %H:%M} ET "

f"{row['changeType']:<14} "

f"{row['previousPrice'] or '':>8} -> "

f"{row['price']:<8} "

f"in stock: {row['inStock']:<6} {row['name']}"

)

Each history row may have one main changeType. In some trackers, stock changes can override price changes. A product might return to stock at the same time its price rises, yet the row may be labeled back-in-stock. If you see that, check both previousPrice and price, or look at the raw changes array if you have it. Don't assume the label captures everything that moved.

Keep monitoring after the sale

Leave the regular daily check running for about a week. If the price climbs back to an earlier level soon after Cyber Monday, that suggests the event price was temporary. If it stays lower, the promo may have reset the product's baseline for a while. Neither pattern proves what happens next season, but this follow-up gives you better context than a single sale-day snapshot.

Conclusion

A good Cyber Monday tracker isn't just a high-frequency scraper. Start on Sunday evening, pick a cadence that matches the decision you're trying to make, and estimate the full window cost before turning it on. Use complete snapshots to compare Black Friday vs. Cyber Monday, then use timestamped history to understand when prices and stock actually changed.

For many watchlists, hourly checks during the busiest periods and three-hour checks overnight is a reasonable compromise. Keep a daily check running after the event, confirm that both snapshots cover the same products, and cap per-run spend. Those guardrails help you avoid paying for resolution you don't really need.

Frequently Asked Questions

For 2026, start on Sunday evening, November 29, rather than waiting until Monday morning. Retailers have used Sunday for online events and member early access. Confirm each retailer’s announced schedule before the event, since last year’s timing is a planning reference, not a guarantee.
Hourly tracking gives you a tighter record of short-lived price and stock changes, but triples the number of runs compared with a three-hour cadence. Use it when timing affects your decision and runs finish reliably. For general low-price comparisons, every three hours may be adequate.
A change-only monitor may write only new or changed products. Unchanged products can therefore be absent from that run’s output. For a complete comparison, take full snapshots on both dates with change-only mode disabled, using the same watchlist in a separate task.
No. The estimates use the listed actor start and product-event fees. Sites that require residential proxies or browser rendering may add traffic or rendering charges. Check your platform’s current pricing and set a per-run cost limit before scheduling frequent checks.

Related articles