Blog

EUR invoices in transport: NBP rate, VAT in PLN and KSeF

A EUR invoice in transport is the norm: the German client pays in euro, the Polish shipper wants the rate in euro and the Lithuanian carrier prices in euro too. Polish VAT law lets you invoice in a foreign currency, but it sets a few firm conditions on the exchange rate, the VAT amount and the annotations. We go through them one by one, using typical orders as examples.

This article is for information only and describes the rules in force in Poland in October 2026. For your specific situation, consult a tax adviser.

Can you invoice freight in euro?

Yes. Under art. 106e(11) of the Polish VAT Act, the amounts on an invoice, meaning prices, net values and the tax amount, may be expressed in any currency. There is one condition: the tax amount must be shown in złoty.

In practice the whole invoice can be in EUR, with the VAT amount in euro accompanied by the same amount converted into PLN. The conversion follows the rules used for the taxable amount, that is the exchange rate set out in art. 31a of the VAT Act.

If there is no Polish VAT on the invoice because the service is not taxable in Poland, there is nothing to convert on the invoice itself. You still have to convert the value of the service into złoty for your records and returns.

NBP rate on the invoice: which day counts?

Art. 31a(1) of the VAT Act is clear: foreign currency amounts are converted at the average NBP rate from the last working day before the tax point. It is not the rate on the invoice date, and it is not the rate offered by the bank that holds your currency account.

For transport services the tax point generally arises when the service is performed (art. 19a(1) of the VAT Act). If you issue the invoice before that day, you use the rate from the last working day before the invoice date (art. 31a(2)).

Unloading on Thursday 15 October
Average NBP rate from Wednesday 14 October
Unloading on Monday 19 October
Rate from Friday 16 October, because the weekend is not a working day
Invoice issued before the service is performed
Rate from the last working day before the invoice date
NBP table
Table A of average rates, not the buy and sell rates in table C

The Act also allows conversion at the latest rate published by the European Central Bank (art. 31a(2a)). Transport companies rarely use it and it has to be applied consistently, so agree the details with your accountant before choosing it.

What a dual currency invoice means in practice

The term dual currency invoice does not appear in the VAT Act. In the industry it means an invoice priced in EUR that also shows values in złoty: at the very least the VAT amount, and often the net and gross totals plus the exchange rate used.

A well prepared dual currency invoice usually contains the following:

  • the invoice currency, for example EUR, shown next to prices and totals
  • the VAT amount in euro and the same amount converted into złoty
  • the average NBP rate, the table number and the date the rate comes from
  • net and gross values in złoty, which makes booking easier for the client
  • a currency bank account for payment in EUR, so the client does not transfer złoty

Example with round figures: a haul from Poznań to Berlin for a Polish client at EUR 2,000 net, taxed at 23%, gives VAT of EUR 460. At a rate of PLN 4.30 from the day before unloading, the VAT in złoty is PLN 1,978, and that is the amount that goes into the VAT return.

Reverse charge on a transport service for an EU business

When the client is a business established in another EU country, the place of supply of the transport service follows art. 28b(1) of the VAT Act: it is where the recipient has its seat. The service is then outside the scope of Polish VAT and the recipient accounts for the tax in its own country.

You do not charge Polish VAT on such an invoice, but you must include the words "odwrotne obciążenie", the Polish term for reverse charge (art. 106e(1)(18) of the VAT Act). You also report the service in the VAT UE recapitulative statement (art. 100(1)(4)).

  1. 1Check the client VAT number in VIES before issuing the first invoice.
  2. 2Enter the client VAT number with its country prefix, for example DE.
  3. 3Issue the invoice in EUR without a Polish VAT rate or amount, annotated "odwrotne obciążenie".
  4. 4Convert the net value into złoty at the art. 31a rate for your records and the recapitulative statement.
  5. 5Keep the transport documents and the order that confirm how the service was performed.

