# itch.io Scraper - Indie Game Listings, Prices & Developers (`logiover/itch-io-scraper`) Actor

Export itch.io games in bulk from any browse section or tag: title, developer, price, genre, supported platforms, short description, cover art and store URL. Track new releases, sales and top-rated indie titles as JSON, CSV or Excel.

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

## Pricing

from $2.10 / 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?

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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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 — Indie Game Listings, Prices & Developers

itch.io in rows: game title, developer, price, genre, supported platforms, short description, cover art and store link — from any browse section or tag.

### What does the itch.io Scraper do?

This Actor collects games from **itch.io**, the marketplace where independent developers publish directly, and returns one row per game with the **developer and their store URL as separate columns** — which is what turns a list of games into a list of studios you can actually reach or track.

You pick a browse section — **new and popular**, **newest releases**, **top rated**, **on sale**, **free** or **paid** — and optionally narrow it to one or more **tags** like `horror`, `pixel-art`, `roguelike` or `visual-novel`. Each tag is crawled as its own pass, so a multi-tag run gives you clean per-tag coverage rather than one blurred set.

A note on the Price column, because it surprises people: itch.io only prints a price on paid listings. On **On sale** and **Paid** it fills on essentially every row; on **Newest** and **New and popular** most developers release free or name-your-price, so the column is legitimately empty far more often than not. The Actor reports what itch.io stated rather than guessing a price that was never published.

### Who is it for?

- **Indie game publishers and scouts** looking for titles and studios early.
- **Games press and content creators** tracking what is releasing and trending.
- **Storefronts and launchers** sourcing catalogue candidates.
- **Game jam organisers** measuring output around a jam or a tag.
- **Market researchers** studying indie pricing, genre mix and platform support.
- **Investors and accelerators** building a pipeline of active developers.
- **Players and curators** assembling themed collections.

### Use cases

- Track every new release in a genre, day by day.
- Build a list of active indie developers with their store links.
- Watch the On sale section for discount campaigns.
- Measure how many games in a tag ship for Windows, macOS, Linux or browser.
- Compare genre mix between newest releases and top rated.
- Assemble a curated collection around a tag with cover art included.
- Monitor a jam's output by crawling its tag.
- Feed a games-catalogue database or recommendation tool.

### Why use this itch.io Scraper?

- **Developer name and developer URL on every row**, so the export doubles as a studio directory.
- **Six browse sections and unlimited tags**, each crawled cleanly.
- **Platform support extracted from the card's OS icons** — Windows, macOS, Linux, Android, iOS, browser — which is not a plain field on the page.
- **Stable card identification.** The Actor keys on itch.io's own game id rather than a CSS class that shifts between responses.
- **Cover art on every row**, ready for a catalogue or a collection page.
- **Runs on shared datacenter proxy**, keeping large jobs cheap.

### What data can you extract?

| Field | Description |
| --- | --- |
| `gameId` | itch.io's own game identifier |
| `title` | Game title |
| `developer` | Developer or studio name |
| `price` | Listed price — fills on paid and on-sale listings |
| `genre` | Genre as tagged by the developer |
| `platforms` | Windows, macOS, Linux, Android, iOS, Browser |
| `description` | Short pitch from the listing card |
| `section` | Which browse section or tag produced the row |
| `developerUrl` | Developer's itch.io page |
| `thumbnail` | Cover art |
| `url` | Direct link to the game |

#### Sample output

```json
{
  "gameId": "4318026",
  "title": "FEED THE AI",
  "developer": "WeirdKidGames",
  "price": null,
  "genre": "Simulation",
  "platforms": "Windows, Linux",
  "description": "Feed the AI. Collect data. Unlock upgrades. Watch the algorithm learn.",
  "section": "new-and-popular",
  "developerUrl": "https://weirdkidgames.itch.io",
  "thumbnail": "https://img.itch.zone/aW1nLzI5NDk4NTk2LnBuZw==/315x250%23c/LxQvT2.png",
  "url": "https://weirdkidgames.itch.io/feed-the-ai"
}
```

### How to use the itch.io Scraper

#### Option A — a browse section

Pick a **Browse section** and set **Maximum games**. `New and popular` is the default and the best general-purpose view of what is happening on the platform right now.

#### Option B — one or more tags

Add tags such as `horror`, `pixel-art`, `roguelike` or `metroidvania`, one per line. Each is crawled separately against the section you chose, and the `section` column records which tag a row came from.

#### Option C — pricing research

Set the section to `On sale` or `Paid`. Both fill the Price column on nearly every row, which is the set you want for pricing analysis.

