BoardGameGeek (BGG) Board Game Reviews Scraper
Under maintenancePricing
from $0.99 / 1,000 results
BoardGameGeek (BGG) Board Game Reviews Scraper
Under maintenanceScrape BoardGameGeek (BGG) board game reviews by game name, game ID, or URL. Export review text, ratings, dates, reviewer profiles, locations, ownership, wishlist, collection IDs, and version metadata for sentiment analysis, market research, and review monitoring.
Pricing
from $0.99 / 1,000 results
Rating
0.0
(0)
Developer
Inus Grobler
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
BoardGameGeek Reviews Scraper lets you search BoardGameGeek (BGG) by board game name and collect public board game reviews as clean, structured dataset rows for review analysis, sentiment analysis, and market research.
This Actor is designed for simple review collection:
- search by game name
- scrape directly by BoardGameGeek game ID or game URL
- choose the first best match or all matches
- get one review per row
- keep output flat and easy to analyze
- collect recent or highest-rated reviews
- export BGG review text, ratings, reviewer location, ownership, wishlist, collection ID, and version metadata when available
What It Does
Use this Actor when you want BoardGameGeek review data for research, analysis, monitoring, or enrichment.
You provide one or more game names, BoardGameGeek game IDs, or BoardGameGeek game URLs, and the Actor returns public reviews for the matched titles.
Why It Is Useful
- No BoardGameGeek IDs required for small search-based runs
- Direct game IDs and URLs available for larger, more reliable runs
- Each review is returned as a separate row
- Good for sentiment analysis, review analysis, and market research
- Works well when you want review text for multiple games in one run
- Low launch price: $0.99 per 1,000 review rows
Example Input
Search by board game name:
{"gameNames": ["Wingspan"],"maxReviewsPerGame": 10,"sortBy": "recent","skipGameMetadata": true,"useProxy": false}
Scrape directly by BoardGameGeek IDs:
{"gameIds": [174430, 266192],"matchMode": "first","maxReviewsPerGame": 50,"sortBy": "recent","minRating": 7,"skipGameMetadata": true,"useProxy": false}
Input Fields
gameNames: List of board game names to search on BoardGameGeek.gameIds: BoardGameGeek numeric game IDs to scrape directly.gameUrls: BoardGameGeek board game URLs to scrape directly.matchMode:firstorall.maxReviewsPerGame: Maximum number of reviews to return for each matched game.sortBy:recentorhighest.minRating: Optional minimum rating filter from0to10.skipGameMetadata: Defaults totrue. Starts directly from review data for faster runs. Set tofalseif you want the Actor to fetch BGG metadata before reviews.useProxy: Defaults tofalsefor lower-cost direct requests. Enable it only if direct requests are blocked.maxConcurrency: Defaults to4for faster 256 MB runs.requestDelayMs: Defaults to0. Increase it only if BoardGameGeek throttles a larger run.maxRequestRetries: Defaults to1to limit paid waiting on failed requests.requestTimeoutSecs: Defaults to30to stop stalled requests quickly.
Lowest Cost Settings
For the cheapest reliable runs, use gameIds or gameUrls, keep skipGameMetadata enabled, and leave useProxy disabled.
Example:
{"gameIds": [266192, 13, 167791],"maxReviewsPerGame": 10,"skipGameMetadata": true,"useProxy": false,"requestDelayMs": 0,"maxConcurrency": 4}
Match Mode
first: Returns reviews for the single best BoardGameGeek match for each input name.all: Returns reviews for every matching BoardGameGeek title found for each input name.
Example:
- searching for
Catanwithfirstusually returnsCatan - searching for
Catanwithallmay also return related titles such asCatan Card GameorThe Rivals for Catan
Output
Each review is returned as its own dataset row.
Example review row:
{"type": "review","source": "boardgamegeek","scrapedAt": "2026-05-10T17:14:45.693Z","gameId": 174430,"gameName": "Gloomhaven","gameUrl": "https://boardgamegeek.com/boardgame/174430/gloomhaven","reviewId": "145330938","collectionId": "145330938","versionId": "123456","reviewUrl": null,"reviewerUsername": "Cdw165","reviewerUrl": "https://boardgamegeek.com/user/Cdw165","reviewerCountry": "United States","reviewerState": null,"reviewerCity": null,"rating": 10,"ratingText": "10/10","reviewTitle": null,"reviewText": "The game that got me interested in playing more board games. The strategy. The cooperation. This game is a masterpiece. Now if only I could finish the campaign!","reviewDate": "2026-05-09","language": null,"commentCount": null,"thumbsUp": null,"owned": true,"wishlistPriority": null,"status": "ok","errorMessage": null}
Example error row:
{"type": "error","source": "boardgamegeek","scrapedAt": "2026-05-10T17:14:45.693Z","gameId": null,"gameName": "Unknown Game Name","gameUrl": null,"status": "failed","errorMessage": "No BoardGameGeek matches were found for \"Unknown Game Name\"."}
Good To Know
sortBy: "recent"follows BoardGameGeek's recent review order.sortBy: "highest"follows BoardGameGeek's highest-rated review order.matchMode: "all"can return many matched games for broad search terms.gameIdsandgameUrlsbypass name search and are the best option when you need reliable larger runs.skipGameMetadata: trueavoids one extra BGG request per game. DirectgameIdsmay returngameName: null; directgameUrlsand name searches usually keep a readable game name.- Direct ID/URL runs usually do not need Apify Proxy. Turn on proxy only for blocked runs, because proxy traffic can add cost.
- Reviewer country/state/city, owned status, wishlist priority, collection ID, and version ID are included when BGG returns them in the public review data.
- Reviews without a visible rating are still returned unless you set
minRating. - Some fields such as
reviewTitle,reviewUrl,commentCount,thumbsUp, andlanguagemay benullwhen they are not publicly available.
Run With Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run_input = {"gameIds": [174430, 13],"matchMode": "first","maxReviewsPerGame": 10,"sortBy": "recent","minRating": 7,}run = client.actor("thescrapelab/boardgamegeek-reviews-scraper").call(run_input=run_input)items = client.dataset(run["defaultDatasetId"]).list_items().itemsfor item in items[:10]:print(item["type"], item.get("gameName"), item.get("reviewerUsername"))print(item.get("reviewText", "")[:200])print("---")
Install the client first:
$pip install apify-client
Compliance
- Scrapes only publicly available review data
- Does not access private content
- Does not require login
- Does not attempt to bypass restrictions
Limitations
- BoardGameGeek may rate-limit or block some runs
- Broad names with
matchMode: "all"can produce many matched games - Public review quality varies from short opinions to long-form writeups