AliExpress API: ceny w złotówkach, warianty i dostawa do Polski w JSON
Oficjalne API AliExpress (programy Affiliate i Dropshipping) są przeznaczone dla zarejestrowanych partnerów i sprzedawców. Tutaj chodzi o coś innego: o to, co widzi zwykły kupujący z Polski. Cena w złotych, warianty z osobną ceną i stanem, termin dostawy i kraj, z którego wyjdzie paczka, trafiają do jednego obiektu JSON. Rynek ustawiają trzy niezależne parametry: `"country": "PL"` (kraj dostawy), `"currency": "PLN"` i `"language": "pl"`. Dla karty produktu warto dodać `province`, czyli województwo: od niego zależy wyliczenie dostawy.
Endpointy
| endpoint | Co zwraca | Wymagane |
|---|---|---|
| search | Wyszukiwanie po frazie, także polskiej: cena, rabat w procentach, liczba sprzedanych, ocena, oznaczenie reklamy (`product_type: "ad"`) i etykiety promocji (`promo_tags`), m.in. najniższa cena z 30 dni. Filtry: cena minimalna i maksymalna, kraj wysyłki (`ship_from`, np. PL), darmowa dostawa; sortowanie wg trafności, liczby zamówień, ceny lub nowości. | query |
| product_detail | Wszystko z karty produktu — wystarczy `product_id` albo adres: polski tytuł i parametry, cena i stan każdego wariantu (SKU), zdjęcia, wideo, sklep, ocena, kupony oraz dostawa do wskazanego kraju i województwa z terminem i krajem nadania. | wszystkie opcjonalne |
| reviews | Opinie kupujących, do 20 stron w jednym wywołaniu, z rozkładem ocen; filtr `image` zostawia tylko opinie ze zdjęciami. | wszystkie opcjonalne |
| similar | Produkty podobne do wskazanego (bez niego samego) albo do podanych słów kluczowych. | wszystkie opcjonalne |
| description | Długi opis sprzedawcy: tekst i obrazki. | wszystkie opcjonalne |
| shipping | Opcje dostawy do wybranego kraju: przewoźnik, koszt i termin. | wszystkie opcjonalne |
| store_info | Profil sklepu, a po dodaniu frazy, którą sklep sprzedaje, także wskaźniki sprzedawcy: ocena, odsetek pozytywnych opinii, liczba opinii. | wszystkie opcjonalne |
| deals | Przecenione produkty dla danej frazy, z opcjonalnym minimalnym rabatem w procentach. | query |
Każde wywołanie jest rozliczane w kredytach. Nieudane i zablokowane wywołania są darmowe.
Działający przykład
W wyszukiwarce te lampki choinkowe kosztowały 61,59 zł. Na karcie produktu ta kwota okazuje się ceną jednego z ośmiu wariantów: 50 m w ciepłej bieli. Wersja 200 m kosztuje 146,19 zł, a cztery warianty są wyprzedane (`stock: 0`, `available: false`) i droższe, do 300,59 zł. To właśnie one wyznaczają `price_max`, więc przedział 61,59–300,59 zł nie mówi, ile faktycznie zapłacisz. Paczka wychodzi z magazynu w Polsce: `ship_from: "Poland"`, darmowa dostawa w 1–3 dni. Pole `currency` przyszło puste — szczegóły w ograniczeniach.
curl -X POST https://api.reefapi.com/aliexpress/v1/product_detail \
-H "x-api-key: TWOJ_KLUCZ" \
-H "content-type: application/json" \
-d '{"product_id": "1005013336106946", "country": "PL", "currency": "PLN", "language": "pl", "province": "Mazowieckie"}'{
"ok": true,
"data": {
"product": {
"product_id": "1005013336106946",
"title": "Lampki sznurkowe LED na zewnątrz, 50M 100M, lampki choinkowe, girlanda na Nowy Rok, wesele, do ogrodu, na taras, dekoracja drzewek",
"price_min": 61.59,
"price_max": 300.59,
"currency": null,
"rating": 4.9,
"review_count": 82,
"sold_count": null,
"sold_text": "Ten sprzedawca: 20 sprzedaży | Łączna liczba sprzedaży: +600",
"total_stock": 481,
"sku_variants": [
{
"sku_id": "12000060835397291",
"props": { "Emitujący kolor": "Warm White", "Moc": "50M 500LED", "Wysyłka z": "Polonia", "Typ wtyczki": "wtyczka UE" },
"price": { "sale": 61.59, "sale_str": "61,59zł", "original": null, "currency": null },
"stock": 129,
"available": true
},
{
"sku_id": "12000060835397289",
"props": { "Emitujący kolor": "Warm White", "Moc": "200M 2000LED", "Wysyłka z": "Polonia", "Typ wtyczki": "wtyczka UE" },
"price": { "sale": 146.19, "sale_str": "146,19zł", "original": null, "currency": null },
"stock": 266,
"available": true
},
{
"sku_id": "12000060835397294",
"props": { "Emitujący kolor": "173", "Moc": "200M 2000LED", "Wysyłka z": "Polonia", "Typ wtyczki": "wtyczka UE" },
"price": { "sale": 300.59, "sale_str": "300,59zł", "original": null, "currency": null },
"stock": 0,
"available": false
},
...
],
"shipping": {
"ship_to": "PL",
"shipping_cost": 0.0,
"free": true,
"delivery_estimate": "1-3 days",
"delivery_eta": "Paź 28",
"ship_from": "Poland",
"lines": ["Dostępne śledzenie"],
"selected_option_code": "AE_LOCAL_STANDARD_PL"
},
"store": { "store_id": 1105233629, "seller_country": "China", "seller_feedback_count": 0, "seller_score": null },
...
}
},
"meta": { "record_count": 1, "variant_count": 8, "country": "PL", "currency": "PLN", "language_sent": "pl", "province_sent": "Mazowieckie", "cache_hit": false, "mode": "live" }
}Scraper AliExpress w Pythonie: co się psuje po cichu
Wariant potrafi przyjść z liczbą zamiast nazwy. Gdy wariant odwołuje się do wartości, której AliExpress nie deklaruje już na liście opcji, w `props` zostaje surowy identyfikator — w naszym przykładzie „Emitujący kolor: 173” przy czterech wyprzedanych wariantach. W sierpniu 2026 zmierzyliśmy to zjawisko na 1711 wartościach: dotyczyło 2 z nich (0,12%), obu na martwych wariantach. Zostawiliśmy je bez zmian świadomie, bo poprawka zmieniłaby format `props`, z którego korzystają działające integracje.
Paginacja ma własną pułapkę. We wrześniu 2026 klient zgłosił, że przy `max_results=120` druga strona powtarza większość pierwszej. Przyczyna leżała u nas: jedno wywołanie pobierało kilka stron AliExpress naraz, a `page` przesuwał się tylko o jedną. Po poprawce nakładanie się stron spadło z 21,7% do 7,0%; pozostałe 7% to powtórzenia, które AliExpress sam miesza między swoimi stronami. Duplikaty usuwaj po `product_id`.
Nie każdy filtr AliExpress działa. Filtr sklepu w wyszukiwarce jest ignorowany: w sierpniu 2026 sprawdzenie w danych samego AliExpress pokazało, że do wskazanego sklepu należało 1 z 6, 0 z 6 i 0 z 6 zwróconych produktów. Endpoint z produktami sklepu jest od 5 sierpnia 2026 wyłączony, bo mógłby odpowiadać poprawnie tylko przypadkiem.
Zanim napiszesz własny parser, ustal, co jest u Ciebie kluczem produktu. Cena należy do wariantu, nie do karty: zapisuj `sku_id` przy każdym odczycie, bo inaczej zestawisz cenę lampek 50-metrowych z ceną 200-metrowych i nic tego nie zasygnalizuje.
Ograniczenia i uczciwe uwagi
- Usługa jest nieoficjalna: AliExpress jej nie wydaje ani nie popiera, a nas nie łączy z AliExpress żadna umowa ani partnerstwo.
- Wyszukiwarka zwraca tytuły po angielsku mimo `"language": "pl"`: w naszych dwóch zapytaniach z 27 października 2026 (40 wierszy) nie było ani jednego polskiego tytułu. Po angielsku są też `sold_text` („5K+ sold”) i etykiety (`promo_tags`). Polski tytuł i polskie parametry przychodzą dopiero z `product_detail`.
- W `product_detail` pole `currency` było puste (null) w obu sprawdzonych kartach, także w cenach wariantów. Kwoty są w złotych, co potwierdzają `sale_str` („61,59zł”) i `meta.currency`. W wynikach wyszukiwania `currency` jest wypełnione („PLN”).
- Historii cen AliExpress nie publikuje. Najbliżej jest etykieta „30-day lowest price: 132,42zł” w `promo_tags` (14 z 20 wierszy przy lampkach), czyli tekst, nie osobne pole liczbowe. `original_price` było null we wszystkich 40 wierszach wyszukiwania, choć `discount_pct` podawał rabat.
- Nazwy wartości wariantów pochodzą od AliExpress i nie zawsze są po polsku: „Wysyłka z: Polonia”, „Warm White” obok „ciepły biały” w innej karcie.
- Termin dostawy zależy od magazynu: lampki z Polski miały 1–3 dni, inne lampki wysyłane z Chin 7–10 dni (obie karty z darmową dostawą, województwo mazowieckie).
- `store_name` i `store_url` są w wynikach wyszukiwania puste (40 z 40 wierszy); sklep znajdziesz w `product_detail`.
- Odpowiedzi nie są natychmiastowe: wyszukiwanie trwało u nas 12,7 i 18,2 s, karta produktu ok. 10,6 s. Ustaw limit czasu klienta z zapasem.
- Koszt: `search`, `similar`, `reviews`, `description`, `shipping`, `store_info` i `deals` po 1 kredycie za wywołanie, `product_detail` 2 kredyty.