📥 Import ofert przez FTP — dokumentacja

Wgrywaj paczki .zip przez FTP — system automatycznie dodaje, aktualizuje i usuwa oferty. Obsługujemy 4 formaty XML: nasz natywny zaadresowani.pl oraz trzy popularne standardy polskie (oferty.net, Gratka, Otodom). Format wybierasz w Panelu konta → Import FTP.

O imporcie FTP

Import pozwala synchronizować Twoją bazę ofert z portalem bez ręcznego dodawania — wystarczy że Twój system CRM eksportuje paczki ZIP w jednym z obsługiwanych formatów, a my zajmiemy się resztą. Co kilka minut nasz cron skanuje katalog FTP i automatycznie przetwarza nowe paczki.

Nie masz jeszcze formatu? Polecamy nasz natywny format zaadresowani.pl — jest najprostszy do napisania i najlepiej odwzorowuje funkcje portalu. Pozostałe formaty są przydatne jeśli już używasz ich do innych portali.

Kompatybilne CRM-y

Poniżej lista systemów CRM które obsługują integrację z zaadresowani.pl. Jeśli używasz jednego z nich — wystarczy że włączysz eksport w odpowiednim formacie, a paczki będą trafiać prosto do nas.

Domuly CRM

Domuly to nowoczesny, chmurowy system CRM stworzony specjalnie dla branży nieruchomości (deweloperów i biur nieruchomości), który integruje zarządzanie ofertami, klientami oraz procesem sprzedaży w jednym miejscu. Pozwala automatyzować pracę, obsługiwać rezerwacje i eksportować oferty na portale ogłoszeniowe.

Strona producenta →

Twój CRM nie jest na liście, ale eksportuje w jednym z obsługiwanych formatów (zaadresowani.pl, oferty.net, Gratka, Otodom)? Też się sprawdzi — wybierz odpowiedni format w ustawieniach konta i zacznij importować. Jeśli chcesz żeby Twój CRM trafił do tej listy, napisz na biuro@zaadresowani.pl.

Jak uzyskać dostęp

  1. Zaloguj się na konto biura lub dewelopera w portalu zaadresowani.pl.
  2. Wejdź w Panel konta → Import FTP i kliknij Wyślij zgłoszenie.
  3. Administrator portalu utworzy dla Ciebie indywidualne konto FTP i prześle dane logowania mailem.
  4. W panelu konta wybierz format danych (domyślnie zaadresowani.pl) i zacznij wgrywać paczki.

Jak działa import

  1. Detekcja — co kilka minut cron skanuje katalogi klientów. Paczka jest pomijana, jeśli była zmodyfikowana w ostatnich 30 sekundach.
  2. Idempotencja — system liczy SHA-256 paczki. Ten sam plik nie jest importowany dwukrotnie.
  3. Walidacja — sprawdzenie poprawności XML i obecności wymaganych pól (zależnie od formatu).
  4. Parsowanie — każda oferta przetwarzana po kolei, z podziałem na: dodaj / aktualizuj / usuń / dezaktywuj.
  5. Zdjęcia — z dwóch trybów: snapshot (pełna lista per oferta) lub incremental (operacje per zdjęcie). Diff po SHA-256 — kopiujemy tylko nowe pliki.
  6. Tryb calosc — po imporcie wygaszamy oferty których nie było w paczce (status inactive, odwracalne).
  7. Archiwizacja — paczki przeniesione do processed/ lub failed/ po stronie serwera.
  8. Powiadomienie — e-mail z podsumowaniem (dodane / zaktualizowane / usunięte / pominięte ze względu na limit / błędy).

Struktura paczki ZIP

  • Jeden plik .xml w paczce — zawiera wszystkie oferty.
  • Zdjęcia luzem (bez podkatalogów).
  • Nazwy plików zdjęć — bez polskich znaków diakrytycznych, unikalne w obrębie paczki.
CechaWartość
Kodowanie XMLUTF-8 (lub ISO-8859-2 dla formatu Gratka)
Maks. liczba plików w ZIP50 000
Maks. rozmiar pojedynczego pliku200 MB
Dozwolone rozszerzeniaxml, jpg, jpeg, png, webp, gif
Limit zdjęć per ofertaz pakietu klienta — patrz Limity

