Pobieranie faktur z KSeF do Excela — 5 pułapek, przez które tracisz 4 godziny miesięcznie

Opublikowano: 1 czerwca 2026 · Czas czytania: 8 min

5 pułapek przy pobieraniu faktur z KSeF do Excela — ilustracja

W skrócie

  • Problem: Ręczne pobieranie faktur z KSeF do Excela generuje 5 typowych pułapek — od nieczytelnego XML po duplikaty kwot. Łącznie kosztują ~4 godziny miesięcznie przy 100 fakturach.
  • Rozwiązanie: Identyfikacja każdej pułapki i konkretne obejście: parser XML, format liczb, automatyczny batch, kodowanie UTF-8 BOM, filtr kosztowe/sprzedażowe.
  • Efekt: Z 4 godzin ręcznej pracy miesięcznie do 30 sekund automatycznego eksportu. Zero błędów w kwotach, zero duplikatów.
  • Dla kogo: Przedsiębiorcy MŚP z 20-200 fakturami miesięcznie, którzy eksportują dane z KSeF do Excela ręcznie lub semi-ręcznie.

Otwierasz plik XML z KSeF w Excelu. Zamiast tabeli z fakturami widzisz 80 kolumn z <cdata> i xmlns. Brzmi znajomo? Jeśli tak, trafiłeś na jedną z 5 pułapek, które czekają na każdego, kto próbuje przenieść faktury z Krajowego Systemu e-Faktur do arkusza kalkulacyjnego.

Te pułapki nie są oczywiste na pierwszy rzut oka. Każda z nich pojawia się w innym momencie procesu — od pobrania pliku, przez import do Excela, po analizę danych. Razem potrafią pochłonąć 4 godziny miesięcznie przy zaledwie 100 fakturach. Poniżej rozkładam każdą z nich na czynniki pierwsze i pokazuję, jak jej uniknąć.

Pułapka #1: XML otwarty w Excelu = nieczytelna tabela

Faktura w KSeF to plik XML zgodny ze schematem FA(3). Zawiera ~80 zagnieżdżonych pól: dane wystawcy, dane nabywcy, pozycje faktury, sumy per stawka VAT, metody płatności, oznaczenia GTU, flagi MPP. Struktura jest hierarchiczna — pozycje faktury są wewnątrz sekcji <Fa>, a dane podmiotów wewnątrz <Podmiot1> i <Podmiot2>.

Kiedy otwierasz taki XML bezpośrednio w Excelu, program próbuje spłaszczyć tę hierarchię do płaskiej tabeli. Efekt: widzisz kolumny z nazwami tagów XML (ns1:P_1, ns1:P_2), dane rozrzucone po dziesiątkach kolumn, a pozycje faktury wymieszane z nagłówkiem. Formuły SUM nie działają, bo komórki zawierają tekst zamiast liczb.

Ile to kosztuje: 15-20 minut na każdą fakturę, żeby ręcznie wyciągnąć potrzebne dane z tego formatu. Przy 100 fakturach — ponad 25 godzin.

Rozwiązanie: Użyj parsera XML, który zna schemat FA(3). Ręcznie — to arkusz XSLT (wymaga wiedzy technicznej). Automatycznie — narzędzie takie jak KSeF Import do Excela, które parsuje XML i tworzy gotowy arkusz .xlsx z jedną fakturą na wiersz.

Pułapka #2: Kwoty jako tekst — SUMA() zwraca zero

Kopiujesz kwoty z podglądu faktury na portalu KSeF do Excela. Wklejasz "1 234,56 PLN" do komórki. Wygląda jak liczba, ale Excel traktuje to jako tekst. Efekt: formuła =SUMA(C2:C50) zwraca 0. WYSZUKAJ.PIONOWO po kwocie nie znajduje dopasowania. Tabela przestawna ignoruje te wiersze.

Problem ma trzy źródła naraz:

  • Spacja tysięczna — "1 234" to dla Excela tekst, nie 1234. Polski format liczb używa spacji jako separatora tysięcy, ale Excel oczekuje pustej komórki albo liczby bez separatora.
  • Sufiks "PLN" — portal KSeF wyświetla kwoty z dopiskiem waluty. Po wklejeniu Excel widzi ciąg znaków, nie liczbę.
  • Przecinek vs kropka — w XML FA(3) separator dziesiętny to kropka (standard XML). W polskim Excelu separator to przecinek. Jeśli importujesz surowy XML, kwota "1234.56" zostaje tekstem.

Ile to kosztuje: 30-45 minut na czyszczenie danych w 100-wierszowym arkuszu (Znajdź i zamień × 3 operacje + konwersja tekst→liczba).

Rozwiązanie: Znajdź i zamień: usuń "PLN", zamień spacje na nic, zamień kropkę na przecinek. Potem zaznacz kolumnę → Dane → Tekst jako kolumny → Zakończ. Albo użyj eksportu, który od razu zapisuje kwoty jako typ liczbowy w .xlsx — bez żadnego czyszczenia.

Pułapka #3: Limit 10 plików z portalu + 64 faktury/h z API

