Reference sheet for both platforms: the exact fee formulas, every published rate and multiplier, primary sources, a dated changelog, and the same numbers as free JSON. Built to be cited.
fee = round_up_to_cent( taker_multiplier x 0.07 x C x P x (1 - P) )fee = round_up_to_cent( maker_multiplier x 0.0175 x C x P x (1 - P) )fee = C x feeRate x p x (1 - p)fee = 0| Base constants | Kalshi | Polymarket |
|---|---|---|
| Taker rate | 0.07 | 0–0.07 by category |
| Maker rate | 0.0175 | 0 |
| Default multiplier (taker / maker) | 1 / 0 | — |
Kalshi. C = number of contracts, P = contract price in dollars (0.01-0.99). Maker fee charged on: only series whose API fee_type is 'quadratic_with_maker_fees' (or the combo variant). On every other series resting orders pay no fee.
Polymarket. C = number of shares, p = share price in dollars (0-1), feeRate = the market's rate. Fees are rounded to 5 decimal places; the smallest fee charged is 0.00001 pUSD (Polymarket's USDC-backed trading dollar).
Kalshi rounding. Each fill's fee is rounded up to the next whole cent. The schedule's formula footnote says 'centicent', but the fee table printed in the same PDF uses whole cents (1 contract at 1c = $0.01, where the raw value is $0.000693), so whole-cent rounding is what the published numbers follow.
| Category | Published taker rate | Maker rate | Maker rebate | Declared by live markets | Verified on-chain |
|---|---|---|---|---|---|
| Crypto | 0.07 | 0 | 20% | 0.07 | 0.07 (2 fills) |
| Sports | 0.05 | 0 | 15% | 0.05 / 0.03 | 0.05 (5 fills) / 0.03 (5 fills) |
| Economics | 0.05 | 0 | 25% | 0.05 | 0.05 (4 fills) |
| Culture | 0.05 | 0 | 25% | 0.05 | 0.05 (5 fills) |
| Weather | 0.05 | 0 | 25% | 0.05 | 0.05 (2 fills) |
| Other / General | 0.05 | 0 | 25% | — | — |
| Politics | 0.04 | 0 | 25% | 0.04 / 0 | 0.04 (5 fills) / 0 (4 fills) |
| Finance | 0.04 | 0 | 25% | 0.04 | 0.04 (5 fills) |
| Tech | 0.04 | 0 | 25% | 0.04 | 0.04 (5 fills) |
| Mentions | 0.04 | 0 | 25% | 0.04 | 0.04 (2 fills) |
| Geopolitics | 0 | 0 | — | 0 | 0 (5 fills) |
The table is the published per-category schedule. Polymarket sets the rate on each market (Gamma API: feeSchedule.rate, feesEnabled), so live markets can declare a rate that differs from their category's published one. The live_check block of fees.json lists, per category, the rates live markets declare and, separately, which of those were confirmed against fees actually deducted on-chain.
The last two columns are PolyKal's own daily check (last run 2026-10-12 08:36 UTC) and they are two different things. Declared by live markets is the rate the most-traded open markets in that category state in Polymarket's API. Verified on-chain lists only the declared rates we confirmed against money actually deducted: 49 real taker fills across 12 of 12 category/rate combinations were charged exactly what the rate implies. A dash means no sampled market fell in that category.
Taker fee = taker multiplier × 0.07 × C × P × (1 − P). Maker fee = maker multiplier × 0.0175 × C × P × (1 − P). The maker multiplier is 0 on every series except the ones listed here, so on most Kalshi markets a resting order pays nothing. Schedule effective 2026-07-07.
| Series ticker(s) | Taker multiplier | Maker multiplier |
|---|---|---|
| Every series not listed below (default) | 1 | 0 |
| KXAAAGASM, KXATPMATCH, KXBALLONDOR, KXBTCMAX150, KXCPI, KXCPIYOY, KXEGGS, KXEMMYCACTO, KXEMMYCACTR, KXEMMYCSERIES, KXEMMYDACTO, KXEMMYDACTR, KXEMMYDSERIES, KXFED, KXFEDDECISION, KXGDP, KXHEISMAN, KXINXY, KXIPO, KXLALIGA, KXLLM1, KXMARMAD, KXMENWORLDCUP, KXMLB, KXMLBAL, KXMLBASGAME, KXMLBGAME, KXMLBNL, KXNASDAQ100Y, KXNBA, KXNBAEAST, KXNBAMVP, KXNBAROY, KXNBAWEST, KXNCAAF, KXNCAAFACC, KXNCAAFB10, KXNCAAFB12, KXNCAAFGAME, KXNCAAFPLAYOFF, KXNCAAFSEC, KXNFLAFCCHAMP, KXNFLAFCEAST, KXNFLAFCNORTH, KXNFLAFCSOUTH, KXNFLAFCWEST, KXNFLCOTY, KXNFLCPOTY, KXNFLDPOTY, KXNFLDROTY, KXNFLGAME, KXNFLMVP, KXNFLNFCCHAMP, KXNFLNFCEAST, KXNFLNFCNORTH, KXNFLNFCSOUTH, KXNFLNFCWEST, KXNFLOPOTY, KXNFLOROTY, KXNHL, KXNHLEAST, KXNHLWEST, KXPAYROLLS, KXPGARYDER, KXPGASOLHEIM, KXPGATOUR, KXRATECUTCOUNT, KXSB, KXSUPERBOWLHEADLINE, KXU3, KXUCL, KXUCLGAME, KXWCGAME, KXWNBA, KXWNBAGAME, KXWTAMATCH | 1 | 1 |
| KXBTCY, KXCITRINI, KXDOED, KXELECTIRAN, KXETHY, KXGAMBLINGREPEAL, KXGREENLAND, KXIRANDEMOCRACY, KXLAYOFFSYINFO, KXPAHLAVIHEAD | 0 | 0 |
| KXMVE* | 1 | 2 |
Rows listed in the fee schedule's 'Non-Standard Fees' table. A ticker ending in * is a prefix. Any series not listed uses the default multipliers. Live value for any series: GET https://api.elections.kalshi.com/trade-api/v2/series/{series_ticker} (field fee_multiplier).
Known discrepancy. KXMLBGAME: the fee schedule lists taker multiplier 1, the series API returns 0.5 (noted 2026-09-12). PolyKal uses the live API value for taker fees and shows no maker figure for this series.
The same numbers, machine-readable, at a stable address: https://polykal.net/data/fees.json. No key, no sign-up, CORS enabled (Access-Control-Allow-Origin: *), refreshed with every site build.
curl -s https://polykal.net/data/fees.json | jq '.platforms.kalshi.taker_rate'
const fees = await fetch("https://polykal.net/data/fees.json").then(r => r.json());
const rate = fees.platforms.polymarket.categories.sports.taker_rate;Fields: platforms.kalshi (formulas, base rates, default and per-series multipliers), platforms.polymarket (formula, per-category rates, rebates), changelog, verified_on, source_urls, and live_check (daily: the rates live markets declare, and separately the ones verified against on-chain deductions, with the number of fills checked). Version 1.0.
Need a specific trade? The fee calculator walks the live order book. New to this? Start with Kalshi fees explained or Polymarket fees explained.
Kalshi charges takers a fee of 7% × price × (1 − price) per contract, rounded up to the next cent — at most 1.75¢ per contract, at the 50¢ price point. Makers pay nothing on standard series and 1.75% on the series Kalshi flags for maker fees. Verified against Kalshi's official fee schedule (effective 2026-07-07) on 2026-09-12.
Polymarket charges takers a fee set per market by category — from 7% on crypto markets down to 0% on geopolitics, with most categories at 4% or 5% — using the same size × rate × price × (1 − price) shape. Makers pay nothing. As of 2026-09-20.
It depends on the market. On crypto markets the taker fee is identical (both 7%). On every other category Polymarket's taker rate is lower — about 29% lower on its 5% categories and 43% lower on politics — and Polymarket never charges makers, while Kalshi charges makers only on flagged series. Spread and depth often matter more than the fee, so compare the exact after-fee cost of a specific trade with the fee calculator. As of 2026-09-12.
Fee = round up to the next cent of ( M × 0.07 × C × P × (1 − P) ), where C is the number of contracts, P is the price in dollars (0 to 1), and M is the series' fee multiplier (1 by default). Example: 100 contracts at 50¢ on a standard series = 0.07 × 100 × 0.50 × 0.50 = $1.75. Verified 2026-09-12.
Last verified: 2026-09-12. Oldest of the per-platform verification dates: every number in this file was checked against its primary source on or after this date.
Kalshi — verified 2026-09-12. Multiplier table transcribed from the official fee schedule PDF and compared row by row; taker multipliers re-checked every day against Kalshi's series API.
Polymarket — verified 2026-09-20. Category table compared with docs.polymarket.com/trading/fees every day; per-market rates checked daily against the fee actually deducted on-chain in real taker fills.
| Date | Platform | What changed | Source |
|---|---|---|---|
| 2026-09-21 | Both | Version 1.0 of this dataset published. | source |
| 2026-09-20 | Polymarket | Documented that rates are set per market: NFL and college-football game markets are charged 0% and season-long futures 3% while the published Sports rate is 5%. Confirmed against fees deducted on-chain. No change to the published category table. | source |
| 2026-09-12 | Kalshi | Full Non-Standard Fees table (87 rows) transcribed and checked against the PDF. Noted that KXMLBGAME is listed with taker multiplier 1 while the series API returns 0.5. | source |
| 2026-07-07 | Kalshi | Fee schedule currently in force takes effect (the version this file transcribes). | source |
Every change to a rate in the data file requires a new entry here; the site build fails otherwise.
Copy either line. Both link back to this page, which is all the licence asks for.
<a href="https://polykal.net/fee-schedule/">Kalshi & Polymarket Fee Schedule</a> (PolyKal, verified 2026-09-12)
[Kalshi & Polymarket Fee Schedule](https://polykal.net/fee-schedule/) (PolyKal, verified 2026-09-12)
The tables on this page and fees.json are free to use, copy and redistribute, including commercially, under Creative Commons Attribution 4.0 (CC-BY-4.0). The one condition: credit PolyKal (polykal.net) and link to https://polykal.net/fee-schedule/.
Independent tool. Not affiliated with, endorsed by, or operated by Polymarket or Kalshi. Data from public sources. Not financial advice.
Reference sheet for both platforms: the exact fee formulas, every published rate and multiplier, primary sources, a dated changelog, and the same numbers as free JSON. Built to be cited.
fee = round_up_to_cent( taker_multiplier x 0.07 x C x P x (1 - P) )fee = round_up_to_cent( maker_multiplier x 0.0175 x C x P x (1 - P) )fee = C x feeRate x p x (1 - p)fee = 0| Base constants | Kalshi | Polymarket |
|---|---|---|
| Taker rate | 0.07 | 0–0.07 by category |
| Maker rate | 0.0175 | 0 |
| Default multiplier (taker / maker) | 1 / 0 | — |
Kalshi. C = number of contracts, P = contract price in dollars (0.01-0.99). Maker fee charged on: only series whose API fee_type is 'quadratic_with_maker_fees' (or the combo variant). On every other series resting orders pay no fee.
Polymarket. C = number of shares, p = share price in dollars (0-1), feeRate = the market's rate. Fees are rounded to 5 decimal places; the smallest fee charged is 0.00001 pUSD (Polymarket's USDC-backed trading dollar).
Kalshi rounding. Each fill's fee is rounded up to the next whole cent. The schedule's formula footnote says 'centicent', but the fee table printed in the same PDF uses whole cents (1 contract at 1c = $0.01, where the raw value is $0.000693), so whole-cent rounding is what the published numbers follow.
| Category | Published taker rate | Maker rate | Maker rebate | Declared by live markets | Verified on-chain |
|---|---|---|---|---|---|
| Crypto | 0.07 | 0 | 20% | 0.07 | 0.07 (2 fills) |
| Sports | 0.05 | 0 | 15% | 0.05 / 0.03 | 0.05 (5 fills) / 0.03 (5 fills) |
| Economics | 0.05 | 0 | 25% | 0.05 | 0.05 (4 fills) |
| Culture | 0.05 | 0 | 25% | 0.05 | 0.05 (5 fills) |
| Weather | 0.05 | 0 | 25% | 0.05 | 0.05 (2 fills) |
| Other / General | 0.05 | 0 | 25% | — | — |
| Politics | 0.04 | 0 | 25% | 0.04 / 0 | 0.04 (5 fills) / 0 (4 fills) |
| Finance | 0.04 | 0 | 25% | 0.04 | 0.04 (5 fills) |
| Tech | 0.04 | 0 | 25% | 0.04 | 0.04 (5 fills) |
| Mentions | 0.04 | 0 | 25% | 0.04 | 0.04 (2 fills) |
| Geopolitics | 0 | 0 | — | 0 | 0 (5 fills) |
The table is the published per-category schedule. Polymarket sets the rate on each market (Gamma API: feeSchedule.rate, feesEnabled), so live markets can declare a rate that differs from their category's published one. The live_check block of fees.json lists, per category, the rates live markets declare and, separately, which of those were confirmed against fees actually deducted on-chain.
The last two columns are PolyKal's own daily check (last run 2026-10-12 08:36 UTC) and they are two different things. Declared by live markets is the rate the most-traded open markets in that category state in Polymarket's API. Verified on-chain lists only the declared rates we confirmed against money actually deducted: 49 real taker fills across 12 of 12 category/rate combinations were charged exactly what the rate implies. A dash means no sampled market fell in that category.
Taker fee = taker multiplier × 0.07 × C × P × (1 − P). Maker fee = maker multiplier × 0.0175 × C × P × (1 − P). The maker multiplier is 0 on every series except the ones listed here, so on most Kalshi markets a resting order pays nothing. Schedule effective 2026-07-07.
| Series ticker(s) | Taker multiplier | Maker multiplier |
|---|---|---|
| Every series not listed below (default) | 1 | 0 |
| KXAAAGASM, KXATPMATCH, KXBALLONDOR, KXBTCMAX150, KXCPI, KXCPIYOY, KXEGGS, KXEMMYCACTO, KXEMMYCACTR, KXEMMYCSERIES, KXEMMYDACTO, KXEMMYDACTR, KXEMMYDSERIES, KXFED, KXFEDDECISION, KXGDP, KXHEISMAN, KXINXY, KXIPO, KXLALIGA, KXLLM1, KXMARMAD, KXMENWORLDCUP, KXMLB, KXMLBAL, KXMLBASGAME, KXMLBGAME, KXMLBNL, KXNASDAQ100Y, KXNBA, KXNBAEAST, KXNBAMVP, KXNBAROY, KXNBAWEST, KXNCAAF, KXNCAAFACC, KXNCAAFB10, KXNCAAFB12, KXNCAAFGAME, KXNCAAFPLAYOFF, KXNCAAFSEC, KXNFLAFCCHAMP, KXNFLAFCEAST, KXNFLAFCNORTH, KXNFLAFCSOUTH, KXNFLAFCWEST, KXNFLCOTY, KXNFLCPOTY, KXNFLDPOTY, KXNFLDROTY, KXNFLGAME, KXNFLMVP, KXNFLNFCCHAMP, KXNFLNFCEAST, KXNFLNFCNORTH, KXNFLNFCSOUTH, KXNFLNFCWEST, KXNFLOPOTY, KXNFLOROTY, KXNHL, KXNHLEAST, KXNHLWEST, KXPAYROLLS, KXPGARYDER, KXPGASOLHEIM, KXPGATOUR, KXRATECUTCOUNT, KXSB, KXSUPERBOWLHEADLINE, KXU3, KXUCL, KXUCLGAME, KXWCGAME, KXWNBA, KXWNBAGAME, KXWTAMATCH | 1 | 1 |
| KXBTCY, KXCITRINI, KXDOED, KXELECTIRAN, KXETHY, KXGAMBLINGREPEAL, KXGREENLAND, KXIRANDEMOCRACY, KXLAYOFFSYINFO, KXPAHLAVIHEAD | 0 | 0 |
| KXMVE* | 1 | 2 |
Rows listed in the fee schedule's 'Non-Standard Fees' table. A ticker ending in * is a prefix. Any series not listed uses the default multipliers. Live value for any series: GET https://api.elections.kalshi.com/trade-api/v2/series/{series_ticker} (field fee_multiplier).
Known discrepancy. KXMLBGAME: the fee schedule lists taker multiplier 1, the series API returns 0.5 (noted 2026-09-12). PolyKal uses the live API value for taker fees and shows no maker figure for this series.
The same numbers, machine-readable, at a stable address: https://polykal.net/data/fees.json. No key, no sign-up, CORS enabled (Access-Control-Allow-Origin: *), refreshed with every site build.
curl -s https://polykal.net/data/fees.json | jq '.platforms.kalshi.taker_rate'
const fees = await fetch("https://polykal.net/data/fees.json").then(r => r.json());
const rate = fees.platforms.polymarket.categories.sports.taker_rate;Fields: platforms.kalshi (formulas, base rates, default and per-series multipliers), platforms.polymarket (formula, per-category rates, rebates), changelog, verified_on, source_urls, and live_check (daily: the rates live markets declare, and separately the ones verified against on-chain deductions, with the number of fills checked). Version 1.0.
Need a specific trade? The fee calculator walks the live order book. New to this? Start with Kalshi fees explained or Polymarket fees explained.
Kalshi charges takers a fee of 7% × price × (1 − price) per contract, rounded up to the next cent — at most 1.75¢ per contract, at the 50¢ price point. Makers pay nothing on standard series and 1.75% on the series Kalshi flags for maker fees. Verified against Kalshi's official fee schedule (effective 2026-07-07) on 2026-09-12.
Polymarket charges takers a fee set per market by category — from 7% on crypto markets down to 0% on geopolitics, with most categories at 4% or 5% — using the same size × rate × price × (1 − price) shape. Makers pay nothing. As of 2026-09-20.
It depends on the market. On crypto markets the taker fee is identical (both 7%). On every other category Polymarket's taker rate is lower — about 29% lower on its 5% categories and 43% lower on politics — and Polymarket never charges makers, while Kalshi charges makers only on flagged series. Spread and depth often matter more than the fee, so compare the exact after-fee cost of a specific trade with the fee calculator. As of 2026-09-12.
Fee = round up to the next cent of ( M × 0.07 × C × P × (1 − P) ), where C is the number of contracts, P is the price in dollars (0 to 1), and M is the series' fee multiplier (1 by default). Example: 100 contracts at 50¢ on a standard series = 0.07 × 100 × 0.50 × 0.50 = $1.75. Verified 2026-09-12.
Last verified: 2026-09-12. Oldest of the per-platform verification dates: every number in this file was checked against its primary source on or after this date.
Kalshi — verified 2026-09-12. Multiplier table transcribed from the official fee schedule PDF and compared row by row; taker multipliers re-checked every day against Kalshi's series API.
Polymarket — verified 2026-09-20. Category table compared with docs.polymarket.com/trading/fees every day; per-market rates checked daily against the fee actually deducted on-chain in real taker fills.
| Date | Platform | What changed | Source |
|---|---|---|---|
| 2026-09-21 | Both | Version 1.0 of this dataset published. | source |
| 2026-09-20 | Polymarket | Documented that rates are set per market: NFL and college-football game markets are charged 0% and season-long futures 3% while the published Sports rate is 5%. Confirmed against fees deducted on-chain. No change to the published category table. | source |
| 2026-09-12 | Kalshi | Full Non-Standard Fees table (87 rows) transcribed and checked against the PDF. Noted that KXMLBGAME is listed with taker multiplier 1 while the series API returns 0.5. | source |
| 2026-07-07 | Kalshi | Fee schedule currently in force takes effect (the version this file transcribes). | source |
Every change to a rate in the data file requires a new entry here; the site build fails otherwise.
Copy either line. Both link back to this page, which is all the licence asks for.
<a href="https://polykal.net/fee-schedule/">Kalshi & Polymarket Fee Schedule</a> (PolyKal, verified 2026-09-12)
[Kalshi & Polymarket Fee Schedule](https://polykal.net/fee-schedule/) (PolyKal, verified 2026-09-12)
The tables on this page and fees.json are free to use, copy and redistribute, including commercially, under Creative Commons Attribution 4.0 (CC-BY-4.0). The one condition: credit PolyKal (polykal.net) and link to https://polykal.net/fee-schedule/.
Independent tool. Not affiliated with, endorsed by, or operated by Polymarket or Kalshi. Data from public sources. Not financial advice.