Format 1: zaadresowani.pl (natywny, zalecany) ⭐

Nasz format zaprojektowany pod kątem maksymalnej czytelności. Wszystkie tagi po polsku w lowercase, wartości słownikowe jako jasne stringi (cegla, blok, do_zamieszkania) — bez liczbowych ID-ków ze słowników. Najprostszy do napisania w Twoim CRM.

Korzeń pliku

XML<?xml version="1.0" encoding="UTF-8"?> <zaadresowani wersja="1.0"> <meta> <agencja>Nazwa biura</agencja> <data>2026-04-26 14:30:00</data> <tryb>roznica</tryb> <!-- calosc | roznica --> <generator>Mój CRM v2.5</generator> </meta> <!-- Opcjonalne: inwestycje deweloperskie --> <inwestycje> <inwestycja id="OS-SLONECZNE">...</inwestycja> </inwestycje> <oferty> <oferta akcja="dodaj">...</oferta> </oferty> </zaadresowani>

Inwestycje deweloperskie (opcjonalne) 🏗️

Jeśli sprzedajesz mieszkania w ramach inwestycji (osiedle, budynek wielomieszkaniowy), możesz dodać blok <inwestycje> z definicją inwestycji, a w każdej ofercie referencję <inwestycja_ref>. Dzięki temu portal pokaże mieszkania zgrupowane pod nazwą inwestycji, z mapą terenu, logiem i wspólnymi danymi.

Klucz id jest Twoim identyfikatorem — przy kolejnym imporcie ten sam id = aktualizacja istniejącej inwestycji (po parze konto + id). Może być dowolny string, np. OS-1, UUID, czy slug.

XML<inwestycje> <inwestycja id="OS-SLONECZNE"> <!-- Twoje wewn. id --> <nazwa>Osiedle Słoneczne</nazwa> <opis>Nowoczesna inwestycja na Mokotowie...</opis> <typ>mieszkaniowa</typ> <!-- mieszkaniowa | komercyjna | mieszana --> <forma_wlasnosci>pelna</forma_wlasnosci> <strona_www>https://osiedle-sloneczne.pl</strona_www> <data_oddania>2026 Q4</data_oddania> <liczba_pieter>5</liczba_pieter> <logo>logo_osiedle.jpg</logo> <!-- nazwa pliku w paczce ZIP --> <lokalizacja> <wojewodztwo>mazowieckie</wojewodztwo> <miasto>Warszawa</miasto> <dzielnica>Mokotów</dzielnica> <ulica>Słoneczna 1</ulica> <wspolrzedne> <szerokosc>52.2018</szerokosc> <dlugosc>21.0376</dlugosc> </wspolrzedne> </lokalizacja> <!-- Zakresy (opcjonalne, do pokazania "od ... do ...") --> <cena_od>450000</cena_od> <cena_do>980000</cena_do> <powierzchnia_od>35</powierzchnia_od> <powierzchnia_do>110</powierzchnia_do> <pokoje_od>1</pokoje_od> <pokoje_do>4</pokoje_do> <!-- Etapy realizacji (opcjonalne) --> <etapy> <etap nazwa="Etap I" data_oddania="2026 Q4" status="w_realizacji"/> <etap nazwa="Etap II" data_oddania="2027 Q2" status="planowany"/> </etapy> </inwestycja> </inwestycje>

W ofercie linkujemy do inwestycji przez <inwestycja_ref>:

XML<oferta akcja="dodaj"> <symbol>OF-A21</symbol> <inwestycja_ref>OS-SLONECZNE</inwestycja_ref> <!-- ID z bloku <inwestycje> --> <typ>mieszkanie</typ> <transakcja>sprzedaz</transakcja> <cena waluta="PLN">490000</cena> <powierzchnia>42.5</powierzchnia> ... </oferta>
Wskazówki praktyczne:
  • Inwestycję wystarczy zdefiniować raz (przy pierwszym imporcie), kolejne paczki mogą zawierać tylko zmiany ofert + ten sam <inwestycja_ref>.
  • Jeśli zmienisz dane inwestycji (np. przesunie się data_oddania) i wyślesz blok <inwestycje> z tym samym id, zostanie zaktualizowana.
  • Logo wystarczy raz w paczce ZIP — przy kolejnych importach pomijasz, system zachowuje wcześniejsze.
  • Status etap: planowany | w_realizacji | gotowy | sprzedany.
  • Inwestycje pokazują się w /inwestycje i na profilu dewelopera, oferty na /oferty z linkiem do "macierzystej" inwestycji.

