File your PIT-38 for 2026 by 30 April 2027

Upload your broker reports.Get a finished PIT-38.

PodatekForex is a Polish PIT-38 calculator for traders: forex and CFDs, virtual currencies and foreign dividends in one settlement. Every trade is converted to zloty at the NBP mid rate from the preceding day, as art. 30b and art. 11a of the Polish PIT Act require.

70 transactions free, no account
One 139 zł payment per season, no subscription
Rates from the official NBP API

PIT-38 settlement

2026 · 3 sections

Ready

Net result (PLN)

0.00

+12,4%

Tax at 19%

0

Transactions

0

Converted at the NBP rate

4 280,00 €× 4,306218 432,50 zł
Per art. 30b · NBP mid rate from the preceding day

0%

Flat capital gains rate (art. 30b)

0

Regimes kept apart: forex/CFD, crypto, dividends

0

Files in a single settlement (HTML, CSV, XLSX)

0

Transactions free, without signing up

How it works

From broker reports to a finished return

Three stages, fully automated. Keep scrolling to watch each one.

Stage 1 of 3

01

Upload the whole set

HTML files (MT4/MT5), CSV and XLSX from any broker. Up to 15 at once, including several accounts together. Positions that repeat across overlapping periods are counted only once.

02

We convert at NBP rates

Every trade on its own, at the mid rate from the last business day before it closed. For weekends and public holidays we step back up to 7 days.

03

You collect a finished PIT-38

Revenue, costs and income mapped straight onto the boxes of the form, together with sections E/F, G and the PIT/ZG sheet.

podatekmt5.pl/kalkulator

Drop your reports: HTML, CSV or XLSX

or click to pick files

raport-2026.html + wyciag.csv

142 transactions from 2 accounts

NBP rates142 / 142
4 280,00 EUR× 4,306218 430,54
1 950,00 USD× 3,98417 769,00
620,00 GBP× 5,02173 113,45

Rate from the last business day before the close

PIT-38 · Section C · row 2

Revenue

poz. 22

96 480,00 zł

Deductible costs

poz. 23

78 047,50 zł

Income

poz. 28

18 432,50 zł

Estimated tax (19%)3 502 zł

Three regimes

One return, three separate ledgers

Polish law will not let you net a CFD loss against a gain on selling crypto. We compute each bucket on its own and put it in its own section of the PIT-38.

art. 30b ust. 1Section C / D

Forex and CFDs

The result of every closed position, with swaps, commissions and fees as costs. Both revenue and cost are converted at the rate from the day before the close.

  • Flat 19% on income
  • Swaps, commissions and fees itemised separately
  • Several brokers in one settlement
art. 30b ust. 1aSection E / F

Virtual currencies

Costs are pooled across the year and carried forward indefinitely. Swapping one crypto asset for another is not a disposal for consideration, so it is not taxed.

  • Costs pooled per year, not matched per trade
  • Crypto to crypto swaps left untaxed (art. 17 ust. 1f)
  • Excess costs roll into the following year
art. 30aSection G

Foreign dividends

Withholding tax paid abroad is credited under two caps at once: the rate in the double tax treaty and the Polish 19%. The PIT/ZG sheet comes with it.

  • Treaty cap and the 19% cap applied together
  • PIT/ZG preview with verified box numbers
  • A dedicated importer for dividend statements
1 of 3

These buckets are never added together, because the Act does not allow it. Each one lands in its own section of the return.

What you actually get

Everything a complete return demands

Not just a profit figure. The whole road from a broker file to a document you can file through e-Urząd Skarbowy.

01

Many files, many brokers

Up to 15 reports in one settlement: HTML from the platform plus CSV and XLSX from the broker. Accounts held at different firms merge into a single return, and positions repeated across overlapping periods are detected and counted once.

  • HTML, CSV, XLSX
  • Up to 15 files
  • Deduplication
02

NBP rates, trade by trade

Not one rate for the whole year. Each position gets the table A mid rate from the last business day before it closed, stepping back up to 7 days over weekends and holidays. The rate used and its date sit next to every transaction.

  • D-1 rule
  • 10 currencies
  • art. 11a
03

Crypto and dividends have their own importers

