Blog/amazon
1 min read

Score an ASIN's Reviews for Sentiment in 15 Minutes

A hands-on recipe: pull an Amazon ASIN's reviews with one API call, then score them into a sentiment breakdown with top complaint themes.

Score an ASIN's Reviews for Sentiment in 15 Minutes

You can turn one Amazon ASIN into a scored sentiment breakdown in about fifteen minutes: pull the reviews with a single paid API call, split them by star rating for a fast baseline, then run a small pass over the text to surface the top complaint themes. No vendor signup, no scraper to babysit, one wallet for the whole thing.

Copy this line to your agent to score an ASIN's reviews for sentiment.

set up https://monid.ai/SKILL.md and use apify/axesso_data/amazon-reviews-scraper to score an ASIN's reviews for sentiment

Monid is a pay-per-call data API marketplace: one interface and one wallet to discover and run hundreds of external data endpoints without a separate signup per vendor. The review scraper you need lives there already, so this recipe is mostly plumbing and jq.

TL;DR

  • Reviews come from Apify, endpoint apify /axesso_data/amazon-reviews-scraper, which returns full text, star rating, verified-purchase flag, helpful votes, and date per review.
  • One monid run with a bounded maxReviews gets you a clean JSON array. Billing is per result, so small limits keep the tab at a fraction of a cent per result. See monid.ai/tools for the live number.
  • jq reshapes each review into {rating, text}. Bucketing by star gives an instant sentiment baseline before you touch a model.
  • A tiny second pass (star buckets, a lexicon, or a small LLM prompt) turns the negatives into ranked complaint themes.
  • Total wall-clock: inspect, run, transform, score. Fifteen minutes, single-digit-cents territory for a typical sample.

Set up Monid once

For agents

Grab an API key at app.monid.ai, then paste this to your agent and hand it the key:

set up https://monid.ai/SKILL.md

It learns the whole discover, inspect, run workflow itself. More details in the agent quickstart.

For humans

npm install -g @monid-ai/cli
monid keys add --label main --key <your-api-key>

More details in the CLI quickstart.

Step 1: Inspect the endpoint (free)

Before you spend anything, read the contract. Inspect is free, and it tells you exactly which input fields the actor accepts and what each review object looks like.

monid inspect -p apify -e /axesso_data/amazon-reviews-scraper

You will see the input schema (an asin, a maxReviews cap, a domainCode for the marketplace, plus optional star and keyword filters) and a sample output row. Full field docs are on the Apify actor page. Confirm the fields you care about are there: text, rating, verified purchase, helpful votes, date.

Step 2: Run one ASIN with a bounded limit

Pick your ASIN and cap the pull. This is the only paid step. Keep maxReviews small: a few hundred reviews is plenty for a sentiment read, and per-result billing means you pay for exactly what you take.

monid run -p apify -e /axesso_data/amazon-reviews-scraper \
  -i '{"asin":"B08N5WRWNW","maxReviews":150,"domainCode":"com","sortBy":"recent"}' \
  -w -o reviews.json

The -w flag waits inline and writes the finished result to reviews.json. If you would rather not block the terminal, drop -w, note the RunID it prints, and fetch it when it finishes:

monid runs get -r <RunID> -o reviews.json

Step 3: Pull text and stars with jq

The raw output carries more than you need for scoring. Reduce each review to the two fields that matter, plus the verified flag so you can weight trusted voices later:

jq '[.[] | {rating: .rating, text: .text, verified: .verifiedPurchase}]' reviews.json > clean.json

If the actor nests results under a key, adjust the path (inspect showed you the shape). A quick sanity check on how many you actually got:

jq 'length' clean.json

Step 4: Bucket by star for a free baseline

Star ratings are a sentiment signal on their own. Before any model, count the distribution. This one line gives you the share of the review set sitting at each rating:

jq 'group_by(.rating) | map({stars: .[0].rating, count: length}) | sort_by(.stars)' clean.json

Treat 1 and 2 stars as negative, 3 as mixed, 4 and 5 as positive. Sum the buckets and you already have a defensible "share negative" number. For many products this is the answer, and it cost you nothing beyond the run.

Step 5: A small pass for the actual themes

Stars tell you how many people are unhappy, not why. For that, feed only the negative text into a short scoring pass. Pull the 1 and 2 star bodies:

jq -r '.[] | select(.rating <= 2) | .text' clean.json > negatives.txt

Now run a small pass over negatives.txt. Two cheap options:

  • Lexicon or keyword tally: count recurring nouns and adjectives (battery, shipping, broke, cheap, stopped) to see which complaints cluster.
  • A small LLM prompt: ask your model to read the negatives and return the top three to five complaint themes with a rough count each. Keep the sample bounded so the token cost stays in single-digit-cents territory.

Either way, the output is a ranked list of themes, not a wall of text.

Step 6: The breakdown

Stitch the two passes together into one readout: the star distribution from Step 4 gives share positive, mixed, and negative; the theme pass from Step 5 gives the ranked reasons behind the negatives. A finished breakdown for a sample ASIN reads like: "72 percent positive, 9 percent mixed, 19 percent negative; top complaints: battery life (roughly a third of negatives), setup difficulty, arrived damaged." That is a briefing you can paste into a product review or a competitive scan.

Cost tally

  • Inspect: free.
  • One run at a bounded maxReviews: per-result billing, so a few hundred reviews lands at a fraction of a cent per result, single-digit cents total. Check the current rate on monid.ai/tools.
  • jq and the star buckets: free, local.
  • Optional small LLM theme pass: a few cents if you use one, zero for the lexicon route.

Fifteen minutes, and the only line item is the reviews themselves.

FAQ

How many reviews should I pull for a reliable read? A few hundred recent reviews usually stabilizes the star distribution and surfaces the repeat complaints. Because you pay per result, start small and re-run with a higher maxReviews only if the themes still look thin.

Do I need an LLM for the sentiment part? No. The star-bucket baseline in Step 4 is free and often sufficient. The model pass is optional and only earns its keep when you want the "why" behind the negatives phrased in plain language.

What exactly does the Apify endpoint return per review? Full review text, star rating, verified-purchase flag, helpful-vote count, and date, with batch support and star or keyword filters. The actor page lists every field.

How is this billed on Monid? Discover and inspect are free; the single run is the only paid step, charged per result at the price shown before you run it. Magnitudes and the live rate are on monid.ai/tools.

amazonsentiment-analysisapifyweb-scraping