Jak przeliczać faktury walutowe z KSeF na PLN zgodnie z ustawą o VAT?
Według art. 31a ustawy o VAT kwoty w walucie obcej przelicza się kursem średnim NBP z ostatniego dnia roboczego poprzedzającego dzień powstania obowiązku podatkowego – zwykle dzień dostawy lub wykonania usługi, a gdy faktura została wystawiona wcześniej, dzień jej wystawienia. Korekta stosuje kurs faktury pierwotnej (art. 31b), a nabywca odlicza VAT w kwocie w PLN wpisanej na fakturze przez wystawcę. Od planu Grupa KSeF Import sam przelicza faktury walutowe pobrane z KSeF na orientacyjną równowartość w PLN po kursie średnim NBP, a odpowiednie pola włączasz w Excelu, CSV i Arkuszach Google (pola eksportu), a w panelu – kolumnę „Brutto PLN”. Ostateczne rozliczenie weryfikuje podatnik lub jego biuro rachunkowe.
- VAT: art. 31a ust. 1 i 2 ustawy o VAT – kurs średni NBP z ostatniego dnia roboczego przed powstaniem obowiązku podatkowego, a gdy faktura wyprzedza ten dzień – przed dniem jej wystawienia. Korekta: kurs faktury pierwotnej (art. 31b).
- Koszty i VAT do odliczenia: koszt w walucie przeliczasz zwykle kursem z dnia roboczego przed datą wystawienia faktury, a VAT naliczony odliczasz w kwocie w PLN podanej przez wystawcę.
- KSeF Import od planu Grupa udostępnia kolumny Netto, VAT i Brutto PLN (kurs NBP) w Excelu, CSV i Arkuszach Google oraz kolumnę Brutto PLN w panelu (włączasz je sam) – to kwoty orientacyjne, których nie ma w PDF.
- We wszystkich planach eksportujesz pole VAT w PLN (z faktury) – kwotę podatku w złotych wpisaną przez wystawcę, jeśli wystawca go podał (część faktur walutowych go nie zawiera) – i widzisz kod waluty przy kwotach faktur walutowych.
-
Wolisz liczyć sam? Formuła z
WORKDAY(data,-1)i API NBP w Arkuszach Google lub Excelu pobierze kurs z tabeli A.
W tym artykule
Od problemu do efektu
PWEFaktura w EUR czy USD wymaga kursu NBP z innego dnia: przy sprzedaży zwykle sprzed dostawy, przy kosztach sprzed daty wystawienia, przy korekcie – z faktury pierwotnej. Szukanie tabel dla kilkudziesięciu faktur miesięcznie zajmuje czas i łatwo pomylić dzień.
Od planu Grupa KSeF Import przelicza faktury walutowe z KSeF na orientacyjne kwoty netto, VAT i brutto w PLN po średnim kursie NBP – w Excelu, CSV i Arkuszach Google (pola eksportu) oraz brutto w panelu (kolumna „Brutto PLN”); włączasz je sam. We wszystkich planach eksportujesz też VAT w PLN z faktury – jeśli wystawca go podał (część faktur walutowych go nie zawiera).
Po włączeniu kolumn masz kwoty w PLN przy fakturach walutowych przeliczonych kursem z tabeli A, a w panelu także kurs, numer tabeli NBP i datę kursu. To ułatwia kontrolę kosztów i uzgodnienie z rejestrem VAT – wartości do rozliczeń potwierdzasz z księgowym.
Podstawa prawna: art. 31a i 31b ustawy o VAT
Art. 31a ust. 1 ustawy o VAT: kwoty w walucie obcej przelicza się na złote według kursu średniego NBP ogłoszonego na ostatni dzień roboczy poprzedzający dzień powstania obowiązku podatkowego. Art. 31a ust. 2 dodaje regułę dla faktur wystawionych przed powstaniem obowiązku podatkowego: wtedy stosuje się kurs z ostatniego dnia roboczego poprzedzającego dzień wystawienia faktury. Obowiązek podatkowy powstaje co do zasady z chwilą dostawy towaru lub wykonania usługi (art. 19a ust. 1), więc przy typowej sprzedaży liczy się wcześniejsza z dwóch dat: dostawy albo wystawienia faktury.
Zamiast kursu NBP ustawa o VAT dopuszcza ostatni kurs wymiany opublikowany przez Europejski Bank Centralny (EBC) z ostatniego dnia poprzedzającego dzień powstania obowiązku podatkowego (dla walut innych niż euro – przeliczony przez kurs euro). W podatku dochodowym stosuje się kurs NBP, dlatego dla spójności rozliczeń firmy często wybierają NBP także w VAT. KSeF Import przelicza wyłącznie kursem NBP.
Co to oznacza w praktyce:
- Sprzedaż: towar wydany 30.09.2026, faktura wystawiona 09.10.2026 – kurs z ostatniego dnia roboczego przed 30.09 (tabela 189/A/NBP/2026 z 29.09.2026, EUR 4,3728). Gdy faktura wyprzedza dostawę, kurs bierzesz sprzed dnia jej wystawienia.
- Inny dzień obowiązku podatkowego: przy zaliczce obowiązek powstaje w dniu otrzymania zapłaty (art. 19a ust. 8), a przy usługach budowlanych, dostawach mediów, najmie, leasingu, ochronie czy stałej obsłudze prawnej i biurowej (art. 19a ust. 5 pkt 3 i 4) oraz przy WDT (art. 20) – co do zasady w dniu wystawienia faktury.
- Koszty w podatku dochodowym: koszt w walucie przelicza się kursem średnim NBP z ostatniego dnia roboczego przed dniem poniesienia kosztu (art. 15 ust. 1 ustawy o CIT, art. 11a ustawy o PIT); przy kosztach ujmowanych na podstawie faktury w praktyce przyjmuje się zwykle dzień roboczy przed datą wystawienia faktury.
- VAT do odliczenia: nabywca nie przelicza podatku sam – odlicza kwotę VAT w PLN wykazaną na fakturze przez wystawcę (pola P_14_1W–P_14_4W; art. 106e ust. 11 i art. 86 ust. 2 pkt 1 ustawy o VAT), nawet jeśli wystawca przyjął inny kurs niż Ty (np. EBC lub z innego dnia).
- Korekta: stosujesz kurs, po którym przeliczono pierwotną podstawę opodatkowania (art. 31b ust. 1); wyjątki, m.in. dla zbiorczych korekt rabatów, opisuje art. 31b ust. 2 i 3.
- Poniedziałek i dni po świętach: tabela A NBP ukazuje się tylko w dni robocze, więc kurs bierzesz z ostatniego dnia roboczego – np. dla poniedziałku z piątku.
Faktury walutowe w KSeF – co zawiera schemat FA(3)
KSeF przechowuje faktury w schemacie FA(3). Fakturę wystawia w KSeF podatnik z siedzibą lub stałym miejscem prowadzenia działalności w Polsce – waluta nie ma tu znaczenia. Faktury w EUR, USD, CZK czy GBP wystawiają m.in. polscy eksporterzy sprzedający klientom z zagranicy oraz krajowi dostawcy rozliczający się w walucie obcej. Faktury zagranicznych dostawców usług cyfrowych (reklama, chmura, SaaS) zwykle do KSeF nie trafiają – wyjaśniamy to w artykule dlaczego faktury od zagranicznych dostawców nie trafiają do KSeF.
| Pole FA(3) | Zawartość | Znaczenie dla kursu |
|---|---|---|
| KodWaluty | Kod waluty faktury (ISO 4217), np. EUR, USD, CZK | Wskazuje, czy i z jakiej waluty przeliczać |
| P_1 | Data wystawienia | Dzień kursu dla kosztów (praktyka CIT/PIT) i dla faktur wystawionych przed obowiązkiem podatkowym |
| P_6 / OkresFa | Data dostawy, wykonania usługi lub otrzymania zaliczki; okres rozliczeniowy | Zwykle dzień powstania obowiązku podatkowego przy sprzedaży |
| P_13_x, P_14_x, P_15 | Netto, VAT i brutto w walucie faktury | Kwoty do przeliczenia na PLN |
| P_14_1W–P_14_4W | VAT w PLN wpisany przez wystawcę (część faktur walutowych go nie zawiera) | Kwota VAT, którą odlicza nabywca |
| KursWaluty | Kurs podany przez wystawcę w pozycjach (opcjonalny) | Informacja – FA(3) nie ma pola z datą kursu |
Ustawa wiąże kurs z dniem powstania obowiązku podatkowego, a nie z samą datą wystawienia faktury. FA(3) pomija datę sprzedaży (P_6), gdy jest taka sama jak data wystawienia – wtedy liczy się data wystawienia. KSeF Import udostępnia obie daty (kolumny Data wystawienia i Data sprzedaży), więc w arkuszu wybierzesz właściwą.
Zobacz, jak KSeF Import pobiera faktury kosztowe i układa je w gotowy arkusz.
Jak przelicza KSeF Import (od planu Grupa)
Od planu Grupa (w planach Grupa i Biuro) KSeF Import udostępnia dla faktur walutowych pobranych z KSeF trzy kolumny eksportu: Netto PLN (kurs NBP), VAT PLN (kurs NBP) i Brutto PLN (kurs NBP) – w Excelu, CSV i Arkuszach Google – oraz kolumnę Brutto PLN w panelu faktur; domyślnie są wyłączone i włączasz je sam. Kurs pochodzi z tabeli A NBP: dla faktur sprzedażowych z ostatniego dnia roboczego przed wcześniejszą z dat: sprzedaży i wystawienia, a przy wewnątrzwspólnotowej dostawie towarów (WDT) – przed datą wystawienia, a najpóźniej przed 15. dniem miesiąca po dostawie; dla kosztowych – przed datą wystawienia. Korekta dostaje kurs faktury korygowanej, jeśli ta jest w KSeF Import z przeliczoną kwotą; w przeciwnym razie kurs ustalamy według daty faktury korygowanej. Szczegóły pokazuje strona przeliczanie faktur walutowych.
Kwoty w PLN wylicza KSeF Import – nie pochodzą od wystawcy faktury i nie są wiążące. Mogą różnić się od kwot w rozliczeniu, gdy obowiązek podatkowy powstaje w innym dniu (np. usługi budowlane, najem, media) albo gdy wystawca przyjął inny kurs; dla faktur kosztowych celowo bierzemy kurs sprzed daty wystawienia (praktyka w podatkach dochodowych), więc tam różnice względem kursu wystawcy są częstsze. Kwotę VAT w złotych wpisaną przez wystawcę – tę, którą odlicza nabywca – eksportujesz we wszystkich planach w polu VAT w PLN (z faktury), jeśli wystawca go podał (część faktur walutowych go nie zawiera). Dla faktur w PLN kolumny NBP zawierają kwoty z faktury, więc kolumnę zsumujesz bez dzielenia na waluty; pusta komórka oznacza fakturę, której nie przeliczyliśmy (np. kursu jeszcze nie ma albo waluty nie ma w tabeli A).
-
1
Wgraj certyfikat dla NIP
W panelu przejdź do Certyfikaty i dodaj plik
.p12lub.pfxz KSeF. Certyfikat szyfrujemy AES-256-GCM kluczem generowanym osobno per użytkownik (HKDF) i przechowujemy na serwerach w Unii Europejskiej (OVH). Wgrywasz raz. -
2
Pierwsze pobranie – ostatnie 90 dni
Pierwsze pobranie obejmuje ostatnie 90 dni faktur. Potem każda nowa faktura dochodzi automatycznie przy kolejnej synchronizacji (co 24 h / 6 h / 2 h / 15 min, zależnie od planu).
-
3
Wybierz kolumny w Polach eksportu
W Polach eksportu zaznacz pola z grupy Przeliczenie na PLN (kurs NBP), a jeśli potrzebujesz kwoty VAT do odliczenia – pole VAT w PLN (z faktury), wypełnione, jeśli wystawca go podał (część faktur walutowych go nie zawiera). Do istniejącego arkusza Google nowe kolumny dodasz przyciskiem Uzupełnij dane faktur; przy dużym arkuszu trwa to kilka minut.
-
4
Eksportuj lub sprawdź w panelu
Pobierz plik Excel lub CSV albo poczekaj na synchronizację z Arkuszami Google. W panelu kolumna Brutto PLN pokazuje kwotę ze znakiem ≈, a po najechaniu – kurs, numer tabeli NBP i datę kursu. Kolumnę włączysz w Ustaw kolumny.
Tabela A NBP ukazuje się w dni robocze około 12:00. Jeśli kurs potrzebny do faktury nie został jeszcze opublikowany, kwota pojawi się automatycznie po jego publikacji. Kursy NBP są dostępne w KSeF Import od 26.01.2026 – faktury wymagające wcześniejszego kursu (np. korekty faktur z 2025 roku) oraz waluty spoza tabeli A nie są przeliczane.
Przy pierwszym, dużym imporcie zostaw synchronizację na noc. API KSeF udostępnia ok. 60 faktur na godzinę dla jednego NIP, więc zaległości dociągają się partiami w tle – rano masz pełny zakres bez ręcznego ponawiania.
Formuły do samodzielnego wyliczenia kursu w arkuszu
Jeśli chcesz samodzielnie doliczyć lub zweryfikować kurs w arkuszu – na przykład w planie bez przeliczenia NBP – Narodowy Bank Polski udostępnia bezpłatne REST API pod adresem api.nbp.pl, bez klucza API, z odpowiedzią XML lub JSON. Jedna formuła pobiera kurs dowolnej waluty z tabeli A na wskazany dzień roboczy.
| Arkusz | Formuła kursu (przykładowa) | Opis |
|---|---|---|
| Google Sheets | =IFERROR(IMPORTXML("https://api.nbp.pl/api/exchangerates/rates/a/"&D2&"/"&TEXT(WORKDAY(C2,-1),"yyyy-mm-dd")&"/?format=xml","//Mid"),"-") | Pobiera kurs średni z ostatniego dnia roboczego przed C2; WORKDAY omija weekendy |
| Excel (Office 365) | =FILTERXML(WEBSERVICE("https://api.nbp.pl/api/exchangerates/rates/a/"&D2&"/"&TEXT(WORKDAY(C2,-1),"yyyy-mm-dd")&"/?format=xml"),"//Mid") | Identyczna logika; Excel odświeża przy otwarciu lub F9 |
| Netto PLN | =E2*G2 | Netto w walucie × kurs NBP |
| VAT PLN | =F2*G2 | VAT w walucie × kurs NBP |
| Brutto PLN | =H2+I2 | Suma netto + VAT w PLN |
KSeF Import (od planu Grupa) liczy brutto inaczej: mnoży kwotę brutto z faktury przez kurs, a każdą z trzech kwot zaokrągla osobno – dlatego jego Brutto PLN może różnić się o 1 grosz od sumy netto i VAT w PLN.
Kluczowy fragment: WORKDAY(C2,-1) – cofa się o jeden dzień roboczy, automatycznie omijając weekendy. Jeśli dzień wypada po święcie, dodaj listę świąt jako trzeci argument funkcji WORKDAY. W tabeli powyżej C2 = dzień, od którego liczysz kurs: przy sprzedaży dzień powstania obowiązku podatkowego (zwykle data z kolumny Data sprzedaży, a gdy faktura była wcześniejsza – data wystawienia), przy kosztach – data wystawienia; D2 = kod waluty (np. EUR), E2 = kwota netto w walucie, F2 = kwota VAT w walucie, G2 = wyliczony kurs NBP.
Kursy walut zmieniają się codziennie. Kursy w przykładach (np. EUR 4,3728 z tabeli 189/A/NBP/2026 z 29.09.2026) pochodzą z archiwum NBP i służą wyłącznie ilustracji. Do rozliczeń pobieraj kurs właściwy dla swojej faktury z tabeli A na stronie NBP lub przez API.
Pułapki i przypadki szczególne
Przy fakturach walutowych jest kilka sytuacji, w których data kursu może się różnić od typowej reguły – warto je znać przed zamknięciem okresu.
- Faktura zaliczkowa i końcowa: zaliczka ma obowiązek podatkowy w dniu otrzymania zapłaty (osobny kurs), faktura końcowa – w dniu dostawy lub wykonania usługi (osobny kurs). Przeliczasz każdą z właściwego dnia.
- Faktura korygująca: zostaje przy kursie faktury pierwotnej (art. 31b ust. 1), a nie przy kursie z dnia korekty – więcej w artykule o fakturach korygujących z KSeF.
- Import usług z zagranicy: faktury zagranicznych dostawców zwykle nie trafiają do KSeF – rozliczasz je osobno jako import usług, z kursem sprzed dnia powstania obowiązku podatkowego (zwykle wykonania usługi).
- Faktura wystawiona po świętach: bierzesz kurs z ostatniego dnia roboczego, nie z dnia bezpośrednio poprzedzającego w kalendarzu. Funkcja WORKDAY z listą świąt obsłuży to automatycznie.
- Waluta spoza tabeli A NBP: tabela A obejmuje 32 waluty (m.in. EUR, USD, GBP, CHF, CZK, HUF, SEK); kursy pozostałych NBP publikuje w tabeli B raz w tygodniu, a zapytanie o nie w tabeli A zwróci 404. Użyj IFERROR w formule, żeby oznaczyć te faktury do ręcznego przeliczenia; KSeF Import takich faktur nie przelicza.
Jeśli masz setki faktur walutowych miesięcznie i chcesz uniknąć setek zapytań do API przy każdym otwarciu arkusza – pobierz raz dziennie całą tabelę A z NBP i wstaw do osobnej zakładki. Wszystkie formuły przeliczają wtedy przez WYSZUKAJ.PIONOWO po parze (waluta, data): szybko, offline, bez limitów API.
Efekt: faktury walutowe w PLN bez szukania kursów
Od planu Grupa faktura walutowa pobrana z KSeF może mieć w eksporcie do Excela, CSV i Arkuszy Google oraz w panelu (po włączeniu pól eksportu i kolumny panelu) orientacyjną równowartość w PLN, liczoną według jednej, opisanej reguły; PDF i XML zawierają wyłącznie dane z faktury. Formaty eksportu porównasz na stronie eksport faktur z KSeF.
- Kurs z tabeli A NBP z właściwego dnia roboczego – z pominięciem weekendów i świąt, bez ręcznego szukania tabel.
- Kurs, numer tabeli NBP i data kursu widoczne w panelu w dymku przy przeliczonej kwocie – łatwo sprawdzić źródło.
- VAT w PLN z faktury w osobnym polu, jeśli wystawca go podał (część faktur walutowych go nie zawiera) – do uzgodnienia z rejestrem VAT, patrz uzgodnienie faktur KSeF z JPK_V7 w Excelu.
- Przy wyjątkach (usługi budowlane, najem, media, WDT) dzień kursu do rozliczenia potwierdzasz z księgowym.
Najczęstsze pytania
Krótkie, konkretne odpowiedzi na pytania, które zadają użytkownicy i wyszukiwarki.
Do VAT – z ostatniego dnia roboczego przed dniem powstania obowiązku podatkowego (art. 31a ust. 1 ustawy o VAT), a gdy faktura została wystawiona przed tym dniem – przed dniem wystawienia faktury (art. 31a ust. 2). Obowiązek powstaje zwykle z chwilą dostawy lub wykonania usługi, ale przy zaliczce w dniu otrzymania zapłaty, a przy usługach budowlanych, najmie, mediach czy WDT co do zasady w dniu wystawienia faktury. Korekta stosuje kurs faktury pierwotnej (art. 31b ust. 1). Koszt w podatku dochodowym przelicza się kursem z dnia roboczego przed dniem poniesienia kosztu, w praktyce zwykle przed datą wystawienia faktury.
Tak, od planu Grupa (w planach Grupa i Biuro). Dla faktur walutowych pobranych z KSeF udostępnia kolumny Netto, VAT i Brutto PLN (kurs NBP) w eksporcie do Excela, CSV i Arkuszy Google oraz kolumnę Brutto PLN w panelu; kolumny eksportu wybierasz w Polach eksportu, a kolumnę panelu włączasz w Ustaw kolumny. Kurs pochodzi z tabeli A NBP (32 waluty, kursy od 26.01.2026). Dla sprzedaży bierzemy kurs z ostatniego dnia roboczego przed wcześniejszą z dat: sprzedaży i wystawienia, a przy WDT – sprzed daty wystawienia, a najpóźniej sprzed 15. dnia miesiąca po dostawie; dla kosztów – sprzed daty wystawienia; korekta dostaje kurs faktury korygowanej, jeśli ta jest w KSeF Import z przeliczoną kwotą. PDF pokazuje wyłącznie dane z faktury. We wszystkich planach eksportujesz pole VAT w PLN (z faktury), jeśli wystawca go podał (część faktur walutowych go nie zawiera).
Nie. To kwota orientacyjna, wyliczona przez KSeF Import, a nie dane od wystawcy faktury. Może różnić się od kwot w rozliczeniu, gdy obowiązek podatkowy powstaje w innym dniu (np. usługi budowlane, najem, media) albo gdy wystawca zastosował inny kurs; przy fakturach kosztowych różnice są częstsze, bo celowo bierzemy kurs sprzed daty wystawienia. Kwotę VAT w złotych podaną przez wystawcę – tę, którą odlicza nabywca – eksportujesz w polu VAT w PLN (z faktury), jeśli wystawca go podał (część faktur walutowych go nie zawiera). Brutto w PLN liczymy osobno z kwoty brutto, więc może różnić się o 1 grosz od sumy netto i VAT.
Tabela A NBP ukazuje się tylko w dni robocze, więc kursu na weekend ani na święto nie ma – bierzesz kurs z ostatniego dnia roboczego przed właściwym dniem. W arkuszu funkcja WORKDAY omija weekendy, a święta dodasz jako trzeci argument. KSeF Import korzysta z faktycznie opublikowanych tabel NBP, więc weekendy i święta uwzględnia automatycznie.
W VAT tak: art. 31a ustawy o VAT dopuszcza ostatni kurs Europejskiego Banku Centralnego z ostatniego dnia poprzedzającego dzień powstania obowiązku podatkowego (dla walut innych niż euro – przeliczony przez kurs euro). W podatku dochodowym stosuje się kurs NBP, dlatego dla spójności rozliczeń firmy często wybierają NBP także w VAT. KSeF Import przelicza wyłącznie kursem NBP.
Faktura zaliczkowa ma obowiązek podatkowy w dniu otrzymania zapłaty (art. 19a ust. 8 ustawy o VAT), więc kurs bierzesz z ostatniego dnia roboczego przed tym dniem. Datę otrzymania zaliczki faktura FA(3) podaje w polu daty sprzedaży (P_6), jeśli różni się od daty wystawienia – w eksporcie KSeF Import to kolumna Data sprzedaży. Faktura końcowa ma osobny kurs, ustalany według dnia dostawy lub wykonania usługi.
Inżynier integracji KSeF. Odpowiada za połączenia z API Krajowego Systemu e-Faktur, automatyzacje i parsowanie struktury logicznej FA(3).
