Retour au portfolio
ENESFRPT
Rétro-ingénierie

De la publication manuelle au reverse engineering : mon parcours d'automatisation de Wallapop

14 min de lecture · 2026

Comment je suis passé de 10 minutes par annonce à l'exécution de bots Selenium sur 6 PC distants, puis au reverse engineering d'une API privée et à la création de systèmes d'extraction que personne d'autre n'a construits — tout cela parce que Wallapop ne dispose d'aucune API publique.

Une précision sur le périmètre. Tout ce qui est décrit ici a été conçu pour faire tourner ma propre entreprise : les comptes vendeurs, l'inventaire et les données de commandes m'appartiennent. Ce sont des outils d'exploitation internes qui gèrent mes propres annonces et commandes — avec des requêtes conservatrices, à débit limité et au rythme d'un humain — parce que la plateforme n'expose aucune API publique pour les vendeurs. C'est de l'infrastructure pour une entreprise que j'exploite, et non un outil dirigé contre qui que ce soit d'autre.

Chapitre 1 : L'enfer manuel

Wallapop est la plus grande place de marché d'occasion d'Espagne. Des millions d'utilisateurs. Des milliards en volume de transactions. Et en 2023, ils n'avaient aucun moyen de publier des annonces en masse.

Chaque annonce devait être créée manuellement via leur interface web. Télécharger les photos. Rédiger un titre. Rédiger une description. Fixer un prix. Choisir une catégorie. Définir la localisation. Cliquer sur publier. 5 à 10 minutes par article.

Quand vous gérez une activité e-commerce de revente de liquidations Amazon, vous pouvez avoir 500 à 600 articles dans votre catalogue à tout moment. Faites le calcul : 600 articles × 7 minutes = 70 heures de travail manuel rien que pour tout mettre en ligne une seule fois. Et il faut republier tous les quelques jours pour rester visible dans les résultats de recherche.

Ce n'est pas un modèle économique. C'est un poste de saisie de données.

Chapitre 2 : Le bot Selenium

Alors j'ai construit un bot. Un système d'automatisation de navigateur basé sur Selenium, capable de naviguer dans l'interface web de Wallapop, de remplir tous les champs, de télécharger les images et de publier — automatiquement.

L'architecture était simple, mais elle exigeait de résoudre plusieurs problèmes loin d'être triviaux :

Chapitre 3 : La ferme de 6 PC

Une minute par annonce. 600 articles. Cela fait 10 heures sur une seule machine. Encore trop lent, surtout quand il faut republier tous les 3 jours pour le positionnement SEO.

Ma solution fut la force brute : j'ai installé 5 à 6 PC, je m'y suis connecté à distance via AnyDesk, et j'ai exécuté plusieurs instances du bot simultanément sur chaque machine. Chaque PC avait son propre compte Wallapop, son propre profil de navigateur, sa propre IP (réseaux différents).

Le flux de travail ressemblait à ceci :

Me (AnyDesk) ──→ PC 1 (Office):      2 browser instances × Account A, B
              ──→ PC 2 (Warehouse):   2 browser instances × Account C, D
              ──→ PC 3 (Home):        2 browser instances × Account E, F
              ──→ PC 4 (Employee 1):  1 browser instance  × Account G
              ──→ PC 5 (Employee 2):  1 browser instance  × Account H
              ──→ PC 6 (Laptop):      1 browser instance  × Account I

Result: ~600 listings published in ~1 hour
Frequency: Every 3 days (re-publish for positioning)

Était-ce élégant ? Absolument pas. Était-ce efficace ? Cela m'a permis d'opérer à une échelle qui aurait été impossible manuellement. Pendant que mes concurrents passaient leur journée entière à publier des articles un par un, j'avais tout mon catalogue en ligne sur plusieurs comptes en une heure.

Chapitre 4 : Le pivot — de la publication à l'exploitation

À mesure que l'entreprise grandissait, des outils externes comme PortalHero sont apparus, capables de gérer la publication en masse. J'ai entièrement délégué cette partie. Mais un nouveau problème, plus important, a émergé : la gestion des commandes.

