{
  "openapi": "3.0.1",
  "info": {
    "title": "CrazyGames Scraper - Game Ratings, Plays & Details",
    "description": "Scrape CrazyGames games with ratings, upvotes and downvotes, total plays and likes, developer, category and tags, descriptions, controls, FAQ, release and update dates, platform support, multiplayer info and store links. Search by keyword, browse categories or the full catalogue, or paste links.",
    "version": "0.1",
    "x-build-id": "NxZvFasYPARvEHJZe"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~crazygames-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-crazygames-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/abotapi~crazygames-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-crazygames-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/abotapi~crazygames-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-crazygames-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",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "url"
            ],
            "type": "string",
            "description": "Search mode uses keywords, categories, filters and sorting (leave keywords and categories empty to collect the full game catalogue). URL mode uses only the pasted links and ignores every search input.",
            "default": "search"
          },
          "searchTerms": {
            "title": "Search keywords",
            "type": "array",
            "description": "Game keywords, such as car or minecraft. Each keyword returns the best matching games. Search mode only.",
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "title": "Categories or tags",
            "type": "array",
            "description": "Category or tag names as shown in CrazyGames links, such as action, puzzle, io, shooting, driving, 2-player or minecraft. Search mode only. Leave keywords and categories empty to collect every game in the catalogue.",
            "items": {
              "type": "string"
            }
          },
          "sortBy": {
            "title": "Sort order",
            "enum": [
              "popular",
              "new",
              "updated"
            ],
            "type": "string",
            "description": "Order used when browsing categories or the full catalogue. Keyword results always come in best-match order. Search mode only.",
            "default": "popular"
          },
          "minRating": {
            "title": "Minimum rating",
            "minimum": 0,
            "maximum": 10,
            "type": "number",
            "description": "Keep games rated at least this value on the 0 to 10 scale. Needs full game details, which are switched on automatically when this is set. Search mode only."
          },
          "minTotalPlays": {
            "title": "Minimum total plays",
            "minimum": 0,
            "type": "integer",
            "description": "Keep games played at least this many times. Search mode only."
          },
          "minReleaseYear": {
            "title": "Released in or after year",
            "minimum": 2000,
            "maximum": 2100,
            "type": "integer",
            "description": "Keep games released in this year or later. Search mode only."
          },
          "multiplayerOnly": {
            "title": "Multiplayer games only",
            "type": "boolean",
            "description": "Keep only games with online multiplayer. Search mode only.",
            "default": false
          },
          "mobileFriendlyOnly": {
            "title": "Mobile-friendly games only",
            "type": "boolean",
            "description": "Keep only games that play on phones and tablets. Search mode only.",
            "default": false
          },
          "originalsOnly": {
            "title": "CrazyGames Originals only",
            "type": "boolean",
            "description": "Keep only games marked as CrazyGames Originals. Search mode only.",
            "default": false
          },
          "hotOnly": {
            "title": "Hot games only",
            "type": "boolean",
            "description": "Keep only games currently labelled hot. Search mode only.",
            "default": false
          },
          "urls": {
            "title": "CrazyGames links",
            "type": "array",
            "description": "Multi-URL: game pages (/game/...), category pages (/c/...), tag pages (/t/...), search pages (/search?q=...), the home page, and the /new, /hot, /updated and /multiplayer lists. Filter fields are ignored; results continue from the page in the link (?page=N) and ?sort=new is honoured on category links. Links in other site languages work too. Left untouched, URL mode scrapes one example of each shape.",
            "default": [
              "https://www.crazygames.com/",
              "https://www.crazygames.com/c/action",
              "https://www.crazygames.com/t/io",
              "https://www.crazygames.com/search?q=car",
              "https://www.crazygames.com/new",
              "https://www.crazygames.com/hot",
              "https://www.crazygames.com/updated",
              "https://www.crazygames.com/multiplayer",
              "https://www.crazygames.com/game/getaway-shootout",
              "https://www.crazygames.com/c/action?page=2"
            ],
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum games to save across all searches and links. This is the only default cap. Set 0 for no limit.",
            "default": 20
          },
          "maxPages": {
            "title": "Max pages per search",
            "minimum": 0,
            "type": "integer",
            "description": "Optional page limit per category, catalogue or link. Leave empty or 0 for unlimited: this does NOT cap the run, Max items does."
          },
          "fetchDetails": {
            "title": "Include full game details",
            "type": "boolean",
            "description": "Adds rating, upvotes and downvotes, rating count, developer, tags, descriptions, controls, FAQ, release and update dates, game engine, platform support, store links and related game counts. Turn off for play counts and basic game info only.",
            "default": true
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy settings. The default Apify Proxy setting is the cheapest and suits most runs. If the site refuses requests the run moves to another connection automatically and returns to the cheaper one when possible. Free-plan accounts do not include residential proxy; the run continues without it.",
            "default": {
              "useApifyProxy": true
            }
          },
          "resumeFromRunId": {
            "title": "Resume from a previous run",
            "type": "string",
            "description": "Paste a previous run ID or dataset ID to continue an interrupted pull. Games already saved there are skipped: they are not returned and not charged again. For recurring monitoring of the same search, use Incremental changes below instead. Leave empty for a normal run."
          },
          "incrementalMode": {
            "title": "Incremental changes for scheduled runs",
            "type": "boolean",
            "description": "Turn this on for daily or recurring monitoring. The first run returns every matching game as NEW. Later runs return only NEW and UPDATED games, each with changeType, changedFields, firstSeenAt and lastSeenAt. A game counts as UPDATED when a real field changes (name, tags, description, release or update dates, platform support, labels and similar). Play counts, likes, votes, rating, rating count and the scrape time never count as changes, though they are still returned; add more below. The saved baseline is kept separately for each mode, keywords, categories, links, filters, sort order and details setting; use State key to name or share one. Max items counts only the games returned.",
            "default": false
          },
          "stateKey": {
            "title": "State key (optional, incremental mode only)",
            "type": "string",
            "description": "Name of the saved baseline. Leave empty to keep one automatically per search setup. Use the same key to share a baseline between runs on purpose."
          },
          "emitUnchanged": {
            "title": "Emit unchanged games (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return games that did not change, marked UNCHANGED. They are saved to the dataset like any other row, but never carry the game details surcharge.",
            "default": false
          },
          "emitExpired": {
            "title": "Emit expired games (incremental mode only)",
            "type": "boolean",
            "description": "On by default. When a run reads every selected source to its end (no Max items or Max pages cut, no link starting past page 1, no read failures), games saved in the baseline but no longer listed come back once as EXPIRED. Games that were not seen because a run stopped early are never marked expired.",
            "default": true
          },
          "ignoreFieldsForChanges": {
            "title": "Ignore fields when detecting changes (incremental mode only)",
            "type": "array",
            "description": "Extra field names that must not make a game count as UPDATED, added to the built-in list (totalPlays, totalLikes, upvotes, downvotes, ratingCount, rating, scrapedAt). Ignored fields are still returned. Nested paths such as gamesInSeries.releaseYear also work.",
            "items": {
              "type": "string"
            }
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API & Integrations, then select it here. Notion gets a page per game; other connectors get a best-effort write or digest. Each connector receives a condensed summary per game, not the full record; the complete record always stays in the dataset. Leave empty to skip; this never changes the dataset output. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com)."
          },
          "notionParentPageUrl": {
            "title": "Notion parent page (Notion connector only)",
            "type": "string",
            "description": "URL or id of the Notion page under which game pages are created. Required to enable the Notion export; ignored by other connectors."
          },
          "maxNotifyListings": {
            "title": "Max items to export per connector",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on games written to each connector per run. Does not affect the dataset.",
            "default": 50
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}