100 free credits. No credit card required.Start building
Logo
Back to blog

Best API for product review sentiment: 5 credits

·19 min read

Ten Amazon reviews came back labelled at 5 credits. The best API for product review sentiment is that review page, and turning labels off still cost 5.

Best API for product review sentiment: 5 credits

The best API for product review sentiment is a review-page call whose rows already carry a label read from the title and text. On 2026-10-11 UTC, the SocialCrawl API returned 10 labelled reviews from GET /v1/amazon/reviews?asin=B0FQFB8FMG&country=us at 5 credits with extra_credits 0, and the same URL with judgments=off cost another 5 credits with cached: false.

Which call fits depends on whether you already have the review text.

  • Label on the reviews this call returned: GET /v1/amazon/reviews and GET /v1/tripadvisor/reviews labelled every row, extra_credits 0. Only those two paths were called.
  • Text or audio you already store: AssemblyAI and the other text-in listicles below score that input. They do not return a review page.
  • A pile of unlabelled Amazon review text: Rainforest type=reviews, or Bright Data's Amazon reviews scraper. Those pages document text and ratings, not a sentiment level or an issue enum. Bright Data prices records, and the page states two different free allowances.
  • One Trustpilot business unit's stars, title, and text, labelled later: The all-reviews example has no sentiment level or issue enum.
  • Official Amazon review text from PA-API 5: The customer-reviews URL now documents deprecation and HTTP 403, not a reviews schema. The Creators API introduction URL returned HTTP 405, so review text there is unverified.
A stack of review cards with a gold star row beside a shorter coral sentiment bar, and a crumpled contradiction flag lying flat, showing product review sentiment kept apart from the stars.

What does product review sentiment analysis return on the review text?

SocialCrawl's unified schema puts sentiment (level, score_0_1, confidence, rating_mismatch) and issue (label, confidence) on the review row. The review list labels page reads sentiment from the title and the text, never from the stars. The review row lists level on a 0 to 4 scale and does not name 0 as very negative or 4 as very positive. That gloss is only on the comment sentiment row. The review object also carries rating_mismatch. Question, purchase intent, and complaint labels are not on that review object. The worked JSON on the labels page is a TikTok comment, so the object below is from this pull.

rating_mismatch is documented as true when the words clearly contradict the stars, and as null when there is no rating. On these 20 labelled rows the value was boolean false. Documented issue labels are product_defect, sizing_or_fit, shipping_or_delivery, customer_service, price_or_value, missing_feature, other, none, or null when unsure.

Both labelled calls returned data.labels with presets sentiment and issue, mode default, status complete, methodology_version labels/1, rows 10, labelled 10, pending 0, unjudged 0, and extra_credits 0. Every labelled row had computed.labels as an object. Those were the only keys under labels. The docs describe a pending state for unfinished rows. These two reports were complete.

Amazon review RRX675LFB6Y4T is 5 stars at level 2.

json
{
  "sentiment": {
    "level": 2,
    "score_0_1": 0.56,
    "confidence": 0.61,
    "rating_mismatch": false
  },
  "issue": {
    "label": "sizing_or_fit",
    "confidence": 0.83
  }
}

This pull did not read the title or the body, so it does not say the flag should have been true.

What was called on 2026-10-11?

Three GETs against https://www.socialcrawl.dev, all HTTP 200, at 2026-10-11T15:53:01Z, 2026-10-11T15:53:31Z, and 2026-10-11T15:54:30Z.

Call 1 was GET /v1/amazon/reviews with asin=B0FQFB8FMG and country=us. The ASIN is the Amazon docs example. country=us was sent on purpose. The Amazon reviews endpoint defaults country to US. Call 2 added judgments=off 30 seconds later. Call 3 was GET /v1/tripadvisor/reviews with the hotel url_path from the Tripadvisor docs. depth was not sent. Those docs default depth to 10 and price the endpoint at 1 credit.

dry_run was not sent. Call 3 also omitted sort_by, rating, visit_type, translate, label, and judgments. Pages move, so a later call can differ or come back as a 0-credit cache hit. The docs name label=none beside judgments=off as the switch for a pre-label page. label=none was not called.

An open envelope of review cards that already wear colored label chips, next to a hopper of unlabeled cards, for a review sentiment analysis API that returns the label with the page.

Which review sentiment analysis API returns labels on the same call as the review page?

LLMAPI, AssemblyAI, AltexSoft, and AbstractAPI start from text you already have. AssemblyAI treats the transcript as the hard part. Datastreamer sells review feeds and lists sentiment as an enrichment bullet. None of the five shows the review and the label in one response. You still fetch the review if you use a review sentiment analysis API from that set.

What did the three calls cost?