Quand vous avez 10 commandes par jour sur un seul compte, vous les gérez manuellement depuis l'application Wallapop. Ouvrir l'appli, vérifier les nouvelles commandes, noter le code de l'article, aller à l'entrepôt, le trouver, l'emballer, imprimer l'étiquette, l'expédier. Ça va.

Mais nous étions en pleine croissance. Rapide. Nous sommes passés de 10 commandes/jour à près de 100 commandes/jour sur plus de 12 comptes. Chaque compte avait sa propre boîte de réception, ses propres commandes, ses propres étiquettes d'expédition. Mon équipe d'entrepôt avait besoin d'une vue unifiée de toutes les commandes en attente. J'avais besoin d'analyses sur les comptes les plus performants. J'avais besoin de suivre quels articles avaient été vendus, lesquels étaient en attente d'expédition, lesquels avaient été retournés.

L'interface web de Wallapop ne vous donne rien de tout cela. Aucun export. Aucune API. Aucune opération en masse. Juste une application pensée d'abord pour mobile, conçue pour des particuliers vendant leurs vieilles chaussures.

J'avais besoin de données. Et Wallapop n'allait pas me les donner.

Chapitre 5 : Ouvrir le capot

J'ai ouvert les Chrome DevTools sur l'application web de Wallapop et j'ai commencé à observer l'onglet Network.

Chaque clic, chaque chargement de page, chaque défilement — le navigateur effectuait des requêtes HTTP vers api.wallapop.com. Et les réponses étaient du JSON propre et structuré. Les endpoints suivaient des schémas. L'authentification reposait sur un bearer token dans l'en-tête. La pagination était basée sur des curseurs.

J'ai commencé à tout cartographier :

J'ai passé des jours à explorer. Chaque requête, chaque réponse, chaque en-tête. Je modifiais les paramètres, j'observais ce qui se passait. J'essayais d'appeler les endpoints avec différents jetons d'authentification. Je retraçais le flux complet du cycle de vie d'une commande : création → acceptation → expédition → livraison → finalisation.

Et j'ai trouvé de l'or. Pas seulement les endpoints évidents, mais aussi des endpoints non documentés. Les détails des commandes groupées (bundles). Les transactions du portefeuille. Les statistiques au niveau du compte. Les URL de téléchargement des étiquettes d'expédition. L'historique des messages de chat avec horodatage.

Personne n'avait publié quoi que ce soit là-dessus. Il n'existait aucune documentation de l'API Wallapop nulle part sur internet. Je construisais cette carte à partir de zéro.

Chapitre 6 : Construire les extracteurs

L'API une fois cartographiée, j'ai commencé à construire des systèmes d'extraction. Pas des scripts vite faits — des pipelines de données de niveau production qui tourneraient toutes les 15 minutes, 24h/24 et 7j/7, sur l'ensemble des 12+ comptes.

L'extracteur de commandes (2 100 lignes)

C'est le cœur de l'exploitation de mon entreprise. Il extrait chaque commande sur tous les comptes et les persiste dans PostgreSQL avec un suivi d'état complet :

Cet unique extracteur a remplacé ce qui aurait été 2 à 3 employés à temps plein vérifiant manuellement 12 comptes Wallapop toutes les heures.

L'extracteur de conversations

Chaque conversation avec chaque acheteur potentiel, extraite et stockée. Cela me donne quelque chose que Wallapop ne fournit jamais : l'analyse de l'entonnoir de vente.

Aucune de ces données n'existe dans l'interface de Wallapop. Je les ai construites.

L'extracteur d'annonces

Suit chaque article publié sur tous les comptes : vues, favoris, conversations, prix, statut. Cela révèle quels produits performent bien et lesquels sont invisibles.

