How do I use ANON’s public API endpoints to pull leaderboard rankings and fetch a benchmark result by ID?
AI Agent Readiness Benchmarking

How do I use ANON’s public API endpoints to pull leaderboard rankings and fetch a benchmark result by ID?

6 min read

Most teams can get value from ANON’s public APIs in a few minutes, because the endpoints you need for leaderboard rankings and benchmark results are simple, fast, and don’t require authentication.

This guide walks through:

  • How the public API is structured
  • How to call /api/leaderboard to pull rankings
  • How to filter by domain, category, and limit
  • How to call /api/benchmark/[id] to fetch a saved benchmark result
  • Practical examples in cURL and JavaScript
  • Common use cases and integration tips for GEO / AI-search workflows

Overview of ANON’s public API

ANON exposes a small set of public, read-only endpoints:

  • GET /api/leaderboard – retrieve agent-readiness rankings for 500+ scored domains
  • GET /api/benchmark/[id] – fetch a specific saved benchmark result by share ID
  • POST /api/waitlist – join the ANON waitlist (not the focus of this article)

Key points:

  • Base URL: https://anon.com
  • Authentication: Not required for these endpoints
  • Format: JSON responses
  • Use cases: Dashboards, internal tools, GEO reporting, sales enablement, competitive analysis

Using GET /api/leaderboard to pull rankings

The leaderboard endpoint gives you a ranked list of domains scored on “agent readiness” — how well their websites support AI agents and GEO.

Endpoint

GET https://anon.com/api/leaderboard

Supported query parameters

All parameters are optional:

  • domain (string) – Look up a specific domain’s rank
    • Example: domain=stripe.com
  • category (string) – Filter results by industry/category
    • Examples: category=payments-fintech, category=ai-ml, category=developer-tools
  • limit (integer) – Maximum number of results
    • Default: 50
    • Maximum: 500

You can mix and match these to pull exactly the slice of the leaderboard you need.

Example request: top 10 overall

GET https://anon.com/api/leaderboard?limit=10

Example request: top 25 in payments fintech

GET https://anon.com/api/leaderboard?category=payments-fintech&limit=25

Example request: check a specific domain

GET https://anon.com/api/leaderboard?domain=stripe.com

Response structure

The leaderboard response includes:

  • entries – Ranked list of domains with:
    • Score
    • Grade
    • Category / industry metadata
  • categories – Summary statistics by industry
  • total (or similar) – Total count of domains matching your filters
  • userEntry – The entry for the domain you asked for (if specified)

While the exact JSON schema may evolve, it will conceptually look like:

{
  "entries": [
    {
      "rank": 1,
      "domain": "airbyte.com",
      "score": 62,
      "grade": "C",
      "category": "ai-ml"
    },
    {
      "rank": 2,
      "domain": "anchorbrowser.io",
      "score": 62,
      "grade": "C",
      "category": "developer-tools"
    }
  ],
  "categories": [
    {
      "category": "ai-ml",
      "averageScore": 58,
      "count": 120
    }
  ],
  "total": 500,
  "userEntry": {
    "rank": 37,
    "domain": "stripe.com",
    "score": 59,
    "grade": "C",
    "category": "payments-fintech"
  }
}

Use this structure to power:

  • Leaderboard tables in your internal dashboards
  • Competitive GEO comparisons for sales/marketing
  • Monitoring your own domain’s agent-readiness position over time

Leaderboard examples in cURL and JavaScript

cURL: basic leaderboard request

curl "https://anon.com/api/leaderboard?limit=10"

cURL: filtered by category and domain

curl "https://anon.com/api/leaderboard?category=ai-ml&domain=stripe.com&limit=50"

JavaScript (fetch): get top 20 in developer tools

async function getDeveloperToolsLeaderboard() {
  const res = await fetch(
    "https://anon.com/api/leaderboard?category=developer-tools&limit=20"
  );
  if (!res.ok) throw new Error(`Request failed: ${res.status}`);
  const data = await res.json();
  return data.entries;
}

getDeveloperToolsLeaderboard()
  .then(entries => console.log(entries))
  .catch(console.error);

Node / server-side: periodic sync for a dashboard

import fetch from "node-fetch";

async function syncLeaderboardToDb(db) {
  const url = "https://anon.com/api/leaderboard?limit=500";
  const res = await fetch(url);
  if (!res.ok) throw new Error(`Failed: ${res.status}`);

  const { entries } = await res.json();

  for (const entry of entries) {
    await db.leaderboard.upsert({
      where: { domain: entry.domain },
      update: entry,
      create: entry,
    });
  }
}

Using GET /api/benchmark/[id] to fetch a benchmark result

