OP.GG League of Legends Tier List & Win Rate Tracker
Reads OP.GG's League of Legends champion tier lists for any lane and returns tier, win rate, pick rate, ban rate, and patch version per champion.
Input schema
Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | required | What to fetch: a champion tier list, champion statistics, or every matchup for selected champions. `byPosition` is a legacy alias for a position-scoped tier list. |
queueType | string | optional | Queue to read. Classic applies to tierList and fullCounters; ARAM applies to championStats. |
region | string | optional | Server to read. Global combines every server OP.GG tracks. |
Show all input fields
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | required | What to fetch: a champion tier list, champion statistics, or every matchup for selected champions. `byPosition` is a legacy alias for a position-scoped tier list. |
queueType | string | optional | Queue to read. Classic applies to tierList and fullCounters; ARAM applies to championStats. |
region | string | optional | Server to read. Global combines every server OP.GG tracks. |
rankTier | string | optional | Only include games from this rank. Champion stats mode uses the base tier for plus tiers (e.g. Emerald+ → Emerald). |
position | string | optional | Lane to read. ALL returns every lane; in fullCounters it uses each champion's primary lane. |
champions | array | optional | Champion names, keys, or OP.GG build URLs to fetch every matchup for (mode=fullCounters). Example: Ahri, jinx, https://op.gg/lol/champions/ahri/build/mid. |
patch | string | optional | Tier-list and fullCounter patch. OP.GG keeps the latest and previous patch; Classic has no patch history. |
minTier | string | optional | Tier-list cutoff. OP is the strongest, then 1 through 5. Lower numbers keep stronger champions. |
period | string | optional | Time window for champion statistics (mode=championStats). |
maxItems | integer | optional | Hard cap on emitted records. OP.GG returns at most 271 tier rows or 173 stat rows per filter. |
Download the published input schema
View complete JSON
{
"description": "Scrape OP.GG League of Legends champion tier lists, win rates, counters, and champion statistics by region, rank, queue, lane, and patch.",
"properties": {
"champions": {
"description": "Champion names, keys, or OP.GG build URLs to fetch every matchup for (mode=fullCounters). Example: Ahri, jinx, https://op.gg/lol/champions/ahri/build/mid.",
"editor": "stringList",
"items": {
"type": "string"
},
"prefill": [],
"title": "Champions",
"type": "array"
},
"maxItems": {
"default": 100,
"description": "Hard cap on emitted records. OP.GG returns at most 271 tier rows or 173 stat rows per filter.",
"maximum": 1000,
"minimum": 1,
"prefill": 20,
"title": "Max items",
"type": "integer"
},
"minTier": {
"default": "all",
"description": "Tier-list cutoff. OP is the strongest, then 1 through 5. Lower numbers keep stronger champions.",
"editor": "select",
"enum": [
"all",
"0",
"1",
"2",
"3",
"4",
"5"
],
"enumTitles": [
"All tiers",
"OP tier",
"1 tier",
"2 tier",
"3 tier",
"4 tier",
"5 tier"
],
"prefill": "all",
"title": "Minimum champion tier",
"type": "string"
},
"mode": {
"default": "tierList",
"description": "What to fetch: a champion tier list, champion statistics, or every matchup for selected champions. `byPosition` is a legacy alias for a position-scoped tier list.",
"editor": "select",
"enum": [
"tierList",
"championStats",
"fullCounters",
"byPosition"
],
"enumTitles": [
"Champion tier list (win/pick/ban rates, counters, rank movement)",
"Champion statistics (games, KDA, CS, gold)",
"Full counters (every matchup for selected champions)",
"By position (legacy alias)"
],
"prefill": "tierList",
"title": "Mode",
"type": "string"
},
"patch": {
"default": "latest",
"description": "Tier-list and fullCounter patch. OP.GG keeps the latest and previous patch; Classic has no patch history.",
"editor": "select",
"enum": [
"latest",
"previous"
],
"enumTitles": [
"Latest patch",
"Previous patch"
],
"prefill": "latest",
"title": "Patch",
"type": "string"
},
"period": {
"default": "month",
"description": "Time window for champion statistics (mode=championStats).",
"editor": "select",
"enum": [
"month",
"week",
"day"
],
"enumTitles": [
"Last month",
"Last 7 days",
"Today"
],
"prefill": "month",
"title": "Stats period",
"type": "string"
},
"position": {
"default": "ALL",
"description": "Lane to read. ALL returns every lane; in fullCounters it uses each champion's primary lane.",
"editor": "select",
"enum": [
"ALL",
"TOP",
"JUNGLE",
"MID",
"ADC",
"SUPPORT"
],
"enumTitles": [
"All positions",
"Top",
"Jungle",
"Mid",
"ADC / Bot",
"Support"
],
"prefill": "ALL",
"title": "Position",
"type": "string"
},
"queueType": {
"default": "ranked",
"description": "Queue to read. Classic applies to tierList and fullCounters; ARAM applies to championStats.",
"editor": "select",
"enum": [
"ranked",
"flex",
"classic",
"aram"
],
"enumTitles": [
"Ranked Solo/Duo",
"Ranked Flex",
"Classic (tierList only)",
"ARAM (championStats only)"
],
"prefill": "ranked",
"title": "Queue",
"type": "string"
},
"rankTier": {
"default": "emerald_plus",
"description": "Only include games from this rank. Champion stats mode uses the base tier for plus tiers (e.g. Emerald+ → Emerald).",
"editor": "select",
"enum": [
"all",
"challenger",
"grandmaster",
"master_plus",
"master",
"diamond_plus",
"diamond",
"emerald_plus",
"emerald",
"platinum_plus",
"platinum",
"gold_plus",
"gold",
"silver",
"bronze",
"iron"
],
"enumTitles": [
"All tiers",
"Challenger",
"Grandmaster",
"Master +",
"Master",
"Diamond +",
"Diamond",
"Emerald +",
"Emerald",
"Platinum +",
"Platinum",
"Gold +",
"Gold",
"Silver",
"Bronze",
"Iron"
],
"prefill": "emerald_plus",
"title": "Player rank",
"type": "string"
},
"region": {
"default": "global",
"description": "Server to read. Global combines every server OP.GG tracks.",
"editor": "select",
"enum": [
"global",
"na",
"me",
"euw",
"eune",
"oce",
"kr",
"jp",
"br",
"las",
"lan",
"ru",
"tr",
"sea",
"tw",
"vn"
],
"enumTitles": [
"All Servers (Global)",
"North America (NA)",
"Middle East (ME)",
"Europe West (EUW)",
"Europe Nordic & East (EUNE)",
"Oceania (OCE)",
"Korea (KR)",
"Japan (JP)",
"Brazil (BR)",
"Latin America South (LAS)",
"Latin America North (LAN)",
"Russia (RU)",
"Türkiye (TR)",
"Southeast Asia (SEA)",
"Taiwan (TW)",
"Vietnam (VN)"
],
"prefill": "global",
"title": "Region",
"type": "string"
}
},
"required": [
"mode"
],
"schemaVersion": 1,
"title": "OP.GG Scraper Input",
"type": "object"
}
Output schema
Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.
| Field | Type | Required | Description |
|---|---|---|---|
championTiers | string | optional | Dataset of champion tier rows with tier, win/pick/ban rates, counters, region, rank, and patch. |
championStats | string | optional | Dataset of champion statistics with games played, KDA, kills/deaths/assists, CS, gold, and win rates. |
fullCounters | string | optional | Dataset of every matchup for the selected champions with games, wins, and win rate. |
Download the published output schema
View complete JSON
{
"actorOutputSchemaVersion": 1,
"description": "OP.GG champion tier rows with win/pick/ban rates, counters, and rank movement, plus per-champion KDA, CS, and gold statistics.",
"properties": {
"championStats": {
"description": "Dataset of champion statistics with games played, KDA, kills/deaths/assists, CS, gold, and win rates.",
"template": "{{links.apiDefaultDatasetUrl}}/items",
"title": "OP.GG Champion Statistics",
"type": "string"
},
"championTiers": {
"description": "Dataset of champion tier rows with tier, win/pick/ban rates, counters, region, rank, and patch.",
"template": "{{links.apiDefaultDatasetUrl}}/items",
"title": "OP.GG Champion Tier Rows",
"type": "string"
},
"fullCounters": {
"description": "Dataset of every matchup for the selected champions with games, wins, and win rate.",
"template": "{{links.apiDefaultDatasetUrl}}/items",
"title": "OP.GG Full Counters",
"type": "string"
}
},
"title": "OP.GG League of Legends Tier List & Win Rate Tracker Output"
}
Dataset schema
Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.
Download the published dataset schema
View complete JSON
{
"actorSpecification": 1,
"views": {
"championStats": {
"display": {
"component": "table",
"properties": {}
},
"title": "Champion statistics",
"transformation": {
"fields": [
"championName",
"position",
"gamesPlayed",
"kda",
"winRate",
"pickRate",
"averageCs",
"averageGold",
"queueType",
"region",
"rankTier",
"period",
"patch"
]
}
},
"fullCounters": {
"display": {
"component": "table",
"properties": {}
},
"title": "Full counters",
"transformation": {
"fields": [
"targetChampionName",
"championName",
"position",
"games",
"wins",
"winRate",
"queueType",
"region",
"rankTier",
"patch"
]
}
},
"overview": {
"display": {
"component": "table",
"properties": {}
},
"title": "Champion tier rows",
"transformation": {
"fields": [
"championName",
"position",
"tier",
"tierNumber",
"tierRank",
"rankChange",
"winRate",
"pickRate",
"banRate",
"region",
"rankTier",
"queueType",
"patch",
"sourceUrl"
]
}
}
}
}
Key-value schema
Published key-value store definitions, when provided by this build.
This definition is not present in the default published build. See the published README for available documentation.
Published README
Read the full published documentation
OP.GG League of Legends Tier List & Win Rate Tracker
Read live OP.GG League of Legends tier lists and champion statistics without an account, API key, or proxy. Pick a server, rank, queue, lane, and patch to get champion tiers with win/pick/ban rates, role share, rank movement, and the three strongest counters — or switch to champion statistics for games played, KDA, CS, and gold.
What this actor does
- Three modes:
tierListfor OP.GG's ranked champion table,championStatsfor per-champion performance metrics, andfullCountersfor every matchup of selected champions. - Precise scope: Global plus 15 servers, 16 player ranks, Ranked Solo/Duo, Ranked Flex, Classic, ARAM statistics, and all five lanes.
- Patch-aware: read the latest patch or the previous one; Classic returns OP.GG's current Classic table.
- Rich tier rows: current OP.GG tier (OP, 1–5), position rank, rank change since yesterday and since the previous patch, win/pick/ban/role rates, and top-three counters.
- Champion statistics: games played, KDA, kills/deaths/assists, average CS, average gold, and win/pick/ban rates for a month, week, or today.
- Filter by champion tier: keep only OP, 1 tier, or any cutoff down to 5 tier.
- Clean output: empty fields are omitted, so no
nullor blank values appear in the dataset.
Output per champion tier row (mode = tierList)
championName,championKey,championId— champion identity.position— lane the row applies to (TOP,JUNGLE,MID,ADC,SUPPORT).tier— current OP.GG tier label:OP,1,2,3,4, or5.tierNumber— numeric tier (0= OP,1–5).tierRank— champion's rank within its lane.rankPrev,rankPrevPatch— rank on the previous day and previous patch.rankChange— places gained (positive) or lost (negative) since yesterday.winRate,pickRate,banRate— percentages for the selected scope.roleRate— share of the champion's games played in this lane.weakAgainst[]— top three counters, each withchampionName,championKey,championId,games,wins, andwinRate.roles[]— OP.GG class labels for Classic rows.patch— patch version behind the statistics.imageUrl,championUrl— champion portrait and OP.GG build page.region,rankTier,queueType— the filters that produced the row.recordType(champion),sourceUrl,scrapedAt.
Output per champion stat row (mode = championStats)
championName,championKey— champion identity.position— selected lane, orALL.gamesPlayed— sample size in the selected period.kda— average kills + assists divided by deaths.kills,deaths,assists— totals across the sampled games.averageCs,averageGold— per-game averages.winRate,pickRate,banRate— percentages.- Rows are ordered by games played, most-played first.
queueType,region,rankTier,period— the filters that produced the row.patch,championUrl,imageUrl,recordType(championStats),sourceUrl,scrapedAt.
Output per counter row (mode = fullCounters)
targetChampionName,targetChampionKey,targetChampionId— the champion you asked for.championName,championKey,championId— the opponent.position— lane the matchup belongs to.games,wins— games in the matchup and the target champion's wins.winRate— target champion's win rate against that opponent.region,rankTier,queueType,patch— the filters that produced the row.recordType(counter),sourceUrl,scrapedAt.
Input
| Field | Type | Default | Description |
|---|---|---|---|
mode |
string | tierList |
tierList for champion tiers and counters, championStats for games/KDA/CS/gold; byPosition is a legacy alias for a position-scoped tier list. |
queueType |
string | ranked |
ranked, flex, classic (tier list only), or aram (champion stats only). |
region |
string | global |
global, na, me, euw, eune, oce, kr, jp, br, las, lan, ru, tr, sea, tw, vn. |
rankTier |
string | emerald_plus |
all, challenger, grandmaster, master_plus, master, diamond_plus, diamond, emerald_plus, emerald, platinum_plus, platinum, gold_plus, gold, silver, bronze, iron. |
position |
string | ALL |
ALL, TOP, JUNGLE, MID, ADC, SUPPORT. In fullCounters, ALL uses each champion's primary lane. |
champions |
array | – | Champion names, keys, or OP.GG build URLs to fetch every matchup for (mode=fullCounters), e.g. ["Ahri", "jinx", "K'Sante"]. |
patch |
string | latest |
latest or previous (mode=tierList or fullCounters). |
minTier |
string | all |
Keep champions at or above this tier: all, 0 (OP), 1–5. |
period |
string | month |
month, week, or day (mode=championStats). |
maxItems |
integer | 100 |
Hard cap on records (1–1000). |
Example: default ranked tier list
{
"mode": "tierList",
"queueType": "ranked",
"region": "global",
"rankTier": "emerald_plus",
"position": "ALL",
"patch": "latest",
"minTier": "all",
"maxItems": 100
}
Example: Korea Challenger mid lane, previous patch
{
"mode": "tierList",
"queueType": "ranked",
"region": "kr",
"rankTier": "challenger",
"position": "MID",
"patch": "previous",
"minTier": "2",
"maxItems": 50
}
Example: Classic support tier list
{
"mode": "tierList",
"queueType": "classic",
"region": "global",
"rankTier": "emerald_plus",
"position": "SUPPORT",
"minTier": "all",
"maxItems": 30
}
Example: ARAM champion statistics for the last week
{
"mode": "championStats",
"queueType": "aram",
"region": "global",
"rankTier": "all",
"position": "ALL",
"period": "week",
"maxItems": 50
}
Example: every matchup for Ahri and Jinx
{
"mode": "fullCounters",
"queueType": "ranked",
"region": "kr",
"rankTier": "diamond_plus",
"position": "MID",
"champions": ["Ahri", "https://op.gg/lol/champions/jinx/build/adc"],
"maxItems": 120
}
Use cases
- Draft preparation — pull the strongest picks for a lane and rank before a ranked session.
- Meta tracking — compare the latest and previous patch, or track daily rank movement.
- Content creation — build tier-list graphics with win/pick/ban rates and counters.
- Champion research — inspect KDA, CS, and gold for a champion across servers and ranks.
- Coaching tools — feed current counters and role rates into pick recommendations.
- Esports analysis — compare regional metas and lane priorities.
FAQ
Do I need an OP.GG account, API key, or proxy?
No. The actor reads OP.GG's public pages and returns data without any credentials or proxy setup.
What do the tier labels mean?
OP.GG now labels the strongest champions OP, followed by 1, 2, 3, 4, and 5. Lower numbers are stronger. The older OP+, S+, and A+ labels are no longer used by OP.GG. tierNumber is the tier itself; tierRank is the champion's rank within its lane (for example, the 4th-best mid laner).
Why is weakAgainst missing from some rows?
OP.GG omits counters when the matchup sample is too small. This is most common on Challenger, Grandmaster, and smaller servers. The rest of the row is still returned. More generally, every field is omitted when OP.GG does not provide it for that row; the actor never emits null, empty strings, or empty arrays.
Why does champion stats use Emerald instead of Emerald+?
OP.GG's statistics page only supports exact ranks (Emerald, Diamond, Master, and so on), not “plus” ranks. The actor automatically uses the base rank and reports the effective rank in its status message.
What is the difference between tierList, championStats, and fullCounters?
tierList returns one row per champion and lane with OP.GG's tier, win/pick/ban rates, rank movement, and top-three counters. championStats returns one row per champion with games played, KDA, kills/deaths/assists, CS, and gold for the selected queue, region, rank, and period. fullCounters returns every matchup for the champions you list, one row per opponent.
How do I get every matchup instead of just the top three counters?
Use mode=fullCounters and list champions in champions. Each champion is read from OP.GG's counters page for the selected lane, queue, region, rank, and patch. OP.GG does not publish ARAM counters; ranked, flex, and classic are supported. Increase maxItems to keep more matchups.
Can I get ARAM or Classic?
Yes. Use mode=championStats with queueType=aram for ARAM statistics. Classic is available in tierList and fullCounters; OP.GG's Classic data is a single global pool and has no patch history, so region and player-rank filters do not change it.
Does this actor return runes, items, or skill order?
No. This actor covers tier lists, champion statistics, and full matchup counters. OP.GG's champion build pages and its official champion-analysis tool provide runes, items, and skill order; those are outside this actor's scope.
How current is the data?
OP.GG recalculates its tables continuously from recent matches. The actor reads the live page each run; patch shows which game patch the numbers came from. OP.GG keeps only the latest and previous patch, so older patches are not available.
Is this affiliated with OP.GG or Riot Games?
No. This is a third-party actor that reads OP.GG's publicly available statistics pages. It is not affiliated with, endorsed by, or sponsored by OP.GG or Riot Games.
Python quickstart
Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.
Source build UmTtJlgFhUiUhdGcN. Documentation is regenerated from the default published build; private drafts are not included.