← Back to blog

Polymarket Fees Explained: Maker, Taker, and the CLOB Fee Schedule in 2026

By the ZenHodl team — we run the trading bots this blog writes about, and the qualifying live-position record, including losses, is public with its admission rules at /results.

There is no safe global constant called “the Polymarket fee.” Under CLOB V2, the protocol determines fees per market at match time. Makers are not charged a platform trading fee; takers pay only when the selected market is fee-enabled.

The reliable workflow is therefore:

  1. Read the selected market's current fee configuration.
  2. Apply the documented price-dependent fee curve.
  3. Add spread, slippage, and latency costs.
  4. Recheck the configuration before deploying or rerunning a backtest.

The source of truth is Polymarket's current Fees documentation, not a fee number copied from an older article.

The CLOB V2 Fee Formula

Polymarket documents the platform taker fee as:

fee_usdc = shares × fee_rate × price × (1 - price)

where price is between 0 and 1. The curve is symmetric around 50¢: the same number of shares traded at 30¢ and 70¢ incurs the same dollar fee. Fees are rounded to five decimal places, with a minimum charged amount of 0.00001 USDC.

The category's fee_rate is a coefficient in that formula. It is not a flat percentage of stake or winnings.

As checked on August 13, 2026, the official table lists a sports coefficient of 0.05, a maker fee rate of 0, and a 15% maker-rebate allocation. For 100 shares:

Price Trade value Sports taker fee Fee / trade value
20¢ $20.00 $0.80 4.00%
50¢ $50.00 $1.25 2.50%
80¢ $80.00 $0.80 1.00%

Those examples describe the current category curve, not a promise that every future sports market uses it. The market-level configuration wins.

How to Check a Specific Market

The V2 API exposes CLOB market information by condition ID. In the official Python client:

from py_clob_client_v2 import ClobClient

client = ClobClient(
    host="https://clob.polymarket.com",
    chain_id=137,
)

info = client.get_clob_market_info("CONDITION_ID")
fee_details = info.get("fd", {})

print("fee details:", fee_details)
print("minimum order size:", info.get("mos"))
print("minimum tick size:", info.get("mts"))

Gamma market objects also expose feesEnabled and a feeSchedule. Use the CLOB response for the parameters applied by the trading venue, and fail closed if a trading strategy cannot resolve the current fee configuration.

CLOB V2 removed feeRateBps from the signed order. Do not pass a fee guessed by your client: the operator sets the applicable fee at match time.

Maker Fees and Maker Rebates Are Different

A maker posts an order that rests on the book. A taker submits an order that immediately matches existing liquidity.

The maker-rebate percentage is not a guaranteed rebate on every order. Your payout depends on executed maker liquidity and the program's current rules; Polymarket also states that rebate percentages can change. Treat a rebate as separately measured revenue, not as a negative fee baked into a backtest.

Polymarket also documents a tiered taker-rebate program. As with maker rebates, book only the rebate actually credited to the account.

The Old NCAAB “2% of Winning Payout” Model Is Obsolete

An earlier version of this article described a February 2026 NCAAB fee as 2¢ per winning share. That is not the current CLOB V2 fee model and should not drive new code or backtests.

Current fees are applied to fee-enabled taker fills at match time using the per-market curve. Settlement is not where your client should invent or deduct a category-specific “winnings fee.” Historical analyses must use the fee regime that existed when each fill occurred; forward simulations should use the selected market's current V2 parameters.

What About Polygon Gas?

CLOB orders are signed off-chain and matched by Polymarket, so a trader is not asked to submit a new Polygon transaction and pay gas for every fill. That does not make the entire wallet lifecycle costless:

For trade-level modeling, do not add a fictional gas charge to each CLOB fill. Track actual wallet, bridge, and relayer-related costs separately when they occur.

Fees vs Sportsbook Vig

Sportsbook vig is embedded in the two quoted sides. For example, two sides at -110 imply about 104.8% in total probability before devigging. A prediction-market order book has a spread, a price-dependent platform fee on eligible taker fills, and possible price impact.

That makes “0% maker fee” an incomplete comparison. A maker can still suffer adverse selection, and a taker can pay both the spread and the platform fee. On a thin book, those execution costs can exceed conventional sportsbook vig even when the nominal maker fee is zero.

Calculate Breakeven in Dollars, Then Convert to Edge

For a proposed order, estimate:

expected_cost_usd = platform_fee_usd
                  + spread_and_slippage_usd
                  + latency_or_adverse_selection_usd
                  - rebates_actually_expected_usd

Then divide by filled shares to express that cost in cents per share. The required model edge must exceed the full expected cost with a margin for estimation error.

Do not hardcode a flat two-cent fee. The platform fee changes with price and shares, while slippage changes with order-book depth. A good simulator walks the available book, applies the market's fee curve to the expected fill, and records maker/taker status from the actual execution.

Entry, Exit, and Settlement

Platform fees attach to eligible taker fills:

Holding can reduce the number of fee-bearing executions, but it is not automatically the best strategy. The decision must also include information risk, opportunity cost, and the value of exiting a bad position.

Implementation Checklist

Before trusting a live strategy or backtest:

  1. Use py-clob-client-v2, not the archived V1 package.
  2. Query the market's current CLOB fee details.
  3. Apply shares × fee_rate × price × (1 - price) only to eligible taker fills.
  4. Keep maker rebates and taker rebates as realized credits, not assumptions.
  5. Model spread and depth separately from the platform fee.
  6. Store the fee regime and maker/taker role with every fill for historical reproducibility.
  7. Recheck the official fee page before deployment because category parameters can change.

The practical takeaway is simple: the fee displayed in a table is only one part of execution cost. For a trading bot, the defensible threshold is built from the exact market fee, expected fill price, book depth, latency, and observed adverse selection.

Related deeper reads: - The Complete Guide to Prediction Market APIs — fees in the broader API landscape. - Hold to Settlement, Never Sell — when reducing executions helps and when it does not. - Execution Quality in Prediction Markets — spread, queue position, and adverse selection.

Related reading

Get ZenHodl Weekly

One weekly email with live results, one model insight, and product updates.

Tuesday mornings. No spam.

Want the data behind this post?

Historical sports prediction-market datasets with measured coverage, documented schemas, and disclosed gaps.

Join the community

Discuss strategies, share results, get help.

Join Discord