Pełny przykład oferty

XML<oferta akcja="dodaj"> <!-- dodaj | aktualizuj | usun | dezaktywuj --> <symbol>OF-12345</symbol> <typ>mieszkanie</typ> <!-- mieszkanie | dom | dzialka | lokal | pokoj | garaz --> <transakcja>sprzedaz</transakcja> <!-- sprzedaz | wynajem --> <rynek>wtorny</rynek> <!-- pierwotny | wtorny --> <tytul>Słoneczne 3 pokoje na Mokotowie</tytul> <opis>Pełny opis ogłoszenia...</opis> <cena waluta="PLN">650000</cena> <powierzchnia>62.5</powierzchnia> <lokalizacja> <wojewodztwo>mazowieckie</wojewodztwo> <miasto>Warszawa</miasto> <dzielnica>Mokotów</dzielnica> <ulica>Puławska 100</ulica> <kod_pocztowy>00-001</kod_pocztowy> <wspolrzedne> <szerokosc>52.2018</szerokosc> <dlugosc>21.0376</dlugosc> </wspolrzedne> </lokalizacja> <budynek> <typ>blok</typ> <material>cegla</material> <rok_budowy>2010</rok_budowy> <pietro>4</pietro> <liczba_pieter>5</liczba_pieter> <stan_wykonczenia>do_zamieszkania</stan_wykonczenia> </budynek> <parametry> <pokoje>3</pokoje> <forma_wlasnosci>pelna_wlasnosc</forma_wlasnosci> </parametry> <udogodnienia> <udogodnienie>balkon</udogodnienie> <udogodnienie>winda</udogodnienie> <udogodnienie>piwnica</udogodnienie> </udogodnienia> <media> <element>prad</element> <element>woda</element> <element>internet</element> </media> <ogrzewanie> <typ>miejskie</typ> <typ>kominek</typ> </ogrzewanie> <wyposazenie> <element>pralka</element> <element>lodowka</element> <element>klimatyzacja</element> </wyposazenie> <kontakt> <imie_nazwisko>Jan Kowalski</imie_nazwisko> <email>jan@biuro.pl</email> <telefon>600100200</telefon> </kontakt> <zdjecia> <zdjecie kolejnosc="1">foto1.jpg</zdjecie> <zdjecie kolejnosc="2">foto2.jpg</zdjecie> </zdjecia> </oferta>

Wartości słownikowe

Format używa tych samych kluczy co nasza baza — co widzisz w XML, to widzisz w panelu konta. Brak ID-ków, brak konwersji.

Dostępność pól per typ nieruchomości

Nie wszystkie pola mają sens dla każdego typu — np. ogrzewanie dla mieszkania ale nie dla działki. Tabela pokazuje co warto wypełnić:

Polemieszkaniedomlokal/biuro/hala/magazyndziałkapokójgaraż
rynek
budynek/typ
budynek/material
budynek/stan_wykonczenia
parametry/pokoje✓ (liczba pomieszczeń)
parametry/forma_wlasnosci
udogodnienia
media
ogrzewanie
wyposazenie✓ (kategoria Ogólne)✓ (Kuchnia/Łazienka/Ogólne)

Pola pominięte dla danego typu są ignorowane przy imporcie — nie powodują błędu.

typ — typ nieruchomości

Klucz w XMLEtykieta
mieszkanieMieszkanie
domDom
dzialkaDziałka
lokalLokal użytkowy
pokojPokój (tylko wynajem)
garazGaraż

Dla biura, hali i magazynu używaj <typ>lokal</typ> + <budynek><typ>biurowiec</typ></budynek> (lub hala / magazyn).