Portal KSeF pozwala pobrać maksymalnie 10 plików XML na raz. Przy 100 fakturach miesięcznie to 10 rund klikania: zaznacz 10 → pobierz → wróć do listy → zaznacz kolejne 10. Każda runda: ~3 minuty (filtrowanie, zaznaczanie, czekanie na pobranie). Łącznie: 30 minut samego klikania.

Jeśli próbujesz obejść to przez API KSeF — napotkasz inny limit. Endpoint pobierania pojedynczych faktur (/invoices/{id}) pozwala na 64 żądania na godzinę na kombinację NIP+IP. Przy 100 fakturach to ~1.5 godziny czekania, nawet z automatycznym skryptem.

Dodatkowe ograniczenia API, o których mało kto wie:

  • 8 żądań na sekundę — globalny limit na wszystkie endpointy łącznie
  • 20 zapytań metadanych/h — sam listing faktur zużywa osobny budżet
  • Maksymalny zakres dat: 3 miesiące — nie pobierzesz całego roku jednym zapytaniem
  • pageSize max 250 — strona wyników nie zwróci więcej niż 250 rekordów

Ile to kosztuje: 30-90 minut miesięcznie na samo pobieranie plików, zależnie od metody (portal vs API).

Rozwiązanie: Automatyczny batch w tle, który respektuje limity API. KSeF Import pobiera faktury w porcjach po 50, z automatycznym retry przy HTTP 429 (Retry-After), i sam planuje kolejne rundy co 61 minut. Przy 100 fakturach: 2 rundy, ~2 godziny w tle — ale bez Twojego udziału. Więcej o masowym pobieraniu: masowe pobieranie faktur z KSeF.

Pułapka #4: Polskie znaki — ż staje się Ÿ, ą staje się ¥

Eksportujesz dane do pliku CSV. Otwierasz go w Excelu. Zamiast "Kowalski Sp. z o.o." widzisz "Kowalski Sp. z o.o." — ale zamiast "Żółta Róża" masz "Ÿółta Róża", a "ąęćłńóśźż" zamienia się w ciąg znaków z daszkami, cyrkumfleksami i symbolami walut.

Przyczyna: plik CSV zapisany w UTF-8 (standard internetowy), a Excel otwiera go w kodowaniu ANSI/Windows-1250 (domyślne dla polskiego Windowsa). UTF-8 zapisuje polskie znaki jako 2 bajty — Excel czyta je jako 2 osobne znaki ANSI, stąd dziwne symbole.

Problem dotyczy każdego CSV z polskimi znakami — nie tylko z KSeF. Ale przy fakturach konsekwencje są poważne:

  • Nazwy kontrahentów nieczytelne — nie znajdziesz "Łódzka Fabryka" wyszukiwarką
  • WYSZUKAJ.PIONOWO nie działa — porównanie "Żółta" z "Ÿółta" zwraca #N/D
  • Import do programu FK się wysypie — Comarch Optima odrzuci wiersz z nieprawidłowymi znakami

Ile to kosztuje: 20-40 minut na naprawę (zamknij, otwórz ponownie przez Dane → Z pliku tekstowego → wybierz UTF-8, albo ręcznie popraw najczęstsze nazwy).

Rozwiązanie: Plik CSV z nagłówkiem BOM (Byte Order Mark) — 3 bajty na początku pliku, które mówią Excelowi "to jest UTF-8". Alternatywnie: eksport bezpośrednio do .xlsx (Open XML), który obsługuje kodowanie natywnie i nie ma tego problemu. KSeF Import dodaje BOM do każdego CSV i oferuje eksport .xlsx jako domyślny format. Więcej o różnicach między formatami: Excel czy CSV — który format wybrać?

Pułapka #5: Duplikaty — ta sama faktura pojawia się 2 razy

Pobierasz wszystkie faktury z KSeF za maj. W arkuszu masz 100 wierszy. Sumujesz kolumnę "brutto" i wychodzi 487 000 PLN. Ale rzeczywista suma powinna wynosić 463 000 PLN. Różnica: 24 000 PLN. Skąd?

KSeF pokazuje tę samą fakturę dwóm stronom transakcji. Jeśli Twoja firma (NIP A) kupiła usługę od firmy B, to faktura pojawia się w KSeF jako:

  • subject1 (sprzedawca) — firma B widzi ją jako swoją fakturę sprzedażową
  • subject2 (nabywca) — Twoja firma (NIP A) widzi ją jako fakturę kosztową

Problem pojawia się w dwóch scenariuszach:

  • Holding / grupa kapitałowa — firma A sprzedaje firmie B, obie należą do tego samego właściciela. Jeśli pobierasz faktury z KSeF dla obu NIPów do jednego arkusza, ta sama faktura pojawi się dwa razy — raz jako sprzedażowa, raz jako kosztowa.
  • Pobieranie "wszystkich" bez filtra — jeśli ściągasz faktury bez podziału na kosztowe/sprzedażowe, możesz dostać duplikaty z obu stron transakcji dla tego samego NIPu.

