# Marvel Rivals Stats Scraper (`epicscrapers/marvel-rivals-api`) Actor

Scrape Marvel Rivals hero tier lists, top-900 leaderboards, community ban rates, live player profiles and One-Above-All stats from rivalsdata.com. Cloudflare is bypassed with browser TLS impersonation, so no proxies or CAPTCHAs are needed.

- **URL**: https://apify.com/epicscrapers/marvel-rivals-api.md
- **Developed by:** [Epic Scrapers](https://apify.com/epicscrapers) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 hero statistics scrapeds

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

**Marvel Rivals stats, tier lists, leaderboards, community ban trends, and player profiles in clean JSON.** Marvel Rivals Stats Scraper collects public game data from [Rivals Data](https://rivalsdata.com/) and produces structured records for analysis, dashboards, bots, and content workflows. Run it on Apify to get API access, schedules, integrations, monitoring, and reliable cloud execution without managing infrastructure.

### What does Marvel Rivals Stats Scraper do?

The Actor supports six focused modes: one player profile, hero tier-list statistics, a seasonal leaderboard, community ban trends, cross-season One Above All players, or all available data. It uses browser TLS impersonation to communicate with the protected source API without a user-supplied proxy, API key, or CAPTCHA service.

Each successful operation writes normalized rows to the default dataset and preserves the unmodified source response in the key-value store. This gives analysts a practical table and developers access to the complete source payload.

### Why use Marvel Rivals Stats Scraper?

- **Track balance changes:** compare hero win, pick, and ban rates after patches.
- **Analyze competitive play:** collect up to 1,000 players from a selected season and platform.
- **Research community bans:** measure which heroes players ban more often than average.
- **Study consistent elite players:** analyze One Above All placements across seasons.
- **Build player tools:** retrieve a public profile by exact username or numeric UID.
- **Automate reporting:** schedule runs and send results to Google Sheets, Make, Zapier, webhooks, or your own API.
- **Keep raw data:** use preserved source responses when the flat dataset does not contain a specialized field you need.

### How to use Marvel Rivals Stats Scraper

1. Open the Actor on Apify.
2. Select a **Scrape mode**. The default Leaderboard mode is fast and does not request live profiles.
3. Set only the fields used by that mode. Each input description states where it applies.
4. Click **Start**.
5. Open the **Output** tab to view or download dataset records.
6. Use **Run summary** to review counts and recoverable errors. Use **Raw source files** for complete API responses.

### Input

The Input tab groups fields by purpose. Fields that do not apply to the selected mode are ignored.

#### Player profile

Enter an exact username or a numeric UID. Username matching ignores capitalization. A UID skips player search and is more reliable.

```json
{
    "mode": "player",
    "username": "1159933157"
}
```

#### Leaderboard

```json
{
    "mode": "leaderboard",
    "platform": 1,
    "season": 20,
    "leaderboardLimit": 100
}
```

#### All data with optional profiles

```json
{
    "mode": "all",
    "platform": 1,
    "season": 20,
    "leaderboardLimit": 100,
    "rank": "grandmaster_plus",
    "oneAboveAllLimit": 100,
    "scrapeProfiles": true,
    "profileCount": 10
}
```

| Field                | Default            | Used by            | Description                                                                       |
| -------------------- | ------------------ | ------------------ | --------------------------------------------------------------------------------- |
| `mode`               | `leaderboard`      | All runs           | `player`, `tierlist`, `leaderboard`, `community_bans`, `one_above_all`, or `all`. |
| `username`           | —                  | Player             | Exact username (capitalization is ignored) or numeric player UID.                 |
| `platform`           | `1`                | Stats modes        | `1` for PC or `2` for console.                                                    |
| `season`             | `20`               | Leaderboard, All   | Competitive season number.                                                        |
| `leaderboardLimit`   | `100`              | Leaderboard, All   | From 1 to 1,000 dataset players.                                                  |
| `rank`               | `grandmaster_plus` | Tier list, All     | `grandmaster_plus`, `diamond_plus`, or `all`.                                     |
| `oneAboveAllLimit`   | `1000`             | One Above All, All | From 1 to 1,000 dataset players.                                                  |
| `scrapeProfiles`     | `false`            | All                | Fetch live profiles for top leaderboard players.                                  |
| `profileCount`       | `25`               | All                | Maximum live profiles; cannot exceed `leaderboardLimit` when enabled.             |
| `requestDelayMillis` | `400`              | All profiles       | Delay between live profile requests.                                              |
| `requestTimeoutSecs` | `30`               | All runs           | Per-request timeout.                                                              |
| `maxRequestAttempts` | `4`                | All runs           | Attempts for temporary API, network, or Cloudflare failures.                      |
| `continueOnError`    | `true`             | All                | Keep successful sources when one source fails.                                    |

### Output

Every dataset item has a `type` and `scrapedAt` field. Type-specific source fields remain intact.

```json
[
    {
        "type": "tierlist",
        "hero_id": 1058,
        "platform": 1,
        "rankBracket": "grandmaster_plus",
        "picks": 21983,
        "winrate": 51.4,
        "pick_rate": 63.6,
        "ban_rate": 66.03,
        "score": 95.6,
        "scrapedAt": "2026-09-16T12:00:00.000Z"
    },
    {
        "type": "leaderboard",
        "position": 2,
        "name": "forkydog",
        "uid": 1159933157,
        "platform": 1,
        "season": 20,
        "rank_level": 23,
        "rank_score": 5161.46,
        "wins": 20,
        "losses": 3,
        "scrapedAt": "2026-09-16T12:00:00.000Z"
    }
]
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

The key-value store also contains:

- `OUTPUT` — completed operations, counts, errors, and spending-limit status.
- `tierlist.json`, `leaderboard.json`, `community_bans.json`, `one_above_all.json` — raw responses for selected stats modes.
- `player_profile.json` — raw response for Player mode.
- `player_profiles.json` — raw profile array created by optional All mode profile collection.

### Data table

| Dataset type     | Main fields                                                                       | One row represents                          |
| ---------------- | --------------------------------------------------------------------------------- | ------------------------------------------- |
| `tierlist`       | `hero_id`, `picks`, `winrate`, `pick_rate`, `ban_rate`, `score`                   | One hero in a rank bracket.                 |
| `leaderboard`    | `position`, `name`, `uid`, `rank_level`, `rank_score`, `wins`, `losses`, `heroes` | One seasonal ranked player.                 |
| `community_ban`  | `hero_id`, `pct`, `ci95`, `vs_avg`, `qualifying_players`                          | One hero's weighted community ban estimate. |
| `one_above_all`  | `name`, `uid`, `avg_placement`, `avg_score`, `finishes`, `seasons`                | One cross-season elite player.              |
| `player_profile` | `name`, `uid`, `level`, `login_os`, `faction`, `rank_game_season`                 | One public live player profile.             |

### How much does it cost to scrape Marvel Rivals?

This Actor uses pay-per-event pricing. Check the Actor's **Pricing** tab before a run because Store prices can change.

- An Actor-start event is charged once per run.
- Tier-list collection charges once per hero statistics record.
- Live player-profile collection charges once per profile.
- Leaderboard, community ban, and One Above All rows do not currently have a per-record event.

For the lowest cost, use a focused mode. In All mode, leave `scrapeProfiles` disabled unless you need full live profiles. Apify's free plan can be used within its current platform limits.

### Tips and advanced options

- Use a **numeric UID** for reliable player lookups. Username search can return temporary upstream errors and requires an exact match.
- Set `oneAboveAllLimit` below 1,000 when you need a smaller dataset. The full raw response is still stored.
- Increase `maxRequestAttempts` before increasing the timeout. The source sometimes returns a temporary 502 response that succeeds on retry.
- Keep `requestDelayMillis` at 400 or higher for large profile batches to reduce load on the source.
- Keep `continueOnError` enabled for scheduled All runs. The summary then shows which source failed while retaining successful data.
- Run PC and console separately because platform data can differ.

### FAQ, disclaimers, and support

#### Is this an official Marvel or NetEase product?

No. This Actor is an independent tool and is not affiliated with or endorsed by Marvel, NetEase Games, or Rivals Data. Product names and trademarks belong to their owners.

#### Is scraping this data legal?

The Actor accesses public statistics as a browser does. You are responsible for your use of the data and for compliance with applicable laws, intellectual-property rights, privacy requirements, and website terms. Do not use aggressive request settings.

#### Why can a player lookup fail?

The source requires an exact username spelling and can return temporary server errors. The Actor retries temporary failures. If a name still fails, use the numeric player UID.

#### Does the Actor need a proxy or API key?

No user-supplied proxy or source API key is required. Browser TLS impersonation is built in. Source protection can change, so no bypass can be guaranteed permanently.

#### Where can I get help?

Open the Actor's **Issues** tab with the run ID, selected mode, and error message. Do not post private credentials. Custom Marvel Rivals data workflows and scraper adaptations are available on request.

# Actor input Schema

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

Leaderboard: ranked players. Player: one profile by username or UID. Tier list: hero performance. Community bans: hero ban behavior. One Above All: cross-season elite players. All data: every stats mode plus optional profiles.

## `username` (type: `string`):

Used only in Player profile mode. Enter the exact username or a numeric player UID. Username matching ignores capitalization. A UID avoids the search request and is more reliable.

## `platform` (type: `integer`):

Used by tier list, leaderboard, community bans, One Above All, and All data modes. Player profiles contain their own login platform.

## `season` (type: `integer`):

Used only by Leaderboard and All data modes.

## `leaderboardLimit` (type: `integer`):

Used only by Leaderboard and All data modes. The source currently exposes up to 1,000 ranked players.

## `rank` (type: `string`):

Used only by Hero tier list and All data modes.

## `oneAboveAllLimit` (type: `integer`):

Used only by One Above All and All data modes. Limits dataset rows; the raw source response remains available in the key-value store.

## `scrapeProfiles` (type: `boolean`):

Used only in All data mode. This adds one slower, billable request for each selected top player.

## `profileCount` (type: `integer`):

Used only when live profiles are enabled in All data mode. This value cannot exceed Maximum leaderboard players.

## `requestDelayMillis` (type: `integer`):

Politeness delay used between live profile requests in All data mode.

## `requestTimeoutSecs` (type: `integer`):

Maximum time for each source API request.

## `maxRequestAttempts` (type: `integer`):

Total attempts for temporary network, rate-limit, server, or Cloudflare errors. Retries use exponential backoff.

## `continueOnError` (type: `boolean`):

Used only in All data mode. Successful sources are kept when another source fails. Error details are written to the OUTPUT record.

## Actor input object example

```json
{
  "mode": "leaderboard",
  "username": "forkydog",
  "platform": 1,
  "season": 20,
  "leaderboardLimit": 100,
  "rank": "grandmaster_plus",
  "oneAboveAllLimit": 1000,
  "scrapeProfiles": false,
  "profileCount": 25,
  "requestDelayMillis": 400,
  "requestTimeoutSecs": 30,
  "maxRequestAttempts": 4,
  "continueOnError": true
}
```

# Actor output Schema

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

Hero and player records produced by the selected mode.

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

Completed operations, record counts, recoverable errors, and spending-limit status.

## `rawData` (type: `string`):

Unmodified JSON responses for the operations completed by this run.

# 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": "leaderboard",
    "username": "forkydog",
    "platform": 1,
    "season": 20,
    "leaderboardLimit": 100,
    "rank": "grandmaster_plus",
    "oneAboveAllLimit": 1000,
    "scrapeProfiles": false,
    "profileCount": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("epicscrapers/marvel-rivals-api").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": "leaderboard",
    "username": "forkydog",
    "platform": 1,
    "season": 20,
    "leaderboardLimit": 100,
    "rank": "grandmaster_plus",
    "oneAboveAllLimit": 1000,
    "scrapeProfiles": False,
    "profileCount": 25,
}

# Run the Actor and wait for it to finish
run = client.actor("epicscrapers/marvel-rivals-api").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": "leaderboard",
  "username": "forkydog",
  "platform": 1,
  "season": 20,
  "leaderboardLimit": 100,
  "rank": "grandmaster_plus",
  "oneAboveAllLimit": 1000,
  "scrapeProfiles": false,
  "profileCount": 25
}' |
apify call epicscrapers/marvel-rivals-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,epicscrapers/marvel-rivals-api"
        }
    }
}
```

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/TJxaS8UMa6t6GvDvE/builds/ntMVwoS3JgaqdKMrd/openapi.json
