Summary
AmazonScraper.reviews() accepts numOfReviews, pastDays and keyWord, then never sends them. A caller who writes reviews(url, numOfReviews=20) believes they asked for 20 reviews, and is billed for every review the product has.
Reviews bill one credit each, so a silently ignored cap is a billing bug, not a cosmetic one.
Environment
brightdata-sdk 2.5.2 (latest on PyPI)
- Python 3.12.13
- Verified 21 Sep 2026, by reading the installed source
The parameters are accepted and never used
Signature:
reviews(self, url, pastDays=None, keyWord=None, numOfReviews=None, timeout=240)
Body, in full up to the request:
# Build payload - Amazon Reviews dataset only accepts URL
# Note: pastDays, keyWord, numOfReviews are not supported by the API
url_list = [url] if isinstance(url, str) else url
payload = [{"url": u} for u in url_list]
result = await self.workflow_executor.execute(
payload=payload,
dataset_id=self.DATASET_ID_REVIEWS,
...
)
With comments stripped, each of numOfReviews, pastDays and keyWord appears 0 times in the executable body. The payload is built from url alone.
The comment is wrong: the API does support a cap
GET https://api.brightdata.com/datasets/v3/scrapers?domain=amazon.com lists the reviews scraper's collect_by_url inputs as:
url, reviews_to_not_include, max_reviews, variation_specific
and Bright Data's own sample_input for that scraper is:
[{"url": "https://www.amazon.com/RORSOU-R10-Headphones-Microphone-Lightweight/dp/B094NC89P9/",
"reviews_to_not_include": [], "max_reviews": 20, "variation_specific": ...}]
So the cap exists. The SDK names it numOfReviews, does not map it to max_reviews, and does not send it.
What it costs
B0CRMZHDG8 reports reviews_count: 205036. reviews("https://www.amazon.com/dp/B0CRMZHDG8", numOfReviews=20) sends {"url": ...} with no cap.
I have not run that call to demonstrate it, because it would bill for all 205,036 reviews. The source above is enough to show what gets sent.
Compared with the JavaScript SDK
The JavaScript SDK has the same gap but fails loudly: its reviews filter rejects max_reviews with Unrecognized key, so the caller knows the cap did not apply (brightdata/sdk-js#37). Here the parameter is accepted without complaint, so the caller has no signal until the bill arrives.
Expected
Send numOfReviews as max_reviews. If pastDays and keyWord have no API equivalent, raise when they are passed, rather than accepting and dropping them.
Also in this method
The list-input branch pairs results with URLs by position (zip(url_list, result.data)) and marks every result success=True, the same defect as #60.
Summary
AmazonScraper.reviews()acceptsnumOfReviews,pastDaysandkeyWord, then never sends them. A caller who writesreviews(url, numOfReviews=20)believes they asked for 20 reviews, and is billed for every review the product has.Reviews bill one credit each, so a silently ignored cap is a billing bug, not a cosmetic one.
Environment
brightdata-sdk2.5.2 (latest on PyPI)The parameters are accepted and never used
Signature:
Body, in full up to the request:
With comments stripped, each of
numOfReviews,pastDaysandkeyWordappears 0 times in the executable body. The payload is built fromurlalone.The comment is wrong: the API does support a cap
GET https://api.brightdata.com/datasets/v3/scrapers?domain=amazon.comlists the reviews scraper'scollect_by_urlinputs as:and Bright Data's own
sample_inputfor that scraper is:[{"url": "https://www.amazon.com/RORSOU-R10-Headphones-Microphone-Lightweight/dp/B094NC89P9/", "reviews_to_not_include": [], "max_reviews": 20, "variation_specific": ...}]So the cap exists. The SDK names it
numOfReviews, does not map it tomax_reviews, and does not send it.What it costs
B0CRMZHDG8reportsreviews_count: 205036.reviews("https://www.amazon.com/dp/B0CRMZHDG8", numOfReviews=20)sends{"url": ...}with no cap.I have not run that call to demonstrate it, because it would bill for all 205,036 reviews. The source above is enough to show what gets sent.
Compared with the JavaScript SDK
The JavaScript SDK has the same gap but fails loudly: its reviews filter rejects
max_reviewswithUnrecognized key, so the caller knows the cap did not apply (brightdata/sdk-js#37). Here the parameter is accepted without complaint, so the caller has no signal until the bill arrives.Expected
Send
numOfReviewsasmax_reviews. IfpastDaysandkeyWordhave no API equivalent, raise when they are passed, rather than accepting and dropping them.Also in this method
The list-input branch pairs results with URLs by position (
zip(url_list, result.data)) and marks every resultsuccess=True, the same defect as #60.