Ile to kosztuje: 30-60 minut na identyfikację i usunięcie duplikatów. Gorzej: jeśli nie zauważysz — podwójne kwoty w analizie kosztów, błędna deklaracja VAT, rozbieżności z JPK_V7.

Rozwiązanie: Zawsze filtruj faktury po typie: kosztowe (jesteś nabywcą) osobno od sprzedażowych (jesteś wystawcą). Przy wielu NIPach — osobny arkusz per NIP. KSeF Import automatycznie rozdziela faktury na zakładki "Zakupy" i "Sprzedaż", a numer KSeF jest unikalny w ramach pary (tenant_id, nip_id), więc duplikaty nie przechodzą do arkusza. Jeśli szukasz sposobu na pobranie danych z KSeF, gdy portal nie ma eksportu — sprawdź 3 alternatywy eksportu z KSeF.

Podsumowanie: 5 pułapek w jednej tabeli

# Pułapka Stracony czas / mc Rozwiązanie
1 XML w Excelu = chaos kolumn ~25 h (przy 100 FV) Parser FA(3) → .xlsx
2 Kwoty jako tekst 30-45 min Eksport z formatem liczbowym
3 Limit 10 XML + 64/h API 30-90 min Automatyczny batch z retry
4 Polskie znaki = krzaczki 20-40 min UTF-8 BOM lub .xlsx
5 Duplikaty subject1/subject2 30-60 min Filtr kosztowe/sprzedażowe

Łączny koszt przy 100 fakturach: od 2 do 4 godzin miesięcznie — zakładając, że w ogóle wiesz o tych pułapkach. Jeśli nie wiesz (a większość osób nie wie o pułapce #5), strata czasu jest większa, bo musisz jeszcze zdiagnozować problem.

Jak uniknąć wszystkich 5 pułapek naraz

Każdą pułapkę można obejść ręcznie — ale to wymaga 5 osobnych kroków za każdym razem. Alternatywa: automatyczny eksport, który rozwiązuje wszystkie naraz.

KSeF Import łączy się z API KSeF Twoim certyfikatem, pobiera faktury w tle (respektując limity), parsuje XML FA(3) na płaską tabelę, zapisuje kwoty jako typ liczbowy, dodaje BOM do CSV, rozdziela kosztowe od sprzedażowych — i generuje gotowy plik .xlsx lub .csv. Cały proces: 30 sekund od kliknięcia "Eksportuj" do otwarcia pliku w Excelu.

Szczegóły eksportu do Excela: KSeF do Excel — pełny przewodnik.

FAQ — najczęstsze pytania

Czy Excel 365 lepiej radzi sobie z XML z KSeF?

Excel 365 ma lepszy import XML niż starsze wersje (Power Query potrafi parsować zagnieżdżone struktury). Mimo to schemat FA(3) z ~80 polami i wariantami (faktura VAT, korekta, zaliczka) wymaga ręcznej konfiguracji mapowania. Power Query rozłoży dane, ale nie wie, że P_9A to cena netto, a P_11 to wartość netto. Nadal potrzebujesz transformacji — albo gotowego parsera.

Czy LibreOffice ma ten sam problem z kodowaniem?

LibreOffice Calc przy otwieraniu CSV wyświetla okno dialogowe z wyborem kodowania — domyślnie proponuje UTF-8. Dzięki temu pułapka #4 (polskie znaki) nie występuje, o ile wybierzesz prawidłowe kodowanie. Excel nie daje tego wyboru przy podwójnym kliknięciu na .csv — zakłada Windows-1250.

Jak sprawdzić, czy mam duplikaty w arkuszu?

Posortuj arkusz po kolumnie "Numer KSeF" (35-znakowy identyfikator). Użyj formatowania warunkowego: Strona główna → Formatowanie warunkowe → Reguły wyróżniania komórek → Zduplikowane wartości. Podświetlone wiersze to duplikaty. Sprawdź, czy ten sam numer KSeF pojawia się raz jako kosztowa (jesteś nabywcą) i raz jako sprzedażowa (jesteś wystawcą) — to nie błąd, to dwie strony tej samej transakcji. Duplikat to problem dopiero gdy ten sam typ (np. dwie kosztowe) ma ten sam numer KSeF.

Ile czasu realnie zajmuje ręczne pobieranie 100 faktur?

Pomiar na portalu KSeF (maj 2026): zalogowanie + przejrzenie listy + pobranie 10 XML = ~3 minuty. Przy 100 fakturach to 10 rund × 3 minuty = 30 minut samego klikania. Dodaj do tego parsowanie XML (20 min z Power Query, 2+ h bez niego), czyszczenie kwot (30 min) i weryfikację (15 min). Łącznie: 1.5-3 godziny. Z automatycznym eksportem: 30 sekund.

Powiązane artykuły

Artykuł przygotowany przez zespół KSeF Import (ANTENA Sp. z o.o.)

Uniknij pułapek — eksportuj automatycznie

7-dniowy okres próbny, bez karty kredytowej.

Wypróbuj za darmo