Filters
Filters define which trades or market events you care about. They combine trader performance criteria, market attributes, trade parameters, notification subscriptions, and manual whitelists/blacklists into a reusable configuration. Every Automation is powered by a filter.
Looking for starting shapes? Most users build one of four canonical filter setups (Whitelist, Cohort, Hybrid, or Specialist). See Filter Setups for step-by-step recipes. This page is the component-level field reference.
Creating a Filter
- Go to the Filters tab
- Click the + button to open the Filter Builder
- Enter a Filter Name (required)
- Configure one or more components (see below)
- Click Save
The Filter Builder opens with components active by default: Trader Criteria, Market Criteria, Trade Criteria, and Notification Criteria. You can remove any component you don’t need, and add Whitelists or Blacklists using the dropdown menus.
Filter Components
A filter is a stack of components, each answering a different “should this trade match?” question. There are two kinds:
- Criteria describe a quality bar: the trader has to be good enough, the market has to be liquid enough, the trade has to be big enough. Set thresholds, then any trader/market/trade above the bar passes.
- Whitelists and blacklists are manual overrides: a curated list of specific traders or markets you want to include or exclude regardless of the criteria. Use them when you’ve spent time validating a list and want to follow it directly, or when you want to permanently exclude something noisy.
A filter can combine up to eight components: Trader Criteria + Whitelist + Blacklist (trader side), Market Criteria + Whitelist + Blacklist (market side), Trade Criteria, and Notification Criteria. The combination logic is OR within each side, AND across sides. See How Components Combine below. At least one component must have constraints for the filter to save.
Trader Criteria
Use this when you want to follow a class of traders rather than specific addresses: “smart whales” rather than “this list of 20 wallets”. Set thresholds on the metrics that capture what “smart” means to you (Sharpe for risk-adjusted return, Trader Score for an opinionated composite, Closed Positions for sample-size, etc.). Any trader whose stats clear all the bars matches.
Set min and/or max for any combination:
| Field | What it means | Range | Example use |
|---|---|---|---|
| Win Rate | Percentage of closed positions that were profitable (dollar-weighted) | 0 to 100% | Min 55, traders who win more than they lose |
| Sharpe Ratio | Risk-adjusted return. Above 1 is good, above 2 is excellent | -∞ to +∞ | Min 1.5, strong risk-adjusted performers |
| Sortino Ratio | Like Sharpe but penalizes only downside volatility | -∞ to +∞ | Min 2, strong risk-adjusted performance ignoring upside vol |
| Total PnL | Net profit/loss across all closed positions in USD | -∞ to +∞ | Min 5000, meaningfully profitable traders |
| Total Volume | Total dollar volume traded across all positions | 0+ | Min 100000, traders with real skin in the game |
| Max Drawdown % | Largest peak-to-trough decline in portfolio value | 0 to 100% | Max 30, exclude traders with large drawdowns |
| Kelly Fraction | Optimal bet sizing based on win rate and payoff ratio. Higher = stronger edge | 0 to 100 | Min 10, traders with meaningful edge |
| Risk-Adjusted Return | Total return divided by max drawdown. A simpler complement to Sharpe. | -∞ to +∞ | Min 5, return that justifies the worst drawdown |
| Closed Positions | Number of positions closed or resolved | 0+ | Min 20, sufficient track record |
| Total Trades | Total individual trades executed | 0+ | Min 50, experienced traders |
| Profit Factor | Gross profits / gross losses. Above 1 = profitable overall | 0+ | Min 1.5, consistently profitable |
| Trade Frequency | Average fills per day. Higher = more active trader | 0+ | Min 1, traders placing at least one fill per day |
| Trader Score | Composite 0 to 100 score across performance, risk, consistency, edge, experience | 0 to 100 | Min 70, strong overall traders |
By default, Trader Criteria are evaluated against a trader’s lifetime stats. The Filter Builder includes an Apply thresholds to category checkbox that changes this behavior. When enabled, thresholds are checked against the trader’s stats in each of the incoming trade’s market categories rather than their overall stats. The trade does not pass the filter if the trader falls below thresholds in any category with available data (at least one category must have data to qualify).
When the checkbox is enabled, a time window dropdown appears, defaulting to All time. You can restrict the evaluation to a recent period (Last 24 hours, Last week, Last month, Last 3 months, or Last 6 months). This is useful for catching traders who are on a hot streak in a specific category without relying on lifetime stats that may be stale.
When category thresholds are disabled (the default), the filter evaluates against the trader’s overall lifetime stats. See Sliced Metrics for the full lifetime-vs-slice mental model.
Market Categories (OR logic): Also in this section. Select one or more tags (e.g., “Politics”, “Crypto”). Matches traders who have positions in markets with any of the selected tags.
Market Criteria
Use this to restrict where a trade can happen. Two common reasons: liquidity hygiene (“only markets deep enough that I won’t take 5% slippage”), and category focus (“only crypto markets” or “only politics markets that aren’t about a specific past event”). The keyword filters let you target or exclude very specific events by question text.
Constrains which markets the trade must occur in:
| Field | What it means | Example use |
|---|---|---|
| Multi Outcome | Whether the market uses multi-outcome pricing (allows trading “No” directly). Options: Any, Yes, No | ”Yes”, only multi-outcome markets |
| Disputed | Whether the market has an active UMA dispute. Options: Any, Yes, No | ”Yes”, only currently-disputed markets |
| Volume | Total dollar volume traded on the market | Min 100000, liquid markets |
| Liquidity | Current order book depth. Higher = lower slippage | Min 50000, deep markets |
| Days Remaining | Days until market resolution | Min 7, Max 90, medium-term markets |
| Tags | Category tags (OR logic). The market matches if it carries any selected tag | ”Politics” + “US Elections”, politics or US elections markets |
| Question Keywords | Filter by text in the market’s question. Each keyword is contains or not contains; multiple keywords are AND’d together | contains "election" + not contains "2020" |
| Description Keywords | Filter by text in the market’s description. Same logic as question keywords but searches the description field | contains "runoff" matches markets whose description mentions “runoff” |
Question Keywords and Description Keywords are separate fields. When adding a keyword, you first select whether it targets the Question or Description, then choose the operator (Contains or Not contains), then type the keyword. Keywords within each field are AND’d together; keywords across Question and Description are also AND’d.
Trade Criteria
Use this to gate on the individual trade rather than the trader or the market. Two main use cases: filtering out small noise trades by setting a minimum dollar size (whale-only filters), and trading at specific price levels (e.g. “only trades on outcomes priced under 30 cents” if you’re hunting underdog bets). The Side field is fixed to BUY because filters trigger on entries; exits are handled by the automation’s own settings.
Applied to each individual trade as it happens:
| Field | What it means | Range | Example use |
|---|---|---|---|
| Side | Locked to BUY. Only buy trades trigger filters; exits are handled by the automation’s settings | BUY only | N/A |
| Trade Size ($) | Dollar value of the trade (size × price) | 0+ | Min 1000, whale-sized trades only |
| Last Traded Price | Price of the outcome token (0 to 1). Lower = less likely outcome, higher = more likely | 0 to 1 | Max 0.85, trades on underdog outcomes |
Notification Criteria
Use this when you want to be notified about market-level events rather than individual trades. Unlike the other criteria which match on the current state of a document (the trader’s stats, the market’s attributes, the trade’s size), notification criteria match on fleeting events: something just happened on a market and you want to know about it.
Select one or more event types:
| Event type | What it matches |
|---|---|
| Disputes | A UMA dispute has opened on a market. Use this to catch disputes as they happen, rather than filtering on markets that are already disputed. |
| Bulletins | A bulletin board update was posted on a market (official clarifications, dispute notices from Polymarket). |
| Description Changes | The market’s description text was updated. |
Notification criteria and trade criteria are mutually exclusive. A filter uses one or the other, not both. The Filter Builder makes this clear: when notification criteria has any value, trade criteria is disabled (and vice versa). This separation exists because the two serve fundamentally different purposes. Trade criteria gates on individual trade events; notification criteria subscribes to market-level updates.
Notification criteria and trader criteria/whitelist are also mutually exclusive. Notification events are about markets, not about specific traders.
Market criteria and market whitelists/blacklists work alongside notification criteria. You can narrow which markets you receive notifications for using market criteria, a market whitelist, or a market blacklist. For example: whitelist a single market, then check “Bulletins” to get bulletin updates only for that market.
Disputed field and Disputes notification are mutually exclusive. These two features serve different purposes: the Disputed field under Market Criteria filters trades on markets that are already disputed, while the Disputes notification tells you the moment a new dispute opens. You can use one or the other, not both. If you set Disputed to “Yes” in Market Criteria, the “Disputes” checkbox under Notification Criteria is disabled. Likewise, if you check “Disputes” under Notification Criteria, the Disputed dropdown under Market Criteria is disabled.
Automation restrictions: Filters with notification criteria can only be attached to Alert automations (email or activity tab). They cannot be attached to paper or real copy trade automations, since notification events don’t represent trades to copy. When creating a paper or real copy trade automation, notification-criteria filters are greyed out in the filter dropdown.
Trader Whitelist
Use this when you’ve already validated a specific list of traders (via Advanced mode in the Traders tab, manual research, or Manage Whitelist from a trader profile) and want to follow them directly without relying on metric thresholds. Common pattern: criteria-driven filter for discovery, whitelist-driven filter for the traders you actually trust enough to copy with money.
Search by name or wallet address to add them. When a whitelist is active and there are no Trader Criteria, only trades from these addresses can match. When both are active, the trader can pass either side: they match if they’re on the whitelist or meet the criteria.
Trader Blacklist
Use this to permanently exclude specific traders without disturbing the rest of the filter: for traders you’ve watched and decided not to follow, traders you’ve identified as wash-traders, or anyone you want to keep out of an automation’s exposure.
Blacklists always win: a blacklisted trader never matches, regardless of any criteria they’d otherwise clear or any whitelist they’re on elsewhere.
Market Whitelist
Use this for narrowly-scoped strategies: a single market or a small handful you want to follow specifically. The pattern is the same as Trader Whitelist: with criteria active, the market can pass either side.
Market Blacklist
Use this to permanently exclude specific markets or entire categories. The blacklist takes a mix of individual markets and tags: adding a tag like “Sports” excludes every market with that tag from this filter, useful for filtering out a category that’s noisy for your strategy. Blacklists always win.
How Components Combine
The match logic is OR within each side, AND across sides:
- Trader side: the trader passes if
trader is on Trader Whitelist OR meets Trader Criteria - Market side: the market passes if
market is on Market Whitelist OR meets Market Criteria - Trade side: the trade meets Trade Criteria
- Notification side: the event type matches one of the selected notification criteria
- Blacklists always win, applied first: a blacklisted trader / market / category is excluded before any of the above is evaluated
For trade-matching filters (no notification criteria): a trade matches when trader side AND market side AND trade side AND not blacklisted.
For notification filters (notification criteria present): a market event matches when market side AND notification side AND not blacklisted. There is no trader or trade side because notification events are about markets, not traders.
The filter summary on the filter listing and detail pages shows the full logic in plain English with AND/OR connectors and parentheses where needed.
This shape is the reason whitelists are useful even when criteria exist: they widen, not narrow. A trader who’s on the whitelist passes the trader side regardless of whether they meet the metric thresholds. The same is true for markets.
Tag logic, both sections use OR:
- Trader Criteria → Market Categories: trader is active in any selected tag
- Market Criteria → Tags: market carries any of the selected tags
Validation Rules
- At least one component must have constraints. You can’t save an empty filter.
- If you have no trader criteria and no trader whitelist, then Trade Criteria or Notification Criteria is required.
- Trade Criteria and Notification Criteria are mutually exclusive.
- Notification Criteria cannot be combined with Trader Criteria or Trader Whitelist.
Filter Detail Page
Click any filter row to open the detail page. There are three tabs: Traders, Markets, Trades. The Traders and Markets tabs combine a paginated historical view (the universe currently matching the filter) with a live WebSocket overlay that prepends new traders/markets as they generate their first matching trade in this session. The Trades tab is purely live: no historical view, every row is a trade that arrived since the page opened.
New WebSocket entries flash briefly when they arrive so you can spot them. Streamed entries also keep a persistent dim background after the flash fades, so you can tell session-arrived rows apart from historical ones at a glance. Click any trader or market row to jump to its detail page.
Notification filters
When a filter uses notification criteria, the detail page behaves differently:
- Markets tab: Shows flat market rows (no event grouping) for markets matching the filter’s market criteria or whitelist. Each row is expandable to show the latest bulletin text or description change content. New notification events flash and prepend in real time.
- Traders and Trades tabs: Show an explanatory empty state — “This filter uses notification criteria — trader and trade matches are not applicable.” The tabs remain visible so you understand the distinction.
Real-time notification events: The Markets tab receives four event types via WebSocket:
| Event | What happens on the page |
|---|---|
| Dispute opened | The market is prepended to the top of the list (or flashed if already visible) and marked as disputed |
| Dispute resolved | The existing market row updates to show the resolved status and flashes |
| Bulletin added | The market is prepended or flashed; expand the row to see the new bulletin text |
| Description changed | The market is prepended or flashed; expand the row to see the updated description |
Real-time events only update page 1 of the Markets tab. If you’re browsing a later page, events are not shown until you return to page 1 or refresh.
Traders Tab
The trader universe currently matching the filter (paginated 20 per page) plus any new traders that have generated a matching trade during this session (prepended on top while you’re on page 1).
| Column | What it shows |
|---|---|
| Trader | Display name (falls back to truncated wallet address). Avatar and verified badge shown when available. |
| Pos. | Total positions held by the trader (open + closed) |
| Score | Trader Score, color-coded (green ≥ 85, success ≥ 70, warning ≥ 50, orange ≥ 30, destructive below) |
| PnL | Total PnL across all closed positions, USD |
| W/L | Wins / Losses count |
| $W-Win % | Dollar-weighted win rate |
| PF | Profit Factor |
| Sharpe | Sharpe Ratio |
| Sortino | Sortino Ratio (downside-only volatility) |
| Max DD | Max Drawdown %, with absolute dollar amount in parentheses |
| Kelly | Kelly Fraction % |
| RAR | Risk-Adjusted Return |
Markets Tab
The market universe currently matching the filter (paginated) plus newly-matched markets prepended via WebSocket.
| Column | What it shows |
|---|---|
| Question | Market question (falls back to truncated condition ID). A small colored dot before the question indicates you have an open position on this market. Disputed markets show a small warning icon before the question. |
| Tags | Up to three market tags |
| Liquidity | Current order book depth, USD |
| Volume | Total market volume, USD |
| Ends | Resolution date in ET |
Trades Tab
Every matching trade in real time, newest first.
| Column | What it shows |
|---|---|
| Date | Trade timestamp in ET |
| Trader | Trader name (clickable) |
| Market | Market question (clickable, with full question in tooltip) |
| Outcome | Yes / No or other outcome label |
| Side | BUY or SELL badge (BUY in primary color, SELL in destructive) |
| Shares | Share count |
| Price | Outcome price (0 to 1) |
| Value | Dollar value of the trade (shares × price) |
The Trades tab is purely session-scoped: closing the page clears the table; reopening the filter starts a fresh live feed. The Traders and Markets tabs always re-fetch the current universe from the backend on open, so historical context is preserved across page loads.
Filter list, coverage counts
Each row on the Filters list has a Counts column showing how many traders and markets currently meet the filter criteria, plus an as of timestamp:
12,034 traders
3,891 markets
as of 8m agoThese are coverage numbers, not match-rate predictions: the trader count is the number of traders whose lifetime stats meet the trader-side criteria; the market count is the number of currently-active markets meeting the market-side criteria. They tell you how broadly or narrowly the filter is scoped. A filter showing “1,500,000 traders / 800,000 markets” is essentially every trade on Polymarket; “200 traders / 50 markets” is a tight beam.
When a filter is just-saved or just-edited, the counts may briefly disappear (no row shown in the cell) while the backend recomputes them. They reappear within a second or two; they update automatically within 30 minutes at most.
The Filter Builder has a separate Estimate coverage button that runs a one-shot estimate against your in-progress criteria before saving. Useful for sanity-checking that a stricter Sharpe threshold or a tighter category set actually narrows the population the way you expect.
Managing Filters
- Enable/Disable: toggle the switch on any filter row. Disabled filters won’t trigger automations.
- Edit: click the pencil icon to reopen the Filter Builder with all fields pre-populated.
- Delete: click the trash icon. The button is disabled with an explanatory tooltip if any automations still depend on this filter. Delete the automations first, then the filter.