Exchange exports and dividend statements are shaped nothing like a trading platform report, so they are read by separate importers. Crypto to crypto swaps are skipped as non-taxable events, and dividend withholding tax is recognised where it was paid.

  • Section E/F
  • Section G
  • Withholding tax
04

A filled PIT-38 form and PIT/ZG

The official interactive PIT-38 form completed with your figures, ready to preview and to file through e-Urząd Skarbowy. Plus the PIT/ZG helper sheet for foreign income, with box positions checked against the printed form.

  • Official form
  • PIT/ZG
  • e-Urząd Skarbowy
05

A full export set for your records

The completed PIT-38 as PDF, an XML file for e-Deklaracje, a full TXT summary covering every section, and the data in CSV and Excel. Enough to reconstruct any figure if the tax office asks.

  • PDF
  • e-Deklaracje XML
  • TXT, CSV, Excel

Calculations across every section are free up to 70 transactions. Exports and the completed form are unlocked by the season pass.

Preview

An interface where every figure is visible

Net result, estimated tax and the equity curve on one screen, with every transaction and the rate applied to it underneath.

podatekmt5.pl/kalkulator
PIT-38 calculator: net result, estimated tax and the equity curve

NBP rates, automatically

Pulled from the official API

Ready for PIT-38

Preview and export

Engineering

Under the hood

The official NBP API, calculation logic in the open, and tests against real broker reports.

Rate from the preceding day

Official NBP API, stepping back over non-business days

123456789101112
// art. 11a: the rate from the last business
// day BEFORE the transaction closed.
async function rateForClose(currency, closedAt) {
  let day = previousDay(closedAt);

  for (let back = 0; back < 7; back++) {
    const rate = await nbpTableA(currency, day);
    if (rate) return rate;   // business day
    day = previousDay(day);  // weekend, holiday
  }
  return null;               // surfaced as a warning
}

Conversion and rounding

Each position on its own, to two decimal places

123456789
// Every leg converted on its own rate,
// rounded to grosze before it is summed.
const profitPln = round2(trade.profit * rate.mid);
const swapPln = round2(trade.swap * rate.mid);
const feePln = round2(trade.fee * rate.mid);

revenue += Math.max(profitPln, 0);
costs += Math.abs(Math.min(profitPln, 0))
       + Math.abs(swapPln) + Math.abs(feePln);

Duplicate detection

The same trade in two reports is counted once

1234567891011
// Two reports covering overlapping periods
// contain the same position twice.
const seen = new Set();

for (const trade of allFiles.flat()) {
  const key = fingerprint(trade); // ticket,
  // symbol, open + close time, volume
  if (seen.has(key)) { skipped++; continue; }
  seen.add(key);
  accepted.push(trade);
}

Three buckets kept apart

Forex/CFD, virtual currencies and dividends never merge

12345678910
// art. 30b ust. 1, art. 30b ust. 1a and
// art. 30a are three separate buckets.
const ret = {
  cfd: settleCfd(trades),          // C / D
  crypto: settleCrypto(disposals), // E / F
  dividends: settleDividends(rows) // G
};

// No cross-netting: a CFD loss never reduces
// a gain on virtual currencies.
Calculation logic in the open
Official NBP API
Built around PIT-38

Demo

See how it works

A short film: from uploading a report to the figures you type into the form.

Video preview: settling a PIT-38 step by step

Pricing

One payment for the whole season

No subscriptions. You pay once, settle 2026, and access runs until 31.07.2027.

Free

Try it and calculate, no account

0 PLN
  • Up to 70 transactions
  • No sign-up, no card
  • Every section: C/D, E/F, G and PIT/ZG
  • NBP rates fetched automatically
Full settlement

Season pass 2026

One-off, valid until 31.07.2027

139/ one-off
  • No transaction limit
  • Import up to 15 files (HTML, CSV, XLSX)
  • Completed PIT-38 form (preview and PDF)
  • XML for e-Deklaracje
  • TXT, PDF, CSV and Excel summaries
  • Email support

Nothing renews automatically. Recommending us? For every referral who buys a pass you get a discount code for next season, and they pay 10% less.

FAQ

Questions? We have answers

Still not answered?

Ready for PIT-38

Settle your trading tax without spreadsheets

Upload your broker reports as HTML, CSV or XLSX and collect the figures the return asks for. Calculated per art. 30b and the NBP mid rates.