CallCreditsextra_creditscachedLabels
Amazon default5 (credits_remaining 38684)0false10 of 10 labelled
Amazon judgments=off5 (credits_remaining 38679)No page reportfalsecomputed absent, not labels null. Same 10 ids, same order, same stars. data.labels absent
Tripadvisor default1 (credits_remaining 38678)0false10 of 10 labelled

credits_used was 5, then 5, then 1. 38689 - 5 - 5 - 1 = 38678. A later GET /v1/credits/balance returned balance 38678 and credits_used 0.

extra_credits 0 means the labels added nothing on top of the page price. judgments=off was still a 5-credit charge with cached: false. Amazon docs say a hit inside 5 minutes costs 0 credits. This pair was 30 seconds apart and was not a hit. data.labels.cached was 0 on Amazon and 3 on Tripadvisor. That field is the per-row label store, not the HTTP cache, and Tripadvisor was still billed 1 credit.

Doc prices that match the pull: Amazon reviews 5 credits, Tripadvisor reviews 1 credit. Trustpilot reviews are listed at 5 credits on SocialCrawl (domain=monzo.com), so that path was not the cheaper documented call. Trustpilot was not called.

Bright Data prices records, not credits. The Amazon reviews scraper says "5K records per month" free, no card, "$1.5/1K record", and Scale at "$499 /month" for 384,000 records with "$1.3/1K" extra. The banner says "5k requests/month for free." Record and request are different units. "Sentiment" on that page is a use-case heading, not a field in the sample. Rainforest and official Trustpilot have no sourced price here.

Both Amazon bodies had data.total null, dropped 0, page_size 10, and has_more false. Null data.total leaves the archive size unknown. Ten reviews were still in the body.

What do you send?

bash
curl -sS "https://www.socialcrawl.dev/v1/amazon/reviews?asin=B0FQFB8FMG&country=us" \
  -H "x-api-key: $SOCIALCRAWL_API_KEY"
bash
curl -sS "https://www.socialcrawl.dev/v1/amazon/reviews?asin=B0FQFB8FMG&country=us&judgments=off" \
  -H "x-api-key: $SOCIALCRAWL_API_KEY"

The Tripadvisor curl is with the hotel sample further down, and it uses the same x-api-key header. Call 1 items had computed and review. Call 2 items had only review. Amazon and Tripadvisor use one response format on the labelled calls.

Review list with labels (called)Text-in sentiment API (listicles)Review fetch, no label field (their docs)
What you sendAmazon asin and country, or a Tripadvisor url_pathText you already have. AssemblyAI's hard case is audioRainforest type=reviews plus an ASIN. Bright Data, a review URL or ASIN. Trustpilot, a business unit id
Review and label togetherYes. 10 of 10 rows, computed.labels an objectNo review is fetchedText or counts. No sentiment level or issue enum on those pages
Sentiment keyslevel, score_0_1, confidence, rating_mismatchPolarity, or an aspects sketchNot on the sourced pages
Issue keyslabel, confidence, closed setFree-text aspects, or noneMissing
Label price vs the pageextra_credits 0. Labels off left Amazon at 5 creditsSeparate product. Prices not citedBright Data per 1K records, free lines in conflict. Others not sourced
Stars vs the wordsLevel counts differ from star counts. Flag false on all 20 rowsNo star field in those listiclesStars or a histogram. No mismatch flag on the sourced pages

A labelled review list

Both pages use the same keys. The labels added no credits on top of the page price, and each labelled page was one HTTP call. Only two paths were called. Amazon is a top page of about 10, with helpful votes from 2 to 919, and the Tripadvisor sample is a hotel. judgments=off still costs 5 credits. The flag stayed false. Use this to group the reviews this endpoint returned.

A text or audio sentiment API

Use this for warehouse text or audio you already store. You still fetch the review. Those pages give a polarity or free-text aspects, priced as their own product. They do not document this issue enum or a mismatch flag.

A review fetch with no label on the row

Rainforest documents type=reviews on its common parameters page, updated 18 Dec 2025. The reviews-parameters URL it links returned HTTP 404. Bright Data documents review text and ratings. Trustpilot all-reviews documents stars, title, and text. PA-API 5's old reviews URL is a 403. Use this when you need more than one top page of unlabelled text and you will label it yourself.

Does an Amazon reviews API return sentiment, or only stars?

On this pull, an Amazon reviews API sentiment result carried stars and a level on every row. Stars were 8 at 5 and 2 at 4. Levels were 7 at 4, 2 at 3, and 1 at 2. No row used level 0 or 1. Issues were none 7, sizing_or_fit 2, and product_defect 1. This page did not use shipping_or_delivery, customer_service, price_or_value, missing_feature, or other. A label missing from these rows can still exist on the API.

score_0_1 in response order was 1, 1, 0.56, 0.95, 0.92, 0.99, 1, 0.7, 0.97, 0.81. Sum 8.90. Mean 0.89 on these ten only. The 5-star level-2 row is RRX675LFB6Y4T.

