Whalefax
Kalshi

Kalshi taxes: what you actually get, and what you have to build yourself

Kalshi will not hand you a finished tax document for your trading. Whatever you file has to be built from your own fills, and the raw export is not in a shape anyone can file from.

Updated August 7, 2026. Written by Whalefax, which builds free P&L and tax reporting tools for prediction market traders. Informational only, not tax advice.

The short version

Kalshi does not issue a Form 1099-B for event contract trades. A 1099-B is the form that reports proceeds, cost basis, acquisition date and disposal date for each sale, and it is the thing that makes a stock broker's year end painless. Nobody in prediction markets sends one.

What you may receive instead, depending on your activity:

  • Form 1099-MISC if you got promotional credits, referral bonuses or similar rewards that cross the reporting threshold. That covers the bonus, not your trading.
  • Form 1099-INT if Kalshi paid you interest on your idle cash balance and it crosses the threshold.
  • A transaction history CSV under Documents on the website. This is the only complete record of your trading, and it is not a tax form.

None of that removes the obligation. Income is reportable whether or not a form arrives, and the absence of a 1099 is not evidence that nothing is owed. It just means the reconstruction is your job.

Check your own account before you assume

Reporting practice at every one of these venues has moved more than once, and it will move again as the rules for event contracts settle. Open Documents in your account in January and look at what is actually there rather than trusting any article, including this one. Then build your record from your fills regardless, because a summary form does not replace the underlying detail if the return is ever questioned.

Why the classification argument does not change your homework

You will find long threads arguing whether event contracts are capital assets, section 1256 contracts, or gambling. That question is unsettled, it genuinely matters to your final number, and it is a question for a professional who knows your situation. Here is the part that is worth understanding now: the leading treatments all demand per-position detail, and they demand more or less the same fields.

If it is treated asYou reportYou need, per position
Capital gain and lossForm 8949 and Schedule DAcquired date, disposed date, cost basis, proceeds, holding period
GamblingGross winnings as income, losses itemized and capped at winningsGross win and gross loss separately, never a net figure
Other incomeSchedule 1Total proceeds and total cost, substantiated by the underlying detail

Notice what is common to all three rows: nothing is satisfied by a single net number. The gambling route is the one that catches people out, because it wants gross winnings and gross losses listed separately rather than netted. A trader who ended the year up ten thousand dollars on fifty thousand of wins against forty thousand of losses reports very different figures under that treatment than under capital treatment, and cannot produce either one from memory in April.

So the useful move, before anyone decides the classification, is to assemble a complete per-position record. That record satisfies whichever answer you land on. Assembling it in December is straightforward. Assembling it in April, from a year-old memory of a market that has since closed, is where people genuinely lose money.

What the Kalshi export actually contains

The CSV under Documents is per fill, not per position. That difference is the whole problem.

A position you think of as one trade is frequently five rows. You bought a hundred contracts and the book filled you in four pieces at four prices. You sold sixty of them a week later across two more fills. The remaining forty settled at expiry. That is seven rows in the file describing one idea you had.

To get to a reportable figure, those rows have to be paired. Sixty sold contracts have to be matched against specific purchase lots to determine which basis applies, in a consistent order, usually first in first out. Only then do you have an acquired date, a disposed date, a basis and a proceeds figure for each disposal.

Two details in the raw file that reliably cause errors:

  • Check whether prices are in cents or in dollars before you total anything. Kalshi is midway through a migration: older exports price a sixty three cent fill as 63, newer fields carry fixed-point dollars and price the same fill as 0.63. Get it backwards and every figure is out by a factor of one hundred. The quick test: if the column holds whole numbers above 1, it is cents.
  • Settlement is a separate event from a sale. A contract that expires worthless still needs to appear in the record as a disposal at zero. If you only count rows where money moved, every losing position silently vanishes and your reported gain is too high.

Where the fees go

Kalshi charges a trading fee per fill, and on an active account the annual total is not small. Fees are not a separate deduction you claim at the bottom. Under capital treatment they belong inside the transaction:

  • A fee paid to open a position is capitalized into cost basis. It increases what you paid.
  • A fee paid to close a position reduces proceeds. It decreases what you received.

Handled that way, the fee reduces your gain exactly once, in the right year, attached to the right position. Handled as a lump sum somewhere else, it is either lost entirely or counted twice.

The December problem nobody mentions

Prediction markets settle constantly, including in the last week of the year, which creates a boundary question that stock traders rarely face. A contract that resolves on the evening of December 31 belongs to that tax year. If your records are timestamped in UTC, that same settlement reads as January 1 and lands in the following year.

It is a small population of trades and a large amount of trouble, because it moves income between years and the two sides no longer reconcile. Pick a calendar, use the one your exchange reports in, and apply it to every row. Whalefax buckets everything by Eastern calendar day for exactly this reason.

What to do before the year closes

  1. Download the CSV now, not in April. Log in on the web, open Documents, export the current year. Accounts get restricted, platforms change their export, and a file on your own disk is not subject to either.
  2. Total your gross figures once. Gross bought and gross sold, not just the net. If you run multi leg positions, the gross numbers are far larger than your net result and that gap is what a gambling treatment would put on your return.
  3. Confirm your losing positions are in the record. Every contract that expired at zero should appear as a disposal. If it does not, your gain is overstated and you would be paying tax you do not owe.
  4. Take the classification question to a professional with the finished record in hand. That conversation takes ten minutes with the data and an hour without it.

Common questions

Does Kalshi send a 1099?
Not for your trading. Kalshi does not issue a Form 1099-B covering event contract gains and losses. You may receive a 1099-MISC for promotional credits or rewards above the reporting threshold, or a 1099-INT for interest paid on your cash balance, but neither reports your trading results. The complete record of your trading is the transaction CSV under Documents on the website.
Do I owe tax on Kalshi profits if I never receive a form?
Yes. A reporting threshold governs when the platform has to send paperwork, not when income becomes taxable. Profit is reportable whether or not a form arrives.
Are Kalshi event contracts taxed as gambling or as capital gains?
That is genuinely unsettled and it depends on facts specific to you, so it is a question for a qualified professional rather than an article. What is not in dispute is that every candidate treatment requires per-position records with dates, cost and proceeds, so building that record is useful work no matter which answer applies to you.
Where do trading fees go on the return?
Under capital treatment, fees paid to open a position are added to cost basis and fees paid to close one are subtracted from proceeds. They are not claimed separately as an expense, which is why totalling them at the bottom of the year both misstates each position and risks double counting.
Can I just report the net number my dashboard shows?
It is a poor idea. A dashboard figure is a live mark, it usually excludes fees, and it cannot be substantiated line by line if the return is questioned. Under a gambling treatment a net figure is also the wrong number entirely, since that route asks for gross winnings and gross losses separately.
Turn your Kalshi CSV into a finished report
Drop the file in, get matched lots, realized P&L and a per-position report. Free, no login, and the file never leaves your browser.
Open the tool