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

Scrape itch.io games, tools, game assets, soundtracks and books from any browse page, tag, creator or game URL. Get price and sale, rating, platforms, genre, tags, status, release dates, screenshots and description for each project.

- **URL**: https://apify.com/anyxsolutions/itch-io-scraper.md
- **Developed by:** [Anyx Solutions](https://apify.com/anyxsolutions) (community)
- **Categories:** E-commerce, Developer tools
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

![banner](https://anyx.solutions/banners/itch-io-scraper.png)

## Itch.io Scraper

**Indie games, tools and game assets from itch.io — prices and sales, ratings, platforms, genres, tags and release dates — as clean JSON.**

Scrape itch.io games, tools, game assets, soundtracks and books from any browse page, tag, creator
or game URL. Get price and sale, rating, platforms, genre, tags, status, release dates, screenshots
and description for each project. Paste an itch.io browse page with your sorting and filters
(top rated, newest, on sale, free, a tag, a platform), a collection, a creator's page or a single
game page, or just give tags, and get one row per project with its price and discount, average
rating and number of ratings, platforms, genres, tags, development status, release and update
dates, languages, inputs, links, cover image, screenshots and full description. No login, no API
key, no proxy. Built for indie game market research, discovering games and creators, tracking
prices and sales, and building game and asset catalogs.

### ⚡ Quick start

```json
{
  "startUrls": [{ "url": "https://itch.io/games/top-rated" }],
  "maxItems": 5
}
```

### 🧩 Input

| Field                | Type    | Required | Default                      | Description                                                                                                                                                                                                     |
| -------------------- | ------- | -------- | ---------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `startUrls`          | array   | no       | —                            | itch.io browse pages (`itch.io/games/top-rated`, `itch.io/game-assets/free/tag-pixel-art` …), collections (`itch.io/c/<id>/…`), creator pages (`<creator>.itch.io`) or game pages (`<creator>.itch.io/<game>`). |
| `tags`               | array   | no       | —                            | itch.io tags to browse games by, such as `horror`, `pixel art` or `roguelike`. Each tag returns the games on its tag page, most popular first. Give these, `startUrls`, or both.                                |
| `maxItems`           | integer | no       | —                            | Maximum number of projects per start URL or tag. The input form starts at 5; leave it empty to get every project the page lists.                                                                                |
| `includeDetails`     | boolean | no       | `true`                       | Open each project's page for its full details: tags, status, dates, original price and sale end, languages, links, screenshots and description. Turn it off for a faster run with only the browse-grid fields.  |
| `proxyConfiguration` | object  | no       | `{ "useApifyProxy": false }` | Proxy settings. itch.io needs no proxy; for runs of thousands of projects, a datacenter proxy runs faster.                                                                                                      |

**Using itch.io filters.** Open [itch.io/games](https://itch.io/games) (or Tools, Game assets,
Soundtracks, Comics, Books, Physical games), pick a sort order and filters such as Free, On sale,
a tag or a platform, and paste the address from your browser into `startUrls`. The Actor returns
the same projects in the same order, page after page. itch.io shows a browser check on pages that
combine three or more filters, so keep to two (for example
`https://itch.io/games/top-rated/tag-horror`).

### 📤 Output

Each project is one dataset row. Prices are in the currency the creator sells in; `price` is what a
buyer pays now, after any sale. With `includeDetails` off, rows carry what the browse grid shows:
title, tagline, creator, price and discount, platforms, genre, rating and cover image.

#### Fields

| Field               | Type    | Description                                                                                              |
| ------------------- | ------- | -------------------------------------------------------------------------------------------------------- |
| `id`                | number  | itch.io project ID.                                                                                      |
| `url`               | string  | The project's itch.io page.                                                                              |
| `title`             | string  | Project title.                                                                                           |
| `classification`    | string  | `game`, `tool`, `assets`, `game_mod`, `physical_game`, `soundtrack`, `comic`, `book` or `other`.         |
| `shortText`         | string  | The tagline shown under the title.                                                                       |
| `creator`           | object  | The creator's `name` and itch.io page `url`.                                                             |
| `price`             | number  | Lowest price a buyer can pay now, after any sale; `0` for free and pay-what-you-want-from-zero projects. |
| `originalPrice`     | number  | Price before the current sale; `null` when not on sale.                                                  |
| `currency`          | string  | Price currency (ISO 4217); `null` for free projects.                                                     |
| `isFree`            | boolean | Whether the project can be had for free.                                                                 |
| `nameYourOwnPrice`  | boolean | Whether buyers may pay more than the price ("Name your own price" or "or more").                         |
| `onSale`            | boolean | Whether the project is discounted right now.                                                             |
| `discountPercent`   | number  | Current discount, in percent.                                                                            |
| `saleEndsAt`        | string  | When the current sale ends, as ISO 8601.                                                                 |
| `platforms`         | array   | `HTML5` (playable in the browser), `Windows`, `macOS`, `Linux`, `Android` …                              |
| `playableInBrowser` | boolean | Whether the project plays or runs in the browser.                                                        |
| `genres`            | array   | Genres, such as Adventure or Visual Novel.                                                               |
| `tags`              | array   | The creator's tags.                                                                                      |
| `ratingAverage`     | number  | Average rating out of 5.                                                                                 |
| `ratingCount`       | number  | Number of ratings.                                                                                       |
| `status`            | string  | Development status: Released, In development, Prototype, On hold …                                       |
| `releasedAt`        | string  | Release date, as ISO 8601, when the creator set one.                                                     |
| `publishedAt`       | string  | When the page was published, as ISO 8601, when itch.io shows it.                                         |
| `updatedAt`         | string  | Last update, as ISO 8601.                                                                                |
| `madeWith`          | array   | Engines and tools the project was made with, such as Unity, Godot or Ren'Py.                             |
| `averageSession`    | string  | Typical play session, such as "About an hour".                                                           |
| `languages`         | array   | Supported languages.                                                                                     |
| `inputs`            | array   | Supported inputs: Keyboard, Mouse, controllers, Touchscreen …                                            |
| `accessibility`     | array   | Accessibility features, such as Subtitles or Configurable controls.                                      |
| `links`             | array   | The creator's links (`title`, `url`): homepage, Steam, Discord, Patreon …                                |
| `summary`           | string  | The page's one-line summary, such as "A downloadable game for Windows and Linux".                        |
| `coverImage`        | string  | Cover image URL.                                                                                         |
| `screenshots`       | array   | Full-size screenshot URLs.                                                                               |
| `description`       | string  | Full description as plain text.                                                                          |
| `descriptionHtml`   | string  | Full description as HTML.                                                                                |
| `sourceUrl`         | string  | The start URL the project was found from.                                                                |

<details><summary>Example output</summary>

```json
{
  "id": 424895,
  "url": "https://adamgryu.itch.io/a-short-hike",
  "title": "A Short Hike",
  "classification": "game",
  "shortText": "a little exploration game about hiking up a mountain",
  "creator": {
    "name": "adamgryu",
    "url": "https://adamgryu.itch.io"
  },
  "price": 7.99,
  "originalPrice": null,
  "currency": "USD",
  "isFree": false,
  "nameYourOwnPrice": true,
  "onSale": false,
  "discountPercent": null,
  "saleEndsAt": null,
  "platforms": ["Windows", "macOS", "Linux"],
  "playableInBrowser": false,
  "genres": ["Adventure", "Platformer"],
  "tags": [
    "3D",
    "Atmospheric",
    "Cute",
    "Funny",
    "nature",
    "Relaxing",
    "Short",
    "Walking simulator"
  ],
  "ratingAverage": 4.89,
  "ratingCount": 4394,
  "status": "Released",
  "releasedAt": "2019-07-30T12:40:00.000Z",
  "publishedAt": null,
  "updatedAt": "2026-09-16T06:44:00.000Z",
  "madeWith": ["Unity"],
  "averageSession": "About an hour",
  "languages": [
    "English",
    "Spanish; Latin America",
    "French",
    "Japanese",
    "Portuguese (Brazil)"
  ],
  "inputs": ["Keyboard", "Mouse", "Xbox controller", "Playstation controller"],
  "accessibility": ["Subtitles", "Configurable controls"],
  "links": [
    {
      "title": "Steam",
      "url": "https://store.steampowered.com/app/1055540/A_Short_Hike/"
    },
    { "title": "Homepage", "url": "http://www.ashorthike.com/" },
    {
      "title": "Soundtrack",
      "url": "https://marksparling.bandcamp.com/album/a-short-hike-original-soundtrack"
    },
    { "title": "Twitter/X", "url": "https://twitter.com/adamgryu" }
  ],
  "summary": "A downloadable game for Windows, macOS, and Linux",
  "coverImage": "https://img.itch.zone/aW1nLzIyNDgzNjgucG5n/original/LlCi9O.png",
  "screenshots": [
    "https://img.itch.zone/aW1hZ2UvNDI0ODk1LzIyNjQzODMuZ2lm/original/GYUdXi.gif",
    "https://img.itch.zone/aW1hZ2UvNDI0ODk1LzIyMDgwMDMuZ2lm/original/UQr4GT.gif"
  ],
  "description": "Hike, climb, and soar through the peaceful mountainside landscapes of Hawk Peak Provincial Park.\nFollow the marked trail …",
  "descriptionHtml": "<p class=\"text-center\"><img class=\"custom-bird\" src=\"https://img.itch.zone/aW1nLzIyMDc3NjgucG5n/original/wq8uPX.png\" wid …",
  "sourceUrl": "https://itch.io/games/top-rated"
}
```

</details>

### 💡 Use cases

- **Indie game market research** — size up a genre or tag: how many games, at what prices, with what ratings, on which platforms and engines.
- **Game and creator discovery** — find promising new releases, top-rated projects and the creators behind them.
- **Price and sale tracking** — watch discounts, sale end dates and pay-what-you-want pricing across games and asset packs.
- **Asset and tool catalogs** — build lists of game assets, tools, soundtracks and tabletop games with their prices, links and media.

### ❓ FAQ

- **Do I need an itch.io account or an API key?** No. The Actor reads the same public pages any visitor sees.
- **Do I need a proxy?** No. It runs without one by default and paces itself, since itch.io slows down visitors who request pages too quickly. For runs of thousands of projects, a datacenter proxy spreads the work over several IPs and runs faster.
- **Can I search itch.io by keyword?** itch.io's search pages are off-limits to crawlers under its robots.txt, so the Actor does not open them. Use `tags` instead (each tag is an itch.io tag page), or paste a tag page with your filters, such as `https://itch.io/games/newest/tag-horror`.
- **Why did a browse URL return nothing?** itch.io shows a browser check on browse pages that combine three or more filters (for example sort + Free + a tag), and the log says so. Keep to two filters. A tag that does not exist on itch.io also returns nothing.
- **Why is the price 0 for a project marked on sale?** Some creators sell pay-what-you-want projects from $0 with a discount on the suggested price. The project is free to download, and itch.io still lists the sale.
- **How many projects can I get from one browse page?** As many as itch.io lists, 36 per page, up to the roughly 9,000 results itch.io shows for one sort and filter combination. Narrow the filters to reach further.
- **Why are tags and dates empty for some rows?** They come from each project's own page. Turn `includeDetails` on (the default) to get them.

### 🔗 More scrapers by Anyx

- [Steam Scraper](https://apify.com/anyxsolutions/steam-scraper)
- [App Store Scraper](https://apify.com/anyxsolutions/app-store-scraper)
- [GitHub Trending Scraper](https://apify.com/anyxsolutions/github-trending-scraper)
- [Google Play Store Scraper](https://apify.com/anyxsolutions/google-play-scraper)

### 🤝 Anyx Solutions

We build custom scrapers and data-extraction pipelines.

- Email: tantosthor@gmail.com

### 🖼 Image credit

Image credit: [itch.io](https://itch.io/)

# Actor input Schema

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

itch.io browse pages such as https://itch.io/games/top-rated or https://itch.io/game-assets/free/tag-pixel-art (sorting and up to two filters are kept), collections, creator pages such as https://managore.itch.io/, or game pages such as https://adamgryu.itch.io/a-short-hike.

## `tags` (type: `array`):

itch.io tags to browse games by, for example horror, pixel art or roguelike. Each tag returns the games on its tag page, most popular first.

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

Maximum number of projects to return per start URL or tag. Leave empty to get every project the page lists.

## `includeDetails` (type: `boolean`):

Open each project's page for its full details: tags, status, release and update dates, original price and sale end, languages, links, screenshots and description. Turn it off for a faster run with only what the browse grid shows.

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

Proxy settings. itch.io needs no proxy; for runs of thousands of projects, a datacenter proxy spreads the requests over several IPs and runs faster.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://itch.io/games/top-rated"
    }
  ],
  "maxItems": 5,
  "includeDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (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 = {
    "startUrls": [
        {
            "url": "https://itch.io/games/top-rated"
        }
    ],
    "maxItems": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("anyxsolutions/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 = {
    "startUrls": [{ "url": "https://itch.io/games/top-rated" }],
    "maxItems": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("anyxsolutions/itch-io-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://itch.io/games/top-rated"
    }
  ],
  "maxItems": 5
}' |
apify call anyxsolutions/itch-io-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,anyxsolutions/itch-io-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/mz7cigMdJClj65RXW/builds/wG1GWGvfa7DojgIzw/openapi.json
