Faktury walutowe z KSeF — automatyczne przeliczanie EUR/USD na PLN wg kursu NBP

Opublikowano: 18 kwietnia 2026 · Autor: KSeF Import · Czas czytania: 8 min

Faktury walutowe z KSeF — przeliczanie EUR i USD na PLN kursem NBP

TL;DR — co musisz wiedzieć w 30 sekund

  • Obowiązek prawny: Art. 31a ust. 1 ustawy o VAT — faktura w walucie obcej przeliczona kursem średnim NBP z ostatniego dnia roboczego poprzedzającego datę wystawienia (lub obowiązku podatkowego).
  • Co daje KSeF Import: Pobiera faktury z KSeF razem z polami Waluta, Kwota netto i Data sprzedaży — eksportuje do Sheets/Excela.
  • Co dołożysz: Jedna formuła IMPORTXML (Sheets) lub WEBSERVICE (Excel) z publicznego API NBP — kurs pobiera się automatycznie.
  • Efekt: Rejestr VAT zakupów w PLN, zgodny z ustawą, aktualizujący się sam. Księgowa nie szuka kursów w tabelach NBP.
  • Dla kogo: Firmy IT z kontraktami zagranicznymi, e-commerce importujące z UE, agencje kupujące Google Ads / AWS / Meta, spedycja, startupy SaaS.

Faktura od Google Ireland wpada do Twojego KSeF w EUR. Faktura od AWS — w USD. Faktura od niemieckiego dostawcy — znowu EUR. I jeszcze jedna od subkontraktora w Londynie — w GBP. Koniec miesiąca, rejestr VAT zakupów musi być w złotówkach, a każda z tych faktur wymaga przeliczenia kursem z innego dnia — tego poprzedzającego datę sprzedaży.

Księgowa otwiera stronę NBP, wpisuje daty, kopiuje kursy, mnoży w kalkulatorze, przepisuje do Excela. Przy 20 fakturach w miesiącu to 40 minut. Przy 100 fakturach — pół dnia. I wystarczy jedna pomyłka o dzień, żeby kurs był inny i rozliczenie VAT-u się posypało.

Problem: kurs z dnia poprzedzającego — ustawowa pułapka

Art. 31a ust. 1 ustawy o VAT mówi jasno: jeżeli kwoty na fakturze są wyrażone w walucie obcej, przelicza się je na złote według kursu średniego NBP ogłoszonego na ostatni dzień roboczy poprzedzający dzień powstania obowiązku podatkowego. Alternatywnie można stosować kurs EBC z analogicznego dnia — ale większość firm zostaje przy NBP.

Co to oznacza w praktyce:

  • Faktura wystawiona w poniedziałek → kurs z piątku (ostatni dzień roboczy przed poniedziałkiem).
  • Faktura wystawiona po święcie → kurs z ostatniego dnia roboczego przed świętem.
  • Dla każdej pojedynczej faktury może być inny kurs — nie możesz użyć kursu z końca miesiąca dla całej paczki.

W KSeF faktury od polskich kontrahentów przychodzą w PLN, ale faktury od zagranicznych podmiotów zarejestrowanych w Polsce (VAT-UE), a także faktury z oddziałów globalnych korporacji rozliczających się na polski NIP (Meta Platforms Ireland, Google Ireland, Microsoft Ireland) — będą w EUR lub USD. KSeF przenosi wszystkie pola ze schematu FA(3): KodWaluty, CenaJedn, WartoscNetto, P_1 (data wystawienia), P_6 (data dostawy).

Wartość: API NBP jest publiczne, darmowe i jednolinijkowe

Narodowy Bank Polski udostępnia REST API pod adresem api.nbp.pl — bez klucza, bez limitów do rozsądnego ruchu, z odpowiedzią XML lub JSON. To znaczy, że jedna formuła w Google Sheets może pobrać kurs dowolnej waluty z dowolnego dnia roboczego, wprost do komórki.

Endpoint do zapamiętania:

https://api.nbp.pl/api/exchangerates/rates/a/EUR/2026-04-13/?format=xml

Zwraca kurs średni EUR z tabeli A (tabela kursów średnich) na dzień 13.04.2026. Jeśli podasz dzień nieroboczy — API zwróci 404. Dlatego formuła musi uwzględniać „dzień poprzedzający, roboczy".

Gotowa formuła w Google Sheets

Zakładamy, że KSeF Import wyeksportował faktury do arkusza z kolumnami: A — Numer KSeF, B — Kontrahent, C — Data sprzedaży, D — Waluta, E — Netto (waluta), F — VAT (waluta). Dodajemy kolumny:

Kolumna Formuła Co robi
G2 — Kurs NBP =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 dnia poprzedzającego
H2 — Netto PLN =E2*G2 Przelicza netto na PLN
I2 — VAT PLN =F2*G2 Przelicza VAT na PLN
J2 — Brutto PLN =H2+I2 Suma

Kluczowy fragment: WORKDAY(C2,-1) — cofnij się o jeden dzień roboczy. To funkcja wbudowana w Sheets/Excel, która automatycznie omija weekendy. Święta państwowe trzeba dodać jako trzeci argument (zakres z listą świąt), jeśli chcesz być w 100% precyzyjny.

Jeśli faktury są w walucie, dla której API NBP zwraca błąd (np. egzotyczne waluty spoza tabeli A), formuła zwraca „—" dzięki IFERROR. Widzisz od razu, że tę fakturę trzeba przeliczyć ręcznie.

