Skip to content

Builders

The Builders API provides access to Polymarket’s builder leaderboard and volume analytics.

Get the aggregated builder leaderboard.

const leaderboard = await client.builders.leaderboard({
timePeriod: "week",
limit: 25,
});
ParameterTypeDefaultDescription
timePeriodTimePeriodrequiredTime period to aggregate
limitnumber25Max results
offsetnumber0Pagination offset
type TimePeriod = "day" | "week" | "month" | "all";
type Builder = {
rank: string;
builder: string;
volume: number;
activeUsers: number;
verified: boolean;
builderLogo?: string;
};

Get daily time-series volume data with multiple entries per builder (one per day).

const volumeData = await client.builders.volume("month");
ParameterTypeDescription
timePeriodTimePeriodTime period for the time series

Returns an array of Builder objects with daily data points.

import { Data } from "@dicedhq/data";
const client = new Data();
const leaderboard = await client.builders.leaderboard({
timePeriod: "week",
limit: 10,
});
console.log("Top 10 Builders This Week:");
for (const builder of leaderboard) {
const verified = builder.verified ? " (verified)" : "";
console.log(`#${builder.rank} ${builder.builder}${verified}`);
console.log(` Volume: $${builder.volume.toLocaleString()}`);
console.log(` Active Users: ${builder.activeUsers}`);
}
import { Data } from "@dicedhq/data";
const client = new Data();
const volumeData = await client.builders.volume("month");
// Group by builder
const builderVolumes = new Map<string, number[]>();
for (const entry of volumeData) {
const volumes = builderVolumes.get(entry.builder) ?? [];
volumes.push(entry.volume);
builderVolumes.set(entry.builder, volumes);
}
// Calculate total volume per builder
for (const [builder, volumes] of builderVolumes) {
const total = volumes.reduce((sum, v) => sum + v, 0);
console.log(`${builder}: $${total.toLocaleString()}`);
}