Skip to content
CS2Apps

Public data API

One JSON endpoint. The entire CSGeoguesser library.

We expose the full callout dataset at /csgeo/data.json so you can build streamer overlays, study tools, Discord bots, blog embeds, or whatever else without scraping our HTML.

Endpoint

GET https://cs2apps.com/csgeo/data.json

Static — built at deploy time. Cache-Control: public, max-age=3600 so you can hammer it without worrying.

Sample response

{
  "schemaVersion": 1,
  "generatedAt": "2026-05-08T18:00:00.000Z",
  "site": "cs2apps.com",
  "license": "CC BY 4.0 — please credit cs2apps.com when redistributing.",
  "laneLabels": { "long": "Long", "mid": "Mid", "short": "Short / Catwalk", "tunnels": "Tunnels", "a-site": "A site", "b-site": "B site", "t-spawn": "T spawn" },
  "difficultyLabels": { "easy": "Easy", "medium": "Medium", "hard": "Hard" },
  "maps": [
    { "slug": "dust2", "name": "Dust 2", "spotCount": 18 }
  ],
  "locations": [
    {
      "id": "dust2-mid-doors-corrugated",
      "mapSlug": "dust2",
      "callout": "Mid Doors",
      "description": "Corrugated lean-to at T-side mid doors entry.",
      "x": 0.55,
      "y": 0.5,
      "lane": "mid",
      "difficulty": "medium",
      "screenshot": "https://cs2apps.com/screenshots/dust2/image2.jpg",
      "permalink": "https://cs2apps.com/csgeo/dust2/spot/dust2-mid-doors-corrugated/"
    }
  ]
}

Truncated to one location for clarity. Full payload includes all 18 Dust 2 spots and grows as more maps are seeded.

Example use

// Fetch the full CSGeoguesser dataset
const res = await fetch('https://cs2apps.com/csgeo/data.json');
const data = await res.json();

// Filter to a specific map and difficulty
const easy = data.locations.filter(
  (l) => l.mapSlug === 'dust2' && l.difficulty === 'easy'
);

// Render an embed thumbnail strip
easy.forEach((spot) => {
  console.log(spot.callout, spot.screenshot, spot.permalink);
});

License

CC BY 4.0. Use it commercially, modify it, embed it. We just ask that anything you publish credits cs2apps.com with a backlink. The screenshots themselves are CS2 assets owned by Valve — embedding them via our URLs is fine, but don’t rehost them under your own domain.

Schema notes

  • x, y are normalized 0–1 coordinates on the minimap PNG. (0, 0) is top-left, (1, 1) bottom-right. Multiply by your minimap render size to get pixel coords.
  • lane is one of: long, mid, short, tunnels, a-site, b-site, t-spawn, ct-spawn. Optional — older entries may be null.
  • difficulty: easy (unique landmarks), medium (recognizable), hard (generic walls/crates). Optional.
  • schemaVersion follows semver-major. Field additions don’t bump it; field removals or type changes do.

Built something cool?

Drop us a note via About / Contribute and we’ll feature it on the site.