Art. 28b also covers recipients outside the EU, such as a business in Norway or the United Kingdom. The place of supply is again outside Poland, and the reverse charge annotation appears when the recipient accounts for the tax.

When does an international transport invoice carry 0% VAT?

The 0% rate in art. 83(1)(23) of the VAT Act covers international transport services supplied to a recipient for whom the place of supply is in Poland, which usually means a Polish business. What matters is how the Act defines international transport.

Under art. 83(3) it is mainly the carriage of goods from Poland to outside the European Union, from outside the EU into Poland, and carriage connected with transit through Poland or the EU. A haul from Poland to Germany or France, within the Union, is not international transport for the purposes of this provision.

A haul from Poland to another EU country performed for a Polish business is taxed at 23%, even when the invoice is in euro. Applying 0% to such an order is one of the most common mistakes on transport invoices.

To apply 0% you need the documentation required by art. 83(5), showing that the service concerns international transport. In practice that mainly means transport documents and, for exports, a document confirming that the goods left the EU.

Foreign currency invoices in KSeF: what to watch

KSeF, the Polish national invoicing system, accepts invoices in foreign currencies. The FA(3) schema has fields for the currency code, the exchange rate and the tax amount converted into złoty, so a dual currency invoice in KSeF is simply an invoice with the currency fields filled in correctly.

  • The currency code must match the currency of the prices and totals.
  • The VAT amount in złoty must come from the art. 31a rate, not from the rate on the day you send the invoice to KSeF.
  • An invoice for a foreign client generally goes into KSeF as well, and you deliver it to the client outside the system in an agreed way.
  • A service taxed under art. 28b has no Polish VAT rate, so check that your system does not mark it as 0%.

We do not repeat KSeF deadlines and rollout here, as separate articles cover them. With currency invoices most problems come from typing the rate in by hand, so it pays to let the system fetch the rate for the correct day.

In Sokar you issue a VAT invoice from an order in one click, including in EUR and as a dual currency invoice. Once the account owner switches on the KSeF integration in settings, invoices are sent to KSeF and carrier invoices are imported from KSeF with issue and receipt dates filled in automatically.

Exchange rate differences on payment: what changes and what does not

Clients usually pay weeks later, and the euro rate moves in the meantime. For VAT this does not matter: the tax stays at the amount converted at the art. 31a rate and is not corrected because the rate on the payment date is different.

Exchange rate differences belong to income tax: art. 15a of the CIT Act for companies and art. 24c of the PIT Act for individual entrepreneurs. Revenue is converted at the average NBP rate from the last working day before it arises, and a difference appears when the payment comes in at another rate.

Example with round figures: an invoice to an Austrian business for EUR 2,000 under reverse charge, converted at PLN 4.30, is revenue of PLN 8,600. The payment arrives when the rate is PLN 4.25, so you receive the equivalent of PLN 8,500 and a negative exchange rate difference of PLN 100 arises.

EUR invoices in transport: how to avoid the most common mistakes

  • Using the rate from the invoice date instead of the working day before unloading.
  • Using a bank rate or a selling rate instead of the average NBP rate from table A.
  • Charging Polish VAT at 23% to an EU business that gave a valid VAT number.
  • Leaving out the reverse charge annotation on a service for a foreign client.
  • Applying 0% for a Polish client on a haul within the EU.
  • Showing the VAT amount only in euro, without converting it into złoty.
  • Correcting VAT because of a different rate on the payment date, although exchange differences only affect income tax.
  • Leaving out the currency account number, so the client pays in złoty and the invoice ends up underpaid.

Clean contractor data removes several of these mistakes. In Sokar you set payment terms and credit limits for foreign contractors too, and the balances show which invoices already have the status "Opłacone", meaning paid.

Issue EUR and dual currency invoices straight from an order and send them to KSeF with Sokar. Try it in a free 30 day pilot with no commitment.

EUR invoices and KSeF in Sokar: 30 day pilot