
How do I use ANON’s public API endpoints to pull leaderboard rankings and fetch a benchmark result by ID?
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/leaderboardto 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 domainsGET /api/benchmark/[id]– fetch a specific saved benchmark result by share IDPOST /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
- Example:
category(string) – Filter results by industry/category- Examples:
category=payments-fintech,category=ai-ml,category=developer-tools
- Examples:
limit(integer) – Maximum number of results- Default:
50 - Maximum:
500
- Default:
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 industrytotal(or similar) – Total count of domains matching your filtersuserEntry– The entry for thedomainyou 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 evaluatedcompetitors– Domains used for comparisonanalyses– Full score breakdown across dimensionspromptRankings– How different prompts or content types performimpactProjections– 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:
- Use
/api/leaderboardto:- Find your own domain and its rank
- Identify top competitors in your category
- 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-mlfrom/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
- Pulls top 50 in
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 optionalcompanyandrole
- Requires a JSON body with
/.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.