Skip to content

leaderboards.trending()

Get feeds ranked by revenue velocity - feeds with the fastest recent revenue growth.

Signature

leaderboards.trending(query?: LeaderboardBaseQuery): Promise<LeaderboardResponse<TrendingFeed>>

Parameters

query (optional)

  • Type: LeaderboardBaseQuery
interface LeaderboardBaseQuery {
  page_size?: number;  // Results per page (default: 20)
}

Returns

  • Type: Promise<LeaderboardResponse<TrendingFeed>>
interface LeaderboardResponse<TrendingFeed> {
  data: TrendingFeed[];
  period?: string;
}
 
interface TrendingFeed {
  rank: string;
  id: string;
  owner_id: string;
  owner_wallet: string;
  owner_username?: string | null;
  category_id?: string | null;
  category_name?: string | null;
  name: string;
  description?: string | null;
  image_cid?: string | null;
  is_active: boolean;
  total_entries: number;
  total_purchases: number;
  total_revenue: string;
  tags?: string[] | null;
  created_at: number;
  updated_at: number;
  // Trending-specific fields
  purchases_last_7d: string;
  revenue_last_7d: string;
  unique_buyers_last_7d: string;
}

Usage

Basic Example

const trending = await grapevine.leaderboards.trending();
 
trending.data.forEach((feed, index) => {
  console.log(`#${index + 1}: ${feed.name}`);
  console.log(`   Revenue (7d): ${formatUSDC(feed.revenue_last_7d)}`);
  console.log(`   Purchases (7d): ${feed.purchases_last_7d}`);
});

Get Top 10

const top10 = await grapevine.leaderboards.trending({ page_size: 10 });
 
console.log('Top 10 Trending Feeds:');
top10.data.forEach(feed => {
  console.log(`${feed.rank}. ${feed.name} by ${feed.owner_username || 'Anonymous'}`);
});

Trending Feed Card Component

function TrendingFeedCard({ feed }: { feed: TrendingFeed }) {
  return (
    <div className="trending-card">
      <span className="rank">#{feed.rank}</span>
      
      {feed.image_cid && (
        <img 
          src={`https://gateway.pinata.cloud/ipfs/${feed.image_cid}`} 
          alt={feed.name}
        />
      )}
      
      <h3>{feed.name}</h3>
      <p className="author">by {feed.owner_username || feed.owner_wallet.slice(0, 8)}...</p>
      
      <div className="stats">
        <div>
          <span className="value">{formatUSDC(feed.revenue_last_7d)}</span>
          <span className="label">Revenue (7d)</span>
        </div>
        <div>
          <span className="value">{feed.purchases_last_7d}</span>
          <span className="label">Purchases</span>
        </div>
        <div>
          <span className="value">{feed.unique_buyers_last_7d}</span>
          <span className="label">Buyers</span>
        </div>
      </div>
      
      {feed.category_name && (
        <span className="category">{feed.category_name}</span>
      )}
    </div>
  );
}
 
function formatUSDC(weiAmount: string): string {
  const usdc = Number(BigInt(weiAmount)) / 1e6;
  return `${usdc.toFixed(2)}`;
}

Compare with Historical

async function analyzeTrending() {
  const trending = await grapevine.leaderboards.trending({ page_size: 20 });
  
  return trending.data.map(feed => {
    const weeklyRevenue = BigInt(feed.revenue_last_7d);
    const totalRevenue = BigInt(feed.total_revenue);
    
    // Calculate what % of all-time revenue came in the last 7 days
    const recentPercentage = totalRevenue > 0n
      ? Number((weeklyRevenue * 100n) / totalRevenue)
      : 0;
    
    return {
      name: feed.name,
      recentRevenue: formatUSDC(feed.revenue_last_7d),
      totalRevenue: formatUSDC(feed.total_revenue),
      recentPercentage: `${recentPercentage}%`,
      isHot: recentPercentage > 50 // More than half revenue in last week
    };
  });
}

Trending Algorithm

Trending is based on:

  • Revenue generated in the last 7 days
  • Purchase velocity (rate of new purchases)
  • Unique buyer count

Feeds with sudden spikes in activity rank higher than consistently performing feeds.

Notes

  • Authentication: Not required - public endpoint
  • Caching: Results may be cached for a few minutes
  • Ranking: Based on 7-day revenue velocity
  • Active Only: Only includes active feeds

Related