Helpful votes ran from 2 to 919. entity_id was B0FQFB8FMG on every row, verified true on all 10, language and original_language null on all 10, source null. This pull names no language for them. /v1/amazon/product was not called, so there is no catalogue title. The Amazon docs call this the top reviews, usually about 10, with no page parameter. next_cursor was null.

Call 2 kept the same ids, order, and stars, dropped computed and data.labels, and stayed at 5 credits. The Amazon reviews API sentiment result was call 1.

Documented country values are US, GB, CA, DE, FR, IT, ES, JP, IN, MX, BR, AU, and NL, default US. The Amazon docs call MX the least reliable. An empty or missing ASIN is a refunded empty list or a refunded 404. review.entity_id is the ASIN you asked for. The labels doc also names Walmart, Target, and Sephora review paths. Those were not called. This is the label call, separate from the Amazon product data APIs roundup.

The PA-API 5 customer-reviews URL shows deprecation, not a reviews schema. Calls get HTTP 403 AccessDeniedException ("Product Advertising API is deprecated"). Footer © 1996-2025. Former review fields are not on the page. The Creators API introduction URL returned HTTP 405, so review text there is unverified and left out. Discussion 3083 on the Selling Partner API models, opened 31 Oct 2022, was still unanswered as fetched. sungolivia wrote that day that reviews were not available via SP-API at that moment. Replies through 16 Dec 2024 still ask. The thread is older than 12 months.

Rainforest's common-page example is type=reviews&amazon_domain=amazon.com&asin=B073JYC4XM&review_stars=all_critical. That ASIN is theirs, and the page has no sentiment level or issue taxonomy. Bright Data lists review URL, ASIN, product name, product rating, review rating, title, review text, author, date, verified purchase, and helpful votes. Its 2026-10-07 sample shows product_rating and a star histogram, not review text. Sample inputs use max_reviews of 20 and of 10.

What does a Trustpilot reviews API return besides the rating?

Trustpilot was not called. A Trustpilot reviews API in the official docs has two shapes, and neither was measured here.

The business-units example is described as including reviews, then shows numberOfReviews (total, TrustScore count, one- through five-star counts) and score.trustScore / score.stars. Title and body are not in that example. The all-reviews page takes a business unit id, pageToken, and an API key, skips customer emails and order IDs, and shows stars, title, text, language, isVerified, companyReply, and consumer.displayName. No sentiment level, no issue enum, no sourced price. The 5-credit doc price is why the live review-site call was the Tripadvisor hotel, not a Trustpilot measurement.

G2's API page, updated 5 May 2026, says it gives access to product, category, and review data. That page does not document a sentiment or issue schema, and the OpenAPI body was not extracted. Yelp was not called. Its docs page prints no credit price and no business id.

The hotel call returned 10 reviews, all labelled, at 1 credit, extra_credits 0, cached: false.

bash
curl -sS "https://www.socialcrawl.dev/v1/tripadvisor/reviews?url_path=Hotel_Review-g60763-d23462501-Reviews-Margaritaville_Times_Square-New_York_City_New_York.html" \
  -H "x-api-key: $SOCIALCRAWL_API_KEY"

The url_path is the Margaritaville Times Square example on the Tripadvisor reviews endpoint. data.total was 10, dropped 0, page_size 10, has_more false, next_cursor null. entity_id was that url_path. verified and source were null on all 10.

Stars were 2 at 1, 2 at 3, and 6 at 5. Levels were 3 at 0, 1 at 2, 2 at 3, and 4 at 4. No level 1, and no 2-star or 4-star row. Issues were none 4, customer_service 3, product_defect 2, and sizing_or_fit 1. One hotel row was sizing_or_fit. The text was not read, so the pull does not explain it.

score_0_1 in order was 0, 0.99, 0.5, 0.99, 0.01, 0.76, 0.03, 0.83, 1, 0.92. Sum 6.03. Mean 0.603 on these ten only.

language was en on all 10. original_language was en on nine and nl on review 1078984333, the only translated: true row: 3 stars, level 0, score_0_1 0.01, sentiment confidence 0.98, rating_mismatch false, issue customer_service, issue confidence 0.95. The label is on the English text in the response. data.labels.cached was 3, and the call still cost 1 credit. A 2025-12-17 review is second, so the page is not newest-first. Sort was not sent.

Which paths does the labels doc name, and which two were called?

The "Review lists" sentence names 22 paths and 18 prefixes. Those numbers count that sentence. Prefixes in doc order: amazon, walmart, target, wayfair, home_depot, sephora, aliexpress, kohls, klarna, google_shopping, tiktokshop, trustpilot, g2, yelp, google, tripadvisor, google_play, app_store. Klarna's two paths share a prefix. Tripadvisor's four paths share a prefix. google, google_shopping, and google_play stay separate because the doc writes three segments.