transakcja

KluczEtykieta
sprzedazSprzedaż
wynajemWynajem

rynek (tylko mieszkanie i dom)

KluczEtykieta
pierwotnyPierwotny
wtornyWtórny

budynek/typ (rodzaj budynku) — różne wartości per typ nieruchomości

Lista zależy od typu nieruchomości — np. dla mieszkania nie ma sensu "siedlisko", a dla domu "loft".

KluczEtykietamieszkaniedomlokal/biurohala/magazyn
apartamentowiecApartamentowiec
blizniakBliźniak
blokBlok mieszkalny
dom_wolnostojacyDom wolnostojący
dom_wielorodzinnyDom wielorodzinny
dworek_palacDworek / pałac
kamienicaKamienica
dom_letniskowyDom letniskowy
rezydencjaRezydencja
dom_szeregowyDom szeregowy
budynek_wolnostojacyBudynek wolnostojący
kompleks_budynkowKompleks budynków
halaHala
garazGaraż
biurowiecBiurowiec
magazynMagazyn
gospodarstwo_rolneGospodarstwo rolne
dom_z_funkcja_uslugowaDom z funkcją usługową
siedliskoSiedlisko
obiekt_handlowo_uslugowyObiekt handlowo-usługowy
loftLoft
obiekt_biurowo_handlowo_uslugowyObiekt biurowo-handlowo-usługowy
centrum_handloweCentrum handlowe
pietro_domuPiętro domu
czesc_domuCzęść domu
oficynaOficyna

budynek/material — materiał budowy (mieszkanie, dom)

KluczEtykieta
ceglaCegła
wielka_plytaWielka płyta
pustakPustak
pustak_ceramicznyPustak ceramiczny
drewnoDrewno
keramzytKeramzyt
betonBeton
silikatSilikat
beton_komorkowyBeton komórkowy
inneInne

budynek/stan_wykonczenia (mieszkanie, dom)

KluczEtykieta
do_wykonczeniaDo wykończenia
do_zamieszkaniaDo zamieszkania
wysoki_standardWysoki standard
deweloperskiStan deweloperski
po_remonciePo remoncie

parametry/forma_wlasnosci (mieszkanie, dom)

KluczEtykieta
pelna_wlasnoscPełna własność
spoldzielcze_wlSpółdzielcze własnościowe
spoldzielcze_lokSpółdzielcze lokatorskie
uzytkowanie_wieczysteUżytkowanie wieczyste
udzialUdział

udogodnienia/udogodnienie — różne wartości per typ

KluczEtykietamieszkaniedom
balkonBalkon
ogrodekOgródek
piwnicaPiwnica
ogrodzenieOgrodzenie
garazGaraż

media/element — różne wartości per typ

KluczEtykietamieszkaniedomlokalbiurohalamagazyn
pradPrąd
wodaWoda
gazGaz
internetInternet
telewizjaTelewizja
telefonTelefon
kanalizacjaKanalizacja
szamboSzambo
oczyszczalniaOczyszczalnia

ogrzewanie/typ (mieszkanie, dom)

KluczEtykieta
elektryczneElektryczne
gazoweGazowe
miejskieMiejskie / sieciowe
pompa_cieplaPompa ciepła
olejoweOlejowe
wegloweWęglowe
kominekKominek
podlogowePodłogowe
kolektoryKolektory słoneczne
biomasaBiomasa
pelletyPellety
brakBrak ogrzewania

wyposazenie/element — pełna lista per kategoria

Wyposażenie podzielone jest na kategorie. Dla mieszkania i domu dostępne są wszystkie. Dla pokoju — Kuchnia/Łazienka/Ogólne. Dla lokalu/biura — tylko Ogólne.

