Polymarket feed filters

Developer reference for filtering Polymarket markets in feed configurations.

Filter Structure

All filters are nested under filters in your feed config:

{
  "filters": {
    "candidate_source": "polymarket-items",
    "candidate_source_type": "posts"
    // ... filter options below
  }
}

1. Date Filters (polymarket_filters)

Filter markets by date ranges using relative time syntax or Unix timestamps. Date filters help you target markets based on when they were created, when they resolve, or when the underlying events occur.

Market Start Date (polymarket_start_date)

Filter by when the market was created. This lets you focus on recently launched markets or markets from a specific time period.

Fields:

  • start_timestamp_from - Earliest start date
  • start_timestamp_to - Latest start date

Time syntax (all options available for both fields):

  • "days_ago:N" - N days ago
  • "hours_ago:N" - N hours ago
  • "days_from_now:N" - N days from now
  • "hours_from_now:N" - N hours from now
  • Unix timestamp string: "1577836800"

Example:

"polymarket_start_date": {
  "start_timestamp_from": "days_ago:30",
  "start_timestamp_to": "days_ago:1"
}

Market End Date (polymarket_end_date)

Filter by when the market closes/resolves. Use this to find markets that resolve soon (for active trading) or far in the future (for long-term positions).

Fields:

  • end_timestamp_from - Earliest end date
  • end_timestamp_to - Latest end date

Time syntax (all options available for both fields):

  • "days_ago:N" - N days ago
  • "hours_ago:N" - N hours ago
  • "days_from_now:N" - N days from now
  • "hours_from_now:N" - N hours from now
  • Unix timestamp string: "1735689600"

Example:

"polymarket_end_date": {
  "end_timestamp_from": "days_from_now:1",
  "end_timestamp_to": "days_from_now:90"
}

Game/Event Start Time (polymarket_game_start_time)

Filter by when the underlying event/game starts. This is useful for sports markets or event-based markets where you want to target markets around specific event times.

Fields:

  • game_start_timestamp_from - Earliest game start time
  • game_start_timestamp_to - Latest game start time

Time syntax (all options available for both fields):

  • "days_ago:N" - N days ago
  • "hours_ago:N" - N hours ago
  • "days_from_now:N" - N days from now
  • "hours_from_now:N" - N hours from now
  • Unix timestamp string: "1577836800"

Example:

"polymarket_game_start_time": {
  "game_start_timestamp_from": "days_from_now:1",
  "game_start_timestamp_to": "days_from_now:7"
}

2. Ordering (order_by)

Sort markets before scoring. Ordering determines the initial sequence of markets before any scoring algorithm is applied, allowing you to prioritize by volume, price movement, or time. Available options:

Time-based:

  • chronological - Newest markets first

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

Volume:

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

Market metrics:

  • spread - Market spread
  • span_days - Number of days the market lasts (duration)
  • liquidity - Market liquidity

Example:

"order_by": "price_change_24hr"

3. AI Labels (ai_labels, remove_ai_labels)

Filter by content classification labels. AI labels automatically categorize markets by topic, sentiment, and content quality, helping you surface relevant markets without manual keyword matching.

Static labels:

  • Topics: arts_culture, business_entrepreneurs, science_technology, sports, etc.
  • Sentiment: positive, neutral, negative
  • Moderation: spam, sexual, hate, violence, etc.

Dynamic labels:

  • "user/user_id/mbd_ai_labels_topics" - Automatically uses user's trading history to determine relevant labels

Examples:

"ai_labels": [
  "science_technology",
  "user/user_id/mbd_ai_labels_topics"
]

"remove_ai_labels": [
  "business_entrepreneurs",
  "spam"
]

4. Keywords (include_keywords, exclude_keywords)

Filter by text content in market question or description. Keywords provide precise text-based filtering when you need to target specific terms or topics mentioned in market titles and descriptions.

Examples:

"include_keywords": ["bitcoin", "election"]
"exclude_keywords": ["spam", "test"]