Wersja dla Excel (Office 365)

W Excelu zamiast IMPORTXML używasz WEBSERVICE + FILTERXML:

=FILTERXML(WEBSERVICE("https://api.nbp.pl/api/exchangerates/rates/a/"&D2&"/"&TEXT(WORKDAY(C2,-1),"yyyy-mm-dd")&"/?format=xml"),"//Mid")

Działa identycznie. Jedyna różnica: Excel odświeża WEBSERVICE tylko przy otwarciu pliku lub na żądanie (F9). W Sheets IMPORTXML odświeża się raz na kilka godzin automatycznie — wygodniej.

Przykład: faktura od Google Ireland

Przykład przeliczenia — arkusz po kliknięciu na komórki Kontrahent Data sprzedaży Waluta Netto (wal.) Kurs NBP (D-1) Netto PLN Brutto PLN Google Ireland Ltd. 14.04.2026 EUR € 1 240,00 4,2715 ↩ 5 296,66 zł 6 515,11 zł Amazon Web Services EMEA 14.04.2026 USD $ 892,50 3,9804 ↩ 3 552,51 zł 4 369,59 zł Meta Platforms Ireland 11.04.2026 EUR € 640,00 4,2688 ↩ 2 732,03 zł 3 360,40 zł Kolumna „Kurs NBP" aktualizuje się automatycznie formułą IMPORTXML — strzałka oznacza różny dzień źródłowy dla każdej faktury

Zwróć uwagę na różne kursy dla faktur z tym samym dniem sprzedaży — to poprawne. Meta Platforms ma sprzedaż z 11 kwietnia (sobota), więc kurs pobiera się z 10 kwietnia. Google i AWS mają sprzedaż 14 kwietnia, kurs z 13 kwietnia.

Pułapki, które warto ominąć

  • Data sprzedaży vs. data wystawienia

    Ustawa mówi o dniu powstania obowiązku podatkowego, który zwykle równa się dacie sprzedaży (dostawy towaru / wykonania usługi), a nie dacie wystawienia faktury. W polu FA(3) używaj P_6 (data sprzedaży), nie P_1 (data wystawienia). Przy imporcie usług z UE obowiązek podatkowy powstaje w dniu wykonania usługi.

  • Faktura zaliczkowa i końcowa — różne kursy

    Zaliczka ma obowiązek podatkowy w dniu zapłaty, faktura końcowa — w dniu sprzedaży. Przeliczasz osobno, każdą swoim kursem. Jeśli masz w KSeF oba dokumenty, formuła robi to automatycznie.

  • Import usług (reverse charge)

    Faktury od Google Ireland, Meta, AWS to import usług — VAT rozliczasz Ty, jako nabywca. Przeliczasz kursem z dnia poprzedzającego datę wykonania usługi. KSeF Import eksportuje pole RodzajFaktury i KodKrajuKontrahenta — po tym filtrujesz faktury reverse charge.

  • Weekend + święto

    Sprzedaż 26 grudnia (drugi dzień świąt) — kurs z 23 grudnia (piątek). Funkcja WORKDAY domyślnie omija tylko weekendy, święta trzeba dodać jako zakres. W praktyce: podpinasz listę świąt 2025-2027 gdzieś w arkuszu i referujesz w trzecim argumencie WORKDAY.

Alternatywa: archiwum kursów NBP zamiast zapytań na żywo

Jeśli masz setki faktur miesięcznie i chcesz uniknąć 200 zapytań do API przy każdym otwarciu arkusza, zrób tak: raz dziennie automatyzacja (np. Apps Script lub Make.com) pobiera całą dzisiejszą tabelę A z NBP i wrzuca do osobnej zakładki „Kursy". Wszystkie formuły robią wtedy VLOOKUP po parze (waluta, data) — szybko, offline, bez limitów API.

Do budowania takiego cyklu świetnie pasuje stos opisany w artykule o n8n jako open-source automatyzacji KSeF — ten sam workflow obsłuży Ci pobranie kursów.

Efekt: rejestr VAT zakupów w złotówkach, sam się pisze

Po wdrożeniu masz arkusz, w którym każda faktura walutowa z KSeF:

  • Ma pobrany kurs z właściwego dnia (niezaleznie czy to poniedziałek, czy po świętach).
  • Ma przeliczone netto, VAT i brutto w PLN — zgodne z art. 31a ustawy.
  • Jest gotowa do eksportu do JPK_V7 lub do systemu księgowego (jak opisaliśmy w artykule o uzgodnieniu z JPK_V7).
  • Nie wymaga ręcznego klikania w stronie NBP — raz skonfigurowane, działa dla każdej kolejnej.

Dla firmy z 20-100 fakturami walutowymi miesięcznie to oszczędność 3-8 godzin pracy księgowej i zerowe ryzyko pomyłki w kursie. A urząd skarbowy w razie kontroli dostaje rejestr, w którym każda pozycja ma transparentny dowód źródła kursu (adres API NBP).

Artykuł przygotowany przez zespół KSeF Import

Twoje faktury walutowe — przeliczone zanim dotkniesz klawiatury

KSeF Import pobiera faktury EUR/USD z KSeF i wrzuca je do Twojego arkusza. Kurs NBP dokłada jedna formuła. Księgowa ma rejestr w PLN bez pracy.

Wypróbuj za darmo przez 7 dni