Un défi technique majeur fut l'anti-oscillation des identifiants de produit. Lorsque les systèmes de Wallapop réindexent une annonce, le product_id peut changer temporairement. Un suivi naïf créerait des enregistrements en double. J'ai construit une logique de détection qui reconnaît ces oscillations et maintient un suivi cohérent.

L'évolution : V1 → V3

Les extracteurs ont traversé 5 versions majeures à mesure que l'entreprise se développait et que j'en apprenais davantage sur l'API :

V1 (2023)
  └─ Hardcoded bearer tokens in JSON files
  └─ Single account, sequential processing
  └─ Manual token refresh every few hours

V2 (2023)
  └─ Bearers stored in Google Sheets (shared across scripts)
  └─ Multi-account with user_hash tracking
  └─ Tkinter UI for employees to paste new bearers
  └─ Validation before each extraction run

V2.5 (2024)
  └─ Cookie-based auth (no more manual bearer management)
  └─ Automatic accessToken refresh via session cookies
  └─ JWT decoding for expiration checking
  └─ Accounts stay authenticated for weeks

V2.6 (2024)
  └─ ThreadPoolExecutor for parallel multi-account extraction
  └─ Each account gets its own thread and rate limiting
  └─ 12 accounts extracted in parallel instead of sequential

V3 (2024-2025)
  └─ Bundle order support (multi-item orders)
  └─ LPN extraction from descriptions via regex
  └─ Warehouse location enrichment
  └─ Cross-reference with preparation Excel from Drive
  └─ ~2,100 lines for orders alone

L'anti-détection à grande échelle

Effectuer des milliers d'appels API par jour sur plus de 12 comptes exige un sérieux travail d'anti-détection. Se faire repérer, c'est se faire bannir les comptes — ce qui signifie de l'inventaire perdu, des ventes perdues, du chiffre d'affaires perdu.

La guerre des doublons

Quand vous exploitez plus de 12 comptes sur la même place de marché, vous vous heurtez inévitablement à la détection des annonces en double. Les systèmes de Wallapop signalent les annonces qui apparaissent identiques sur plusieurs comptes et peuvent les shadow-bannir ou les supprimer.

J'ai construit une suite complète d'investigation et d'atténuation des doublons :

C'était une course aux armements permanente. Wallapop mettait à jour sa détection, j'enquêtais sur les nouveaux schémas, je construisais des contre-mesures et je m'adaptais. Plus de 15 scripts entièrement dédiés à ce problème.

Ce que ce système permet

Aujourd'hui, mes extracteurs tournent automatiquement toutes les 15 minutes via APScheduler. Les données affluent dans PostgreSQL, où des tableaux de bord Retool offrent à mon équipe une visibilité en temps réel sur :

Ce système est unique. Personne d'autre n'a construit ce niveau d'automatisation pour Wallapop. Il existe des entreprises avec des centaines d'annonces qui gèrent tout manuellement parce qu'« il n'y a pas d'API ». J'ai prouvé qu'elle existe — il suffit de la trouver soi-même.

L'arc complet

2023 Q1: Publishing manually          → 10 min/item, max 50 items/day
2023 Q2: Selenium bot                  → 1 min/item, 1 machine
2023 Q3: 6-PC farm via AnyDesk         → 600 items/hour across 12 accounts
2023 Q4: Delegated publishing          → Focus shifted to operations
2024 Q1: First API reverse engineering → Manual bearer tokens, 1 account
2024 Q2: Multi-account extractors      → Bearers in Sheets, UI for team
2024 Q3: Cookie-based auth             → No more manual token management
2024 Q4: Parallel extraction           → 12 accounts in <5 minutes
2025:    Bundles + full ERP integration → 2,100-line orders extractor
         Anti-duplicate suite           → 15+ investigation scripts
         Production scheduler           → Automatic every 15 minutes

De 10 minutes par annonce à un système d'extraction entièrement automatisé, multi-comptes et anti-détection fonctionnant 24h/24 et 7j/7. Pas en lisant de la documentation — mais en lisant des paquets réseau.

Les extracteurs sont open source : github.com/AspiranteD/wallapop-data-extractors