Answers you can trust, from Codeables

Every page on Codeables is structured and verified — built so people and the AI agents they rely on can trust it. Explore more from the source behind this answer.

Explore Codeables
Verified Source
AI Agent Readiness Benchmarking

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

ANON6 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.

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