AliExpress scrapen: Der pragmatische Leitfaden für Dropshipper und Product-Research-Tools

Praxisnaher Guide zum Scrapen von AliExpress — mobile API-Endpoints, Anti-Bot-Umgehung, Variant-SKU-Handling und Scraping-Kadenz für Dropshipping-Tools und Produktrecherche.

AliExpress scrapen: Der pragmatische Leitfaden für Dropshipper und Product-Research-Tools

Warum AliExpress-Scraping anders ist als du denkst

Wenn du AliExpress scrapen willst, steht du vor einer grundlegenden Entscheidung: HTML-Rendering vs. API-Endpoints. Die Desktop-Website liefert server-side gerendertes HTML — langsam, schwer zu parsen, voller A/B-Tests und dynamischer Klassen. Die Mobile-API hingegen liefert sauberes JSON mit mehr Datenfeldern als die Oberfläche überhaupt anzeigt: vollständige SKU-Matrizen, Echtzeit-Shipping-Kosten, Seller-Reputationsscores und Promotions-Flags.

Für Dropshipping-Tools und Product-Research-Startups ist die Antwort klar: Gehe direkt auf die Mobile-API. Du sparst Bandbreite, umgehst einen Großteil des Anti-Bot-Stacks und erhältst strukturiertere Daten. Dieser Guide zeigt dir wie — mit konkreten Endpoints, Rate-Limit-Schwellen und funktionierendem Python-Code.

AliExpress-Seitenstruktur verstehen

Suchergebnisse

Die Suchseite unter aliexpress.com/wholesale?SearchText=... paginiert typischerweise 40–60 Produkte pro Seite. Die Mobile-API liefert kompaktere Ergebnisse mit 20 Items pro Seite, dafür aber mit mehr Metadaten pro Item.

Wichtige CSS/XPath-Selektoren (Desktop-HTML):

  • Produkt-Links: a[href*='/item/']
  • Preis: span[class*='price'] oder div[class*='product-price']
  • Bewertungen: span[class*='rating']
  • Bestellungen: span[class*='order']

Problem: Die Klassen-Namen rotieren regelmäßig. XPath über data-*-Attribute ist stabiler, aber auch nicht garantiert. Deswegen die API-Route.

Produktdetailseiten

Jedes Produkt hat die Form aliexpress.com/item/{itemId}.html. Die Desktop-Seite lädt Produktdaten asynchron via XHR. Die relevanten Endpoints liefern JSON-Objekte mit:

  • Vollständige SKU-Matrix (Farben × Größen mit individuellen Preisen)
  • Shipping-Kosten nach Destination
  • Seller-Statistiken (positive Rate, Antwortzeit, Jahre auf der Plattform)
  • Promotions und Coupons

Store-Seiten

Store-URLs: aliexpress.com/store/{storeId}. Hier findest du alle Produkte eines Sellers, Store-Bewertungen und Store-spezifische Promotions. Für Seller-Reputation-Monitoring unverzichtbar.

Hot-Product-Feeds

AliExpress betreibt mehrere Trend-Feeds: "Top Brands", "SuperDeals", "Choice"-Produkte. Diese Feeds sind für Product-Research besonders wertvoll, da sie bereits vorselektierte, konvertierende Produkte zeigen.

Der Alibaba-Group Anti-Bot-Stack

AliExpress gehört zur Alibaba Group und teilt Infrastruktur mit Taobao, Tmall und Lazada. Der Anti-Bot-Stack ist entsprechend ausgereift:

SchichtTechnologieWas sie prüft
Layer 1AliCAPTCHA / AliVerifySlide-CAPTCHA, Verhaltens-CAPTCHA bei verdächtigen Requests
Layer 2Device FingerprintingCanvas-Fingerprint, WebGL-Renderer, Screen-Auflösung, installierte Fonts
Layer 3TLS Fingerprinting (JA3)Python-Requests, Go-HTTP-Clients und Headless-Browser haben abweichende TLS-Profile
Layer 4Rate Limiting~100–200 Requests/Minute pro IP bei der Such-API, strikter bei Detail-Endpoints
Layer 5Behavioral AnalysisKlickmuster, Scroll-Verhalten, Verweildauer — vor allem auf der Desktop-Seite

Praktische Konsequenz: Datacenter-IPs werden deutlich schneller blockiert als Residential-IPs. Mobile-IPs haben die höchste Toleranz, da AliExpress mobile Traffic-Priorisierung betreibt. Rate-Limits liegen erfahrungsgemäß bei:

  • Desktop-Website: ~50 Requests/Minute/IP, dann CAPTCHA oder 403
  • Mobile-API: ~120–180 Requests/Minute/IP bei Residential-IPs
  • Mobile-API mit Datacenter-IP: ~30–50 Requests/Minute/IP, danach 429 oder 403

Mobile API-Endpoints: Das Goldmine-JSON

Die AliExpress-App kommuniziert über mehrere API-Gateways. Die wichtigsten für Product-Research:

Such-API

GET https://m.aliexpress.com/api/search/product/list.do
    ?keyword=wireless+earbuds
    &page=1
    &pageSize=20
    &sort=ORDERS
    &country=DE

Antwort enthält: itemId, title, price (Min/Max), discountPrice, orders, rating, storeInfo, shippingInfo — alles als sauberes JSON.

Produkt-Detail-API

GET https://m.aliexpress.com/api/product/detail/info.do
    ?productId=3256801234567890
    &country=DE

Liefert die vollständige SKU-Matrix, Shipping-Kosten nach Land, Seller-Reputation und Promotions.

Store-Produkte-API

GET https://m.aliexpress.com/api/store/product/list.do
    ?storeId=91234567
    &page=1
    &pageSize=40

Beispiel-Response (Suche, gekürzt)

{
  "data": {
    "resultList": [
      {
        "itemId": "3256801234567890",
        "title": "Wireless Earbuds TWS Bluetooth 5.3...",
        "price": {"minPrice": 8.99, "maxPrice": 15.99, "discountMinPrice": 5.99},
        "orders": 4521,
        "rating": 4.7,
        "storeInfo": {"storeId": "91234567", "storeName": "TechAudio Store", "positiveRate": 97.2},
        "shippingInfo": {"freeShipping": true, "deliveryDays": {"min": 12, "max": 25}}
      }
    ],
    "totalResults": 84200
  }
}

Python-Beispiel: Trending-Produkte über die Mobile-API mit Residential Proxies

Hier ein vollständiges Beispiel, das AliExpress über die Mobile-API scrapet — mit ProxyHat Residential Proxies und Session-Rotation:

import requests
import time
import json
from datetime import datetime

PROXY_USER = "user-country-US"
PROXY_PASS = "dein_passwort"
PROXY_URL = f"http://{PROXY_USER}:{PROXY_PASS}@gate.proxyhat.com:8080"

PROXIES = {"http": PROXY_URL, "https": PROXY_URL}

HEADERS = {
    "User-Agent": "AliApp/8.96.2 (iPhone; iOS 17.4; Scale/3.00)",
    "x-ae-app-info": "appVersion=8.96.2;platform=iOS;osVersion=17.4",
    "Accept": "application/json",
    "Accept-Language": "en-US;q=1.0",
}

def search_trending(keyword, country="US", page=1):
    """Search AliExpress mobile API for trending products."""
    url = "https://m.aliexpress.com/api/search/product/list.do"
    params = {
        "keyword": keyword,
        "page": page,
        "pageSize": 20,
        "sort": "ORDERS",  # Sort by order count = trending
        "country": country,
    }
    try:
        resp = requests.get(
            url, params=params, headers=HEADERS,
            proxies=PROXIES, timeout=15
        )
        resp.raise_for_status()
        return resp.json()
    except requests.exceptions.HTTPError as e:
        if e.response.status_code == 429:
            print("Rate limited — rotating IP...")
            time.sleep(2)
            return search_trending(keyword, country, page)
        raise

def extract_products(data):
    """Extract relevant fields from search response."""
    products = []
    for item in data.get("data", {}).get("resultList", []):
        products.append({
            "item_id": item["itemId"],
            "title": item["title"],
            "min_price": item["price"]["minPrice"],
            "max_price": item["price"]["maxPrice"],
            "discount_min": item["price"].get("discountMinPrice"),
            "orders": item.get("orders", 0),
            "rating": item.get("rating", 0),
            "store_id": item["storeInfo"]["storeId"],
            "store_name": item["storeInfo"]["storeName"],
            "positive_rate": item["storeInfo"].get("positiveRate", 0),
            "free_shipping": item.get("shippingInfo", {}).get("freeShipping", False),
            "scraped_at": datetime.utcnow().isoformat(),
        })
    return products

# --- Main: Discover trending wireless earbuds ---
all_products = []
for page in range(1, 6):  # 5 pages = ~100 products
    print(f"Scraping page {page}...")
    data = search_trending("wireless earbuds", country="DE", page=page)
    products = extract_products(data)
    all_products.extend(products)
    time.sleep(1.5)  # Respect rate limits between pages

print(f"Total products scraped: {len(all_products)}")
print(json.dumps(all_products[:3], indent=2))

Wichtig: Die user-country-US-Flag im Proxy-Usernamen routet den Traffic durch US-Residential-IPs. Für den deutschen Markt verwendest du user-country-DE — so siehst du die gleichen Preise und Shipping-Optionen wie deine Zielkunden.

Variant-SKUs, Shipping-Kosten und Seller-Reputation verarbeiten

Variant-SKUs parsen

Die Detail-API liefert eine SKU-Matrix, die alle Kombinationen aus Farbe, Größe, Material etc. enthält. Jede SKU hat einen eigenen Preis und eine eigene Verfügbarkeit:

def parse_sku_matrix(product_detail):
    """Parse variant SKUs from product detail response."""
    skus = []
    sku_data = product_detail.get("data", {}).get("skuInfo", {})
    
    # Property definitions (e.g., Color: [Black, White])
    props = sku_data.get("skuProps", [])
    prop_map = {}
    for prop in props:
        prop_map[prop["propId"]] = {
            "name": prop["propName"],
            "values": {v["propValueId"]: v["propValueName"] for v in prop["values"]}
        }
    
    # Individual SKU entries
    for sku in sku_data.get("skuList", []):
        variant = {}
        for prop_id, value_id in sku.get("propPath", {}).items():
            prop_name = prop_map.get(prop_id, {}).get("name", prop_id)
            value_name = prop_map.get(prop_id, {}).get("values", {}).get(value_id, value_id)
            variant[prop_name] = value_name
        
        skus.append({
            "sku_id": sku["skuId"],
            "variant": variant,
            "price": sku.get("skuPrice", {}).get("salePrice", {}),
            "stock": sku.get("skuStock", 0),
            "available": sku.get("skuStock", 0) > 0,
        })
    
    return skus

Für Dropshipping-Tools ist das kritisch: Du musst wissen, welche Varianten verfügbar sind und zu welchem Preis. Oft ist die günstigste Variante (z.B. "schwarz, ohne Zubehör") ausverkauft, während teurere Varianten noch lieferbar sind — das beeinflusst deine Margenberechnung erheblich.

Shipping-Kosten nach Destination

Die Detail-API liefert Shipping-Optionen pro Zielland:

def extract_shipping_costs(product_detail, destination="DE"):
    """Extract shipping costs for a specific destination."""
    shipping = product_detail.get("data", {}).get("shippingInfo", {})
    options = []
    for method in shipping.get("shippingList", []):
        if method.get("country", "") == destination or destination is None:
            options.append({
                "carrier": method.get("company", ""),
                "cost": method.get("freight", {}).get("amount", 0),
                "currency": method.get("freight", {}).get("currency", "USD"),
                "delivery_days_min": method.get("deliveryTime", {}).get("min", 0),
                "delivery_days_max": method.get("deliveryTime", {}).get("max", 0),
                "tracking": method.get("isTracking", False),
            })
    return sorted(options, key=lambda x: x["cost"])

Tipp: Verwende den Proxy mit user-country-DE, um die für deutsche Kunden relevanten Shipping-Preise zu sehen. AliExpress variiert die Shipping-Optionen je nach Herkunftsland der Anfrage.

Seller-Reputation bewerten

Die wichtigsten Seller-Metriken aus der API:

  • positiveRate: Anteil positiver Bewertungen (Ziel: >95%)
  • responseRate: Antwortrate auf Nachrichten (Ziel: >90%)
  • responseTime: Durchschnittliche Antwortzeit in Stunden
  • yearsOnPlatform: Jahre seit Store-Eröffnung
  • sellerScore: Aggregierter Score (0–100)

Für Dropshipping-Tools empfiehlt sich ein Mindest-Filter: positiveRate >= 95 AND orders >= 500 AND yearsOnPlatform >= 2.

Proxy-Strategie für AliExpress

Nicht alle Proxies sind für AliExpress gleich geeignet. Hier der Vergleich:

Proxy-TypRate-Limit-ToleranzCAPTCHA-RisikoDatenqualitätKostenEinsatz
DatacenterNiedrig (~30-50 Req/Min)HochPreise für falsche RegionNiedrigBulk-Monitoring, nicht zeitkritisch
ResidentialMittel (~120-180 Req/Min)NiedrigRegionsspezifisch korrektMittelProduct-Research, Preisüberwachung
MobileHoch (~200+ Req/Min)Sehr niedrigBeste Übereinstimmung mit App-DatenHöherHochvolumige API-Scrapes, Trend-Feeds

Für die meisten Dropshipping-Tools sind Residential Proxies mit Geo-Targeting der beste Kompromiss. Sie liefern regionsspezifische Preise und Shipping-Optionen, während sie ausreichend Rate-Limit-Toleranz bieten.

ProxyHat bietet Residential Proxies mit Land- und Stadt-Targeting:

# Germany residential proxy for accurate DE prices/shipping
http://user-country-DE:pass@gate.proxyhat.com:8080

# Berlin-specific targeting for local delivery estimates  
http://user-country-DE-city-berlin:pass@gate.proxyhat.com:8080

# Sticky session for multi-page product detail scraping
http://user-country-DE-session-prod123:pass@gate.proxyhat.com:8080

Sticky Sessions sind wichtig, wenn du mehrere API-Calls für dasselbe Produkt machst (Suche → Detail → Shipping). Mit user-session-abc123 behältst du dieselbe IP für bis zu 30 Minuten — das verhindert, dass AliExpress deine Requests als Bot-Verhalten erkennt.

Datenfrische und Scraping-Kadenz

Wie oft ändern sich AliExpress-Daten? Hier die empirischen Werte:

  • Preise: Können sich mehrfach täglich ändern — Promotions starten/enden, dynamische Preisgestaltung je nach Nachfrage
  • Lagerbestand: Bei Trend-Produkten stündlich; bei Nischenprodukten täglich
  • Bestellzahlen: Inkrementell, aber AliExpress rundet und aktualisiert asynchron (Verzögerung: 1–6 Stunden)
  • Shipping-Kosten: Relativ stabil, ändern sich wöchentlich oder bei Carrier-Updates
  • Seller-Reputation: Aktualisiert täglich

Empfohlene Scraping-Kadenz:

  • Preisüberwachung: Alle 2–4 Stunden für Top-Produkte, alle 6–12 Stunden für Long-Tail
  • Trend-Entdeckung: 1–2x täglich (morgens und abends)
  • Lagerbestand: Alle 4–6 Stunden für kritische Produkte
  • Seller-Monitoring: Täglich

Bei einer Produktdatenbank von 10.000 SKUs und einer Kadenz von 4 Stunden brauchst du ~2.500 Requests pro Zyklus. Bei 6 Zyklen pro Tag sind das 15.000 Requests/Tag — mit Residential Proxies und vernünftiger Rate-Limiting absolut machbar.

Ethische und rechtliche Überlegungen

  • robots.txt: AliExpress verbietet Scraping in der robots.txt. Prüfe die aktuelle robots.txt und bewerte das Risiko für deinen Use Case.
  • ToS: AliExpress' Nutzungsbedingungen untersagen automatisierten Datenzugriff. Rechne mit möglichen IP-Sperren.
  • GDPR/DSGVO: Personenbezogene Daten (Seller-Namen, Bewertungen) unterliegen europäischem Datenschutzrecht, wenn du EU-Nutzer bedienst.
  • Rate-Limiting: Halte dich an 120–180 Requests/Minute pro IP. Aggressives Scraping schadet allen.
  • Datenverwendung: Verkaufe keine Rohdaten weiter, ohne AliExpress' Einwilligung. Für interne Product-Research ist das Risiko überschaubarer.

Key Takeaways

1. Mobile-API über HTML. Die AliExpress-Mobile-API liefert sauberes JSON mit mehr Datenfeldern und ist robuster gegen Layout-Änderungen.

2. Residential Proxies mit Geo-Targeting. Nutze user-country-DE für korrekte Preise und Shipping-Kosten. Mobile Proxies für maximale Rate-Limit-Toleranz.

3. SKU-Matrix verstehen. Die günstigste Variante ist oft ausverkauft — parse die vollständige SKU-Matrix für korrekte Margenberechnung.

4. Kadenz nach Datenfrische wählen. Preise ändern sich stündlich, Shipping wöchentlich. Passe deine Scraping-Frequenz entsprechend an.

5. Sticky Sessions für Multi-Step-Scrapes. Verwende user-session-* für zusammenhängende Requests, um Bot-Erkennung zu vermeiden.

Bereit, AliExpress-Daten professionell zu scrapen? Starte mit ProxyHat Residential Proxies und teste die Mobile-API mit dem Code aus diesem Guide. Bei Fragen zur Integration oder zu spezifischen Endpoints schau dir unsere Web-Scraping-Use-Cases an.

Bereit loszulegen?

Zugang zu über 50 Mio. Residential-IPs in über 148 Ländern mit KI-gesteuerter Filterung.

Preise ansehenResidential Proxies
← Zurück zum Blog