🍳 Kuchnia — mieszkanie, dom, pokój
KluczEtykieta
lodowkaLodówka
zamrazarkaZamrażarka
kuchenkaKuchenka
kuchenka_indukcyjnaKuchenka indukcyjna
zmywarkaZmywarka
mikrofalowkaMikrofalówka
okapOkap
ekspresEkspres do kawy
tosterToster
czajnikCzajnik elektryczny
🛋️ Salon — mieszkanie, dom
KluczEtykieta
telewizorTelewizor
telewizor_smartSmart TV
kanapaKanapa
fotelFotel
stol_jadalnyStół jadalny
biurko_salonBiurko
klimatyzacjaKlimatyzacja
internet_salonWi-Fi
roletyRolety / żaluzje
netflixNetflix / streaming
🛏️ Sypialnia — mieszkanie, dom
KluczEtykieta
lozkoŁóżko
lozko_dwuosoboweŁóżko 2-osobowe
szafaSzafa
szafa_wnekowaSzafa wnękowa
biurkoBiurko
lustroLustro
komodaKomoda
zasonyZasłony
klimatyzacja_sypialniaKlimatyzacja
rolety_sypialniaRolety zaciemniające
🛁 Łazienka — mieszkanie, dom, pokój
KluczEtykieta
pralkaPralka
suszarkaSuszarka ubrań
pralko_suszarkaPralko-suszarka
wannaWanna
prysznicPrysznic
kabina_prysznicowaKabina prysznicowa
suszarka_do_wlosowSuszarka do włosów
szafka_lazienkaSzafka łazienkowa
lustro_lazienkaLustro z oświetleniem
bidetBidet
🏢 Ogólne — mieszkanie, dom, lokal, biuro, pokój
KluczEtykieta
windaWinda
garaz_miejsceGaraż / parking
rower_stojakStojak na rowery
domofonDomofon
wideodomofonWideodomofon
monitoringMonitoring
alarmAlarm
rolety_zewnRolety zewnętrzne
balkon_tarasBalkon / taras
ogrodekOgródek
piwnicaPiwnica / komórka
suszarniaSuszarnia

Wymagane pola

  • <symbol> — unikalny identyfikator z Twojego CRM
  • <lokalizacja><miasto>
  • <cena>
  • <powierzchnia>

Pozostałe pola są opcjonalne. Dla operacji usun i dezaktywuj wystarczy podać <symbol>.

Format 2: oferty.net (domy.pl)

Standard domy.pl/eksport (wersja 0.4.x). Korzeń <plik> z meta-headerem, listą działów per typ × transakcja, polami jako <param nazwa="…" typ="…">.

Szkielet XML

XML<plik> <header> <agencja>Nazwa</agencja> <data>2026-04-26 14:30:00</data> <wersja>0.4.5</wersja> <cel>oferty.net</cel> <zawartosc_pliku>roznica</zawartosc_pliku> </header> <lista_ofert> <dzial tab="mieszkania" typ="sprzedaz"> <oferta> <id>CRM-12345</id> <cena waluta="PLN">450000</cena> <param nazwa="powierzchnia" typ="real">68.5</param> <param nazwa="miasto" typ="text">Poznań</param> ... </oferta> <oferta_usun><id>CRM-100</id></oferta_usun> </dzial> </lista_ofert> </plik>

Pełna specyfikacja: https://domy.pl/eksport. Wszystkie pola jako <param nazwa="…"> wewnątrz <oferta>. Tryb calosc/roznica w headerze. Działy: mieszkania, domy, dzialki, lokale, pokoje.

Zdjęcia w trzech wariantach (parser autodetektuje):

  • A<param nazwa="zdjecie1..15"> wewnątrz <oferta> (oficjalna spec, max 15)
  • B — globalny blok <zdjecia> jako siostra <lista_ofert> z atrybutem <akcja>d|u</akcja> (Domuly, bez limitu)
  • C<zdjecia><zdjecie nazwa="…"/> wewnątrz <oferta> (intuicyjny, bez limitu)

Format 3: Gratka

Format eksportu na Gratka.pl. Korzeń <dane>, każda oferta jako <record> z polami w postaci bezpośrednich tagów. Pola słownikowe (np. id_material, id_stan_mieszkania_nowy) jako liczbowe ID — bez znajomości słowników Gratki nie wszystkie zostaną zmapowane na nasze klucze (klient może uzupełnić ręcznie po imporcie).

Szkielet XML

