Noon Reviews Scraper avatar

Noon Reviews Scraper

Pricing

from $1.20 / 1,000 results

Go to Apify Store
Noon Reviews Scraper

Noon Reviews Scraper

Harvest Noon product reviews and ratings in bulk. Extract customer feedback, detailed insights & seller performance data. Perfect for market research, competitive analysis, pricing optimization & consumer behavior intelligence.

Pricing

from $1.20 / 1,000 results

Rating

4.3

(6)

Developer

Shahid Irfan

Shahid Irfan

Maintained by Community

Actor stats

2

Bookmarked

49

Total users

15

Monthly active users

2 days ago

Last modified

Share

What does Noon Reviews Scraper do?

Noon Reviews Scraper collects written customer reviews from Noon.com product pages. Give it a Noon product ID or product URL, set how many reviews you want, and it saves each review as a separate Apify dataset item.

The Actor uses Noon's storefront review service, paginates the written-review list, and falls back to the public rating feed or the product page when the main list is unavailable. It also records what happened in a SUMMARY key-value store entry, so you can check whether a short dataset is caused by the product or by a blocked request.

Before you run it

Noon blocks datacenter and shared IPs on its review API. Direct requests from a normal server IP commonly return 403 from Akamai or an HTTP/2 reset. Use Apify Residential proxies, or supply your own residential proxy URLs.

The default input requests Apify Residential proxies. If your Apify account does not have residential proxy access, the run can start but return no reviews. In that case, add a residential proxy or run the Actor on a network that Noon accepts.

Input

ParameterTypeDefaultDescription
startUrlStringnoneFull Noon product or customer-reviews URL. Takes priority over productId.
productIdStringN70105592VNoon product ID, such as N70105592V. Used when startUrl is absent.
results_wantedInteger20Maximum reviews to save. Range: 1 to 1000.
includeRatingSummaryBooleanfalseAdd one rating_summary item with the average rating, rating count, written-review count, and rating breakdown.
sortFilterStringhelpfulhelpful, newest, highest_rating, or lowest_rating.
localeStringen-aeStorefront language and country, such as en-ae, ar-ae, en-sa, or ar-sa.
proxyConfigurationObjectApify ResidentialApify proxy or custom proxy URLs. The proxy country follows locale unless you set one.

startUrl wins when both startUrl and productId are present. The URL also supplies the product ID and, when it contains a storefront prefix, the locale.

Locales

LocaleStorefront
en-aeUAE, English
ar-aeUAE, Arabic
en-saSaudi Arabia, English
ar-saSaudi Arabia, Arabic

Output

Each dataset item is one written review. Fields missing from a review are left out of that item.

FieldTypeDescription
productIdStringProduct ID used for the run.
variantSkuStringVariant SKU attached to the review.
titleStringReview headline.
authorStringReviewer display name.
ratingNumberStar rating, normally 1 to 5.
reviewTextStringReview body.
titleTranslationStringTranslated title, when Noon provides one.
reviewTextTranslationStringTranslated body, when Noon provides one.
dateStringReview update date.
helpfulCountNumberHelpful votes.
verifiedPurchaseBooleanWhether Noon marks the review as a verified purchase.
imageUrlsArrayReview image identifiers.
imageUrlsV2ArrayReview image URLs.
variantArrayPurchased variant attributes.
showTranslateBtnBooleanWhether Noon offers a translation control.
languageStringReview language.
uidStringNoon review identifier.
recordTypeStringrating_summary on the optional summary item.
ratingSummaryObjectAggregate rating data on the optional summary item.

Rating summary item

When includeRatingSummary is true, the Actor adds one item. Counts below are examples; the current values depend on the product and the run date.

{
"recordType": "rating_summary",
"productId": "N70105592V",
"ratingSummary": {
"averageRating": 4.6,
"ratingCount": 36558,
"writtenReviewCount": 3962,
"highestRatingValue": 5,
"breakdown": [
{ "rating": 5, "count": 30000 },
{ "rating": 4, "count": 3000 }
]
}
}

ratingCount includes star-only ratings. writtenReviewCount is the number the review service reports for written reviews, so it is usually the smaller number.

Run summary and diagnostics

The Actor writes two key-value store entries:

  • SUMMARY: product title and URL, requested and saved counts, written-review total, pages fetched, sort order, catalog success, proxy state, warm-up status, attempts per request, fallback source, stop reason, and whether the run completed.
  • RUN_DIAGNOSTICS: request labels, status codes, retry counts, selected browser profiles, and block evidence. It does not store response bodies, cookies, proxy URLs, or tokens.

