# Roblox Games Scraper - Players, Visits, Charts & Stats (`rjmacarthy/roblox-games-scraper`) Actor

Scrape Roblox charts (Top Trending, Up-and-Coming, Top Playing Now...) and any experience's live players, visits, favorites, likes, creator and genre. Country/device charts and change tracking for scheduled runs. Public APIs, no login.

- **URL**: https://apify.com/rjmacarthy/roblox-games-scraper.md
- **Developed by:** [rj](https://apify.com/rjmacarthy) (community)
- **Categories:** Automation, 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.00 / 1,000 game records

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/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

## Roblox Games Scraper - Players, Visits, Charts & Experience Stats

Scrape the official **Roblox charts** (Top Trending, Up-and-Coming, Top Playing Now, Most Popular, Top Rated, Top Earning...) for any country and device, or your own **watchlist of experiences**, and get concurrent players (CCU), total visits, favorites, likes/dislikes, like ratio, creator, genre and dates for every game. Turn on **change tracking** and schedule it: each run adds visits, players and favorites gained since the previous run, so you build a time series without a paid analytics SaaS. It uses Roblox's own public JSON APIs (no login, no cookies, no browser), reads 50 games per request and costs **$0.002 per game record**, with no start fee.

### What data can you get?

| Field | Example |
|---|---|
| Name, universe ID, root place ID, game URL | Blox Fruits, 994732206, 2753915549 |
| Concurrent players (`playing`) | 243,772 |
| Total visits | 65,242,763,554 |
| Favorites | 20,169,241 |
| Likes, dislikes, like ratio | 12,821,930 / 1,069,693 / 0.923 |
| Creator name, ID, type (User/Group), verified badge | Gamer Robot Inc, Group, verified |
| Genre and subgenre | RPG / Action RPG |
| Max players per server, paid-access price | 12, null (free) |
| Created / last updated | 2019-01-16, 2026-11-02 |
| Icon URL (512x512) | tr.rbxcdn.com/... |
| Chart name and position, country, device | Top Trending #1, all, computer |
| Content maturity, sponsored slot (charts/search) | minimal, false |
| Visits / players / favorites change since last run | +6,675 visits |
| `snapshotAt` (one timestamp per run) and `scrapedAt` | ISO dates |

### Use cases

- **Brand and agency teams** building branded Roblox experiences: track competitor CCU, visits and likes daily.
- **Studios**: watch your own games and rivals in one table; see which titles enter Top Trending or Up-and-Coming.
- **Analysts and investors**: chart history by country and device, genre trends, top earners.
- **Content creators**: find fast-rising games before everyone else covers them.

### How to use

1. Pick a mode: **Charts**, **Specific games** or **Keyword search (experimental)**.
2. Set the charts (and optionally a country and device), or paste universe IDs / game URLs.
3. Set **Max game records** and run. Download the results as JSON, CSV, Excel or via the API.

**Top 10 across the three main charts** (the default):

```json
{"mode": "charts", "maxItems": 10}
```

**Most popular games in the United States right now, full charts:**

```json
{"mode": "charts", "sorts": ["top-playing-now", "most-popular"], "country": "us", "maxItems": 120}
```

**Daily competitor watchlist with change tracking** (schedule it once a day):

```json
{
  "mode": "games",
  "universeIds": ["994732206", "383310974", "1686885941", "66654135", "703124385"],
  "placeIdsOrUrls": ["https://www.roblox.com/games/606849621/Jailbreak"],
  "trackDeltas": true,
  "stateKey": "competitors"
}
```

The universe ID is not the number in the game URL (that is the place ID). Paste game URLs into **Place IDs or game URLs** and the Actor looks up the universe for you.

### Output example

A real record (description trimmed):

```json
{
  "id": "10771421858",
  "rootPlaceId": "119958473240233",
  "url": "https://www.roblox.com/games/119958473240233/DONT-SPLASH",
  "name": "DONT SPLASH",
  "description": "DONT SPLASH V2\nDONT SPLASH, IT KNOWS\n\n\n\n\nDONT SPLASH is inspired by the eerie atmosphere of the Poolrooms and House of the Locust.",
  "creatorName": "Bacon Theory",
  "creatorId": "1065149497",
  "creatorType": "Group",
  "creatorVerified": true,
  "playing": 52456,
  "visits": 167116403,
  "favorites": 466753,
  "upVotes": 94030,
  "downVotes": 13964,
  "likeRatio": 0.8707,
  "maxPlayers": 10,
  "genre": "Obby & Platformer",
  "subgenre": "Runner",
  "price": null,
  "contentMaturity": "minimal",
  "isSponsored": false,
  "createdAt": "2026-10-17T07:10:50.312Z",
  "updatedAt": "2026-10-31T13:53:30.801Z",
  "iconUrl": "https://tr.rbxcdn.com/180DAY-644bf5a236d485c076985aebb6904180/512/512/Image/Png/noFilter",
  "source": "charts",
  "sortId": "top-trending",
  "sortName": "Top Trending",
  "chartPosition": 1,
  "searchQuery": null,
  "country": "all",
  "device": "computer",
  "visitsDelta": null,
  "playingDelta": null,
  "favoritesDelta": null,
  "previousSnapshotAt": null,
  "snapshotAt": "2026-11-03T10:01:09.593Z",
  "scrapedAt": "2026-11-03T10:01:11.558Z"
}
```

Dataset views: **Overview** (chart, position, players, visits, likes), **All stats**, and **Changes since last run**.

### Pricing

Pay per event, no start fee:

| Event | Price |
|---|---|
| `game` - one experience record saved to the dataset | **$0.002** |

Examples: the default run (10 records) costs **$0.02**; the full Top Trending chart (100 games) costs **$0.20**; a daily watchlist of 20 games costs **$0.04 per day** (about $1.20 a month). **1,000 game records = $2.00.** In charts mode a game that is in two charts is two records (one per chart, each with its own position). Set **Maximum cost per run** and the Actor stops cleanly when it is reached.

### Tips and limits

- Each chart returns up to about **100 games**; Roblox doesn't page further. **Max game records** is split evenly across the charts you pick (10 over 3 charts = top 4, 3 and 3); 0 = everything.
- Country and device change the charts (e.g. Top Trending for `br` or `high_end_phone` differs from the global list). Some charts, like Top Playing Now, look the same in most countries.
- Concurrent players and visits are what Roblox shows at the moment of the run. Visits update with a short delay on Roblox's side, so small deltas between close runs can be 0.
- Deleted, private or mistyped universe IDs are not returned by Roblox; they're listed in `RUN_SUMMARY` and not charged.
- **Keyword search is experimental.** Roblox's search API rate-limits quickly (HTTP 429), especially past the first page of results. Rate-limited searches are reported in the run's status and `RUN_SUMMARY`; use charts or universe IDs for scheduled runs.
- Place IDs / URLs need one extra lookup request each. For large lists use universe IDs (50 per request).

### FAQ

**Do I need a Roblox account, cookie or API key?**
No. All data comes from Roblox's public, unauthenticated web APIs.

**Do I need a proxy?**
Normally no. If Roblox rate-limits your runs, enable Apify Proxy (datacenter). Residential proxies are not supported: if you choose the RESIDENTIAL group, the Actor logs a warning and uses Apify datacenter proxy instead.

**How does change tracking work?**
With **Track changes since the previous run** on, the Actor stores the last visits, players and favorites of each game in a named key-value store in your account (one record per **Monitor name**). The next run outputs `visitsDelta`, `playingDelta`, `favoritesDelta` and `previousSnapshotAt`. The first run is the baseline (deltas are null). Every item of a run has the same `snapshotAt`, so you can chart runs over time.

**What's the difference between a universe ID and a place ID?**
A universe is the experience; its root place is the starting place you see in the URL `roblox.com/games/<placeId>/...`. The output has both.

**Is it legal?**
The Actor only reads public game statistics that Roblox shows to every visitor, plus the public name and ID of the game's creator. It doesn't log in and doesn't collect personal data about players. You're responsible for using the data in line with Roblox's terms and the laws that apply to you.

### Integrations

- **API**: run it and get items in one call:

  ```bash
  curl -X POST "https://api.apify.com/v2/acts/rjmacarthy~roblox-games-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
    -H "Content-Type: application/json" \
    -d '{"mode":"charts","sorts":["top-trending"],"maxItems":20}'
  ```

- **Schedules and webhooks**: run daily and push results to your pipeline when the run finishes.

- **Make, Zapier, n8n**: send chart snapshots to Google Sheets, Airtable, Slack or a database without code.

- **AI agents (MCP)**: use the Actor as a tool through the Apify MCP server.

### Changelog

- **0.1** (Nov 2026): first release. Charts (by country and device), specific games (universe IDs, place IDs, URLs), experimental keyword search, votes, icons and change tracking.

### More scrapers by the same developer

- [AI Visibility Tracker: ChatGPT, Perplexity, Gemini, Claude](https://apify.com/rjmacarthy/ai-search-visibility-tracker)
- [Google Ads Transparency Scraper](https://apify.com/rjmacarthy/google-ads-transparency-scraper)
- [Substack Scraper](https://apify.com/rjmacarthy/substack-scraper)
- [Telegram Channel Scraper](https://apify.com/rjmacarthy/telegram-channel-scraper)
- [ATS Jobs Scraper: Greenhouse, Lever, Ashby & Workday](https://apify.com/rjmacarthy/ats-jobs-scraper)
- [Dice Jobs Scraper](https://apify.com/rjmacarthy/dice-jobs-scraper)

Browse all my Actors on [my Apify Store profile](https://apify.com/rjmacarthy).

### Support

Missing a chart, a field or a mode? Open an issue on the **Issues** tab with your input and we'll look at it quickly.

# Actor input Schema

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

Charts = the games on Roblox's charts (Top Trending, Up-and-Coming, ...) with their chart position. Games = your own list of experiences (e.g. a competitor watchlist). Search = keyword search (experimental: Roblox rate-limits search hard).

## `sorts` (type: `array`):

Which charts to read (Charts mode). Each chart lists up to ~100 games. Each chart is read with one request.

## `country` (type: `string`):

"all" for the global charts, or a 2-letter country code (e.g. "us", "gb", "br", "de") for that country's charts (Charts mode).

## `device` (type: `string`):

Charts differ by the device players use (Charts mode).

## `universeIds` (type: `array`):

Roblox universe (experience) IDs for Games mode, e.g. 994732206 (Blox Fruits), 383310974 (Adopt Me!). Up to 50 games are read per request, so long lists are cheap and fast.

## `placeIdsOrUrls` (type: `array`):

Game page URLs like https://www.roblox.com/games/2753915549/Blox-Fruits, or the place ID from the URL (2753915549). Each one costs one extra request to look up its universe, so use universe IDs for big lists.

## `searchQueries` (type: `array`):

Keywords for Search mode, e.g. "tycoon" or "horror". Experimental: Roblox's search API rate-limits quickly (HTTP 429); such searches are reported in RUN_SUMMARY.

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

Maximum records for the whole run. Charts/Search: split evenly across the charts or keywords (10 over 3 charts = top 4, 3 and 3; with fewer records than charts, the extra charts are skipped). Games: total cap. 0 = no limit (each chart has at most ~100 games).

## `trackDeltas` (type: `boolean`):

Remember each game's visits, players and favorites, and add visitsDelta, playingDelta and favoritesDelta compared with the previous run. Schedule the Actor (e.g. daily) to build a time series. The first run sets the baseline (deltas are null).

## `stateKey` (type: `string`):

Runs with the same monitor name share the remembered values. Use different names for independent watchlists.

## `stateStoreName` (type: `string`):

Named key-value store in your account where the remembered values are kept (letters, digits and dashes).

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

Not needed normally. Enable Apify Proxy (datacenter) if Roblox rate-limits your runs. Residential proxies are not supported: if you pick the RESIDENTIAL group, the Actor logs a warning and uses Apify datacenter proxy instead.

## Actor input object example

```json
{
  "mode": "charts",
  "sorts": [
    "top-trending",
    "up-and-coming",
    "top-playing-now"
  ],
  "country": "all",
  "device": "computer",
  "maxItems": 10,
  "trackDeltas": false,
  "stateKey": "default",
  "stateStoreName": "roblox-games-scraper-state",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `games` (type: `string`):

Chart position, players, visits, favorites, like ratio, genre and URL per experience.

## `gamesFull` (type: `string`):

Every field, including description, creator, votes, dates and deltas.

## `summary` (type: `string`):

Per-input status, warnings and request counts.

# 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": "charts",
    "sorts": [
        "top-trending",
        "up-and-coming",
        "top-playing-now"
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("rjmacarthy/roblox-games-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": "charts",
    "sorts": [
        "top-trending",
        "up-and-coming",
        "top-playing-now",
    ],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("rjmacarthy/roblox-games-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": "charts",
  "sorts": [
    "top-trending",
    "up-and-coming",
    "top-playing-now"
  ],
  "maxItems": 10
}' |
apify call rjmacarthy/roblox-games-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,rjmacarthy/roblox-games-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/ZzzxTIBPT0A1iHdQ2/builds/1RyEh8EJloGrix5TN/openapi.json
