leaderboards.mostPopular()
Get feeds ranked by purchase count within a specified time period.
Signature
leaderboards.mostPopular(query?: LeaderboardPeriodQuery): Promise<LeaderboardResponse<PopularFeed>>Parameters
query (optional)
- Type:
LeaderboardPeriodQuery
interface LeaderboardPeriodQuery {
page_size?: number; // Results per page (default: 20)
period?: '1d' | '7d' | '30d' | 'all'; // Time period (default: 'all')
}Returns
- Type:
Promise<LeaderboardResponse<PopularFeed>>
interface LeaderboardResponse<PopularFeed> {
data: PopularFeed[];
period?: string;
}
interface PopularFeed {
rank: string;
feed_id: string;
feed_name: string;
owner_id: string;
owner_username?: string | null;
owner_wallet: string;
category_id?: string | null;
category_name: string;
description?: string | null;
image_cid?: string | null;
is_active: boolean;
tags?: string[] | null;
total_entries: number;
total_purchases: string;
total_revenue: string;
unique_buyers: string;
avg_revenue_per_purchase?: string | null;
created_at: number;
updated_at: number;
}Usage
Basic Example
const popular = await grapevine.leaderboards.mostPopular();
popular.data.forEach(feed => {
console.log(`#${feed.rank}: ${feed.feed_name}`);
console.log(` Purchases: ${feed.total_purchases}`);
console.log(` Revenue: ${formatUSDC(feed.total_revenue)}`);
});With Period Filter
// Most popular in the last 7 days
const weeklyPopular = await grapevine.leaderboards.mostPopular({
period: '7d',
page_size: 10
});
console.log('Most popular this week:');
weeklyPopular.data.forEach(feed => {
console.log(`${feed.rank}. ${feed.feed_name} (${feed.total_purchases} purchases)`);
});Compare Periods
async function comparePeriods() {
const [daily, weekly, monthly, allTime] = await Promise.all([
grapevine.leaderboards.mostPopular({ period: '1d', page_size: 5 }),
grapevine.leaderboards.mostPopular({ period: '7d', page_size: 5 }),
grapevine.leaderboards.mostPopular({ period: '30d', page_size: 5 }),
grapevine.leaderboards.mostPopular({ period: 'all', page_size: 5 })
]);
return {
today: daily.data.map(f => f.feed_name),
thisWeek: weekly.data.map(f => f.feed_name),
thisMonth: monthly.data.map(f => f.feed_name),
allTime: allTime.data.map(f => f.feed_name)
};
}Popular by Category
async function getMostPopularByCategory(categoryId: string) {
const popular = await grapevine.leaderboards.mostPopular({
page_size: 100
});
return popular.data.filter(feed => feed.category_id === categoryId);
}Display Component
function PopularFeedsSection({ period }: { period: LeaderboardPeriod }) {
const [feeds, setFeeds] = useState<PopularFeed[]>([]);
useEffect(() => {
grapevine.leaderboards.mostPopular({ period, page_size: 6 })
.then(result => setFeeds(result.data));
}, [period]);
return (
<div className="popular-feeds">
<h2>Most Popular ({periodLabel(period)})</h2>
<div className="grid">
{feeds.map(feed => (
<div key={feed.feed_id} className="feed-card">
<span className="rank">#{feed.rank}</span>
<h3>{feed.feed_name}</h3>
<p>by {feed.owner_username || 'Anonymous'}</p>
<div className="stats">
<span>{feed.total_purchases} purchases</span>
<span>{feed.unique_buyers} buyers</span>
<span>{formatUSDC(feed.total_revenue)} revenue</span>
</div>
{feed.category_name && (
<span className="badge">{feed.category_name}</span>
)}
</div>
))}
</div>
</div>
);
}
function periodLabel(period: string): string {
switch (period) {
case '1d': return 'Today';
case '7d': return 'This Week';
case '30d': return 'This Month';
default: return 'All Time';
}
}Notes
- Authentication: Not required - public endpoint
- Ranking: Based on purchase count in the specified period
- Period: Defaults to
'all'if not specified
Related
- leaderboards.trending() - By velocity
- leaderboards.topRevenue() - By revenue
- leaderboards.topBuyers() - Top purchasers