If the review list is blocked but the product page loads, the Actor saves the five reviews embedded in the page and marks usedFallback and fallbackSource in SUMMARY. A five-item dataset with usedFallback: true means the review API did not answer, not that the product has only five written reviews.

Examples

Collect the 20 most helpful reviews:

{
"productId": "N70105592V",
"results_wanted": 20,
"sortFilter": "helpful",
"locale": "en-ae"
}

Collect 100 newest reviews from a product URL and add the rating summary:

{
"startUrl": "https://www.noon.com/uae-en/xbox-series-s-512-gb-digital-console-with-wireless-controller/N40635117A/p/",
"results_wanted": 100,
"includeRatingSummary": true,
"sortFilter": "newest"
}

Collect reviews from the Saudi storefront with your own proxy:

{
"productId": "N70105592V",
"results_wanted": 250,
"sortFilter": "lowest_rating",
"locale": "en-sa",
"proxyConfiguration": {
"proxyUrls": ["http://user:pass@residential-proxy.example:8000"]
}
}

Sample review item

{
"productId": "N70105592V",
"variantSku": "N70106183V",
"author": "Muhammad I.",
"title": "Fantastic deal on iPhone 16 Pro Max: fast delivery, great price, and top-notch quality!",
"rating": 5,
"reviewText": "I recently purchased the iPhone 16 Pro Max, and I could not be more pleased with my experience. I got it at an amazing discounted price, which made the deal even sweeter. The delivery was super fast, and everything arrived in perfect condition, right on time.",
"titleTranslation": "صفقة رائعة على iPhone 16 Pro Max: تسليم سريع وسعر رائع وجودة عالية!",
"reviewTextTranslation": "لقد اشتريت مؤخرًا هاتف iPhone 16 Pro Max، ولم أكن أكثر سعادةً بتجربتي.",
"date": "2026-02-07",
"helpfulCount": 16,
"verifiedPurchase": true,
"imageUrls": [
"eb43de1f-9017-4871-bb0a-8382bbd8f16f-1770533314-1.png"
],
"imageUrlsV2": [
"https://f.nooncdn.com/review/eb43de1f-9017-4871-bb0a-8382bbd8f16f-1770533314-1.png"
],
"language": "en",
"showTranslateBtn": true,
"uid": "fae7c913-b75a-4cea-bcd1-c7c90027f7a3"
}

Limits and behavior

  • results_wanted caps saved reviews. The Actor stops when it reaches the cap, exhausts the written-review list, or hits its page limit.
  • The review list is requested in pages of 15. The Actor pushes each page to the dataset as soon as it passes deduplication.
  • helpful sort uses Noon's helpful order. newest uses Noon's time order. highest_rating and lowest_rating use Noon's high and low rating orders.
  • Reviews are deduplicated by uid when Noon supplies one.
  • A failed request triggers up to 8 timed retries for the first review page (5 for later pages). Each retry uses a fresh residential proxy session and keeps the ios18 TLS profile for the first three attempts; chrome136 is a late fallback. Permanent 400, 401, 404, 410, and 422 responses are not retried.
  • The review-list endpoint is TLS-profile sensitive. ios18 is the primary profile; chrome136 is the only other profile that has passed from residential AE sessions. Desktop Chrome and Firefox profiles currently receive 403 from Akamai.
  • If the review list is blocked, the Actor falls back to the public rating feed and the product page's embedded reviews. The fallback page is cached from the warm-up, so the run can still finish with the five server-rendered reviews instead of failing.
  • The product page is warmed on a valid URL before the review request. Session recovery is bounded to 150 seconds for the bootstrap and 90 seconds per later page.
  • A product with no written reviews ends with an empty dataset and a warning. A blocked request with no fallback data fails the run with a message that points to RUN_DIAGNOSTICS.

Local development

npm install
npm test
npm run lint
npm start

Local runs read storage/key_value_stores/default/INPUT.json. A local empty result usually means Noon blocked the local IP. Use a residential proxy before changing the parser.

Export and automation

Apify datasets can be downloaded as JSON, CSV, Excel, XML, or HTML, and read through the Apify API. Use a schedule for recurring collection, or a webhook to send finished datasets to another service.

Collect only public review data you have a lawful reason to use. Follow Noon's terms, applicable privacy law, and any restrictions that apply to your use case.

Support

Open an issue on the Actor page with the input, the SUMMARY record, and the relevant RUN_DIAGNOSTICS requests. Remove proxy credentials before posting.