# itch.io Game Assets Scraper (`crawlerbros/itch-io-game-assets-scraper`) Actor

Scrape game asset listings from itch.io - the open marketplace for indie games and game assets. Browse by tag (animation, 2D, 3D, characters, audio, etc.) or by category (new & popular, top rated, etc.). Returns asset name, author, price, description, tags, and URL.

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

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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.

- **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 Game Assets Scraper

Extract game asset listings from **itch.io** — the open marketplace for indie games, tools, and game-development assets (sprites, tilesets, audio, fonts, 3D models, and more).

### Features

- **Browse popular assets**, **filter by tag** (2D, 3D, characters, audio, pixel art, RPG, Blender, Voxel, Low-poly, Retro, Unreal Engine, and 60+ more), **search by keyword**, or **look up specific listing URLs directly**
- **Sort** by Popular, New & Popular, Top Sellers, Top Rated, or Most Recent
- **Filter by price/recency**: Free, On Sale, Paid only, $5 or less, $15 or less, Last Day/7 Days/30 Days
- **Filter by AI content**: AI Assisted, AI-generated graphics, audio, text, or code (combinable with `tag`)
- Returns: asset name, author, price, description, tags, thumbnail, URL, sale discount (original price & discount % when on sale), and (on the Top Rated sort) average rating & ratings count
- **`byUrl` mode** returns a full detail record per listing URL: everything above plus genre, tools it was made with, license, languages, content notice, release status, category, full-size screenshot URLs, and the downloadable file list (name, size, platform availability)
- No login, cookies, or proxy required — itch.io's browse JSON endpoint and listing pages are fully public
- Automatic retry with backoff on rate limits

### Input

| Field | Type | Description |
|---|---|---|
| `mode` | select | `browse` (popular assets), `byTag` (filter by tag), `search` (keyword search), or `byUrl` (look up specific listing URLs) |
| `query` | string | Keyword to search for (used in `search` mode). Required when `mode` is `search`. |
| `tag` | select | Tag to filter by in `byTag` mode (66 tags available) |
| `sortBy` | select | Sort order: Popular, New & Popular, Top Sellers, Top Rated, Most Recent |
| `filterBy` | select | Optional price/recency filter (Free, On Sale, Paid, $5/$15 or less, Last Day/7/30 Days). Takes precedence over `sortBy` when set, but is overridden by `aiContent` if that is also set. |
| `aiContent` | select | Optional AI-assistance filter (AI Assisted, AI-generated graphics/audio/text/code), combinable with `tag`. Takes precedence over both `sortBy` and `filterBy` when set. |
| `startUrls` | array | Direct itch.io listing URLs to fetch full detail records for (used in `byUrl` mode). Required when `mode` is `byUrl`. |
| `maxItems` | integer | Max assets to return, or in `byUrl` mode the max number of listing URLs to look up (1–200, default 20) |

### Output

| Field | Description |
|---|---|
| `gameId` | itch.io numeric game/asset ID |
| `name` | Asset/listing title |
| `author` | Creator or studio name |
| `price` | Price (e.g. `"4.99"`, `"Free"`) — the current, already-discounted price when on sale |
| `originalPrice` | Pre-discount price, e.g. `"4.99"` (only present when the listing is on an active sale; `byUrl` mode only) |
| `discountPercent` | Active sale discount percentage, e.g. `50` (only present when the listing is on an active sale) |
| `url` | itch.io listing URL |
| `thumbnailUrl` | Cover/thumbnail image URL |
| `description` | Short blurb/description |
| `tags` | Array of itch.io tags attached to the listing |
| `rating` | Average user rating out of 5 (present when `sortBy` is `top-rated`, and always in `byUrl` mode) |
| `ratingsCount` | Number of ratings behind the average (present when `sortBy` is `top-rated`, and always in `byUrl` mode) |
| `genre` | Listing genre, e.g. `"Role Playing"` (`byUrl` mode only) |
| `madeWith` | Array of tools/engines the asset was made with, e.g. `["Unity", "GameMaker"]` (`byUrl` mode only) |
| `license` | Asset license, e.g. `"Creative Commons Zero v1.0 Universal"` (`byUrl` mode only) |
| `averageSession` | Typical usage session length, e.g. `"A few seconds"` (`byUrl` mode only) |
| `languages` | Array of listing languages, e.g. `["English"]` (`byUrl` mode only) |
| `contentNotice` | Content disclosure, e.g. `"No generative AI was used"` (`byUrl` mode only) |
| `status` | Release status, e.g. `"Released"` (`byUrl` mode only) |
| `category` | itch.io classification, e.g. `"Assets"` (`byUrl` mode only) |
| `screenshots` | Array of full-size screenshot/preview image URLs (`byUrl` mode only) |
| `files` | Array of downloadable files, each with `name`, `size` (e.g. `"149 MB"`), `platforms` (e.g. `["Windows", "Linux"]`, only present when itch.io shows platform icons for that file), and `minPrice` (e.g. `"$1.50 USD"`, only present when the listing charges per-file, such as a free base download alongside paid bonus files) (`byUrl` mode only) |
| `recordType` | Always `"asset"` |
| `scrapedAt` | ISO 8601 timestamp |

