# Backloggd Game Reviews & Database Scraper (`thescrapelab/backloggd-game-reviews-scraper`) Actor

Scrape Backloggd games by title or URL and export metadata, ratings, community stats, and one clean row per public written review. Add optional AI summaries for sentiment, praise, complaints, bugs, performance, platform feedback, and spoiler-free consensus.

- **URL**: https://apify.com/thescrapelab/backloggd-game-reviews-scraper.md
- **Developed by:** [Inus Grobler](https://apify.com/thescrapelab) (community)
- **Categories:** Games, AI, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.10 / 1,000 public review extracteds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

<p align="center">
  <img src="assets/backloggd-scraper-logo.png" alt="Backloggd Game Reviews and Database Scraper logo" width="220">
</p>

Scrape Backloggd game reviews, ratings, metadata, and community statistics from title searches or public game URLs. Export clean datasets for market research, gaming analytics, recommendation systems, journalism, RAG, and player-feedback analysis.

Optional AI review intelligence summarizes recurring praise, complaints, bugs, performance issues, platform feedback, player sentiment, and spoiler-free consensus. No Backloggd account or login is required.

### What this Backloggd scraper returns

- Ranked game matches from title searches
- Structured game metadata, platforms, genres, companies, release details, and image URLs
- Backloggd ratings, review counts, and community activity
- One clean Dataset row per public written review
- Reviewer username, rating, date, likes, platform, play status, and spoiler flag when public
- Deterministic review statistics without AI
- Optional AI-powered, spoiler-safe game review summaries
- Client-safe error and partial-result rows when one source request fails

### Backloggd scraper use cases

- Compare player sentiment, ratings, and recurring complaints across games.
- Enrich game catalogs with platforms, genres, companies, release details, and cover URLs.
- Build recommendation, search, RAG, or gaming analytics datasets.
- Monitor public review themes for publishers, developers, journalists, and market researchers.
- Create spoiler-aware summaries of praise, bugs, performance issues, and platform feedback.

### Quick start

The easiest input is a game-title search:

```json
{
  "searchQueries": ["Elden Ring"],
  "maxReviewsPerGame": 100,
  "outputMode": "games_and_reviews"
}
````

You can also paste a direct Backloggd game URL:

```json
{
  "gameUrls": ["https://backloggd.com/games/elden-ring/"],
  "maxReviewsPerGame": 500,
  "outputMode": "reviews_only"
}
```

Results are streamed to the run's default Apify Dataset. Each row contains `itemType`, which identifies whether it is a game, review, summary, search match, status, or error.

### Input

Provide at least one game title, public game URL, slug, or numeric ID. You can combine input methods; duplicate games are scraped once.

#### Choose games

| Input | Default | What to enter |
|---|---:|---|
| `searchQueries` | `[]` | Game titles such as `Elden Ring`, `Hades`, or `Baldur's Gate 3`. Each query resolves up to five ranked matches. |
| `gameUrls` | `[]` | Public game URLs such as `https://backloggd.com/games/elden-ring/`. |
| `gameIdsOrSlugs` | `[]` | Known URL slugs such as `elden-ring`. Numeric IDs are accepted, but URLs and slugs are more reliable. |

Title searches intentionally preserve several close matches instead of pretending that the first result is always correct. Search provenance and ranking are included in `full` output. Equivalent URLs, tracking parameters, and duplicate slugs are normalized within the run.

#### Choose the output

| Input | Default | Meaning |
|---|---:|---|
| `maxReviewsPerGame` | `100` | Maximum accepted public written reviews per resolved game, from 0 to 5,000. Use 0 for metadata-only runs. |
| `outputMode` | `games_and_reviews` | Selects which result row types are written. See the table below. |
| `spoilerHandling` | `exclude_from_ai` | Controls whether spoiler-marked reviews are kept, analyzed, or excluded. |

#### Optional AI review summaries

| Input | Default | Meaning |
|---|---:|---|
| `includeOpenRouterAnalysis` | `false` | Generates qualitative, spoiler-safe insights in game summary rows. |
| `maxReviewsToAnalyzePerGame` | `50` | Maximum reviews sent to AI for each game. Raw scraping can continue beyond this number. |

Clients do not enter an OpenRouter API key or choose a model. The Actor uses an encrypted operator-managed `OPENROUTER_API_KEY` environment secret and a built-in low-cost structured-output model. The key is never written to inputs, logs, or Dataset rows.

To receive an AI summary, enable `includeOpenRouterAnalysis` and select an output mode that includes summaries: `summaries_only`, `reviews_and_summaries`, or `full`.

If AI is disabled or unavailable, summary modes still return deterministic rating and review statistics. A missing or failed AI service does not discard successfully scraped reviews.

### Output modes

| Dataset content option | Rows normally returned |
|---|---|
| `games_only` | `game` |
| `reviews_only` | `review` |
| `games_and_reviews` | `game`, `review` |
| `summaries_only` | `game_review_summary` |
| `reviews_and_summaries` | `review`, `game_review_summary` |
| `full` | `search_result` for title searches, plus `game`, `review`, and `game_review_summary` |

`error` and `source_status` rows can appear in every mode. They preserve clear diagnostics without stopping other valid games.

Apify Console provides focused column views for results, written reviews, game metadata, review summaries, and run messages. These are views of the same Dataset; use `itemType` when filtering JSON, CSV, Excel, or API exports.

### Game metadata fields

A `game` row can include:

- `gameId`, `gameSlug`, `gameUrl`, `canonicalUrl`, and `title`
- `alternativeTitles`, `description`, `releaseDate`, `releaseDates`, and `releaseStatus`
- `companies`, `developers`, `publishers`, `platforms`, `genres`, and `themes`
- `gameModes`, `franchises`, `series`, and `ageRatings`
- `coverImageUrl`, `backgroundImageUrl`, and lightweight screenshot URLs
- `averageRating`, `ratingCount`, and `reviewCount`
- `playedCount`, `playingCount`, `backlogCount`, and `wishlistCount`
- completion, abandoned, and completionist counts when public
- `communityStats`, related games, editions, DLC, and public external links when available
- search queries that found the game and `extractionMethod`

Backloggd does not consistently label company roles. `companies` is the conservative complete list; `developers` and `publishers` are populated only when a role can be inferred reliably. Missing source fields remain null or empty rather than being guessed. Images are returned as URLs and are not downloaded.

Illustrative `game` row:

```json
{
  "itemType": "game",
  "source": "backloggd",
  "gameId": "119133",
  "gameSlug": "elden-ring",
  "gameUrl": "https://backloggd.com/games/elden-ring/",
  "canonicalUrl": "https://backloggd.com/games/elden-ring/",
  "title": "Elden Ring",
  "releaseDate": "2022-02-25",
  "companies": ["FromSoftware", "Bandai Namco Entertainment"],
  "developers": ["FromSoftware"],
  "platforms": ["PC", "PlayStation 5", "Xbox Series X|S"],
  "genres": ["Adventure", "RPG"],
  "averageRating": 4.5,
  "ratingCount": 132000,
  "reviewCount": 21000,
  "playedCount": 179000,
  "backlogCount": 40000,
  "coverImageUrl": "https://images.igdb.com/example-cover.jpg",
  "searchQueries": ["Elden Ring"],
  "extractionMethod": "http",
  "scrapedAt": "2026-07-17T12:00:00.000Z"
}
```

The values are illustrative; live data depends on the public Backloggd page at run time.

### Written review fields

Each accepted public written review becomes one `review` row. Available fields include:

- game ID, slug, title, and canonical game URL
- native `reviewId` when available, stable fallback identity, and `reviewHash`
- `reviewRating`, `reviewTitle`, `reviewText`, `reviewDate`, and `reviewUpdatedAt`
- public reviewer username, display name, profile URL, and avatar URL
- likes, comments, platform, play status, hours played, and completion status when visible
- recommendation, tags, `isSpoiler`, and spoiler warning text when visible
- extraction method and scrape timestamp

Illustrative `review` row:

```json
{
  "itemType": "review",
  "source": "backloggd",
  "gameId": "119133",
  "gameSlug": "elden-ring",
  "gameTitle": "Elden Ring",
  "gameUrl": "https://backloggd.com/games/elden-ring/",
  "reviewId": "337912",
  "reviewUrl": "https://backloggd.com/u/example-user/review/337912/",
  "reviewHash": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08",
  "reviewRating": 4.5,
  "reviewText": "Example public review text.",
  "reviewDate": "2026-07-12T18:45:00.000Z",
  "reviewerUsername": "example-user",
  "reviewerProfileUrl": "https://backloggd.com/u/example-user/",
  "likes": 12,
  "commentsCount": 2,
  "platform": "PC",
  "playStatus": "Completed",
  "isSpoiler": false,
  "extractionMethod": "http",
  "scrapedAt": "2026-07-17T12:00:00.000Z"
}
```

The Actor paginates until it reaches the requested limit, the public feed ends, a page produces no new review identities, a cursor repeats, or retries are exhausted. Reviews are deduplicated within the current run. If a later page fails, already written rows remain available and a status row explains the partial result.

### Review summaries and AI insights

Every `game_review_summary` contains useful deterministic metrics:

- reviews scraped and rating distribution
- average rating within the scraped sample
- rating-derived positive, neutral, negative, and unrated counts
- spoiler-review count
- most-liked review references
- platforms represented in the sample
- earliest and latest review dates

When optional AI analysis succeeds, the same row also includes recurring praise and complaints, performance and bug themes, platform signals, gameplay/story/difficulty/value consensus, player-fit guidance, developer opportunities, and a spoiler-free consensus.

Check `analysisMethod` before interpreting a summary:

- `deterministic` means statistics only, with sentiment buckets derived from ratings.
- `openrouter` means the qualitative fields were generated from sampled reviewer opinions.
- `deterministic_fallback` means AI was requested but unavailable or unsuccessful.

Illustrative AI summary row:

```json
{
  "itemType": "game_review_summary",
  "source": "backloggd",
  "gameId": "119133",
  "gameSlug": "elden-ring",
  "gameTitle": "Elden Ring",
  "gameUrl": "https://backloggd.com/games/elden-ring/",
  "reviewsScraped": 100,
  "reviewsAnalyzed": 50,
  "averageScrapedRating": 4.22,
  "sentimentBreakdown": {
    "positive": 39,
    "neutral": 5,
    "negative": 3,
    "mixed": 3,
    "unknown": 0
  },
  "topPraise": [
    {
      "topic": "exploration",
      "count": 18,
      "summary": "Reviewers commonly praise exploration and environmental discovery."
    }
  ],
  "topComplaints": [
    {
      "topic": "PC performance",
      "count": 7,
      "severity": "high",
      "summary": "Some PC-focused reviews report stuttering or inconsistent performance."
    }
  ],
  "spoilerFreeConsensus": "Reviewers commonly praise exploration and combat variety, while some PC players report performance concerns.",
  "isAiGenerated": true,
  "analysisMethod": "openrouter",
  "generatedAt": "2026-07-17T12:05:00.000Z"
}
```

AI summaries describe sampled reviewer opinions, not objective facts. They can contain classification or model errors and should be reviewed before publication or high-stakes use.

### Spoiler handling

| Setting | Raw review rows | AI analysis |
|---|---|---|
| `include` | Kept with `isSpoiler: true` | May be analyzed; summary prose remains spoiler-safe by design |
| `exclude_from_ai` | Kept and clearly marked | Review text is not sent to AI or included in spoiler-free consensus |
| `exclude_completely` | Not written to the Dataset | Not sent to AI |

Spoiler handling relies on Backloggd's public marker. Raw spoiler content remains visible whenever the selected policy keeps the review.

### High-volume scraping and cost control

The Actor uses production-tested pacing and concurrency automatically. For inexpensive bulk extraction:

- use `reviews_only` when you do not need game or summary rows;
- leave AI disabled during the initial bulk collection;
- run a smaller AI summary job only for games that need qualitative analysis;
- keep `maxReviewsToAnalyzePerGame` lower than `maxReviewsPerGame`;
- start with a representative sample before running thousands of reviews;
- export JSONL for streaming pipelines.

The published default is 1,024 MB RAM with a 60-minute timeout. HTTP-only tests succeeded at 512 MB, including 5,000 reviews on the current build, while the 1 GB default keeps headroom for source variation and browser fallback. A prior conservative cloud run completed 50 games and 50,000 unique reviews.

Actual duration and cost depend on game count, available reviews, source latency, retries, Dataset writes, and AI usage.

### Pay-per-event pricing

The Actor charges for completed, durable output:

- `review_extracted` for each unique review successfully written to the Dataset;
- `ai_review_analyzed` for each review that receives a valid accepted AI classification;
- Apify's platform-managed start event when applicable.

Failed requests, retries, duplicate reviews, errors, search matches, metadata rows, summaries, and deterministic fallbacks are not charged as custom extraction events. The Actor respects the run's Apify spending limit. OpenRouter usage is funded by the Actor operator's encrypted environment key and is controlled with the AI review limit.

### Run through the Apify API

Install the Python client with `pip install apify-client`:

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_API_TOKEN")

run = client.actor("thescrapelab/backloggd-game-reviews-scraper").call(
    run_input={
        "searchQueries": ["Elden Ring", "Hades"],
        "maxReviewsPerGame": 100,
        "outputMode": "games_and_reviews",
        "includeOpenRouterAnalysis": False,
    }
)

if run is None:
    raise RuntimeError("Actor run failed")

dataset = client.dataset(run["defaultDatasetId"])
for item in dataset.iterate_items():
    print(item["itemType"], item.get("gameTitle") or item.get("title"))
```

The Dataset can also be exported as JSON, JSONL, CSV, Excel, XML, or HTML from Apify Console or the Dataset API.

### Troubleshooting

#### No games were returned

- Enter at least one title, public game URL, slug, or ID.
- Use a canonical game URL or slug when a title is ambiguous.
- Prefer URLs or slugs over numeric IDs.
- Check `error` rows for `INVALID_INPUT`, `UNSUPPORTED_URL`, or `GAME_NOT_FOUND`.

#### No reviews were returned

- The game may have ratings but no public written reviews.
- Confirm `maxReviewsPerGame` is greater than zero.
- Select an output mode that includes reviews.
- Check `source_status` rows for `no_reviews` or `partial_reviews`.
- With `exclude_completely`, spoiler-marked reviews are not counted as emitted rows.

#### AI summary is missing

- Enable `includeOpenRouterAnalysis`.
- Select `summaries_only`, `reviews_and_summaries`, or `full`.
- The Actor operator must have a valid funded `OPENROUTER_API_KEY` environment secret.
- Check for an `OPENROUTER_FAILED` row. Deterministic summaries remain available when possible.

#### A run is slow or partial

- Retry with fewer games and reviews to isolate the affected source page.
- Review `source_status` and `error` rows for rate-limit or pagination details.
- Browser fallback is limited to eligible public game-page failures; it does not bypass CAPTCHAs or access controls.

### Limitations

- Only public Backloggd data is extracted.
- The Actor is not affiliated with, endorsed by, or operated by Backloggd.
- No Backloggd login is used, and private profiles, private lists, login-required content, and access-controlled routes are not accessed.
- Review availability depends on the game. Displayed rating or review counts can differ from currently retrievable written review cards.
- Some fields are not public for every game or review and remain null, empty, or omitted.
- Backloggd community counters may be abbreviated or approximate.
- Company roles are not consistently labeled; prefer `companies` when exact role attribution matters.
- Reviews are collected in the public recent-first order. Review sorting is not exposed as a client input.
- Pagination can shift while new reviews are posted. Deduplication is current-run only, not a frozen source snapshot.
- Numeric game ID resolution is best effort; direct URLs and slugs are more reliable.
- Individual review pages are not visited solely to enrich optional fields.
- Backloggd can change its HTML, public feeds, route policy, or blocking behavior.
- AI analysis is optional and AI summaries may contain model errors.
- Spoiler controls follow the selected input and Backloggd's public spoiler markers.
- Current-run results are stored in the default Apify Dataset. The Actor does not maintain review history between runs.

### Compliance and stateless behavior

The Actor uses public game pages, public search results, and public review-feed content without authentication. It does not bypass CAPTCHAs, paywalls, authentication, or access controls; access private APIs; or scrape private user collections.

Each run starts from its supplied input and uses only current-run default Apify storage. The Actor does not create a named persistent store, compare with earlier runs, retain review history, or monitor new reviews.

You are responsible for using exported data in accordance with Backloggd's current terms, robots policy, applicable law, and your organization's privacy and retention requirements. Public usernames and profile URLs should still be handled responsibly.

### Support

For a useful support report, include:

- the Apify run ID;
- a small sanitized input example;
- affected public game URLs or search queries;
- expected and actual row types or counts;
- relevant log messages and timestamps.

Never post an Apify token, OpenRouter key, proxy credential, cookie, or private configuration.

# Actor input Schema

## `searchQueries` (type: `array`):

Enter one or more titles, such as Elden Ring, Hades, or Baldur's Gate 3. Each title returns up to five ranked matches.

## `gameUrls` (type: `array`):

Paste public game-page URLs such as https://backloggd.com/games/elden-ring/. Other Backloggd page types are not supported.

## `gameIdsOrSlugs` (type: `array`):

Advanced shortcut for known slugs such as elden-ring. Numeric IDs are accepted but may not resolve; URLs and slugs are more reliable.

## `maxReviewsPerGame` (type: `integer`):

Maximum public written reviews to collect for each resolved game. Use 0 when you only need game metadata.

## `outputMode` (type: `string`):

Choose the rows written to the Dataset. AI summaries require Review summaries only, Reviews + summaries, or Everything.

## `spoilerHandling` (type: `string`):

Keep spoiler-marked reviews, keep them out of AI analysis, or exclude them from the Dataset entirely.

## `includeOpenRouterAnalysis` (type: `boolean`):

Adds spoiler-safe sentiment, praise, complaint, performance, and platform insights to summary rows. Select a Dataset content option that includes summaries. No API key input is required.

## `maxReviewsToAnalyzePerGame` (type: `integer`):

Limits AI usage for each game. Raw scraping can continue up to Maximum reviews per game.

## Actor input object example

```json
{
  "searchQueries": [
    "Elden Ring",
    "Hades"
  ],
  "gameUrls": [
    "https://backloggd.com/games/elden-ring/"
  ],
  "gameIdsOrSlugs": [
    "elden-ring",
    "hades--1"
  ],
  "maxReviewsPerGame": 100,
  "outputMode": "games_and_reviews",
  "spoilerHandling": "exclude_from_ai",
  "includeOpenRouterAnalysis": false,
  "maxReviewsToAnalyzePerGame": 200
}
```

# Actor output Schema

## `resultsOverview` (type: `string`):

Default Dataset with the selected games, written reviews, summaries, search matches, and any client-safe run messages. Check itemType on each row.

## `reviews` (type: `string`):

Review-focused columns in the same Dataset. For mixed output modes, filter itemType=review when exporting.

## `games` (type: `string`):

Game-metadata-focused columns in the same Dataset. For mixed output modes, filter itemType=game when exporting.

## `summaries` (type: `string`):

Deterministic and optional AI summary columns in the same Dataset. For mixed output modes, filter itemType=game\_review\_summary when exporting.

## `messages` (type: `string`):

Client-safe status and error columns in the same Dataset. Filter itemType=error or itemType=source\_status when exporting.

## `allResultsJson` (type: `string`):

Complete clean JSON export. Use itemType to split mixed rows in downstream pipelines.

## `allResultsJsonl` (type: `string`):

Complete streaming-friendly JSONL export. Use itemType to split mixed rows.

## `runSummary` (type: `string`):

Current-run totals for games, reviews, pages, retries, browser fallback, AI usage, and Pay-Per-Event charges.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchQueries": [
        "Elden Ring"
    ],
    "maxReviewsPerGame": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("thescrapelab/backloggd-game-reviews-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchQueries": ["Elden Ring"],
    "maxReviewsPerGame": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("thescrapelab/backloggd-game-reviews-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQueries": [
    "Elden Ring"
  ],
  "maxReviewsPerGame": 100
}' |
apify call thescrapelab/backloggd-game-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=thescrapelab/backloggd-game-reviews-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Backloggd Game Reviews & Database Scraper",
        "description": "Scrape Backloggd games by title or URL and export metadata, ratings, community stats, and one clean row per public written review. Add optional AI summaries for sentiment, praise, complaints, bugs, performance, platform feedback, and spoiler-free consensus.",
        "version": "1.0",
        "x-build-id": "3enHLCMJAZon1vue4"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/thescrapelab~backloggd-game-reviews-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-thescrapelab-backloggd-game-reviews-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/thescrapelab~backloggd-game-reviews-scraper/runs": {
            "post": {
                "operationId": "runs-sync-thescrapelab-backloggd-game-reviews-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/thescrapelab~backloggd-game-reviews-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-thescrapelab-backloggd-game-reviews-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchQueries": {
                        "title": "Search by game title",
                        "type": "array",
                        "description": "Enter one or more titles, such as Elden Ring, Hades, or Baldur's Gate 3. Each title returns up to five ranked matches.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "gameUrls": {
                        "title": "Backloggd game URLs",
                        "type": "array",
                        "description": "Paste public game-page URLs such as https://backloggd.com/games/elden-ring/. Other Backloggd page types are not supported.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "gameIdsOrSlugs": {
                        "title": "Game slugs or numeric IDs (optional)",
                        "type": "array",
                        "description": "Advanced shortcut for known slugs such as elden-ring. Numeric IDs are accepted but may not resolve; URLs and slugs are more reliable.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "maxReviewsPerGame": {
                        "title": "Maximum reviews per game",
                        "minimum": 0,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Maximum public written reviews to collect for each resolved game. Use 0 when you only need game metadata.",
                        "default": 100
                    },
                    "outputMode": {
                        "title": "Dataset content",
                        "enum": [
                            "games_only",
                            "reviews_only",
                            "games_and_reviews",
                            "summaries_only",
                            "reviews_and_summaries",
                            "full"
                        ],
                        "type": "string",
                        "description": "Choose the rows written to the Dataset. AI summaries require Review summaries only, Reviews + summaries, or Everything.",
                        "default": "games_and_reviews"
                    },
                    "spoilerHandling": {
                        "title": "Spoiler reviews",
                        "enum": [
                            "include",
                            "exclude_from_ai",
                            "exclude_completely"
                        ],
                        "type": "string",
                        "description": "Keep spoiler-marked reviews, keep them out of AI analysis, or exclude them from the Dataset entirely.",
                        "default": "exclude_from_ai"
                    },
                    "includeOpenRouterAnalysis": {
                        "title": "Generate AI game-review summaries",
                        "type": "boolean",
                        "description": "Adds spoiler-safe sentiment, praise, complaint, performance, and platform insights to summary rows. Select a Dataset content option that includes summaries. No API key input is required.",
                        "default": false
                    },
                    "maxReviewsToAnalyzePerGame": {
                        "title": "Maximum reviews analyzed per game",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Limits AI usage for each game. Raw scraping can continue up to Maximum reviews per game.",
                        "default": 200
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
