BoardGameGeek (BGG) Board Game Reviews Scraper avatar

BoardGameGeek (BGG) Board Game Reviews Scraper

Under maintenance

Pricing

from $0.99 / 1,000 results

Go to Apify Store
BoardGameGeek (BGG) Board Game Reviews Scraper

BoardGameGeek (BGG) Board Game Reviews Scraper

Under maintenance

Scrape 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

Inus Grobler

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

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: first or all.
  • maxReviewsPerGame: Maximum number of reviews to return for each matched game.
  • sortBy: recent or highest.
  • minRating: Optional minimum rating filter from 0 to 10.
  • skipGameMetadata: Defaults to true. Starts directly from review data for faster runs. Set to false if you want the Actor to fetch BGG metadata before reviews.
  • useProxy: Defaults to false for lower-cost direct requests. Enable it only if direct requests are blocked.
  • maxConcurrency: Defaults to 4 for faster 256 MB runs.
  • requestDelayMs: Defaults to 0. Increase it only if BoardGameGeek throttles a larger run.
  • maxRequestRetries: Defaults to 1 to limit paid waiting on failed requests.
  • requestTimeoutSecs: Defaults to 30 to 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 Catan with first usually returns Catan
  • searching for Catan with all may also return related titles such as Catan Card Game or The 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.
  • gameIds and gameUrls bypass name search and are the best option when you need reliable larger runs.
  • skipGameMetadata: true avoids one extra BGG request per game. Direct gameIds may return gameName: null; direct gameUrls and 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, and language may be null when they are not publicly available.

Run With Python

from apify_client import ApifyClient
client = 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().items
for 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