5. Market Status Flags (market_info)

Filter by market status using boolean flags. Status flags let you include or exclude markets based on their administrative state (featured, restricted, closed) to control what types of markets appear in your feed.

Include/Exclude flags:

  • market_featured - Include only featured (true) or exclude (false)
  • market_restricted - Include only restricted (true) or exclude (false)
  • market_closed - Include only closed (true) or exclude (false)
  • exclude_featured - Exclude featured markets
  • exclude_restricted - Exclude restricted markets
  • exclude_closed - Exclude closed markets

Example:

"market_info": {
  "exclude_closed": true,
  "exclude_restricted": false,
  "market_featured": null
}

6. Numeric Range Filters

Include Ranges (include_market_info)

Include markets within specified numeric ranges. These filters let you target markets with specific trading characteristics, such as minimum liquidity for active trading or price movements within certain thresholds.

Volume filters:

  • market_min_volume / market_max_volume - Total volume (USD)
  • market_min_volume_24hr / market_max_volume_24hr - 24-hour volume (USD)
  • market_min_volume_1wk / market_max_volume_1wk - 1-week volume (USD)
  • market_min_volume_1mo / market_max_volume_1mo - 1-month volume (USD)

Liquidity filters:

  • market_min_liquidity / market_max_liquidity - Liquidity (USD)

Price change filters (decimal, -1 to 1):

  • market_min_price_change_1hr / market_max_price_change_1hr - 1-hour change (e.g., 0.05 = 5%)
  • market_min_price_change_24hr / market_max_price_change_24hr - 24-hour change
  • market_min_price_change_7d / market_max_price_change_7d - 7-day change
  • market_min_price_change_30d / market_max_price_change_30d - 30-day change

Example:

"include_market_info": {
  "market_min_liquidity": 100,
  "market_max_liquidity": 1000000,
  "market_min_price_change_24hr": -0.5,
  "market_max_price_change_24hr": 0.5
}

Exclude Ranges (remove_market_info)

Exclude markets matching numeric criteria. Use this to filter out markets that don't meet your quality thresholds, such as markets with too little volume or extreme price volatility.

Volume filters:

  • min_volume / max_volume - Total volume (USD)
  • min_volume_24hr / max_volume_24hr - 24-hour volume (USD)
  • min_volume_1wk / max_volume_1wk - 1-week volume (USD)
  • min_volume_1mo / max_volume_1mo - 1-month volume (USD)

Liquidity filters:

  • min_liquidity / max_liquidity - Liquidity (USD)

Price change filters (decimal, -1 to 1):

  • min_price_change_1hr / max_price_change_1hr - 1-hour change
  • min_price_change_24hr / max_price_change_24hr - 24-hour change
  • min_price_change_7d / max_price_change_7d - 7-day change
  • min_price_change_30d / max_price_change_30d - 30-day change

Example:

"remove_market_info": {
  "min_volume": 0,
  "max_volume": 1000000000,
  "min_liquidity": 0
}

Complete Example

{
  "filters": {
    "candidate_source": "polymarket-items",
    "candidate_source_type": "posts",
    "ai_labels": ["user/user_id/mbd_ai_labels_topics", "science_technology"],
    "include_keywords": ["crypto"],
    "exclude_keywords": ["spam"],
    "remove_ai_labels": ["business_entrepreneurs"],
    "order_by": "liquidity",
    "market_info": {
      "exclude_closed": true
    },
    "include_market_info": {
      "market_min_liquidity": 100
    },
    "polymarket_filters": {
      "polymarket_start_date": {
        "start_timestamp_from": "days_ago:30",
        "start_timestamp_to": "days_ago:1"
      },
      "polymarket_end_date": {
        "end_timestamp_from": "days_from_now:1",
        "end_timestamp_to": "days_from_now:90"
      }
    },
    "remove_market_info": {
      "min_volume": 100000000,
      "max_volume": 1000000000
    }
  }
}