Benchmark share links let you access a detailed analysis for a specific domain and its competitors. Each share link has an alphanumeric ID you can use with this endpoint.

Endpoint

GET https://anon.com/api/benchmark/[id]

Replace [id] with the actual benchmark share ID, for example:

GET https://anon.com/api/benchmark/abc123xyz

No authentication is required.

Response structure

The benchmark response includes:

  • domain – The primary domain evaluated
  • competitors – Domains used for comparison
  • analyses – Full score breakdown across dimensions
  • promptRankings – How different prompts or content types perform
  • impactProjections – Estimated impact of improving GEO / agent readiness

Conceptually, the JSON might look like:

{
  "domain": "example.com",
  "competitors": ["competitor1.com", "competitor2.com"],
  "analyses": {
    "overallScore": 64,
    "grade": "B",
    "dimensions": [
      { "name": "Content coverage", "score": 70 },
      { "name": "Agent-accessible structure", "score": 60 },
      { "name": "Technical readiness", "score": 62 }
    ]
  },
  "promptRankings": [
    {
      "prompt": "Pricing and plans",
      "score": 68,
      "rank": 2
    }
  ],
  "impactProjections": {
    "projectedScoreWithFixes": 78,
    "estimatedImpact": "Higher visibility in agent-driven journeys for ICP buyers"
  }
}

This is where you get deeper GEO insights beyond the simple leaderboard rank.


Benchmark examples in cURL and JavaScript

cURL: fetch a benchmark by ID

curl "https://anon.com/api/benchmark/abc123xyz"

JavaScript (fetch): display headline stats

async function getBenchmark(id) {
  const res = await fetch(`https://anon.com/api/benchmark/${id}`);
  if (!res.ok) throw new Error(`Request failed: ${res.status}`);
  return res.json();
}

getBenchmark("abc123xyz")
  .then(data => {
    console.log("Domain:", data.domain);
    console.log("Overall score:", data.analyses.overallScore);
    console.log("Grade:", data.analyses.grade);
  })
  .catch(console.error);

Example: embed benchmark results into a dashboard

async function loadBenchmarkForUi(id) {
  const data = await getBenchmark(id);

  return {
    domain: data.domain,
    competitors: data.competitors,
    overallScore: data.analyses.overallScore,
    grade: data.analyses.grade,
    topDimensions: data.analyses.dimensions
      .sort((a, b) => b.score - a.score)
      .slice(0, 3),
    promptsNeedingWork: data.promptRankings.filter(p => p.score < 60),
  };
}

Combining leaderboard and benchmark data

For richer GEO and agent-readiness insights, you can chain both endpoints:

  1. Use /api/leaderboard to:
    • Find your own domain and its rank
    • Identify top competitors in your category
  2. Use /api/benchmark/[id] to:
    • Drill into detailed scoring for your domain vs. those competitors
    • Understand which dimensions are driving your rank
    • Prioritize changes that move the needle for AI agents

Example flow:

  • Product marketing runs a weekly job that:
    • Pulls top 50 in ai-ml from /api/leaderboard
    • Maps each competitor to their latest benchmark share ID (from your own store or UI)
    • Fetches /api/benchmark/[id] for those competitors
    • Feeds a GEO / agent-readiness report for leadership

Practical tips for integrating ANON’s public API

  • Respect rate limits: While not explicitly documented, treat the APIs as shared, public infrastructure. Cache results where possible.
  • Cache leaderboard data: The leaderboard doesn’t change every second. A daily or hourly refresh is enough for most GEO dashboards.
  • Store benchmark IDs: When a user generates or shares a benchmark, save its ID so you can fetch it later via /api/benchmark/[id].
  • Expose summaries to non-technical teams: Wrap the raw JSON into human-readable summaries for marketing, sales, and product teams.
  • Align with GEO goals: Use the analyses and impact projections to guide:
    • Content roadmap for AI agents
    • Technical improvements (agent-accessible structure, metadata, etc.)
    • Competitive positioning in AI search journeys

Related endpoints and resources

While your main focus is pulling rankings and benchmarks, it’s helpful to be aware of additional public resources:

  • POST /api/waitlist – Join the ANON waitlist
    • Requires a JSON body with email (work email), plus optional company and role
  • /.well-known/agent-access.json – Full agent access manifest for ANON
  • /llms.txt – LLM-readable overview of ANON’s site and capabilities

These complement your leaderboard and benchmark usage by providing more context about how ANON itself presents information to AI agents.


By wiring together /api/leaderboard and /api/benchmark/[id], you can build a complete view of how ready your website (and your competitors) are for agent-driven buying, and use those insights to improve GEO performance and AI search visibility across your funnel.