Milanuncios Scraper — Spain Classifieds Ads & Prices
Pricing
from $5.00 / 1,000 listing scrapeds
Milanuncios Scraper — Spain Classifieds Ads & Prices
Scrape Milanuncios.com Spain classifieds by keyword, category, province, or URL. Flat MCP-ready rows: title, EUR price, city/province, seller type, images, dates. HTTP-only via __INITIAL_PROPS__ + Spanish residential proxy. Cookieless, no login.
Pricing
from $5.00 / 1,000 listing scrapeds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
3 days ago
Last modified
Categories
Share
Milanuncios Scraper — Spain Classified Ads & Prices
Use this Apify Actor to scrape public Milanuncios Spain classified ads by keyword, category, province, or Milanuncios search/detail URL. Resellers, dealers, price monitors, and AI agents get flat MCP-ready rows with EUR price, city/province, seller type, images, and dates — cookieless, no login, HTTP-only.
Use this Actor when you need Spanish second-hand inventory from Milanuncios into JSON. When the next workflow is Spanish real-estate portals or another marketplace, continue with a sibling Actor instead.
Best fit for this Actor
- You need public Milanuncios listings across Spain (phones, cars, property, pets, and other categories).
- You want flat fields (
title,priceEur,city,province,sellerType,url,imageUrl) plus optional detail enrichment. - You want one MCP-ready tool with terminal
OUTPUT.outcomeand Pay per event billing. - For Idealista/Fotocasa property-only workflows, Wallapop, or private seller phones, route to a different tool.
Use case: Madrid iPhone sourcing sheet
A reseller preparing a weekend buy list runs this Actor with keyword: "iphone", category: "telefonos-moviles", province: "madrid", and maxItems: 20. Each row has title, priceEur, city, and url. They sort by price, open the best five ad pages, then turn on fetchDetails for a shortlist of three to pull seller score, attributes, and contact flags before messaging.
Quick start input
{"keyword": "iphone","category": "telefonos-moviles","province": "madrid","maxItems": 5,"maxPages": 1,"fetchDetails": false,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "ES"}}
Also supports startUrls (search or -{id}.htm detail), price filters, seller type, sort, and stripSellerPII. Prefill keeps quality tests at five iPhone mobiles listings.
What data you receive
One dataset row per unique public ad.
{"listingId": "536827480","title": "IPhone","priceEur": 15,"currency": "EUR","condition": "mejorable","sellerType": "private","city": "Sabadell","province": "Barcelona","category": "iPhone","categoryPath": "Telefonía > Móviles > Teléfonos móviles > iPhone","url": "https://www.milanuncios.com/iphone/iphone-536827480.htm","imageUrl": "https://images.milanuncios.com/api/v1/example.jpg","publishDate": "2026-05-04T13:56:22Z","scrapedAt": "2026-09-21T12:00:00.000Z"}
| Field | Description |
|---|---|
| title, priceEur, condition | Listing card basics |
| city, province, url, imageUrl | Where and how to open it |
| sellerType | private or professional |
| description, attributes, seller* | When fetchDetails or direct detail URLs |
| publishDate / updateDate | Timestamps when Milanuncios exposes them |
Pricing
Pay per event plus platform usage (isPPEPlatformUsagePaidByUser: true). Open the live Pricing tab in Apify Console for the current source of truth.
| Event | When | Price |
|---|---|---|
apify-actor-start | Every run | $0.00005 |
listing-scraped | Each accepted search-card row | $0.005 |
listing-enriched | Each accepted detail/enrich row | $0.008 |
A 5-listing search without enrich is about $0.02505 in events plus Residential ES proxy/compute. Invalid input and valid-empty searches leave listing events unbilled.
How it works
- Primary path: HTTP Cheerio reads Milanuncios embedded
window.__INITIAL_PROPS__(search cards ~41/page; detailprops.ad). Apify Residential ES is required — datacenter IPs get Akamai interruptions. - Search pagination uses
?pagina=Nup tomaxPages/maxItems. - Each accepted row is charged then pushed (
Actor.charge→pushData). - Terminal
OUTPUT/RUN_SUMMARYuse COMPLETE, PARTIAL, VALID_EMPTY, INVALID_INPUT, UPSTREAM_FAILED, or CONFIG_ERROR.
Honest contract and best results
- Public Milanuncios listing pages only. No Milanuncios account, private chat, or unlocked seller phone numbers.
- Empty search results →
VALID_EMPTY(succeeded, zero listing charges). - Total block with zero rows →
UPSTREAM_FAILED(honest upstream outage). - Keep
maxItemssmall while testing; raise it only after a keyword+category returns useful cards. - Prefer category + province over bare keywords for cleaner inventory.
- Leave
fetchDetailsoff for discovery; turn it on for shortlists that need seller/attribute fields. - Always pin
apifyProxyCountry: "ES"— non-ES exits often fail Akamai checks. - Enable
stripSellerPIIwhen you need enriched attributes without private-seller identity fields.
Why agents choose this Actor
- One tool for keyword builders, category/province filters, and paste-ready Milanuncios URLs.
- Predictable PPE with usage pass-through and a hard
maxItemsceiling. - Flat fields stay inside a small token budget for MCP clients.
- Terminal
OUTPUT.outcomemakes empty, upstream-outage, and invalid-input states machine-readable.
Agent checklist
- Supply
keyword+ optionalcategory/province, or MilanunciosstartUrls. - Cap
maxItemsto the budget you can spend at$0.005(or$0.008when enriched). - Keep Residential ES in
proxyConfiguration. - After the run, read
OUTPUT.outcome, then the dataset. - Zero rows with
VALID_EMPTYmeans the query matched nothing public — change keyword, category, or province. - When
OUTPUT.outcomeisUPSTREAM_FAILED, retry once with a fresh Residential ES session before escalating.
Use through the API
curl "https://api.apify.com/v2/acts/khadinakbar~milanuncios-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"keyword": "iphone","category": "telefonos-moviles","province": "madrid","maxItems": 5,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "ES"}}'
When the Actor completes, read dataset items from the default dataset and the OUTPUT record from the default key-value store.
Use with AI agents through Apify MCP
Scrape Milanuncios Spain listings for "iphone" in category telefonos-moviles, province madrid. Return up to 10 rows with title, EUR price, city, and URL. Keep Residential ES. Stay on public listing fields only.
Point the MCP client at https://mcp.apify.com?tools=khadinakbar/milanuncios-scraper, call khadinakbar/milanuncios-scraper, then read the dataset and OUTPUT.outcome.
Builder's note
I built this Actor on Milanuncios embedded __INITIAL_PROPS__ after live probes showed datacenter exits return Akamai 403 while Residential ES returns 200 with search adListPagination.adList.ads and detail props.ad. In my testing, CSS-only scrapes were brittle across category templates, so the Actor reads the JSON blob first and finishes UPSTREAM_FAILED when every route is unavailable rather than inventing listings. My goal is truthful billing: fetchDetails respects maxItems via a pending-detail queue so enrich runs stay inside the billed row cap.
Connect the workflow
When the next market is Spanish property portals after Milanuncios discovery, continue with Idealista Scraper.
For Fotocasa property research after Milanuncios discovery, feed titles into Fotocasa All-in-One Scraper.
FAQ and responsible use
Is this affiliated with Milanuncios? Milanuncios is a trademark of its owner. This independent Actor is not affiliated with, associated with, or endorsed by Milanuncios or Adevinta.
Is scraping allowed? You are responsible for complying with Milanuncios Terms of Service, robots rules, and applicable laws (including GDPR when processing seller personal data). Use only for legitimate purposes on publicly available data.
Why was my run empty? A valid keyword with zero public matches finishes SUCCEEDED / VALID_EMPTY. Missing input finishes INVALID_INPUT. When every search route is unavailable the outcome is UPSTREAM_FAILED.
Does it return emails or phones? No. Public listing fields and contact flags only — it does not unlock private seller phone numbers.
Open the Actor Issues tab for bugs. This Actor is independent research tooling, not legal, investment, or sourcing advice.