A Python scraper for extracting product listings from Wallapop using the ScrapingAnt API.
- Scrapes product listings from Wallapop category pages
- Extracts: title, price, description, listing URL, category
- Supports multiple categories (phones, computers, gaming, fashion, etc.)
- Handles "Ver más" (Show More) pagination via JavaScript execution
- Exports results to CSV and JSON formats
- Automatic deduplication of listings
- Python 3.10+
- ScrapingAnt API key (Get one here)
Note: The ScrapingAnt free plan has a concurrency limit of 1 thread. For faster scraping with multiple concurrent requests, consider upgrading to a paid plan.
- Clone the repository:
git clone https://github.com/kami4ka/wallapop-scraper.git
cd wallapop-scraper- Create a virtual environment:
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate- Install dependencies:
pip install -r requirements.txt- Set your ScrapingAnt API key:
export SCRAPINGANT_API_KEY="your-api-key-here"Scrape default categories (iPhone + Samsung):
python main.py -vpython main.py --categories "moviles-telefonos/iphone" -vpython main.py --all-categories -vClick "Ver más" button multiple times to load more listings:
python main.py --show-more 3 -vpython main.py --list-categoriespython main.py --output-csv my_listings.csv --output-json my_listings.json -v- iPhone:
moviles-telefonos/iphone - Samsung:
moviles-telefonos/samsung - Xiaomi:
moviles-telefonos/xiaomi
- Laptops:
informatica/portatiles - Desktop Computers:
informatica/ordenadores-sobremesa - Tablets:
informatica/tablets
- PlayStation:
consolas-videojuegos/playstation - Xbox:
consolas-videojuegos/xbox - Nintendo:
consolas-videojuegos/nintendo
- Men's Clothing:
moda-accesorios/ropa-hombre - Women's Clothing:
moda-accesorios/ropa-mujer - Sneakers:
moda-accesorios/zapatillas
- Furniture:
hogar-jardin/muebles - Appliances:
hogar-jardin/electrodomesticos
- Bicycles:
bicicletas - Fitness Equipment:
deportes-ocio/fitness
title- Product nameprice- Listed price (e.g., "900 €")description- Product descriptionlocation- Seller location (when available)listing_url- Direct link to the listingcategory- Category nameimage_count- Number of imagesseller_type- Type of seller (when available)scraped_at- UTC timestamp of when data was scraped
title,price,description,location,listing_url,category,image_count,seller_type,scraped_at
iPhone 16 Pro Max,900 €,Como nuevo sin arañazos...,,https://es.wallapop.com/item/iphone-1234567,iPhone,5,,2025-01-12T12:00:00+00:00WallapopScraper/
├── main.py # CLI entry point
├── scraper.py # Main scraper class
├── models.py # Data models (Listing, ListingCollection)
├── config.py # Configuration settings
├── utils.py # Utility functions
├── requirements.txt # Python dependencies
├── output/ # Output directory for CSV/JSON files
└── README.md
- API Request: Uses ScrapingAnt's browser rendering with Spanish residential proxy to access Wallapop
- Wait for Content: Waits for listing cards to load using CSS selector
a[href*="/item/"] - Pagination: Optionally clicks "Ver más" button via JavaScript injection to load additional listings
- Parsing: Extracts listing data from card elements using BeautifulSoup
- Deduplication: Removes duplicate listings based on URL
- Export: Saves results to CSV and JSON formats
The scraper includes built-in delays between requests to respect rate limits. For the ScrapingAnt free tier with 1 thread concurrency, expect approximately 30-60 seconds per category (depending on Show More clicks).
MIT License