### Example Input

```json
{
  "mode": "byTag",
  "tag": "pixel-art",
  "sortBy": "top-rated",
  "maxItems": 20
}
```

### Example Output

```json
{
  "gameId": "671751",
  "name": "Modern Interiors - RPG Tileset [16X16]",
  "author": "LimeZu",
  "price": "Free",
  "url": "https://limezu.itch.io/moderninteriors",
  "thumbnailUrl": "https://img.itch.zone/aW1nLzEwOTY0ODY1LnBuZw==/315x250%23c/gNkTNV.png",
  "description": "16x16 tilesets for your top-down game",
  "tags": ["tileset", "top-down", "2D"],
  "recordType": "asset",
  "scrapedAt": "2026-08-08T10:00:00+00:00"
}
```

### Supported Tags

Animation, 2D, 3D, Character, Audio, Pixel Art, Tileset, UI, Font, VFX, RPG, Sprite, Platformer, Texture, Fantasy, Sci-Fi, Music, Sound Effects, Top-Down, Isometric, Unity, Godot, Horror, Puzzle, Adventure, Medieval, 16x16, 32x32, 8x8, Asset Pack, Backgrounds, Blender, Brushes, Buttons, ENDESGA 32, FBX, GUI, Icons, Low-poly, Materials, Models, Modern, Modular, Music Production, PBR, picoCAD, PNG, Royalty Free, Shaders, SVG, Project Template, Tilemap, Vehicles, Voxel, VRChat, WAV, Weapons, 8-Bit, 16-Bit, 1-Bit, Futuristic, Gothic, Cute, Retro, Unreal Engine, MIDI, No AI.

### FAQ

**What is itch.io?** itch.io is an open marketplace and hosting platform for indie games, game-development tools, and game assets (sprites, tilesets, audio packs, fonts, 3D models, etc.), launched in 2013.

**Do I need an itch.io account?** No — browsing and filtering game assets on itch.io is fully public. No login is required.

**Do I need a proxy?** No. itch.io's browse JSON endpoint (`?format=json`) is accessible from any IP without a proxy.

**Can I combine a tag with a price/recency filter?** Yes — set both `tag` (with `mode: byTag`) and `filterBy`. When both `sortBy` and `filterBy` are set, `filterBy` takes precedence.

**How many results can I get?** Up to 200 assets per run via `maxItems`, paginated automatically (36 results per itch.io page for browse/tag modes, 54 per page for search).

**Are free assets included?** Yes — both free and paid assets are captured. Use `filterBy: "free"` to get only free assets.

**Can I search by keyword instead of browsing/tagging?** Yes — set `mode: "search"` and provide a `query` (e.g. `"pixel dungeon"`). Results are scoped to itch.io's Game assets classification only (games, tools, comics, etc. are excluded), so every result is a genuine asset listing. Note that itch.io's own search backend only reliably paginates a limited number of results per query (commonly the first 50-100), even if `maxItems` is set higher — the actor detects this automatically and returns every unique result it can reach rather than looping on duplicates.