/v1/amazon/reviews, /v1/walmart/reviews, /v1/target/reviews, /v1/wayfair/reviews, /v1/home_depot/reviews, /v1/sephora/reviews, /v1/aliexpress/reviews, /v1/kohls/reviews, /v1/klarna/reviews, /v1/klarna/reviews/pro, /v1/google_shopping/reviews, /v1/tiktokshop/product/reviews, /v1/trustpilot/reviews, /v1/g2/reviews, /v1/yelp/business/reviews, /v1/google/business/extended-reviews, /v1/tripadvisor/reviews, /v1/tripadvisor/restaurant/reviews, /v1/tripadvisor/attraction/reviews, /v1/tripadvisor/cruise/reviews, /v1/google_play/app-reviews, /v1/app_store/app-reviews.

Called: /v1/amazon/reviews and /v1/tripadvisor/reviews. The labels doc says other endpoints have no judgments parameter. This pull did not test that. These two were the ones with a printed price and an id already on the page. G2's example is GET /v1/g2/seller?id=hubspot, with no credit price. Yelp prints neither a price nor a business id. No slug was guessed.

When should you scrape product reviews instead of calling a labelled API?

People type the search query "scrape product reviews api" when they want the review text past one top page. This labelled Amazon call was one page of about 10.

If you are grouping the reviews this call returned, use the labelled page. The label added no credits, and judgments=off did not lower the Amazon charge. You pay the page price once per uncached call.

If the text or the audio is already stored, use a text or audio sentiment API. The listicles do not show stars or this issue enum.

If you need an Amazon archive past one helpful page, use Bright Data's per-record fetch or Rainforest type=reviews, then label it yourself. This Amazon endpoint had has_more false and data.total null.

If you need your own Trustpilot title and text, use official all-reviews, then a separate step for a level. That step was not priced here.

If you wanted PA-API 5 to return the review text, the URL that could be verified documents a 403.

The listicles start from text you paste in. The best API for product review sentiment, when the label has to sit on the review you still have to fetch, is the review-page call. On 2026-10-11 the default Amazon page and the default Tripadvisor hotel page came back with sentiment and issue on every row, at 5 credits and 1 credit, extra_credits 0. The Amazon page with judgments off cost the same 5. Paths past those two are the doc list above. The mismatch flag was on every labelled row and true on none of them.

Frequently asked questions

What is the best API for product review sentiment if you need labels on the review text?

Use the review-list call when the label has to sit on the row, and a text API when you already have the text. Measured here: GET /v1/amazon/reviews for B0FQFB8FMG (10 rows, 5 credits, extra_credits 0) and GET /v1/tripadvisor/reviews for the docs hotel (10 rows, 1 credit, extra_credits 0). The other doc-list paths were not called.

Does product-review sentiment come from the stars or from the title and text?

The labels doc reads the title and the text. Amazon stars on this page were 8 at 5 and 2 at 4. Levels were 7 at 4, 2 at 3, and 1 at 2. RRX675LFB6Y4T was 5 stars at level 2, rating_mismatch false. The flag was false on all 20 labelled rows.

Which issue labels can a review page return (defect, fit, shipping, service, price, missing feature)?

Documented values are product_defect, sizing_or_fit, shipping_or_delivery, customer_service, price_or_value, missing_feature, other, none, or null when unsure. Amazon used none, sizing_or_fit, and product_defect. The hotel page added customer_service. A label that did not appear on these 20 rows can still exist on the API.

Does a review sentiment analysis API cost extra on top of the review page?

extra_credits was 0 on both labelled calls. judgments=off was another 5 credits, cached: false. Tripadvisor's data.labels.cached of 3 was still billed 1 credit. A text-in API is a separate product, and its price is not cited here.

Can an Amazon reviews API return sentiment without a separate NLP call?

On this uncached page, yes. Labels were on the review response at 5 credits, with no second request. PA-API 5's customer-reviews URL documents HTTP 403. Rainforest and Bright Data document review text without this issue enum.

Does a Trustpilot reviews API use the same label shape as other review sites?

Trustpilot was not called. The labels doc puts the same sentiment and issue presets on the review-list paths, including Trustpilot. Amazon and Tripadvisor were measured, and their label keys matched. Official all-reviews shows stars, title, and text.

How is this different from a comment sentiment analysis API?

Comment sentiment analysis is social comments. Review lists return five sentiment levels from the title and the text, plus rating_mismatch, and an issue label. They do not return question, purchase intent, or complaint labels.

Topics
#best-api-for-product-review-sentiment#product-review-sentiment-analysis#review-sentiment-analysis-api#amazon-reviews-api-sentiment#trustpilot-reviews-api#scrape-product-reviews-api

Related posts

🤖 AI agent or LLM? Read this page as markdown