To get an Amazon seller's feedback as JSON, call the SellerMagnet /api/amazon-seller-review endpoint with the seller ID and marketplace. The response carries the seller's name, how many positive, neutral and negative ratings they received in the last 30, 90 and 365 days and over their lifetime, the star rating Amazon shows for each period, and up to five of the most recent feedback comments. One request costs one credit.
Key Takeaways
- Feedback comes as counts per period - 30d, 90d, 365d and lifetime - not as percentages.
- positive counts 4- and 5-star ratings, neutral 2- and 3-star, negative 1-star.
- A rising negative share in the last 90 days against the lifetime share is the early warning.
- sellerId values come from the offers endpoint; Amazon's own offer ("Amazon", or any offer with amazonSellerId set) has no feedback page and returns a billed 404.
- recentFeedback holds up to five of the latest comments with their star rating.
What does the seller feedback API return?
The endpoint reads the seller's storefront page on that marketplace. Feedback on Amazon is per marketplace, so the same seller ID can look very different on amazon.de and amazon.com. Each of the rating objects is keyed by period, and reviewsCount is the total per period.
Response from /api/amazon-seller-review (example values)
{
"success": true,
"data": {
"sellerId": "A1CWSGXIR635I6",
"marketplaceId": "ATVPDKIKX0DER",
"marketplace_name": "Amazon US",
"sellerFullName": "Example Store",
"sellerTotalReviewAmount": 1535,
"sellerAvgRating": 4.32,
"feedback": {
"positiveRating": {"30d": 4, "90d": 20, "365d": 90, "lifetime": 1380},
"neutralRating": {"30d": 1, "90d": 3, "365d": 9, "lifetime": 55},
"negativeRating": {"30d": 2, "90d": 7, "365d": 15, "lifetime": 100},
"reviewsCount": {"30d": 7, "90d": 30, "365d": 114, "lifetime": 1535},
"starRating": {"30d": "3.3", "90d": "3.6", "365d": "3.9", "lifetime": "4.5"},
"recentFeedback": [
{"text": "great", "rating": 5, "starRatingText": "5 out of 5 stars",
"dateRated": "By gary kraus on June 5, 2025."}
]
}
}
}
| Field | Shape | Meaning |
|---|---|---|
positiveRating | {30d, 90d, 365d, lifetime} integers | Number of 4- and 5-star ratings |
neutralRating | same | Number of 2- and 3-star ratings |
negativeRating | same | Number of 1-star ratings |
reviewsCount | same | Ratings per period (the three above added up) |
starRating | {30d, 90d, 365d, lifetime} strings | Rating text Amazon shows per period; N/A when absent |
recentFeedback | list of up to 5 | text, rating (1-5 or N/A), starRatingText, dateRated |
sellerAvgRating | number | Our 365-day approximation: negative = 1, neutral = 3, positive = 5 stars |
sellerTotalReviewAmount | integer | Lifetime number of ratings |
Not Amazon's own split
Amazon's feedback page calls 1 and 2 stars negative and 3 stars neutral. This API counts 2 stars as neutral, so its negative share is slightly lower than the one on the page. Compare sellers with each other through the API, and treat sellerAvgRating as an approximation - the star rating Amazon itself shows is in starRating.
How do I spot a seller whose rating is getting worse?
Lifetime feedback moves slowly; a seller with thousands of old ratings can be failing today and still look fine. Compare the negative share of the last 90 days with the lifetime share. A 90-day share several times the lifetime one, over enough ratings to mean something, is the signal - late shipments and wrong items show up there months before the lifetime number moves.

seller_check.py - verdict from the feedback trend
import os
import requests
def seller_feedback(seller_id: str, marketplace_id: str) -> dict | None:
if seller_id.strip().lower() == "amazon":
return None # Amazon's own offer has no feedback page (billed 404)
resp = requests.get("https://sellermagnet-api.com/api/amazon-seller-review",
params={"sellerId": seller_id, "marketplaceId": marketplace_id},
headers={"X-Api-Key": os.environ["SELLERMAGNET_API_KEY"]}, timeout=120)
try:
body = resp.json()
except ValueError: # e.g. an HTML error page from a proxy
body = {}
if resp.status_code == 404:
return None # seller no longer exists on that marketplace
if resp.status_code != 200 or not body.get("success"):
raise RuntimeError(f"{seller_id}: {resp.status_code} {body.get('message')}")
return body["data"]
def negative_share(feedback: dict, period: str) -> tuple[float, int]:
total = feedback["reviewsCount"][period]
return (feedback["negativeRating"][period] / total if total else 0.0), total
def verdict(data: dict) -> str:
fb = data["feedback"]
recent, n_recent = negative_share(fb, "90d")
lifetime, n_life = negative_share(fb, "lifetime")
if n_life < 50:
return "new seller - too little feedback to judge"
if n_recent >= 10 and recent >= max(0.15, 3 * lifetime):
return f"avoid - {recent:.0%} negative in 90 days vs {lifetime:.0%} lifetime"
if n_recent >= 10 and recent >= 2 * lifetime:
return f"watch - negative share doubled ({recent:.0%} vs {lifetime:.0%})"
return f"ok - {recent:.0%} negative in 90 days"
data = seller_feedback("A1CWSGXIR635I6", "ATVPDKIKX0DER")
print(f'{data["sellerFullName"]} -> {verdict(data)}' if data else "no feedback page (Amazon itself or seller gone)")
How do I vet every seller on a listing?
Take the seller IDs from the offer listing endpoint, skip "Amazon", and check each once. A listing with eight third-party sellers costs one credit for the offers plus eight for the feedback. Feedback changes slowly, so cache results for a week rather than checking a seller on every price poll.
Seller name and 90-day counts with curl and jq
curl -sG "https://sellermagnet-api.com/api/amazon-seller-review" \
-H "X-Api-Key: $SELLERMAGNET_API_KEY" \
--data-urlencode "sellerId=A1CWSGXIR635I6" \
--data-urlencode "marketplaceId=ATVPDKIKX0DER" \
| jq -r '.data | [.sellerFullName, .feedback.reviewsCount["90d"], .feedback.negativeRating["90d"]] | @tsv'

A seller ID that no longer exists on the marketplace returns a billed 404, and a page Amazon blocked returns a 502 that is worth retrying later; the error-handling guide covers both.
Frequently Asked Questions
Is there an API for Amazon seller feedback?
Yes. /api/amazon-seller-review returns a seller's positive, neutral and negative rating counts for 30, 90 and 365 days and lifetime, the star rating per period and up to five recent comments.
Where do I get a seller ID?
From the offers endpoint: every offer carries sellerId. It is also the seller= value in the URL of a seller's storefront on Amazon.
Are the ratings percentages?
No. positiveRating, neutralRating and negativeRating are counts per period; divide by reviewsCount for shares.
Why does Amazon's own offer return 404?
Amazon as a seller has no storefront feedback page. Skip sellerId "Amazon" and offers with amazonSellerId set - the call is billed like any 404.
Is feedback the same on every marketplace?
No. Feedback is collected per marketplace, so query the marketplace you care about.
Bottom line: counts per period, positive 4-5 stars and negative 1 star, compare the last 90 days with lifetime, and skip Amazon itself. The seller feedback page shows the endpoint, and a free account includes 150 credits.