**Can I look up specific listing URLs directly?** Yes — set `mode: "byUrl"` and provide one or more direct itch.io listing URLs in `startUrls` (e.g. `https://limezu.itch.io/moderninteriors`). This is the only mode that returns the extra detail fields (`genre`, `madeWith`, `license`, `averageSession`, `languages`, `contentNotice`, `status`, `category`, `screenshots`, `files`) and always includes `rating`/`ratingsCount` when itch.io has them, regardless of sort order.

**Can I filter out (or specifically find) AI-generated assets?** Yes — set `aiContent` to `ai-assisted` (any AI use disclosed), or narrow to `ai-graphics`, `ai-audio`, `ai-text`, or `ai-code`. Combine with `tag` (in `byTag` mode) to scope further, e.g. AI-generated graphics tagged `2d`.

**Can I tell if a listing is currently on sale?** Yes — when itch.io shows an active sale on a listing, `discountPercent` (e.g. `50` for 50% off) is included in every mode, and `byUrl` mode also includes `originalPrice` (the pre-discount price). `price` always reflects the current, already-discounted price.

**Can I see what files a listing includes and their sizes?** Yes — in `byUrl` mode, the `files` field lists every downloadable file itch.io shows on the listing page, with its display name, human-readable size, (when itch.io shows platform icons for that file) which platforms it supports, and (for listings that charge per-file, e.g. a free base download plus paid bonus files) that file's own minimum unlock price.

# Actor input Schema

## `mode` (type: `string`):

Scraping mode: 'browse' for popular assets, 'byTag' for tag-based browsing, 'search' for keyword search.

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

Direct itch.io listing URLs to scrape full detail records for (used in 'byUrl' mode), e.g. 'https://limezu.itch.io/moderninteriors'. Required when Mode is 'Look up specific listing URL(s)'.

## `query` (type: `string`):

Keyword to search for (used in 'search' mode), e.g. 'pixel dungeon' or 'RPG tileset'. Required when Mode is 'Search by keyword'. Results are scoped to itch.io's Game assets classification only.

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

Filter assets by itch.io tag (used in 'byTag' mode). E.g. 'animation', '2d', 'character', 'audio'.

## `sortBy` (type: `string`):

How to sort results. Ignored if 'AI Content' or 'Filter By' is set (those take precedence, in that order).

## `filterBy` (type: `string`):

Optional price or recency filter, combinable with 'Tag' (used in 'byTag' mode). When set, this takes precedence over 'Sort By', but is overridden by 'AI Content' if that is also set.

## `aiContent` (type: `string`):

Optional AI-assistance filter (used in 'browse'/'byTag' modes), combinable with 'Tag'. Takes precedence over both 'Sort By' and 'Filter By' when set.

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

Maximum number of assets to return (or, in 'byUrl' mode, the max number of listing URLs to look up). Min 1, max 200.

## Actor input object example

```json
{
  "mode": "browse",
  "startUrls": [
    {
      "url": "https://limezu.itch.io/moderninteriors"
    }
  ],
  "query": "pixel dungeon",
  "tag": "animation",
  "sortBy": "popular",
  "filterBy": "",
  "aiContent": "",
  "maxItems": 10
}
```

# Actor output Schema

## `items` (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 = {
    "mode": "browse",
    "startUrls": [
        {
            "url": "https://limezu.itch.io/moderninteriors"
        }
    ],
    "query": "pixel dungeon",
    "tag": "animation",
    "sortBy": "popular",
    "filterBy": "",
    "aiContent": "",
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/itch-io-game-assets-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 = {
    "mode": "browse",
    "startUrls": [{ "url": "https://limezu.itch.io/moderninteriors" }],
    "query": "pixel dungeon",
    "tag": "animation",
    "sortBy": "popular",
    "filterBy": "",
    "aiContent": "",
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/itch-io-game-assets-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 '{
  "mode": "browse",
  "startUrls": [
    {
      "url": "https://limezu.itch.io/moderninteriors"
    }
  ],
  "query": "pixel dungeon",
  "tag": "animation",
  "sortBy": "popular",
  "filterBy": "",
  "aiContent": "",
  "maxItems": 10
}' |
apify call crawlerbros/itch-io-game-assets-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,crawlerbros/itch-io-game-assets-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/fpXieM8APdlnuHeMR/builds/bcPCdpE0fWPGPHYui/openapi.json
