Read Sitejabber reviews and ratings by domain
The Sitejabber API returns business reviews and ratings as clean JSON.
5 active endpoints. Every call is 1 credit.
- POST/sitejabber/v1/reviews
- POST/sitejabber/v1/aggregate
- POST/sitejabber/v1/detail
- POST/sitejabber/v1/search
- POST/sitejabber/v1/category
What Sitejabber endpoints does ReefAPI ship?
5 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.
Sitejabber API
3 of 5 endpoints, ready to run
The rating summary for a domain and nothing else: overall stars, the total, and the five-to-one star breakdown. This is the call you size a pull with.
{ "ok": true, "meta": { "api": "sitejabber", "endpoint": "aggregate", "mode": "live", "latency_ms": 1335.4, "record_count": 1, "cache_hit": false }, "data": { "business": { "name": "Chewy", "domain": "chewy.com", "rating": 2.78, "review_count": 1099, "sub_ratings": {} }, "rating_distribution": { "5_star": 630, "4_star": 41, "3_star": 25, "2_star": 64, "1_star": 322 }, "total_reviews": 1099 } }
How the Sitejabber API works
Sitejabber is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.
No OAuth app, no request signing, no per-site account. One key covers all 185 engines.
Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.
Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.
One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.
Size it, page it, and carry your own stop condition
Sitejabber does not tell you when you have run out. It keeps answering with a full page of reviews — the same twenty it gave you on page 1. So the loop has to know when to stop on its own.
{"domain": "chewy.com"}total_reviews and the star breakdown. Divide by twenty for the number of pages you expect to exist.
{"domain": "chewy.com", "page": 1}Keep every review id you have seen. Page size hovers around twenty — we measured 20, 22, 23 and 24.
{"domain": "chewy.com", "page": 2}Stop when a page's ids are ones you already hold. That is the real end of the data, and it arrives before the page number the schema allows.
One credit per page of twenty, so roughly 50 credits for a thousand reviews. The sub-ratings — service, value, shipping, returns, quality — are on each row, not only in the summary.
curl -X POST https://api.reefapi.com/sitejabber/v1/aggregate \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"domain":"amazon.com"}'{
"ok": true,
"data": { … },
"meta": {
"api": "sitejabber",
"endpoint": "aggregate",
"mode": "live",
"latency_ms": …,
"record_count": …
},
"error": null
}Which action to trust for which number
Everything here is keyed on a website domain rather than a company name. The table below records where each value actually comes from, measured across nike.com, shein.com, landsend.com, temu.com and wish.com — including one place where you should currently read a different action.
| What you want | Read it from | Measured |
|---|---|---|
| the reviews themselves | reviews | 20 per page, correct for the domain you asked for |
| the business's total review count | reviews → meta.pagination.total | 474 for nike.com, 272 for landsend.com — the real counts |
| the overall rating and name | search | nike.com → business_id 814738, name "Nike", rating 2.03, review_count 476 |
| the business block inside a reviews response | ⚠️ do not rely on it yet | on some domains it names a different company — see the note |
| per-review sub-ratings | reviews → sub_ratings | the key set varies review by review: {service, value, returns, quality} on one, all five on another, {value, shipping, returns, quality} on a third |
| the review body | reviews → text AND tip | text came back null on one measured review while tip held the 284-character body |
| reviewer country | reviews → reviewer_country | "United Kingdom of Great Britain and Northern Ireland" — the full UN long form, not an ISO code |
| the company's reply | reviews → business_reply | null when the company has not replied |
| a ranked list in a sector | category | cryptocurrency returned 10 per page out of 1,109 businesses |
| categories on a business | search / category → categories[] | {name: "shoes", slug: null} — name is populated, slug is always null |
Honest disclosure: the business summary embedded in a reviews response is currently picking up the wrong company on some domains. Measured, nike.com returned Land's End, shein.com returned Fashion Nova and landsend.com returned Azzlee, while temu.com and wish.com were correct. The reviews array and meta.pagination.total are always for the domain you asked for — only that summary block is affected, and we are fixing it. Until then take name, rating and review_count from search.
Check the domain, and know where paging quietly ends
Measured on 2026-08-27 against amazon.com (11,111 reviews) and chewy.com. The first row is the most important thing on this page and it is not flattering.
Against us: a domain with no Sitejabber profile does not return an error, it returns a different company. nike.com answered as Land's End, and landsend.com answered as Azzlee — the same on reviews, aggregate and detail, with ok:true and no warning. Always compare business.domain in the response against what you asked for.
Against us: pages up to about 485 carried distinct reviews; from around page 490 the response silently repeats page 1. We got identical review ids at pages 490, 500, 556, 600, 1,000 and 2,000, while the schema happily accepts any page up to 500. On an 11,111-review business that is roughly 9,700 reachable.
Metered per 20 rows returned: about 50 credits for a thousand, one credit a page. A page that overshoots twenty rounds up — a 23-row page costs 2.
Page size is approximately twenty, not exactly twenty: we measured 20, 22, 23 and 24 rows on different pages of the same business. Do not compute an offset from page number times twenty.
Against us: the review body was empty on up to 6 of 20 rows on some pages — a Sitejabber review can be a rating with no text. The business reply was empty on all 20 rows we checked, and helpful votes on 12 of 20. Star rating, title, both dates, the verified flag and the sub-ratings were filled almost everywhere.
What people build with Sitejabber
The jobs this data is most often used for.
endpoints
credit per call
Reputation tools call reviews to monitor a business's Sitejabber feedback.
Aggregators use aggregate to display a live rating badge.
Researchers use search and category to benchmark competitors.
What Sitejabber data costs
The cheapest call here is 1 credit, so $15/mo (Pro) buys 10,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.
Full pricing →- 1,000 free credits on signup, no card
- One key, all 185 APIs, one credit pool
- Failed and blocked calls are never charged
- Credits roll over and never expire
Call it in two lines
Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.
curl -X POST https://api.reefapi.com/sitejabber/v1/aggregate \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"domain":"amazon.com"}'import requests
r = requests.post(
"https://api.reefapi.com/sitejabber/v1/aggregate",
headers={"x-api-key": REEF_KEY},
json={
"domain": "amazon.com"
},
)
print(r.json()["data"])Have a question? We got answers.
The questions people actually ask before wiring up Sitejabber.
Get a free key →Where should I read a business's overall rating and review count?▾
From search, not from the business object inside a reviews response. A measured search for "nike" returned the correct record — business_id 814738, name "Nike", domain nike.com, rating 2.03, review_count 476 — while the reviews call for the same domain returned a business block naming a different company. We would rather tell you than let you ship it. meta.pagination.total on the reviews response is also correct (474 for that domain) and is the cheapest way to get the count if you are already paging.
Why is a review's text field null?▾
Because the body is not always in the field you expect. A measured Nike review returned text null with tip carrying the actual 284-character complaint, while a Shein review in the same session returned both populated. Read text, and fall back to tip when it is empty — a customer record built on text alone will show blank reviews for a meaningful share of rows.
Why do different reviews have different sub-ratings?▾
Because reviewers fill in whichever dimensions they care about. Three measured first-page reviews carried three different key sets: {service, value, returns, quality}, all five including shipping, and {value, shipping, returns, quality} with no service. There is no fixed schema for that object. Iterate the keys present rather than reading five fixed fields, and never average across reviews without checking how many actually scored the dimension you are averaging.
What format is reviewer_country in?▾
The full UN long-form country name, which is longer than almost anyone expects. A measured review returned "United Kingdom of Great Britain and Northern Ireland" rather than "UK", "GB" or "United Kingdom". If you are grouping reviews by geography, normalize these to ISO codes on the way in — a naive string match against "United Kingdom" will not hit that value.
How do I page through every review for a business?▾
reviews returns 20 per page and meta.pagination carries page, per_page, total, has_more and next_page. Page until has_more is false rather than computing from total, because the returned count is occasionally one over per_page — a measured Shein page returned 21 rows against per_page 20. total tells you the size of the job before you start: 474 reviews for one measured domain, 4,965 for another.
Can I find businesses I do not already have the domain for?▾
Two ways. search takes a name or keyword and returns matching businesses with domain, rating, review_count, subindustry and categories — the same measured "nike" search returned the real Nike alongside several lookalike domains, which is itself useful for brand-protection work. category browses a sector: a measured cryptocurrency call returned 10 businesses per page out of 1,109, each with its rating and review count, ranked. Both give you the domain that every other action needs.
What are the category slugs, and why is slug always null?▾
The category parameter takes a top-level slug — shopping, clothing-fashion, computers-technology, beauty, health, home-garden, food-drink, travel, finance, cryptocurrency, business, education, entertainment, autos-vehicles, real-estate, pets-animals, baby-kids, sports and more — and it also accepts any deeper sub-category slug taken from a sitejabber.com/categories/ URL. Separately, the categories[] array on a business returns objects whose name is populated and whose slug came back null on every measured row, so use name and lower-case it yourself if you need a slug.
What else does a review record carry?▾
More than the star rating: review_id, review_no, the 1-5 rating, title, the body, date and experience_date as separate timestamps, is_verified, helpful_votes and not_helpful_votes, comment_count, photo_count, products_used as an array of free-text strings the reviewer typed, and business_reply. A measured one-star review carried is_verified true, 2 helpful votes, 6 photos, products_used naming the specific trainers, and business_reply null. experience_date being separate from date matters for trend work — someone can review in January an experience from two months earlier.
What is the Sitejabber API?▾
Sitejabber API is a ReefAPI endpoint group for sitejabber It returns live JSON through POST requests under /sitejabber/v1.
Is the Sitejabber API free to try?▾
Yes. ReefAPI starts with 1,000 free credits, no card required. Sitejabber calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Sitejabber login or account?▾
No login to Sitejabber is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the Sitejabber data?▾
The page example is captured from a live reviews call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the Sitejabber API use?▾
Sitejabber actions currently cost 1 credit per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.
Can I call Sitejabber from an AI assistant or MCP client?▾
Yes. Connect ReefAPI once through MCP and your assistant can call sitejabber actions with the same key, credit pool and JSON envelope used by normal REST requests.
14 Reputation & Reviews APIs on the same key
One key, one credit pool, one response envelope. If you are pulling Sitejabber, you are one call away from the rest of the category — no second contract, no second integration.
Try it on your own data before you pay anything
The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 184 APIs, and the same envelope everywhere.
Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts. Field notes were captured on 2026-08-27.