Skip to content

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