~/ecommerce/talabat-mart-scraper

Talabat Mart Scraper — Dubai Grocery Prices & SKUs

Extract q-commerce grocery SKUs, prices, barcodes, and live stock counts from Talabat Mart dark stores across Dubai — 153 delivery zones, EAN/UPC on every item, one normalized product schema.

grocery TypeScript UAE
proooxy/talabat-mart-scraper — spec
categoryecommerce / grocery
languageTypeScript
stackTypeScript
marketsUAE
outputclean, RAG-ready JSON

key features

Dark-store level pricing — one record per product per fulfilment store

EAN/UPC barcode on every item, the cross-retailer matching key

Live stock counts, not just in-stock/out-of-stock

153 Dubai delivery zones, selectable per run

Pure HTTP — no headless browser, no JavaScript rendering

Prices in minor units (fils) for exact arithmetic

use cases

  • Q-commerce price monitoring across Dubai dark stores
  • Cross-retailer product matching by barcode
  • Assortment and availability tracking for FMCG brands
  • Basket-level price comparison for GCC grocery
  • Market-entry research for the UAE grocery sector
  • Grounded product datasets for retail AI agents

input parameters

ParameterTypeRequiredDescription
retailerstringrequiredRetailer to crawl — Talabat Mart
citystringrequiredCity to crawl — Dubai
areaIdsarrayoptionalDelivery zones to cover (default: all 153 Dubai areas)
categoriesarrayoptionalCategory slugs to limit the crawl to
maxProductsPerStorenumberoptionalCap on products collected per dark store
proxyobjectoptionalResidential UAE proxy — required for accurate stock counts

Output Example

 1{
 2  "source": {
 3    "id": "2fc42edf-ac24-4e91-b871-1e7ee2117284",
 4    "canonicalUrl": "https://www.talabat.com/uae/grocery/600398/al-badaa/product/modern-bakery-plain-roll-sandwich-bread-4-pieces/s/901515?aid=1172",
 5    "retailer": "talabat_mart",
 6    "currency": "AED"
 7  },
 8  "title": "Modern Bakery Plain Roll Sandwich Bread, 4 Pieces",
 9  "brand": "",
10  "categories": ["bakery", "buns-rolls"],
11  "details": {},
12  "price": {
13    "current": 345,
14    "currentFormatted": "AED 3.45",
15    "previous": 345,
16    "stockStatus": "InStock",
17    "stockCount": 2
18  },
19  "variants": [
20    {
21      "id": "901515",
22      "sku": "901515",
23      "title": "Modern Bakery Plain Roll Sandwich Bread, 4 Pieces",
24      "options": [],
25      "price": { "current": 345, "currentFormatted": "AED 3.45", "previous": 345, "stockStatus": "InStock", "stockCount": 2 }
26    }
27  ],
28  "medias": [
29    { "type": "Image", "url": "https://talabat.dhmedia.io/image/product-information-management/KWV42456.png", "alt": "Modern Bakery Plain Roll Sandwich Bread, 4 Pieces", "index": 0 }
30  ],
31  "extraInfo": {
32    "scrapedAt": "2026-07-30T14:49:33.077Z",
33    "city": "dubai",
34    "darkStore": { "id": 600398, "name": "talabat mart", "zone": "al-badaa", "areaId": "1172" },
35    "barcode": "01110000140435",
36    "size": "4 Pieces",
37    "superSaver": false
38  }
39}

Tips

  • Start with one zone. A single areaIds entry plus a modest maxProductsPerStore returns a representative sample in under a minute — useful for checking the schema before a full-city run.
  • Dedupe on the offer pair. Dark stores overlap across zones, so join on (source.id, extraInfo.darkStore.id) rather than on source.id alone.
  • Use the barcode, not the title. Product titles vary by retailer and language; extraInfo.barcode is the only reliable cross-retailer key.
  • Residential AE proxy for stock. Prices and catalog come back from any IP, but stockAmount is only trustworthy from within the UAE.

faq

Why does this need a UAE proxy?
The catalog and prices render from any country, but accurate per-item stock counts are geo-gated to the UAE. A residential AE proxy is required rather than optional if you rely on stock data.
How do I match products across retailers?
Every item carries its EAN/UPC barcode in extraInfo.barcode. That is the stable key for joining the same SKU across Talabat Mart and other grocery sources.
What does one record represent?
One product offer at one dark store. The same product sold from two dark stores returns two records; offer uniqueness is the pair (source.id, extraInfo.darkStore.id).

related in ~/ecommerce

Run Talabat Mart Scraper — Dubai Grocery Prices & SKUs, or get a custom build

Start extracting on Apify in minutes, or hire me to build a bespoke scraper and RAG pipeline for your exact source and schema.

run on Apify get custom data