Polymarket scoring

Developer reference for ranking and scoring Polymarket markets in feed configurations

Available Scoring Functions

Three scoring options are available:

  1. none - No ranking applied; markets remain in order_by order
  2. linear_boost_v0.0.1 - Custom weighted scoring algorithm
  3. user_trading_interest_v1 - Personalized scoring based on user trading history

1. No Scoring (none)

Markets are returned in the order specified by order_by, with no additional ranking. Use this when you want deterministic ordering based solely on your order_by selection without any personalized or weighted reranking.

Example:

{
  "scoring": "none",
  "weighted_scorings": []
}

2. Linear Boost (linear_boost_v0.0.1)

Build a custom ranking algorithm by weighting multiple market features. This gives you full control over ranking by combining normalized market metrics (volume, liquidity, price changes, etc.) with your own weights to create a tailored scoring formula.

How It Works

Linear boost multiplies each feature's normalized value by its weight, then sums all weighted features to produce a final score. The final score is calculated as:

score = Σ (feature_value × weight)

Each feature is normalized, then multiplied by its weight. Markets are ranked by total score (highest first).

Configuration

Required:

  • scoring: "linear_boost_v0.0.1"
  • weighted_scorings array with at least one feature

Weight range: 1-100 per feature

Available Features

Market metrics:

  • spread - Market spread
  • span_days - Number of days the market lasts (duration)
  • time_left - Time remaining until market resolution
  • has_a_user_story - Whether market has user trading stories

Volume:

  • volume - Total trading volume
  • volume_24hr - 24-hour trading volume
  • volume_1wk - 1-week trading volume
  • volume_1mo - 1-month trading volume
  • volume_1yr - 1-year trading volume

Liquidity:

  • liquidity - Market liquidity

Price changes:

  • price_change_1hr - 1-hour price change
  • price_change_24hr - 24-hour price change
  • price_change_1wk - 1-week price change
  • price_change_1mo - 1-month price change

User interest:

  • user_trading_interest_scores_v1 - User trading interest scores (requires user context)

Example Configuration

{
  "scoring": "linear_boost_v0.0.1",
  "weighted_scorings": [
    {
      "feature": "liquidity",
      "weight": 70
    },
    {
      "feature": "volume_24hr",
      "weight": 50
    },
    {
      "feature": "price_change_24hr",
      "weight": 30
    },
    {
      "feature": "spread",
      "weight": 20
    },
    {
      "feature": "time_left",
      "weight": 10
    }
  ]
}

Tips

  • Higher weights = more influence on final ranking
  • Combine multiple features for balanced ranking
  • Price change features can be negative; higher absolute values indicate more volatility
  • user_trading_interest_scores_v1 requires user context (wallet_address or user_id) to work

3. User Trading Interest (user_trading_interest_v1)

Personalized reranking based on user's trading history and interests. This algorithm analyzes each user's past trading activity to identify patterns and preferences, then ranks markets by relevance to that specific user's trading behavior.

How It Works

The algorithm analyzes:

  • User's past trading activity
  • Markets the user has interacted with
  • Similar markets and topics
  • User's trading patterns and preferences

Markets are reranked to match the user's trading interests.

Configuration

Required:

  • scoring: "user_trading_interest_v1"
  • weighted_scorings: [] (empty array or omit)

User context required:

  • Must provide wallet_address or user_id when calling the feed deployment API

Example Configuration

{
  "scoring": "user_trading_interest_v1",
  "weighted_scorings": []
}

When to Use

  • Personalized feeds - Show markets relevant to each user
  • User-specific recommendations - Based on trading history
  • Discovery - Help users find markets they're likely to trade

Note: This scoring function works best when users have trading history. New users may see less personalized results.


Complete Example

{
  "filters": {
    "candidate_source": "polymarket-items",
    "candidate_source_type": "posts",
    "order_by": "volume_24hr"
  },
  "scoring": "linear_boost_v0.0.1",
  "weighted_scorings": [
    {
      "feature": "price_change_24hr",
      "weight": 80
    },
    {
      "feature": "liquidity",
      "weight": 40
    },
    {
      "feature": "volume_24hr",
      "weight": 30
    }
  ]
}

Scoring vs Ordering

order_by - Applied first, sorts markets before scoring scoring - Applied second, reranks markets after ordering

Example flow:

  1. Filter markets by your criteria
  2. Sort by order_by (e.g., volume_24hr)
  3. Apply scoring algorithm to rerank
  4. Return top markets