predictiontalks↗
Prediction market intelligence

START RESEARCHING

Guide / Advanced

Kalshi PnL tracking: build a useful portfolio journal from your own data

Understand Kalshi account PnL, positions and fees, why public market trades do not reveal private trader performance, and how to structure an authenticated portfolio journal.

A Kalshi PnL tracker needs a different access model from a public Polymarket wallet explorer. Public market prices and trade prints can support market research, but they do not establish another user's complete private account performance.

For your own journal, Kalshi documents authenticated portfolio endpoints. This guide explains what to collect and how to avoid an incomplete or misleading result. We checked the current positions documentation on October 21, 2026; we did not connect a Kalshi account or retrieve private balances.

Start with the account-data boundary

The documented Get Positions request requires an access key, request signature and timestamp. The page also describes a specific permissioned OAuth route for registered partners. That is not the same thing as a public endpoint where anyone can request an arbitrary trader's portfolio.

Keep authentication on a trusted server or local tool. A public website should not ship an account's signing material to the browser. Before granting a third-party tracker access, check the exact permissions it requests, what it stores and how access can be revoked.

For a project that only needs prices and market discovery, use the public market-data bot guide. It avoids adding account access to a task that does not require it.

Define the result you want to display

Write the metric before building the chart. Do you need realized PnL by market, total fees over a period, current exposure, or an account-value history adjusted for external cash flows?

Those are different outputs. A deposit is not a trading profit. Current exposure is not necessarily a realized loss. And a current position snapshot does not contain every historical event needed for a return calculation.

If a third-party tool claims to compare trader performance across Kalshi and Polymarket, ask how it obtains account data and whether both sides use the same accounting basis. The cross-platform Dune guide explains why public market activity is a different dataset from private account returns.

Inspect the positions schema

The current Kalshi response example includes market-level realized_pnl_dollars, fees_paid_dollars, market_exposure_dollars, position_fp and update timestamps, with event-level aggregates in a separate collection.

Keep decimal values and their field units intact. Do not silently combine market rows with their event aggregates: doing so can count the same economic exposure twice. Decide whether your table's grain is one market, one event or one account observation.

Also document whether a PnL field already reflects a particular fee treatment before subtracting fees again. A visible fee column is useful; an unexplained double deduction is not. This source review does not independently reconstruct Kalshi's account accounting.

Include the history you actually need

Kalshi's documentation says Get Positions returns unsettled positions by default. Settled or all-state reads have their own query and cursor behavior, while archived positions require a historical route.

A tracker that reads only the default first response can therefore omit relevant settled history. Preserve the chosen settlement status and cursor rules while paging. Record whether archived history remains outside your dataset.

For a period-based journal, align the selected activity and account observations with the intended start and end. An all-time realized total beside a one-week fee sum is not a consistent report.

Keep a compact audit record

For every observation, retain the capture time, account alias, market or event identifier, position state, relevant monetary fields, source update time and completeness status. Keep credentials out of that record.

A useful private worksheet can then separate realized results, open exposure, fees and unresolved items. In a hypothetical report, an unexplained gap should remain a gap until you reconcile it with account activity. Do not fill it with a zero merely to produce a smooth chart.

Use the fees and slippage guide to distinguish the different costs that a strategy report may need to represent.

Test the journal before relying on it

Compare a small, known set of your own settled and open positions with the account interface. Check that pagination does not duplicate rows, event aggregation does not double-count markets, and sign conventions match the intended meaning.

This is a validation plan, not a test performed on a live account in this article. A functioning data request is only the beginning of a trustworthy tracker. The tools directory distinguishes authenticated portfolio work from public wallet research and market-only analytics.