A lightweight, dependency-minimal Python scraper for Sitejabber company reviews. Given a company domain, it fetches the company's aggregate rating and most recent reviews and returns clean, structured JSON or CSV.
Built and maintained by the team at Thunderbit.
- ⭐ Lookup by domain — just pass
amazon.com,walmart.com,nike.com, etc. - 📊 Aggregate rating — overall score and total review count
- 📝 Recent reviews — rating, body, author, and (when present) headline, date, and URL
- 📄 JSON or CSV output — pipe to a file or another tool
- 🪶 Minimal dependencies — just
requests+beautifulsoup4 - 🧪 Tested — unit tests run against a saved JSON-LD fixture, no network needed
pip install sitejabber-reviews-scraperOr from source:
git clone https://github.com/thunderbit-operations/sitejabber-scraper.git
cd sitejabber-scraper
pip install -e ".[dev]"The PyPI package is named
sitejabber-reviews-scraper, but the import package and CLI command aresitejabber_scraper/sitejabber.
# Scrape reviews for a company
sitejabber amazon.com
# Output CSV to a file
sitejabber walmart.com --format csv -o walmart_reviews.csv
# Limit the number of reviews
sitejabber nike.com --count 5from sitejabber_scraper import SitejabberScraper
scraper = SitejabberScraper()
result = scraper.scrape("amazon.com")
print(result["company_name"], result["aggregate_rating"], result["review_count"])
for review in result["reviews"]:
print(review["rating"], review["author_name"], review["review_body"])Example output:
{
"company_name": "Amazon",
"company_domain": "amazon.com",
"aggregate_rating": 3.4,
"review_count": 5108,
"best_rating": 5.0,
"worst_rating": 1.0,
"reviews": [
{
"rating": 1.0,
"headline": null,
"review_body": "Amazon used to provide good customer service, but ...",
"date_published": null,
"author_name": "Diane S.",
"author_url": null,
"url": null
}
]
}usage: sitejabber [-h] [-f {json,csv}] [-o OUTPUT] [--count COUNT] company_domain
positional arguments:
company_domain Company domain to look up, e.g. amazon.com or walmart.com
options:
-h, --help show this help message and exit
-f, --format output format: json or csv (default: json)
-o, --output write output to a file instead of stdout
--count COUNT maximum number of reviews to return
from sitejabber_scraper import SitejabberScraper
scraper = SitejabberScraper(timeout=20)
# Full scrape (network)
result = scraper.scrape("amazon.com", count=10)
# Parse an already-downloaded page (no network) — useful for testing
with open("amazon.html", encoding="utf-8") as fh:
result = scraper.parse(fh.read())scrape() and parse() both return a dict with:
| Field | Type | Notes |
|---|---|---|
company_name |
str | |
company_domain |
str | None | from JSON-LD sameAs |
aggregate_rating |
float | None | overall score |
review_count |
int | None | total reviews on Sitejabber |
best_rating / worst_rating |
float | None | rating scale bounds |
reviews |
list[dict] | see below |
Each review dict: rating, headline, review_body, date_published, author_name, author_url, url. Fields that Sitejabber does not expose for a given review are returned as None.
Sitejabber embeds a <script type="application/ld+json"> block on every company
page. This block contains an Organization / LocalBusiness object with the
company's aggregateRating and an array of the most recent reviews. This
scraper requests the company page (following redirects — some pages 301 to
Sitejabber's smartcustomer.com mirror, which serves the same payload), then
parses that JSON-LD with BeautifulSoup. Parsing structured data is faster and
far more stable than scraping the visible HTML.
No special headers, cookies, or anti-bot handling are required — a normal browser User-Agent is enough.
- First page only. Sitejabber's JSON-LD includes only the most recent ~10–20 reviews shown on the first page of a company. Pulling the full review history requires paginating the site's internal endpoints, which this scraper does not do.
- Sparse per-review fields. In practice Sitejabber populates
rating,review_body, andauthor_nameon every review, butheadline,date_published,author_url, andurlare often absent from the JSON-LD and will come back asNone. - Undocumented structure. The JSON-LD layout is not a public API and may change without notice.
- Be polite — don't hammer the site with rapid requests.
💡 Don't want to write code or handle pagination? Thunderbit is an AI web scraper Chrome extension that scrapes Sitejabber reviews (and any site) in 2 clicks, no code.
This tool is for educational and research purposes. Respect Sitejabber's
Terms of Service and robots.txt. Don't
use scraped data in ways that violate applicable laws or regulations.
MIT — see LICENSE.
Built by Thunderbit — AI-powered web scraping for everyone.