Autor
Digital Vantage TeamData publikacji
Czas czytania

Pokażę, kiedy zwykły plik raz dziennie „wystarczy”, a kiedy — przy większym katalogu i częstych zmianach — rozsądniej (a prawdopodobnie taniej w dłuższym czasie) przejść na XML z deltą albo API. Po drodze porządkujemy model danych: rozdzielamy product_id, SKU i variant_id, trzymamy w ryzach netto/brutto z VAT-em i pilnujemy, by „available” nie kłóciło się z „reserved”. Na konkretnych przykładach mapujemy pola z feedu do sklepu, normalizujemy jednostki (g/mm → kg/cm), a słowniki kategorii i kolorów przestają być loterią. Zanim cokolwiek wpuścisz do katalogu, włączamy walidacje: twarde odrzucają bzdury (brak SKU, VAT z kosmosu), miękkie tylko ostrzegają (brak zdjęcia), a checksumy trzymają w ryzach duplikaty. Ustalamy rytm pracy: pełny import w nocy, w dzień tylko różnice; bezpieczna kolejność i szybkie „cofnięcie ostatniej partii”, jeśli coś się rozjedzie. Wyjaśniam też, co powinno żyć w ERP (ceny, VAT), co w PIM (opisy, media, tłumaczenia), a sklepowi zostawiamy prezentację — nic na siłę. Do tego praktyka pracy z mediami (nazwy plików, wagi, CDN) i prosty monitoring po imporcie, który wyłapuje rozjazdy stanów i cen, zanim zrobią to klienci. Na koniec — typowe wpadki, szybkie remedia i krótki plan 30/60/90, żeby katalog wreszcie przestał „żyć własnym życiem”.
Masz świeże zdjęcia, nowe ceny, a na karcie produktu… stary opis i brak wariantu „M”? Brzmi znajomo. W e-commerce takie „drobiazgi” potrafią zjeść marżę szybciej niż rabat -10%. Zwykle nie chodzi o „zły system”, tylko o to, jak dane wpadają do sklepu: raz CSV od dostawcy, raz XML z hurtowni, a czasem eksport z ERP „z palca”. Gdy te światy nie mówią jednym językiem, zaczyna się klasyka: duplikaty SKU, znikające zdjęcia, rozjechane ceny.
Niedawno rozmawiałem z właścicielem średniego sklepu DIY. „Wgrywamy feed o 9:00, a o 11:00 i tak poprawiamy ręcznie” — przyznał bez owijania. Krótki audyt i wyszło szydło z worka: XML podmieniał ceny brutto na netto, a CSV nadpisywał opisy pustymi wartościami. Nie wymienialiśmy platformy. Ułożyliśmy kontrakt danych, dorzuciliśmy walidacje i prosty harmonogram: pełny import w nocy, w dzień tylko delta. Efekt? Mniej telefonów do biura, szybciej publikowane nowości i zero „znikających” wariantów. Niby proste — ale dopiero w tej kolejności zaczęło działać.
W tym tekście przeprowadzę Cię przez praktyczny start: jak wybrać ścieżkę importu (CSV/XML/API), co ustawić w mapowaniu pól i jak sprawdzić, czy to rzeczywiście obcina liczbę błędów. Bez żargonu, bez rewolucji.
Zanim klikniesz „Importuj”, nazwij jedną rzecz, którą chcesz zmienić. Jedną, nie pięć.
Zapisz cel w formacie „z → do → do kiedy”. Potem projektujesz pod ten cel: walidacje, kolejność, alerty. Inaczej łatwo „upiększyć” proces, który w liczbach dalej kuleje.
Dwa źródła prawdy = brak prawdy. Ustal role i się ich trzymaj.
Jeśli dziś część cen edytujesz w panelu sklepu, a część w ERP, prosisz się o nocne poprawki. Wybierz właściciela danych i zablokuj edycję w pozostałych miejscach (albo przynajmniej ustaw je jako „tylko podgląd”).
Brzmi banalnie, a to tutaj rodzą się katalogowe duchy.
U jednego klienta SKU było wspólne dla produktu i wariantu. Przy imporcie delty system „grzecznie” dopisywał warianty jako nowe produkty. Rozdzieliliśmy product_id i variant_id — duplikaty zniknęły. Bez linijki kodu.
Szybki test na dziś: weź 20 losowych SKU i sprawdź, czy we wszystkich plikach (CSV/XML/API) są te same identyfikatory i jednostki (kg vs g, cm vs mm). Jeśli nie — prawdopodobnie właśnie tu uciekają godziny zespołu.
Dobry na start i jednorazowe migracje. Prosty, przewidywalny, ale „płaski” — warianty potrafią się tu rozjechać. Sprawdza się przy małych feedach (do ~2–3 tys. SKU) i aktualizacjach raz dziennie. Jeżeli obrabiasz w Excelu, wymuś formaty kolumn (cena jako liczba z kropką, nie przecinkiem).
Lepszy dla hierarchii, drzew atrybutów i wariantów. Zwykle działa w harmonogramie (co X minut/godzin). Bywa „sztywny”, ale daje mniej niespodzianek w złożonych kategoriach. Dobrze znosi deltę (wysyłasz tylko zmienione pozycje).
Najwięcej kontroli i walidacji, near real-time. Wymaga spisanego kontraktu danych (pola, typy, retry). Sprawdza się, gdy zmiany są częste (promocje godzinowe, dynamiczne stany) i rośnie wolumen.
Tip: jeżeli importujesz >1 raz dziennie i masz >5k SKU, sensownie będzie przejść na API albo XML + delta. CSV zaczyna wtedy „pękać” i łatwo o duplikaty.
Relacja: produkt ma N wariantów; wariant dziedziczy cechy produktu (np. marka), ale ma swoje atrybuty (rozmiar, kolor).
Kontrola jakości: czy jeden SKU wskazuje na dwa warianty w różnych plikach? Jeśli tak — masz generator duplikatów.
23.00.price_tier_1/2/3 lub osobna tabela.Zasada właściciela: jeżeli ceny żyją w ERP, sklep nie powinien ich „korygować”.
deny/allow/allow_with_date.SLA odświeżania: stany co 5–10 min (albo eventem); reszta może wolniej.
sku-variant-01.jpg zamiast IMG_1234.JPG.Anegdota z wdrożenia: brak fallbacku sprawił, że angielska wersja ściągnęła polskie opisy kategorii. Niby drobiazg, a CTR w UK poleciał o połowę. Jedna flaga „fallback: en→pl” i temat zniknął.
Tabela mapowania (przykład)
Źródło (feed) | Pole w sklepie | Transformacja / przykład |
|---|---|---|
|
| Bez zmian ( |
|
| Uppercase, trim ( |
|
| Mapuj tylko, gdy |
|
| Wg języka, fallback EN→PL |
|
| Whitelist tagów ( |
|
|
|
|
| ISO 4217 ( |
|
|
|
|
| Słownik marek (unikalne ID/alias) |
|
| Normalizacja wartości (patrz niżej) |
|
| Waliduj URL/rozszerzenie |
|
| Do 10 pozycji, duplikaty out |
|
| Mapa kategorie dostawcy → kategorie sklepu |
|
| Tylko cyfry, długość 8/13 |
|
|
|
Normy typów i jednostek
int.2025-11-03T12:00:00Z).Słowniki i normalizacja
external_id → internal_id. Dodawaj testy regresji przy każdej zmianie.color: {"black": "czarny", "jet black": "czarny", "nero": "czarny"}.vat_rate → zastosuj stawkę domyślną z ERP dla danej kategorii.Reguły uzupełnień (przykłady)
slug pusty? Wygeneruj z name + -sku.main_image? Ustaw placeholder + oznacz do uzupełnienia w raporcie.brand nieznana? Mapuj na inny tymczasowo, ale loguj do poprawki.sku lub product_id.price_gross < 0 albo vat_rate spoza listy (np. 0/5/8/23).barcode (długość/znaki).stock_available < 0 po wyliczeniu ze stock - reserved.jpg/jpeg/png/webp.main_image.meta_title/description.color).name (>120 znaków) — skróć i zloguj.product_id lub (sku, variant_id).name+desc+price).meta_title 40–60 znaków; meta_description 120–155.slug unikalny w obrębie języka; jeśli konflikt — dodaj -sku.alt do main_image: z brand + name + wariant.<p><ul><ol><li><strong><em><br>).Full vs. delta
Kolejność importu (bezpieczna)
Okna ciszy
Rollback
product_id + kopie pól krytycznych).Dobre praktyki operacyjne
error_rate > 2% w partii albo media mają >10% braków.ERP: ceny, stawki VAT, indeksy/kody, dokumenty (faktury, korekty), czasem stany (jeśli ERP jest właścicielem magazynu). Tu liczy się rozliczalność i zgodność — pola „twarde”, audytowalne.
PIM: opisy (krótki/długi), atrybuty filtrowalne, media (foto, video, 360°), tłumaczenia, bundle/kompletacje, reguły prezentacji. PIM to redakcja i spójność wielokanałowa, z wersjami i workflow.
Sklep: prezentacja + koszyk/checkout. Sklep nie powinien „wymyślać” cen ani trzymać długich opisów jako źródła prawdy — pobiera z ERP/PIM i cache’uje.
Dwa scenariusze, które widzę najczęściej:
Z praktyki: jeśli opisy edytujesz w trzech miejscach, a zdjęcia „giną” przy migracjach, PIM prawdopodobnie spłaci się już przy pierwszej większej aktualizacji.
Naming, który działa:{sku}-{angle}-{size}.jpg (np. A123-front-1200.jpg). Kąty: front/back/side/detail. Rozszerzenia: WebP preferowany; fallback JPEG. Wideo: MP4/WEBM.
CDN i wagi:
Celuj w ≤300–500 KB na zdjęcie listingu, ≤1–1,5 MB na duże detale. Włącz automatyczny resize/thumbnail (np. ?w=600, ?w=1200 2x). Dodaj lazy loading i srcset, żeby nie przepalać transferu.
Porządek w galeriach:
alt generowany z brand + name + wariant.Kontrola braków:
main_image.main_image (miękka: ostrzeżenie na stagingu; twarda: stop na produkcję).Dashboard operacyjny (na jednym ekranie):
Alerty, które mają sens:
Log zmian (kto/co/kiedy):
Mała uwaga z praktyki: jeśli po imporcie nie widzisz od razu rozjazdów stanów/cen, to znaczy, że będziesz je łapać na… zgłoszeniach klientów. Dashboard i alerty kosztują mniej niż weekend poprawiania „znikających” cen.
Jeden SKU w kilku produktach → duplikaty.
Rozdziel ID produktu (np. prod_123) od ID wariantu (np. prod_123-red-42). SKU ma być unikalne na poziomie wariantu. Masz dziś wspólne SKU? Zacznij od słownika wariantów i migracji na stagingu.
Mieszanie netto/brutto/VAT → chaos cenowy.
Ustal model: albo przechowujesz netto + VAT i liczysz brutto w sklepie, albo brutto jako źródło prawdy. Konsekwentnie. Trzymaj w feedzie price_net, vat_rate, wyliczaj price_gross + currency.
Nadpisywanie treści „pustym” feedem → wyzerowane opisy.
Zamiast „pełnego młota” użyj delty i reguł scalania: jeśli description w pliku jest puste → nie nadpisuj. To drobiazg, który ratuje weekend.
Import w godzinach szczytu → spadek wydajności i UX.
Trzymaj się okien: full w nocy, delty co 15–60 min. Gdy musisz „w dzień”, porcjuj po 500–1000 rekordów i obserwuj TTFB.
Brak stagingu i smoke-testu (20 SKU) przed runem.
Zawsze zaczynaj od mini-próby: 20 reprezentatywnych SKU (kategorie, warianty, ceny). Sprawdź ceny, VAT, zdjęcia, filtrowanie, meta. Dopiero potem „pełna para”.
Koszty (TCO).
Licencje (importer/PIM/CDN), utrzymanie i monitoring, roboczogodziny zespołu (mapowanie, walidacje, poprawki), a do tego migracje i staging. Bywa przewrotnie: „tani” CSV wychodzi najdrożej, bo płacisz czasem ludzi za ręczne gaszenie błędów i poprawki po nocach.
Zyski (ROI).
Mniej duplikatów i pomyłek cenowych, szybsza publikacja kolekcji, mniej ticketów w stylu „zły opis/zdjęcie”, niższy overselling, a marketing wreszcie dostaje kompletne atrybuty i media. Niby przyziemne, ale zwykle skraca time-to-market z dni do godzin — i to czuć w sprzedaży.
Policz to bez magii:
oszczędność_mies = (minuty_poprawki_przed – minuty_po) × liczba_zmian_mies × stawkaROI_mies = oszczędność_mies – (licencje + utrzymanie)
Jeśli payback nie mieści się w 3–4 miesiącach przy katalogu „w ruchu”, coś się prawdopodobnie rozjeżdża — zwykle w mapowaniu pól albo w walidacjach. Warto wtedy wrócić do podstaw i doszlifować kontrakt danych.
Sklep DIY (~8 000 SKU, dwóch dostawców) tonął w CSV: duplikaty wariantów, zera w wadze, braki zdjęć. Przestawiliśmy proces na XML delta z walidacjami: twarde (brak SKU, błędny VAT, waga=0) i miękkie (mniej niż 2 zdjęcia = ostrzeżenie). Dołożyliśmy staging + rollback batcha i reguły scalania opisów, żeby „pusty” feed nie wyczyścił treści. Po miesiącu: –70% duplikatów, –50% błędów cenowych, a nowa kolekcja wchodziła w 1 dzień (wcześniej 3–4). Brzmi zwyczajnie, ale to właśnie ta zwyczajność robi wynik.
30 dni – fundament bez niespodzianek
60 dni – stabilna delta i jakość danych
90 dni – wygoda i skala
— wrócisz z krótką checklistą, listą alertów/ walidacji i wzorem „kontraktu importu” dopasowanym do Twojego ERP/PIM.
Szukasz prostego planu na uruchomienie lub uporządkowanie e-commerce? Ta seria prowadzi Cię krok po kroku: od wyboru platformy i policzenia kosztów (TCO), przez płatności i logistykę, po operacje (automaty, KPI, integracje) oraz SEO i UX-UI, które realnie podnoszą sprzedaż. Krótkie checklisty, przykłady z MŚP i układ 30/60/90 dni pomagają zacząć dziś i rosnąć bez chaosu.
Zobacz całą serię → Start e-commerce: od fundamentów do pierwszych klientów
Procesy, dane i narzędzia, które dają porządek w codziennej pracy (ERP/WMS/CRM), automatyzacje z realnym ROI oraz metryki właściciela (GMV, AOV, LTV).

Jak liczyć GMV, AOV, CAC, LTV i marżę, łączyć dane sklep/ERP/GA4 i zbudować dashboard, który chroni zysk zamiast pompować sam obrót.

Jak połączyć ERP, WMS, CRM i sklep bez chaosu: źródła prawdy, kolejność wdrożeń, kontrakt danych, monitoring i ROI — praktycznie, w liczbach.

Zbij WIS, zautomatyzuj statusy i daj klientom samoobsługę. Prosty model supportu dla małych sklepów – z KPI i integracjami.

Prosty plan dla MŚP. 2FA, backup z testem, role, CMP, polityki i 1-stronicowy runbook. Zmniejsz ryzyko bez blokowania sprzedaży.

Jak automatyzować sklep, by się zwracało: etykiety, tracking, KPI, e-maile i fulfillment. Prosty model ROI, przykłady i lista szybkich wygranych.