# itch.io Scraper (`mangudai/itch-io-scraper`) Actor

Scrape indie games and game assets from itch.io: titles, prices, discounts, tags, platforms, genres, cover images, and creator profiles. Browse by section, sort, or tag, filter free or on-sale, and export clean structured data. No login or API key needed.

- **URL**: https://apify.com/mangudai/itch-io-scraper.md
- **Developed by:** [Mangudäi](https://apify.com/mangudai) (community)
- **Categories:** E-commerce, Developer tools, Open source
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.01 / 1,000 results

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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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

## itch.io Scraper

Extract indie games and game assets from [itch.io](https://itch.io) as structured data. Point it at a section, a sort order, and an optional tag, and it returns every listing with its price, discount, creator, platforms, tags, and cover image. No login, no API key, and no captcha solving.

itch.io has no official public API, so scraping the browse pages is the practical way to pull this data for market research, price and discount tracking, competitor analysis, deal aggregation, or building a catalog of free and paid titles.

### What it does

- Browses the **Games** or **Game assets** section of itch.io
- Sorts by top sellers, newest, top rated, on sale, or new and popular
- Filters by any itch.io tag or genre (tabletop, rpg, horror, pixel-art, puzzle, and thousands more)
- Optionally returns only free titles
- Follows pagination up to your `maxItems` limit
- Reads only public listing pages. The `/search` route and download links disallowed in itch.io's robots.txt are never requested.

### Example uses

- Track daily new and free tabletop or TTRPG releases (`tag: tabletop`, `freeOnly: true`)
- Monitor discounts across a genre for a deals newsletter (`sort: on-sale`)
- Pull top-selling assets to study pricing (`section: game-assets`, `sort: top-sellers`)
- Build a lead list of active creators in a niche from the `author` and `authorUrl` fields

### Input

| Field | Type | Default | Notes |
|-------|------|---------|-------|
| `section` | select | `games` | `games` or `game-assets` |
| `sort` | select | `top-sellers` | `top-sellers`, `newest`, `top-rated`, `on-sale`, `new-and-popular` |
| `tag` | text | empty | itch.io tag or genre slug, e.g. `tabletop` |
| `freeOnly` | boolean | `false` | Free titles only |
| `maxItems` | integer | `100` | Result cap |
| `startUrls` | array | empty | Advanced: itch.io browse URLs to scrape directly |
| `proxyConfiguration` | proxy | Apify Proxy | Recommended for reliable runs |

Running with the defaults returns the current itch.io top sellers, so a fresh run always produces data.

### Output

Each item looks like this:

```json
{
  "gameId": 4552321,
  "title": "Sector Hexes for Print",
  "url": "https://gm-lazarus.itch.io/sector-hexes-for-print",
  "author": "Lazarus",
  "authorUrl": "https://gm-lazarus.itch.io",
  "genre": "Role Playing",
  "platforms": ["windows", "web"],
  "shortText": null,
  "coverImage": "https://img.itch.zone/.../315x250.png",
  "price": "$2.01",
  "priceValue": 2.01,
  "currency": "USD",
  "isFree": false,
  "isOnSale": true,
  "saleDiscount": "-33%",
  "originalPrice": 3.0,
  "section": "games",
  "sort": "on-sale",
  "tag": "tabletop",
  "browseUrl": "https://itch.io/games/on-sale/tag-tabletop",
  "scrapedAt": "2026-07-22T09:30:00+00:00"
}
````

### Pricing

This Actor uses Apify's pay-per-event pricing. You pay a small amount per result plus a per-run start fee, and platform usage is free. See the pricing badge on the Actor page for the current rate.

### Notes

itch.io returns HTTP 403 for the free + sort + tag combination, so when `freeOnly` and a `tag` are set together the sort option is dropped automatically. Everything else combines freely.

# Actor input Schema

## `section` (type: `string`):

Which part of itch.io to browse.

## `sort` (type: `string`):

How the listing is ordered on itch.io.

## `tag` (type: `string`):

Optional itch.io tag or genre slug, for example tabletop, rpg, horror, pixel-art, or puzzle. Leave empty to browse everything.

## `freeOnly` (type: `boolean`):

Restrict results to free titles. When combined with a tag, the sort option is ignored (an itch.io URL limitation).

## `maxItems` (type: `integer`):

Stop after this many results.

## `startUrls` (type: `array`):

Optional list of itch.io browse or tag URLs to scrape directly. Overrides the options above. Search URLs are skipped to respect robots.txt.

## `proxyConfiguration` (type: `object`):

Proxy settings. Apify Proxy is recommended to keep requests reliable.

## Actor input object example

```json
{
  "section": "games",
  "sort": "top-sellers",
  "tag": "",
  "freeOnly": false,
  "maxItems": 100,
  "startUrls": [],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("mangudai/itch-io-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 = { "proxyConfiguration": { "useApifyProxy": True } }

# Run the Actor and wait for it to finish
run = client.actor("mangudai/itch-io-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 '{
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call mangudai/itch-io-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "itch.io Scraper",
        "description": "Scrape indie games and game assets from itch.io: titles, prices, discounts, tags, platforms, genres, cover images, and creator profiles. Browse by section, sort, or tag, filter free or on-sale, and export clean structured data. No login or API key needed.",
        "version": "0.0",
        "x-build-id": "sMbADijPYWipCgXXi"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/mangudai~itch-io-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-mangudai-itch-io-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/mangudai~itch-io-scraper/runs": {
            "post": {
                "operationId": "runs-sync-mangudai-itch-io-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/mangudai~itch-io-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-mangudai-itch-io-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": {
                    "section": {
                        "title": "Section",
                        "enum": [
                            "games",
                            "game-assets"
                        ],
                        "type": "string",
                        "description": "Which part of itch.io to browse.",
                        "default": "games"
                    },
                    "sort": {
                        "title": "Sort / filter",
                        "enum": [
                            "top-sellers",
                            "newest",
                            "top-rated",
                            "on-sale",
                            "new-and-popular"
                        ],
                        "type": "string",
                        "description": "How the listing is ordered on itch.io.",
                        "default": "top-sellers"
                    },
                    "tag": {
                        "title": "Tag",
                        "type": "string",
                        "description": "Optional itch.io tag or genre slug, for example tabletop, rpg, horror, pixel-art, or puzzle. Leave empty to browse everything.",
                        "default": ""
                    },
                    "freeOnly": {
                        "title": "Free only",
                        "type": "boolean",
                        "description": "Restrict results to free titles. When combined with a tag, the sort option is ignored (an itch.io URL limitation).",
                        "default": false
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 1,
                        "maximum": 20000,
                        "type": "integer",
                        "description": "Stop after this many results.",
                        "default": 100
                    },
                    "startUrls": {
                        "title": "Start URLs (advanced)",
                        "type": "array",
                        "description": "Optional list of itch.io browse or tag URLs to scrape directly. Overrides the options above. Search URLs are skipped to respect robots.txt.",
                        "default": [],
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy settings. Apify Proxy is recommended to keep requests reliable.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
