In this article
Late April, one day before the deadline. Anna has a spreadsheet with well over a thousand closed positions from a foreign account, two columns denominated in dollars, and not a single form from her broker. Four hours in, she realises she does not know which exchange rate to apply, or whether she is even adding up the right numbers. Filing forex taxes in Poland really can be done on your own — below I break it into seven steps, from the platform statement to the submitted PIT-38.
Step 1: check whether you will receive a PIT-8C
PIT-8C is an information return issued by a Polish entity that maintains your account — a brokerage house such as XTB or TMS Brokers. The deadline for delivering it to the taxpayer falls at the end of February of the year following the tax year. It shows total revenue, costs, and any loss on the account, already converted into zloty.
A foreign broker — IC Markets, Pepperstone, Interactive Brokers — will not issue a PIT-8C, because Polish law does not oblige it to. That does not make the income exempt; it only means the whole calculation is yours to do. The reverse holds as well: receiving a PIT-8C settles nothing on its own. You still file the return yourself, and if you hold several accounts you add them all up in a single PIT-38.
Step 2: pull the transaction history from the foreign account
You need a complete statement for the calendar year, from 1 January to 31 December. On most platforms it sits under Account Statement or Transaction History; a CSV export is the most convenient, because everything downstream happens in a spreadsheet anyway. A usable statement gives you, for every position, the open and close dates, the instrument, the size in lots, the entry and exit prices, the result in the account currency, and the commissions and swap points.
Step 3: convert the amounts into zloty at the correct rate
This is where mistakes are easiest, and where even experienced investors slip. You do not use the rate from the day of the trade, and you do not use the broker's rate. The statute is precise here:
“Revenue in foreign currencies is converted into zloty at the average exchange rate announced by the National Bank of Poland for the last business day preceding the day on which the revenue arose.” — Personal Income Tax Act of Poland, art. 11a(1), Journal of Laws 1991 no. 80 item 350 (translation of the statutory wording).
The same logic applies to costs: they are converted at the average NBP rate from the last business day preceding the day the cost was incurred. In practice, for a position closed on a Monday you take Friday's rate, not Monday's. You use table A (average rates), never table B, and never a bank's buy or sell quote.
- Download the archived table A rates for the whole tax year from the NBP website in spreadsheet form.
- Add a column to your own sheet holding the date that governs the rate — the last business day before the date of the revenue or the cost.
- Pull the rate in with a lookup formula and convert every position separately; averaging by month has no basis in the rules.
- Check a handful of rows by hand, especially around public holidays and long weekends — that is where the wrong date creeps in.
Step 4: establish revenue, costs, and income
PIT-38 does not ask for a single “net profit” figure. You report revenue and the costs of earning it separately, and the difference is your income or your loss. Under article 30b of the Personal Income Tax Act, the costs here are the expenses of acquiring and disposing of financial instruments — above all the commissions and transaction fees charged by the broker.
What does not belong in this source of income is everything a trader would happily push into it: a computer, a second monitor, a VPS, a charting subscription, courses, or books. That mistake is common and expensive — I unpack it in the piece on what really counts as a deductible cost in forex. If you are wondering about other levies, it is also worth checking whether forex attracts transaction tax (PCC) or anything beyond PIT-38.
Step 5: complete the PIT-38, and PIT/ZG for a foreign account
PIT-38 is the return for income from capital sources, including derivative financial instruments. CFDs belong in the derivatives part of the form, not in the part for the sale of securities — putting them in the wrong place is one of the more common filing errors. The rate is flat: 19 percent of the taxable base, with no tax-free allowance and no brackets.
If the income comes from an account held abroad, you attach the PIT/ZG schedule, naming the source country and the income reported there. Disposal of virtual currencies is a separate, self-contained part of the same form — crypto results do not offset your forex result, even though both land on one return.
Step 6: use up losses from earlier years
A loss from capital sources can be set off only against income from the same source, over the five following tax years. In any one year you may deduct at most half of that year's loss — or, for losses arising from 2019 onwards, settle it in one go up to 5 million PLN, with the excess handled under the general rule. A forex loss will not reduce tax on your salary or on rental income. The mechanics and the usual traps are covered in the article on how to settle a forex loss on PIT-38.
Step 7: file by 30 April
The deadline for PIT-38 falls on 30 April of the year following the tax year, and the tax is payable on the same date. The form is made available through the Twój e-PIT service on podatki.gov.pl, partly pre-filled from the PIT-8C information the office has received. One caveat decides everything: data from a foreign account will not appear there by itself. Accept the pre-filled form without completing it and you have filed an incomplete return.
After submission, keep the official confirmation of receipt together with your calculation sheet and statements. Those are your evidence if the office asks questions, and the duty to keep documentation runs until the liability becomes time-barred. If the deadline has already passed, it is worth considering filing together with a statement of active regret (czynny żal) and paying the arrears with interest — that instrument comes from the Fiscal Penal Code, but its effectiveness depends on the circumstances, so with larger amounts ask an adviser first.
How long it takes in practice
Those ranges describe the first year. Once you have built a sheet with the rate table and the formulas in place, the next filing takes a fraction of the time — you simply swap in new data.
What to do tomorrow
- Export the transaction history for the last full year. Open your broker's panel, select the transaction report for the period from 1 January to 31 December, and save it as CSV. Do it now rather than in April — access to archived data is often restricted after an account is closed or a platform is changed.
- Download the archived NBP table A rates for the same year. Drop them into a separate tab of your sheet and build a helper column that returns, for any given date, the last business day preceding it. That single formula removes the most common error in the whole filing.
- Separate commissions from the result on positions. Keep two independent columns — revenue and transaction costs — instead of one net figure. PIT-38 needs both numbers separately, and pulling them apart again in April costs hours of wasted work.
- Check whether you are carrying an unused loss from earlier years. Open your returns from the last five years and write down the capital-source losses and how much of each you have already deducted. If you have income this year, that is where the simplest lawful reduction of your tax bill is sitting.
Frequently asked
What if my broker does not issue a PIT-8C?
PIT-8C is a Polish information return issued by an entity maintaining your account on Polish territory — XTB or TMS Brokers, for example — and delivered to the taxpayer by the end of February of the year following the tax year. A foreign broker such as IC Markets or Pepperstone has no such obligation and will not prepare the form. Its absence changes nothing about your tax position: you still report the income and you still pay 19 percent on it. All that changes is who does the arithmetic. You download the full transaction history for the calendar year, convert every amount into zloty at the average NBP rate from the last business day preceding the day the revenue or cost arose, then add up revenue and transaction costs separately. For an account held abroad you attach the PIT/ZG schedule to the return.
Which exchange rate do I use for the conversion?
You apply the average NBP rate from table A announced on the last business day preceding the day the revenue arose — and, for costs, on the last business day preceding the day the cost was incurred. It is not the rate from the day of the trade, and it is not the broker's rate. So if a position closed on a Monday, you reach for Friday's table. Use table A, the average rates, never the buy and sell quotes. Convert each position separately; averaging by month has no basis in the rules. In practice the easiest route is to download the archived NBP tables for the whole year into a spreadsheet and pull the rate in with a lookup formula, remembering to spot-check positions around public holidays and long weekends.
Can I file PIT-38 on paper?
Yes, a paper return can still be filed at the tax office or sent by post, and the deadline is the same — 30 April of the year following the tax year. In practice the electronic route through podatki.gov.pl is more convenient, because you receive an official confirmation of receipt and can track the status of the case. In the Twój e-PIT service the form is sometimes pre-filled from the information the office has received from Polish payers, meaning chiefly the PIT-8C. Note one thing: data from an account held with a foreign broker will not arrive there automatically. If you accept the pre-filled form without adding it, you file an incomplete return, and responsibility for its content stays with you.
What happens if I miss the deadline?
The deadline is 30 April of the year following the tax year, and the tax is payable on that same date. After it, an unpaid amount becomes a tax arrear on which late-payment interest accrues — the rate follows the statutory formula and changes over time, so check the current value on the Ministry of Finance website. Failing to file the return on time is a separate matter under the Fiscal Penal Code. The usual course is to file the return together with a statement of active regret (czynny żal) and pay the arrears with interest at the same time. How effective that statement is depends on the circumstances, including whether the office has already documented the irregularity, so with larger amounts it is worth putting the step past a tax adviser first.
Sources & bibliography
-
Ministerstwo Finansów PL Formularze PIT do druku (PIT-38) · oficjalne formularze i instrukcje www.podatki.gov.pl ↗
-
NBP Kursy walut — tabela A · średnie kursy NBP do konwersji walut www.nbp.pl ↗
-
Ministerstwo Finansów PL Twój e-PIT · system online składania PIT www.podatki.gov.pl ↗