XML<?xml version="1.0" encoding="ISO-8859-2"?> <dane> <actions><export>full</export></actions> <!-- full | inc --> <firma><kod_offline>...</kod_offline><katalog>...</katalog></firma> <record> <action>insert</action> <!-- insert | update | delete --> <id_rubryka>1</id_rubryka> <!-- 1=mieszk., 2=domy, 3=działki, ... --> <id_podrubryka>1</id_podrubryka> <!-- 1=sprzedaż, 2=wynajem --> <numer_oferty>OF-12345</numer_oferty> <cena_calkowita>450000</cena_calkowita> <miasto>Poznań</miasto> <powierzchnia>68.5</powierzchnia> ... <zdjecia><z1>true</z1><z2>true</z2>...<z12>false</z12></zdjecia> </record> </dane>

Cechy charakterystyczne:

  • Encoding często ISO-8859-2 (Latin-2) — parser automatycznie konwertuje do UTF-8
  • Limit zdjęć 12 per oferta (<z1><z12> jako flagi true/false)
  • Pliki zdjęć w paczce nazwane {numer_oferty}_{N}.jpg (z fallbackiem na {id_inspert}_{N}.jpg)
  • Tryb full = snapshot, inc = incremental

Format 4: Otodom

Format eksportu na Otodom.pl (wersja 170130). Korzeń <otoDom>, oferty jako <Insertion> w bloku <Insertions>. Bardzo silnie typowane słownikami liczbowymi (BuildingType, BuildingMaterial, ConstructionStatus itp.).

Szkielet XML

XML<otoDom> <Agency>biuro@example.pl</Agency> <Date>2026-04-26</Date> <ImportType>incremental</ImportType> <!-- full | incremental --> <App>Mój CRM</App> <Insertions> <Insertion> <ID>OF-12345</ID> <Action>0</Action> <!-- 0=update/dodaj, 1=dezaktywuj, 2=usuń --> <ObjectName>0</ObjectName> <!-- 0=Flat, 1=House, 2=Terrain, 3=Room, ... --> <OfferType>0</OfferType> <!-- 0=sell, 1=rent --> <Price>650000</Price> <PriceCurrency>1</PriceCurrency> <!-- 1=PLN, 2=EUR, 3=GBP, 4=USD --> <Area>62.5</Area> <FlatDetails> <BuildingType>5</BuildingType> <!-- 5=apartamentowiec --> ... </FlatDetails> <Photos> <Photo><Position>1</Position><File>1.jpg</File></Photo> </Photos> </Insertion> </Insertions> </otoDom>

Cechy charakterystyczne:

  • Akcje jako liczby: Action = 0 (insert/update), 1 (dezaktywuj), 2 (usuń)
  • Limit zdjęć 20 per oferta
  • Aktualne słowniki: https://www.otodom.pl/api/lite/dictionaries
  • Pełna spec: dokumentacja "Otodom Import" wersja 170130

Tryby: całość vs różnica

Każdy z formatów rozróżnia dwa tryby paczki (różne nazwy, ta sama logika):

FormatSnapshotIncremental
zaadresowani.pl<tryb>calosc</tryb><tryb>roznica</tryb>
oferty.net<zawartosc_pliku>calosc</zawartosc_pliku><zawartosc_pliku>roznica</zawartosc_pliku>
Gratka<export>full</export><export>inc</export>
Otodom<ImportType>full</ImportType><ImportType>incremental</ImportType>

Snapshot (calosc / full)

Paczka zawiera wszystkie aktualne oferty. Po imporcie oferty na portalu, których nie ma w paczce, są wygaszane (status inactive — odwracalne). To bezpieczna semantyka — kolejna paczka snapshot przywróci zaginione oferty.

Incremental (roznica / inc)

Paczka zawiera tylko zmiany względem ostatniego eksportu. Operacje są jawne — dodaj/aktualizuj/usuń/dezaktywuj. Oferty niewymienione w paczce pozostają bez zmian. Najbezpieczniejszy tryb dla codziennego eksportu.

Akcje na ofertach

Akcjazaadresowani.ploferty.netGratkaOtodom
Dodaj / aktualizujakcja="dodaj"<oferta><action>insert</action><Action>0</Action>
Hard deleteakcja="usun"<oferta_usun><action>delete</action><Action>2</Action>
Soft delete (dezaktywacja)akcja="dezaktywuj"tryb calosc (auto)<Action>1</Action>

