Skip to content

reviews() accepts numOfReviews and never sends it, so a capped call bills every review #62

Description

@anil-bd

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions