SheetsApps Script below

CS2 data in a spreadsheet.

Two Apps Script custom functions put the VRS table and recent results in any cell. No add-on, no export: type =CS2_VRS(30) and the table fills in.

  • Custom functions
  • No add-on needed
  • 500 free requests / month
GET /cs2/rankings/vrs?limit=3200 OK
$ curl "https://api.citoapi.com/api/v1/cs2/rankings/vrs?limit=3" \ -H "x-api-key: $CITO_API_KEY"
{  "data": [    {      "rank": 1,      "teamName": "Spirit",      "region": "Europe"    },    {      "rank": 2,      "teamName": "Legacy",      "region": "South America"    }    ...  ]}

Seamless Integration with our MCP Server

Give Claude, Cursor and ChatGPT the CS2 data. One command writes the MCP config; agents call live scoreboard, team map stat, opening duel and transfer tools instead of inventing match IDs, and your key stays on your machine.

MCPInstall the Cito MCP server
Claude
Cursor
OpenAI
Python
Cito API
Next.js
Discord
Slack
GitHub

What analysts keep in Sheets

Tables that refresh when you reopen the sheet.

Rankings

The VRS table with points and change.

Results

Recent results with event and score.

Player lines

A player's recent maps, row by row.

Schedules

Upcoming matches for a planning sheet.

Skin prices

Track a watchlist of skins by price.

Refresh on open

Custom functions recalculate with the sheet.

Rankings and results functions

Code.gs
// Extensions > Apps Script. Save your key under Project Settings > Script properties
// as CITO_API_KEY, then type =CS2_VRS(30) in a cell.
function CS2_VRS(limit) {
  const key = PropertiesService.getScriptProperties().getProperty("CITO_API_KEY");
  const res = UrlFetchApp.fetch(
    "https://api.citoapi.com/api/v1/cs2/rankings/vrs?limit=" + (limit || 30),
    { headers: { "x-api-key": key } }
  );
  const rows = JSON.parse(res.getContentText()).data;
  return [["Rank", "Team", "Points", "Change"]].concat(
    rows.map(function (r) { return [r.rank, r.teamName, r.points, r.change]; })
  );
}

function CS2_RESULTS(limit) {
  const key = PropertiesService.getScriptProperties().getProperty("CITO_API_KEY");
  const res = UrlFetchApp.fetch(
    "https://api.citoapi.com/api/v1/cs2/matches/recent?limit=" + (limit || 20),
    { headers: { "x-api-key": key } }
  );
  const rows = JSON.parse(res.getContentText()).data;
  return [["Event", "Team 1", "Score", "Team 2"]].concat(
    rows.map(function (m) { return [m.eventName, m.team1Name, m.team1Score + "-" + m.team2Score, m.team2Name]; })
  );
}

Endpoints you can ship with

Any list endpoint can become a sheet function.

Rankings

The world team ranking and the Valve Regional Standings, with points and movement, plus one table per region.

View docs
  • GET/api/v1/cs2/rankings/world

    The latest world team ranking.

  • GET/api/v1/cs2/rankings/vrs

    The latest Valve Regional Standings (VRS).

  • GET/api/v1/cs2/rankings/region/{region}

    One region, with each team's world and regional rank.

  • GET/api/v1/cs2/rankings

    One row per team, with points and change since the previous ranking.

FAQs

Apps Script, keys and refresh

Can't find what you're looking for? Contact our customer support team

See pricing

Put CS2 in a ranking sheet

Get a free key and paste the script.