Ramadan Sale Price Tracker 2027: Noon & Amazon UAE

# ecommerce# python# webscraping# datascience
Ramadan Sale Price Tracker 2027: Noon & Amazon UAEOmar Eldeeb

Track Ramadan and Eid sale prices on noon and Amazon UAE / Saudi: approximate 2027 dates, why sales start weeks before Ramadan, a schedule and a script.

Ramadan 2027 is expected to start around Monday 8 February 2027, with Eid al-Fitr on 9 or 10 March (astronomical estimates; final dates depend on moon sighting). Retailer "Ramadan sales" start weeks earlier: in 2026 Amazon UAE's ran 27 January to 14 February and ended before Ramadan began. So start weekly price records in mid-December 2026 and check daily from mid-January through Eid.

This is the Gulf Ramadan page of the cluster. It covers the dates and their uncertainty, why the sale calendar runs ahead of the religious calendar, a phase-by-phase schedule, which sites can be tracked, and a script that measures which categories actually moved. For November's sales in the region, see White Friday and 11.11 on noon and Amazon UAE.

Dates: what's known and what isn't

2026 (actual) 2027 (approximate)
First day of Ramadan Wed 18 February 2026 in the UAE and Saudi Arabia; 19 February in some other countries about Mon 8 February 2027 (UAE Astronomy Centre; Umm al-Qura calendar). Some countries may start on 9 February.
Eid al-Fitr Fri 20 March 2026 in the UAE and Saudi Arabia Tue 9 March 2027 if Ramadan has 29 days, Wed 10 March if 30
Amazon UAE Ramadan Sale 27 January - 14 February 2026 (Prime members from 27 January) not announced
noon Ramadan sale until 2 February 2026 (reported 26 January) not announced

The Islamic calendar moves about 10-12 days earlier each Gregorian year, which is why Ramadan 2027 lands about 10 days before Ramadan 2026 did. The start is confirmed by each country's moon-sighting committee on the evening of the 29th of Sha'ban, so you won't know the exact day until the night before. A schedule that is daily for the whole window makes that uncertainty irrelevant.

The sale calendar runs ahead of Ramadan

The 2026 dates above show the pattern: the big e-commerce Ramadan sales were stocking-up events before the month, not sales during it. If retailers follow the same pattern in 2027, the Ramadan sales would start around mid-January 2027. That has two consequences for tracking:

  1. The baseline has to start in December. A baseline that starts in late January would already be inside the sale.
  2. The baseline overlaps other sales. The Dubai Shopping Festival runs 4 December 2026 to 17 January 2027, and the November 11.11 and White Friday sales come before that. In the Gulf, November to March is close to one continuous promotion season. Keep weekly records through all of it, and use the prices a few weeks after Eid as a second reference: if the "Ramadan price" is also the price in late March, it wasn't a sale price.

A phase-by-phase schedule

This prints the 2027 windows from the approximate dates. The pre-Ramadan sale window copies 2026's Amazon UAE timing (starting 22 days before Ramadan); move it when the 2027 sales are announced.

from datetime import date, timedelta

# Astronomical estimates (UAE / Umm al-Qura); confirmed only by moon sighting.
RAMADAN_START = date(2027, 2, 8)
EID_EARLY, EID_LATE = date(2027, 3, 9), date(2027, 3, 10)   # 29- or 30-day month
d = timedelta

# In 2026 Amazon.ae's Ramadan Sale ran 22 days to 4 days before Ramadan began.
phases = [
    ("baseline (weekly)",          RAMADAN_START - d(56), RAMADAN_START - d(23)),
    ("pre-Ramadan sales (daily)",  RAMADAN_START - d(22), RAMADAN_START - d(1)),
    ("Ramadan, first weeks (daily)", RAMADAN_START,       EID_EARLY - d(11)),
    ("last 10 nights (2x daily)",  EID_EARLY - d(10),     EID_LATE - d(1)),
    ("Eid holiday (daily)",        EID_EARLY,             EID_LATE + d(3)),
    ("rebound check (weekly)",     EID_LATE + d(4),       EID_LATE + d(21)),
]
for name, start, end in phases:
    print(f"{name:<30} {start:%a %d %b %Y} -> {end:%a %d %b %Y}  ({(end - start).days + 1} days)")
Enter fullscreen mode Exit fullscreen mode
baseline (weekly)              Mon 14 Dec 2026 -> Sat 16 Jan 2027  (34 days)
pre-Ramadan sales (daily)      Sun 17 Jan 2027 -> Sun 07 Feb 2027  (22 days)
Ramadan, first weeks (daily)   Mon 08 Feb 2027 -> Fri 26 Feb 2027  (19 days)
last 10 nights (2x daily)      Sat 27 Feb 2027 -> Tue 09 Mar 2027  (11 days)
Eid holiday (daily)            Tue 09 Mar 2027 -> Sat 13 Mar 2027  (5 days)
rebound check (weekly)         Sun 14 Mar 2027 -> Wed 31 Mar 2027  (18 days)
Enter fullscreen mode Exit fullscreen mode

The overlap between "last 10 nights" and "Eid" on 9 March is deliberate: that day is either the last day of Ramadan or the first day of Eid.

Cron for these windows (UTC; the UAE is UTC+4 and Saudi Arabia UTC+3, with no daylight saving): weekly 0 4 * * 0, daily 0 4 * * * (08:00 UAE), twice daily 0 4,16 * * * (08:00 and 20:00 UAE). The evening run, after iftar, catches promotions that go live in the evening.

Which sites can be tracked

