# Boxing Day Sales Tracker UK 2026: Prices in GBP

> Track UK Boxing Day and January sales in GBP: which retailers can be scraped, when to start, and how to compare an item's Black Friday and Boxing Day price.

- URL: https://datatooly.xyz/guides/boxing-day-sales-price-tracker-uk/
- Author: Omar Eldeeb (https://datatooly.xyz/about/)
- Published: 2026-10-20
- Updated: 2026-10-20
- Free tool: [E-commerce price tracker — scrape product prices, stock and variants](https://datatooly.xyz/ecommerce-price-tracker/)
- Tags: ecommerce, python, webscraping, datascience

Boxing Day 2026 is Saturday 26 December (the bank holiday moves to Monday 28 December). To track UK Boxing Day and January sales, record the items you want from Black Friday week onward, check them daily from about 20 December into mid-January through a UK connection, and compare each item's Boxing Day price with its own Black Friday price, in GBP.

This guide covers the UK-specific parts: which retailers a scraper can reach, why the currency needs a UK exit, a real Black-Friday-versus-Boxing-Day comparison script, and the schedule. The [retail sales calendar](https://datatooly.xyz/guides/holiday-sales-calendar-price-tracking/) has the rest of the season.

## The UK timeline

| Date | Event | Tracking step |
|---|---|---|
| ~20 Nov - Mon 30 Nov 2026 | Black Friday week to Cyber Monday (Black Friday is 27 November). Amazon UK's 2025 Black Friday Week ran 20 November to 1 December. | Take full snapshots. These are the prices Boxing Day has to beat. |
| 1 - 19 Dec | Christmas shopping | Weekly snapshot is enough for sale items you don't need before Christmas. |
| ~20 Dec | Start of daily checks | A daily schedule from here catches a sale whenever a retailer launches it, including online launches before the 26th. |
| Fri 25 Dec | Christmas Day | Keep the schedule running. |
| Sat 26 Dec | Boxing Day | Compare with the Black Friday snapshot. |
| Mon 28 Dec | Boxing Day substitute bank holiday | |
| January | January sales, with further reductions at some retailers | Daily until you buy or the price returns. |

## Which UK retailers can be tracked

The scraper used below, [E-commerce Product Scraper Pro](https://apify.com/constructive_calm/ecommerce-product-scraper-pro?fpr=v77kxu), lists every site it supports in its README. For the UK as of October 2026:

| Status | UK retailers |
|---|---|
| Supported | John Lewis, Marks & Spencer, Waitrose, Aldi UK, plus any Shopify or WooCommerce shop |
| Best-effort | `amazon.co.uk` (95% of deliverable products in the latest cloud tests), Sainsbury's, Tesco, Ocado, Morrisons, Lidl, Iceland, IKEA UK, Zalando UK, Wayfair UK, idealo UK |
| Not supported | Argos, AO, Boots, Next, Smyths Toys, Superdrug, Co-op, Asda, Costco UK, eBay UK |

Several big Boxing Day names are in the last row. They block automated access on every route the actor tested, so you'll need another way to watch them (their own wish lists or price alerts, or checking by hand). Some best-effort sites read only the first page of a listing or search (Sainsbury's, Ocado, Morrisons, Lidl, IKEA); for those, track product URLs.

## Use a UK connection and check the currency

UK retailers can localise prices by visitor location. A scraper running in a US data centre may get a page priced in dollars, or no price at all because the item "cannot be dispatched" to that location. Two things prevent this:

- **Pin the exit to the UK.** In this actor, `proxyCountry: "GB"` pins the residential connection to the UK. Amazon storefronts are pinned to their own currency automatically.
- **Check `currency` on every row.** It's an ISO code (`GBP`), separate from the symbol the page printed (`currencyRaw`, for example `£`). Filter out any row that isn't `GBP` before comparing.

## Take a snapshot

This takes one snapshot of two UK searches and one Amazon UK product, in GBP, and saves it to a JSON file. Install the client with `pip install apify-client`.

```python
import json, os
from decimal import Decimal
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])
run_input = {
    "listingUrls": [
        {"url": "https://www.johnlewis.com/search?search-term=coffee+machine"},
        {"url": "https://www.marksandspencer.com/search?searchTerm=jumper"},
    ],
    "detailsUrls": [{"url": "https://www.amazon.co.uk/dp/B088NRLMPV"}],
    "proxyCountry": "GB",
    "maxItemsPerStartUrl": 2,
    "maxProductResults": 5,
}
run = client.actor("constructive_calm/ecommerce-product-scraper-pro").call(
    run_input=run_input, max_total_charge_usd=Decimal("0.25"), logger=None
)
rows = client.dataset(run["defaultDatasetId"]).list_items(
    fields="site,url,name,price,currency,originalPrice,inStock,scrapedAt"
).items
with open("snapshot_today.json", "w", encoding="utf-8") as f:
    json.dump(rows, f, ensure_ascii=False, indent=1)
for r in rows:
    print(r["site"], r["price"], r["currency"], r.get("originalPrice"), r["name"][:45])
```

Real output, 2026-10-20:

```text
marksandspencer 18 GBP None Air-Yarn Crew Neck Jumper
marksandspencer 18 GBP None Air-Yarn Striped Crew Neck Jumper
amazon-gb 7.49 GBP 9.49 Anker USB C to USB C Charger Cable, 60W (3A) 
johnlewis 629 GBP None Sage Barista Express Bean to Cup Coffee Machi
johnlewis 599.95 GBP None Sage Barista Express Impress Bean to Cup Coff
```

`originalPrice` is the store's own was-price, filled only when the page shows one higher than the current price. Treat it as the retailer's claim; your Black Friday snapshot is the evidence.

For the real season, save one file per run (for example `snapshot_2026-11-27.json` and `snapshot_2026-12-26.json`) and use product URLs for the items you care about, because search results reorder.

## Compare Black Friday with Boxing Day

This joins two snapshots on the product URL and prints the change per item. It works on any two JSON exports with `url`, `site`, `name` and `price` fields.

```python
import json, sys

def load(path):
    return {r["url"]: r for r in json.load(open(path, encoding="utf-8")) if r.get("price") is not None}

before, after = load(sys.argv[1]), load(sys.argv[2])
print(f"{'site':<16}{'before':>9}{'after':>9}{'change':>9}  name")
for url in sorted(before.keys() & after.keys()):
    b, a = before[url], after[url]
    pct = (a["price"] - b["price"]) / b["price"] * 100
    flag = "  <- cheaper now" if pct <= -5 else ("  <- dearer now" if pct >= 5 else "")
    print(f"{a['site']:<16}{b['price']:>9.2f}{a['price']:>9.2f}{pct:>8.1f}%  {a['name'][:38]}{flag}")
print(f"{len(before.keys() & after.keys())} products in both snapshots; "
      f"{len(after.keys() - before.keys())} new, {len(before.keys() - after.keys())} missing")
```

Run as `python compare_snapshots.py snapshot_black_friday.json snapshot_boxing_day.json`. Boxing Day 2026 hasn't happened yet, so here it is on two real snapshots taken two days apart (18 and 20 October 2026). The earlier one was a larger run, which is why 35 of its products are "missing" from the small one:

```text
site               before    after   change  name
amazon-gb            9.49     7.49   -21.1%  Anker USB C to USB C Charger Cable, 60  <- cheaper now
johnlewis          629.00   629.00     0.0%  Sage Barista Express Bean to Cup Coffe
johnlewis          599.95   599.95     0.0%  Sage Barista Express Impress Bean to C
marksandspencer     18.00    18.00     0.0%  Air-Yarn Striped Crew Neck Jumper
4 products in both snapshots; 1 new, 35 missing
```

Even over two quiet October days, the Amazon UK cable moved by 21%, which is why one price on one day tells you little. Read the result like this:

- **Cheaper on Boxing Day** by more than a few percent: the sale beat Black Friday for that item.
- **Same or dearer**: Black Friday was the better moment. Don't buy just because a sale banner is up.
- **Missing** in the later snapshot: sold out or delisted. If it reappears in January, a monitor run will flag it `back-in-stock`.

## A Boxing Day schedule

| Window | Cadence | Cron (UTC) | Input |
|---|---|---|---|
| ~20 Nov - 30 Nov | daily, full snapshot | `0 7 * * *` | product URLs, `proxyCountry: "GB"` |
| 1 Dec - 19 Dec | weekly | `0 7 * * 1` | same |
| 20 Dec - mid-Jan | daily, `monitorMode: true`, `onlyChanges: true` | `0 7 * * *` | same URLs, so the comparison chain isn't reset |

07:00 UTC is 07:00 in the UK in winter. Keep the same URL list for the whole season: the actor's monitor state is keyed by the exact set of input URLs, and changing one starts a fresh comparison. To be told when something drops, route `price-down` rows to email or Slack ([price drop alerts](https://datatooly.xyz/guides/price-drop-alerts-email-slack/)).

## What it costs

Pay per event, prices from the actor's README. FREE tier: $0.0048 per product row, $0.0012 per unchanged product with `onlyChanges`, $0.0004 per listing page, $0.005 per run start, and $0.018 per MB of residential traffic on sites that need it. John Lewis, Marks & Spencer, Waitrose and Aldi go through datacenter connections, so they have no traffic fee. `amazon.co.uk` is mostly residential, measured at 0.3-0.5 MB per product and billed at 89% of the measured traffic.

- 100 John Lewis products, one full snapshot (FREE): 100 × $0.0048 + $0.005 = **$0.485**
- 100 `amazon.co.uk` products, one full snapshot (FREE): 100 × $0.0048 = $0.48, plus 27-45 billed MB × $0.018 = $0.49-$0.81, plus $0.005 = **about $0.97-$1.30**. On GOLD the README puts the same run at $0.46-$0.71.

Apify's free plan gives $5 of usage every month, no credit card required. The actor has no free trial of its own.

To set up the input without writing code, use the free [e-commerce price tracker query builder](https://datatooly.xyz/ecommerce-price-tracker/). It shows a fixed example of the output shape, not live prices.

## Related guides

- [Retail sales calendar 2026-2027](https://datatooly.xyz/guides/holiday-sales-calendar-price-tracking/)
- [Black Friday price tracker](https://datatooly.xyz/guides/black-friday-price-tracker/), where your comparison snapshot comes from
- [Christmas price tracker](https://datatooly.xyz/guides/christmas-price-tracker/)
- [UK grocery price tracker](https://datatooly.xyz/guides/grocery-price-tracker-scraper/)

*Disclosure: I built the Apify actor and this site. The comparison script works on exports from any tool.*

Sources: [GOV.UK bank holidays](https://www.gov.uk/bank-holidays) (Boxing Day substitute day, 28 December 2026), [Amazon UK: Black Friday Week 2025](https://press.aboutamazon.com/uk/news/retail/2025/11/its-the-season-for-savings-amazons-black-friday-week-offers-deep-discounts-on-customer-favourite-brands-from-20-november-until-1-december), the actor's README (supported-sites matrix, residential traffic table, pricing), and live actor runs on 2026-10-18 and 2026-10-20.

## Quick answers

### When is Boxing Day 2026?

Saturday 26 December 2026. Because it falls on a weekend, the bank holiday is moved to Monday 28 December 2026 in England, Wales, Scotland and Northern Ireland.

### Are Boxing Day sales better than Black Friday in the UK?

It depends on the item. Some lines are cheaper in the post-Christmas clearance and others were cheapest in Black Friday week. The only reliable way to tell is to record the same product's price in both periods and compare them, which is what this guide sets up.

### When do the January sales end in the UK?

Each retailer sets its own end date, and some run well into January, sometimes with further reductions. Keep a daily check going until the item you want is either bought or back at full price.

### Why does a UK product page show prices in dollars or euros?

The page was fetched from a connection outside the UK and the site localised the price. Fetch through a UK connection, for example with proxyCountry set to GB in the scraper, and check the currency code on every row.

## Related guides

- [Retail Sales Calendar 2026-2027: When to Track Prices](https://datatooly.xyz/guides/holiday-sales-calendar-price-tracking/)
- [Amazon Price History Without Keepa: Build Your Own](https://datatooly.xyz/guides/amazon-price-history-without-keepa/)
- [Amazon Price Scraper: Prices by ASIN on Any Marketplace](https://datatooly.xyz/guides/amazon-price-scraper-asin/)
- [Back in Stock Alert Scraper: Products, Sizes, Colours](https://datatooly.xyz/guides/back-in-stock-alert-scraper/)
- [Back to School Price Tracker: Tax Holidays & Laptops](https://datatooly.xyz/guides/back-to-school-price-tracker/)
- [Compare Black Friday Prices Across Stores (Google Shopping)](https://datatooly.xyz/guides/black-friday-google-shopping-price-comparison/)
- [Black Friday Price Tracker: Watch 2026 Prices Daily](https://datatooly.xyz/guides/black-friday-price-tracker/)
- [Christmas Price Tracker: When to Buy Gifts Cheapest](https://datatooly.xyz/guides/christmas-price-tracker/)
- [Competitor Price Monitoring: Scraper Setup and Cost](https://datatooly.xyz/guides/competitor-price-monitoring-scraper/)
- [Cyber Monday Price Tracker: Hourly Checks for Nov 30](https://datatooly.xyz/guides/cyber-monday-deal-tracker/)
- [Grocery Price Tracker: Build a Basket Index in Python](https://datatooly.xyz/guides/grocery-price-tracker-scraper/)
- [MAP Monitoring: Find Minimum Advertised Price Violations](https://datatooly.xyz/guides/map-price-monitoring/)
- [Price Drop Alerts to Slack or Email with a Scraper](https://datatooly.xyz/guides/price-drop-alerts-email-slack/)
- [Prime Day Price Tracker: ASINs, Big Deal Days, 2027](https://datatooly.xyz/guides/prime-day-price-tracker/)
- [Ramadan Sale Price Tracker 2027: Noon & Amazon UAE](https://datatooly.xyz/guides/ramadan-eid-sales-price-tracking/)
- [Scrape Product Prices with Python from JSON-LD](https://datatooly.xyz/guides/scrape-product-prices-json-ld-python/)
- [Scrape Product Reviews from Walmart, Target and Amazon](https://datatooly.xyz/guides/scrape-product-reviews-walmart-target-amazon/)
- [Scrape Product Variants: Sizes, Colors and Price per SKU](https://datatooly.xyz/guides/scrape-product-variants-sizes-colors/)
- [Fake Black Friday Deals: Check the Real Discount](https://datatooly.xyz/guides/spot-fake-black-friday-discounts/)
- [Apify E-commerce Scraping Tool Alternative: Same Input](https://datatooly.xyz/guides/switch-from-apify-ecommerce-scraping-tool/)
- [When Do Black Friday Prices Drop? The 2026 Timeline](https://datatooly.xyz/guides/thanksgiving-black-friday-price-drop-timeline/)
- [Walmart and Target Price Scraper: Search and Product Pages](https://datatooly.xyz/guides/walmart-target-price-scraper/)
- [White Friday & 11.11 Tracker: Noon and Amazon UAE Prices](https://datatooly.xyz/guides/white-friday-11-11-noon-amazon-uae-prices/)
- [Shopify products.json Pagination: 250 Limit and the 25,000 Cap](https://datatooly.xyz/guides/shopify-products-json-pagination/)
- [AI Share of Voice: Measure It in ChatGPT and Perplexity](https://datatooly.xyz/guides/ai-share-of-voice-chatgpt-perplexity/)