#### Option D — a studio directory

Run any section deep and deduplicate the export on `developerUrl`. You now have a list of active developers rather than a list of games.

### Input parameters

| Parameter | Type | Description |
| --- | --- | --- |
| `section` | select | New and popular, Newest, Top rated, On sale, Free, Paid |
| `tags` | array | itch.io tags, one per line; each crawled separately |
| `maxItems` | integer | How many games to collect in total |
| `proxyConfiguration` | object | Shared datacenter proxy by default |

### Tips for best results

- **Use `On sale` or `Paid` for anything price-related.** The other sections are dominated by free and name-your-price releases.
- **Tags are hyphenated.** `visual-novel`, not `visual novel` — though the Actor will hyphenate spaces for you.
- **`Top rated` has the richest metadata.** Genre and description are filled on nearly every card there.
- **Platform support comes from the download icons**, so a game that only lists a browser build shows `Browser` and nothing else.
- **Deduplicate on `developerUrl`** when you want studios rather than titles.

### Integrations

Send results to Google Sheets, Airtable, Slack, Zapier, Make or your own endpoint through Apify's integrations, or schedule a daily run to track new releases automatically.

### API usage

```bash
curl -X POST "https://api.apify.com/v2/acts/YOUR_USERNAME~itch-io-scraper/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "section": "on-sale",
    "tags": ["horror", "roguelike"],
    "maxItems": 1000
  }'
```

Results export as JSON, CSV, Excel, XML or RSS.

### Use with AI agents (MCP)

Available as a tool through Apify's MCP server, so an agent can answer "what horror games released this week" or "which indie titles are on sale" without custom code.

### FAQ

#### Do I need an itch.io account or API key?

No. The browse pages this Actor reads are open to any visitor.

#### Why is the Price column mostly empty?

Because itch.io only prints a price on paid listings, and most of the platform is free or name-your-price. Switch the section to `On sale` or `Paid` and it fills on nearly every row.

#### How many games can one run return?

The browse sections page deep, so thousands of rows from a single section is normal. Tag-filtered runs are bounded by how many games carry the tag.

#### What tags can I use?

Any tag itch.io recognises — `horror`, `pixel-art`, `roguelike`, `visual-novel`, `puzzle`, `platformer`, `multiplayer` and so on. Open `itch.io/games/tag-<name>` in a browser to confirm one exists.

#### Why is `genre` sometimes empty?

Genre is optional for developers. Roughly four cards in five carry one on the popular sections, fewer on newest releases.

#### Does it collect ratings, downloads or reviews?

No. Those are not on the browse card. This Actor exports the listing as itch.io presents it.

#### Can I get every game by one developer?

Not directly — this Actor walks browse sections. Run a section deep and filter the export on `developer`.

#### Can I export to CSV or Excel?

Yes — JSON, CSV, Excel, XML and RSS.

#### How fresh is the data?

Every run reads itch.io live.

#### Why did my run return zero games?

Almost always a tag that does not exist. Check `itch.io/games/tag-<your-tag>` loads in a browser first.

### Is it legal to scrape itch.io?

This Actor reads only public browse pages. Collecting publicly available data is generally lawful, but you are responsible for how you use it — respect itch.io's terms, do not republish game assets or descriptions wholesale, and do not use developer URLs for unsolicited bulk contact.

### Related scrapers

Pair with the other games and marketplace Actors in the store to cover storefronts, game data and community platforms alongside itch.io.

# Actor input Schema

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

Which itch.io browse page to walk. itch.io only prints a price on paid listings, so the Price column fills on On sale and Paid, and stays empty where the developer offers the game free or name-your-price.

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

Optional. Narrow the section to one or more itch.io tags, one per line — for example horror, pixel-art, roguelike, visual-novel. Each tag is crawled separately.

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

How many games to collect in total across every tag.

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

itch.io answers fine through Apify's shared datacenter proxy, which keeps runs cheap. Switch to RESIDENTIAL only if you hit blocks on very large jobs.

## Actor input object example

```json
{
  "section": "new-and-popular",
  "maxItems": 500,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Every record collected in this run. Open the Dataset tab to browse, filter or export as JSON, CSV or Excel.

# 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 = {
    "section": "new-and-popular",
    "maxItems": 500,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/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 = {
    "section": "new-and-popular",
    "maxItems": 500,
    "proxyConfiguration": { "useApifyProxy": True },
}

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,logiover/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/82rO6TBuVxjAYAP1D/builds/GrzYSw1bzIIDtKqH9/openapi.json