The examples use the E-commerce Product Scraper Pro actor. Its README rates these Gulf sites best-effort, except noon Saudi Arabia (unsupported), and our runs on 20 October 2026 gave:

  • noon UAE (noon.com/uae-en/): delivered, in AED. noon is behind Akamai, so the actor renders a page in a browser and then uses residential connections, which carry per-MB and per-render fees.
  • noon Saudi Arabia (noon.com/saudi-en/, /saudi-ar/): unsupported. Akamai answered "Access Denied" on every route in the actor's October 2026 tests, Saudi residential connections and the browser included, so the README lists it as unsupported. Saudi noon inputs get a status row saying why, aren't fetched, and cost only the run's start fee. Use Amazon Saudi Arabia for Saudi prices.
  • Amazon UAE (amazon.ae): delivered, in AED, over residential connections.
  • Amazon Saudi Arabia (amazon.sa): delivered, in SAR, over datacenter connections (no traffic fee). The default Arabic product pages parse fully: on 20 October 2026, https://www.amazon.sa/dp/B0DGHYPFGK came back with an Arabic title, inStock: true and brandName: "Apple". English URLs (https://www.amazon.sa/-/en/dp/<ASIN>) also work if you want English titles.
  • IKEA UAE / Saudi Arabia: best-effort in the README; not tested today.

Gulf supermarket sites such as Carrefour and Lulu aren't in the matrix and haven't been tested; Amazon UAE and Saudi Arabia grocery items are ordinary Amazon product pages, so they should behave like any other ASIN (we haven't tested grocery items specifically).

Measure which categories moved

Published campaigns quote "up to 70% off", which says nothing about the typical cut. To answer "what got cheaper?", compare two exports of the same products and group the changes by category. The actor's rows carry a breadcrumbs list (for example ["Home", "Electronics & Mobiles", "Mobiles & Accessories", "Mobile Phones", "Smartphones"] on noon), which is enough to group on. Amazon UAE and Saudi Arabia rows have an empty breadcrumbs list, because Amazon shows no category trail on those pages, so the script files them under "(no category)"; if you track Amazon there, map those URLs to your own categories.

import json, sys
from collections import defaultdict
from statistics import median

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

base, now = load(sys.argv[1]), load(sys.argv[2])
moves = defaultdict(list)
for url in base.keys() & now.keys():
    crumbs = now[url].get("breadcrumbs") or ["(no category)"]
    category = crumbs[min(3, len(crumbs) - 1)]          # pick the depth that suits your catalog
    moves[category].append((now[url]["price"] - base[url]["price"]) / base[url]["price"] * 100)

print(f"{'category':<28}{'matched':>8}{'cut':>6}{'raised':>8}{'median %':>10}")
for category, pct in sorted(moves.items(), key=lambda kv: median(kv[1])):
    print(f"{category[:27]:<28}{len(pct):>8}{sum(p < 0 for p in pct):>6}"
          f"{sum(p > 0 for p in pct):>8}{median(pct):>10.2f}")
print(f"matched {sum(map(len, moves.values()))} of {len(now)} products by URL")
Enter fullscreen mode Exit fullscreen mode

Run as python category_moves.py baseline.json during.json. Here it is on two real exports of the same noon UAE search ("samsung"), taken 2 hours apart on 17 October 2026:

category                     matched   cut  raised  median %
Mobile Phones                     11     1       0      0.00
matched 11 of 30 products by URL
Enter fullscreen mode Exit fullscreen mode

Two lessons from that real run. First, the change was tiny (one phone from AED 1,168 to 1,167.55), which is what an ordinary day looks like; a Ramadan sale should show up as a clearly negative median. Second, only 11 of the 30 products were on the search page both times. Search pages reshuffle, so for a Ramadan comparison track a fixed list of product URLs (pasted into detailsUrls) instead of a search, or every comparison is mostly products coming and going.

What it costs

Pay per event, prices from the actor's README. FREE tier: $0.0048 per product, $0.008 per browser render, $0.018 per residential MB (billed at 89% of measured traffic, only for items that delivered), $0.005 per run start. GOLD: $0.0008, $0.006, $0.014 and $0.005.

Per-run examples from real runs:

  • 60 noon UAE product URLs (18 October 2026: 60 products, 2 browser renders, 8 billed MB). FREE: $0.005 + 60 × $0.0048 + 2 × $0.008 + 8 × $0.018 = $0.453. GOLD: $0.005 + 60 × $0.0008 + 2 × $0.006 + 8 × $0.014 = $0.177.
  • 60 Amazon Saudi Arabia products (datacenter, no traffic fee). FREE: 60 × $0.0048 + $0.005 = $0.293.

Multiply by the number of runs in your schedule. noon's residential traffic makes daily noon runs the expensive part, so if budget matters, check noon every two or three days during the mid-month phase and daily only in the sale and Eid windows. For a run with more than about 50 noon URLs, the README recommends 2 GB of memory (one extra $0.005 start event).

Apify's free plan gives $5 of usage every month, no credit card required; the actor has no free trial of its own. The free e-commerce price tracker query builder builds the input without code and shows a fixed example of the output shape.

Related guides

Disclosure: I built the Apify actor and this site. The schedule and the category script work with data from any source.

Sources: The National: expected Ramadan 2027 and Eid al-Fitr dates in the UAE, Gulf News: countries that began Ramadan 2026 on 18 February, Gulf News: countries celebrating Eid al-Fitr 2026 on Friday, Gulf News: UAE Ramadan 2026 sales, TradeArabia: Dubai Shopping Festival 2026-27, the actor's README (supported sites, pricing, memory) and live actor runs on 2026-10-17, 2026-10-18 and 2026-10-20 (amazon.sa Arabic page: run rm7jhN0AiKNMb6V6K, build 0.1.16).