System rozróżnia: hard delete = trwałe usunięcie (rekord + zdjęcia), soft delete = wygaszenie (status inactive, klient może wznowić).

Zdjęcia

Pliki zdjęć w paczce ZIP — luzem w głównym katalogu. Każdy format ma własny sposób referowania nazw plików.

FormatSchemat zapisu w XMLMaks. w XML
zaadresowani.pl<zdjecia><zdjecie kolejnosc="N">plik.jpg</zdjecie>bez limitu
oferty.net (A)<param nazwa="zdjecieN">plik.jpg</param>15 (twarda spec)
oferty.net (B)globalny <zdjecia> z <akcja>d|u</akcja>bez limitu
oferty.net (C)<zdjecia><zdjecie nazwa="…"/>bez limitu
Gratka<zdjecia><z1>true</z1>…</zdjecia> + pliki {numer_oferty}_{N}.jpg12 (twarda spec)
Otodom<Photos><Photo><File>…</File></Photo></Photos>20 (twarda spec)

Kolumna "Maks. w XML" to ile zdjęć da się fizycznie zadeklarować w pliku danego formatu — wynika z jego specyfikacji. Np. oferty.net Wariant A definiuje tagi zdjecie1zdjecie15 i nic więcej.

Faktyczny limit zdjęć określa Twój pakiet — nie format XML.
System najpierw sprawdza ile zdjęć dostajesz w swoim pakiecie (np. 10 bezpłatnych + 10 po dokupie = max 20). Jeśli paczka zawiera więcej zdjęć dla oferty niż przewiduje pakiet — nadwyżka zostaje pominięta, a Ty otrzymasz mail: "Pominięto X zdjęć — wykup dodatkowe w panelu konta i wgraj paczkę ponownie".

Przykład: klient z pakietem Starter (10 zdjęć) wgrywa paczkę Otodom z 20 zdjęciami → system zaimportuje pierwsze 10, pozostałe 10 pominie. Limit 20 z Otodom to tylko ograniczenie samego XML.

Aktualny limit zdjęć dla Twojego konta zobaczysz w Panelu konta → Mój pakiet w sekcji "Zdjęcia / oferta".

Diff po SHA-256 — zdjęcia o niezmienionej zawartości nie są kopiowane ponownie przy kolejnych importach. Oszczędza dysk i transfer.

Limity i pakiety

Liczba aktywnych ofert i zdjęć per oferta jest ograniczona przez pakiet:

  • Limit ofert — np. starter agency = 5, pro = 30, premium = ∞. Po wyczerpaniu nowe oferty z paczki są pomijane (skipped_by_limit).
  • Limit zdjęć / oferta — z pakietu lub fallback z roli (agency = 10 + 10 po dokupie). Nadwyżka pomijana.
  • Aktualizacje (już istniejących) i usunięcia nie wliczają się do limitu.
  • Wygaszone oferty (status inactive) zwalniają slot pakietu — można dodać kolejną.

Walidacja i typowe błędy

Statystyki w mailu z podsumowaniem importu:

StatystykaZnaczenie
DodaneLiczba nowych ofert utworzonych w bazie.
ZaktualizowaneLiczba istniejących ofert których pola zmieniono.
UsunięteSuma: hard delete + wygaszone (soft delete).
Pominięte (limit)Nowe oferty, które nie zmieściły się w limicie pakietu.
BłędyOferty których nie udało się zaimportować — szczegóły w logu i historii runu.

Każdy run ma stronę szczegółów z listą ofert i ich operacji — w panelu klienta i admina.

Upload manualny (alternatywa dla FTP)

Jeśli nie chcesz konfigurować klienta FTP — np. do testowego importu pojedynczej paczki — wgraj plik bezpośrednio z przeglądarki w Panelu konta → Import FTP:

  • Maksymalny rozmiar: 500 MB.
  • Paczka trafia do tej samej kolejki — wynik w historii w ciągu kilku minut.
  • Wymaga aktywnego konta FTP.