milanuncios API & Scraper
The milanuncios API returns Spain's largest classifieds site as clean JSON in four actions: search for the marketplace in any category, cars/search for cars, off-roaders, classic cars, motorbikes, vans, trucks, caravans and campervans, real_estate/search for flats, houses, chalets, premises, offices, garages and more for sale, rent, flat-share or holiday rent, and listing for the full record of any ad.
🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.
Every row carries the price, a flag when the seller published no price, the earlier price and the percentage when it was lowered, region, province and city, private or professional seller, whether the ad is a paid highlighted (destacado) ad, whether it is reserved, condition, whether the seller ships, the first publication and the last renewal date, the photos and the description. Car rows add make, year, mileage, fuel, gearbox, horsepower, doors, colour, environmental label and warranty, with the cash price and the dealer's financed price apart; property rows add bedrooms, bathrooms, m², price per m², floor, energy certificate, heating and features such as lift, terrace or pool. listing adds the shipping options with each carrier's price, the seller's member-since date and review count, and every published attribute. Every filter was checked live to narrow the result and every returned row to match it: keyword, category, offers or wanted ads, price, private or professional, condition, shipping, price dropped, region, province, city, make, model, year, mileage, fuel, gearbox, horsepower, property type, bedrooms, bathrooms and surface. Provinces and regions are given by name (madrid, a coruña, comunidad valenciana) or by id. On 16 ads in 8 categories, the title, price, seller type, photo count, province, city, reserved flag and publication date matched each ad's own page. No milanuncios account, no browser - one ReefAPI key and the standard { ok, data, meta, error } envelope.
Five milanuncios prices that are not simply a price
A milanuncios ad can show 0 € when the seller set no price, carry a cash and a financed price, sit at the top of a page because it paid to, have been lowered to nothing, or slip into a price filter it does not match. Each looks like an ordinary number. This engine labels every one.
| Ad (category) | price | flag | the catch |
|---|---|---|---|
| Electrician and plumber, Servicios | null | price_not_published: true | milanuncios returns 0 € when no price was set - 67 of 100 service ads on 2026-09-16. Returned as null, never 0 |
| 2023 hatchback from a dealer, Coches | 14990 | financed_price: 14990, price_includes_taxes: true | Dealers publish a cash price and a price with their financing; price is always the cash price |
| E-bike, Bicicletas | 1245 | previous_price: 1345, price_drop_pct: 7 | The seller lowered the price; the earlier price and the site's own percentage come with the row |
| Swap offer for a phone, Telefonía | null | previous_price: 90 | Lowered from 90 € to no price at all and still listed as a price drop; the percentage is left out |
| Flat for rent in Barcelona province, max 1,200 € | - | dropped_outside_price_range: 1 | An ad with no published price came back inside the price filter; rows outside the range you asked for are removed and counted |
Measured on 2026-09-16. Paid highlighted ads open every page - all 100 rows of one car page that day - and are flagged is_highlighted rather than removed, because they do match the search. Classified ads come and go - the rows above are dated.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/milanuncios/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "bicicleta"
}
}{
"ok": true,
"meta": {
"api": "milanuncios",
"endpoint": "search",
"mode": "live",
"latency_ms": 1206.2,
"record_count": 30,
"bytes": 97400,
"cache_hit": false,
"stop_reason": "limit_reached"
},
"data": {
"listings": [
{
"ad_id": "614303042",
"title": "VENTA O CAMBIO 2 BICIS CARRETERA/MTB",
"url": "https://www.milanuncios.com/bicicletas-carretera-de-segunda-mano/venta-o-cambio-2-bicis-carretera-mtb-614303042.htm",
"category_id": 2046,
"category": "Bicicletas de carretera",
"category_path": [
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]"
},
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]"
},
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]"
}
],
"transaction": "offer",
"price": 1190,
"currency": "EUR",
"price_not_published": false,
"price_includes_taxes": null,
"financed_price": null,
"previous_price": null,
"price_drop_pct": null,
"published_at": "2026-09-11T19:29:47Z",
"renewed_at": "2026-09-16T14:31:47Z",
"updated_at": "2026-09-16T13:33:27Z",
"is_renewed": true,
"location": {
"region_id": 57,
"region": "Comunidad Valenciana",
"province_id": 3,
"province": "Alicante",
"city_id": 2932,
"city": "Valverde Bajo",
"latitude": null,
"longitude": null,
"coordinates_withheld": false,
"extra_provinces": []
},
"seller": {
"type": "private",
"seller_id": "37916652",
"name": "diego",
"name_withheld": false
},
"is_highlighted": true,
"is_reserved": false,
"condition": "good",
"condition_label": "en buen estado",
"shipping": {
"shippable": false,
"type": "maexpress",
"package_weight": "NONE"
},
"contact_methods": {
"chat": true,
"form": true,
"phone": false
},
"syndicated_from": null,
"attributes": [],
"image_count": 9,
"images": [
"https://images.milanuncios.com/api/v1/ma-ad-media-pro/images/a38e4aa1-c1a0-4593-a6e1-ef65fc0ea0dc",
"https://images.milanuncios.com/api/v1/ma-ad-media-pro/images/f7e3c0cf-6fe0-428d-938e-e65fb957f9d1",
"https://images.milanuncios.com/api/v1/ma-ad-media-pro/images/912c8663-ee63-4d6d-a316-f3ea75d4a999"
],
"thumbnail": "https://images.milanuncios.com/api/v1/ma-ad-media-pro/images/a38e4aa1-c1a0-4593-a6e1-ef65fc0ea0dc",
"description": "VENDO O CAMBIO 2 BICIS GIANT (CARRETERA Y MTB) POR GRAVEL O BIKEPACKING\n\nPrecio por ambas juntas: 1.190 €. Posibilidad de vender por separado (precio a negociar).\nAmbas son Talla M (para 1,70m a 1,80m). Listo para rodar.\n\nGIANT ANTHEM X (MTB)• Ruedas: 26\"• Doble susp: RockShox Reba• Grupo: SRAM X5/X7 (3x10v)• Frenos: Avid Elixir 1• Estado: <2000 km, impecable.\n\nGIANT TCR ADVANCED (Carretera)• Cuadro: Carbono• Grupo: Shimano Ultegra 11v• Frenos: Puentes Ultegra• Ruedas: Giant PR-2 / Continental• Sillín: Spec Toupé\nMecánica al día en ambas. Entrega en mano."
},
{
"ad_id": "600352398",
"title": "HONDA SCOOPY SH125 Versión 2005 - 2007",
"url": "https://www.milanuncios.com/scooters-de-segunda-mano/honda-scoopy-sh125-version-2005-2007-600352398.htm",
"category_id": 23,
"category": "Scooters",
"category_path": [
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]"
},
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]"
},
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]"
}
],
"transaction": "offer",
"price": 1500,
"currency": "EUR",
"price_not_published": false,
"price_includes_taxes": false,
"financed_price": null,
"previous_price": null,
"price_drop_pct": null,
"published_at": "2026-06-17T10:06:59Z",
"renewed_at": "2026-09-16T14:27:52Z",
"updated_at": "2026-09-16T13:29:32Z",
"is_renewed": true,
"location": {
"region_id": 54,
"region": "Cataluña",
"province_id": 8,
"province": "Barcelona",
"city_id": 13,
"city": "Barcelona",
"latitude": null,
"longitude": null,
"coordinates_withheld": false,
"extra_provinces": []
},
"seller": {
"type": "professional",
"seller_id": "239072753",
"name": "Motos Ratera Servicio Técnico",
"name_withheld": false
},
"is_highlighted": true,
"is_reserved": false,
"condition": null,
"condition_label": null,
"shipping": null,
"contact_methods": {
"chat": false,
"form": true,
"phone": true
},
"syndicated_from": "was",
"attributes": [
{
"key": "[trimmed-depth]",
"label": "[trimmed-depth]",
"value": "[trimmed-depth]",
"value_label": "[trimmed-depth]"
},
{
"key": "[trimmed-depth]",
"label": "[trimmed-depth]",
"value": "[trimmed-depth]",
"value_label": "[trimmed-depth]"
},
{
"key": "[trimmed-depth]",
"label": "[trimmed-depth]",
"value": "[trimmed-depth]",
"value_label": "[trimmed-depth]"
}
],
"image_count": 8,
"images": [
"https://images.milanuncios.com/api/v1/ma-ad-media-pro/images/c62694a4-a199-4806-9496-9b1a8656a6d4",
"https://images.milanuncios.com/api/v1/ma-ad-media-pro/images/75053558-1e7f-43bd-b6ad-9b6b65013d6c",
"https://images.milanuncios.com/api/v1/ma-ad-media-pro/images/184dfd87-78ad-489b-9c94-ecd393fb434d"
],
"thumbnail": "https://images.milanuncios.com/api/v1/ma-ad-media-pro/images/c62694a4-a199-4806-9496-9b1a8656a6d4",
"description": "Scooter ideal para ciudad y cercanías, ágil, ligero y de bajo consumo y mantenimiento.\nTotalmente revisada y garantía de 1 año por escrito.\nInyección electrónica.\nMuy buen estado. Tiene maletero bajo el sillín. Antirrobo tipo pitón al manillar.\nSe puede conducir con carnet de coche B según normativa actual.\n13,7c.v.\nITV vigente hasta abril 2028. Etiqueta medioambiental C Verde sin restricciones de movilidad en las grandes ciudades.\n\nFinanciamos de 12 a 36 meses con o sin entrada (69/mes en 24 meses). También aceptamos pago con VISA.\n\nAceptamos cambios por otras motocicletas. Aceptamos cambios ",
"vehicle": {
"make": null,
"year": 2005,
"mileage_km": 50000,
"fuel": "gasoline",
"gearbox": null,
"power_hp": null,
"doors": null,
"seats": null,
"colour": "blancocrema",
"environmental_label": null,
"warranty": null
}
},
{
"ad_id": "608688880",
"title": "YAMAHA XMAX 250 ABS",
"url": "https://www.milanuncios.com/scooters-de-segunda-mano/yamaha-xmax-250-abs-608688880.htm",
"category_id": 23,
"category": "Scooters",
"category_path": [
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]"
},
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]"
},
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]"
}
],
"transaction": "offer",
"price": 1350,
"currency": "EUR",
"price_not_published": false,
"price_includes_taxes": false,
"financed_price": null,
"previous_price": null,
"price_drop_pct": null,
"published_at": "2026-08-04T18:28:43Z",
"renewed_at": "2026-09-16T14:27:47Z",
"updated_at": "2026-09-16T13:29:27Z",
"is_renewed": true,
"location": {
"region_id": 54,
"region": "Cataluña",
"province_id": 8,
"province": "Barcelona",
"city_id": 13,
"city": "Barcelona",
"latitude": null,
"longitude": null,
"coordinates_withheld": false,
"extra_provinces": []
},
"seller": {
"type": "professional",
"seller_id": "239072753",
"name": "Motos Ratera Servicio Técnico",
"name_withheld": false
},
"is_highlighted": true,
"is_reserved": false,
"condition": null,
"condition_label": null,
"shipping": null,
"contact_methods": {
"chat": false,
"form": true,
"phone": true
},
"syndicated_from": "was",
"attributes": [
{
"key": "[trimmed-depth]",
"label": "[trimmed-depth]",
"value": "[trimmed-depth]",
"value_label": "[trimmed-depth]"
},
{
"key": "[trimmed-depth]",
"label": "[trimmed-depth]",
"value": "[trimmed-depth]",
"value_label": "[trimmed-depth]"
},
{
"key": "[trimmed-depth]",
"label": "[trimmed-depth]",
"value": "[trimmed-depth]",
"value_label": "[trimmed-depth]"
}
],
"image_count": 7,
"images": [
"https://images.milanuncios.com/api/v1/ma-ad-media-pro/images/2421b86c-26dc-4032-8b74-f6ed0b73642c",
"https://images.milanuncios.com/api/v1/ma-ad-media-pro/images/3320d806-63e1-4752-8af9-001723207187",
"https://images.milanuncios.com/api/v1/ma-ad-media-pro/images/b1aed3c7-f3f3-416f-bc5c-ee97c62031a4"
],
"thumbnail": "https://images.milanuncios.com/api/v1/ma-ad-media-pro/images/2421b86c-26dc-4032-8b74-f6ed0b73642c",
"description": "Scooter ideal para ciudad y media distancia, ágil, ligero y de bajo consumo y mantenimiento.\nTotalmente revisada y garantía de 1 año por escrito.\nInyección electrónica, refrigeración líquida y sistema de frenada ABS.\nMuy buen estado. Tiene maletero bajo el sillín con capacidad para dos cascos integrales. Antirrobo tipo pitón al manillar.\nItv hasta abril 2027, 20c.v.\nEtiqueta medioambiental C Verde sin restricciones de movilidad en las grandes ciudades.\n\nFinanciamos de 12 a 36 meses con o sin entrada (62/mes en 24 meses). También aceptamos pago con VISA.\n\nAceptamos cambios por otras motocicleta",
"vehicle": {
"make": null,
"year": 2013,
"mileage_km": 75000,
"fuel": "gasoline",
"gearbox": null,
"power_hp": null,
"doors": null,
"seats": null,
"colour": "negro",
"environmental_label": null,
"warranty": null
}
}
],
"count": 30,
"total": 10000,
"total_is_lower_bound": true,
"highlighted_count": 16,
"duplicates_dropped": 0,
"dropped_outside_price_range": 0,
"sponsored_dropped": 0,
"page": 1,
"limit": 30,
"sort_applied": "highlighted_first_then_newest_renewal",
"has_more": true
}
}What the milanuncios API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search milanuncios, Spain's largest classifieds site, by keyword and/or category: price (unpublished prices labelled, price drops with the earlier price), region, province and city, private or professional seller, condition, shipping, highlighted (destacado) flag, reserved flag, first publication and last renewal dates, attributes, images and description. Filter by category, price, location, seller type, condition, shipping available, price dropped, offers or wanted ads. | Price-intelligence teams call search to search milanuncios, Spain's largest classifieds site, by keyword and/or category. | query, category, transaction, condition, shippable, ... |
| cars/search | Search milanuncios motor ads — cars, off-roaders, classic cars, motorcycles, vans, trucks, caravans, campervans and quads: cash price (taxes included or not), financed price, make, year, mileage, fuel, gearbox, horsepower, doors, colour, environmental label, warranty, dealer or private seller, province and city, images. Filter by vehicle type, make, model, year, mileage, fuel, gearbox, power, price, seller type and location. | Classifieds aggregators call cars/search to search milanuncios motor ads. | vehicle_type, query, make, model, year_min, ... |
| real_estate/search | Search milanuncios real estate for sale, rent, flat-share or holiday rent — flats, apartments, houses, chalets, penthouses, studios, lofts, commercial premises, offices, warehouses, rural estates, garages, storage rooms and buildings: price or monthly rent, bedrooms, bathrooms, m², price per m², floor, energy certificate, heating, features (lift, terrace, pool…), agency or private owner, region, province and city, images. Filter by transaction, property type, price, bedrooms, bathrooms, surface, seller type and location. | Resale and arbitrage tools call real_estate/search to search milanuncios real estate for sale, rent, flat-share or holiday rent. | transaction, property_type, query, bedrooms_min, bedrooms_max, ... |
| listing | The full milanuncios ad by id or URL, in any category: title, price (unpublished prices labelled; cars: taxes included or not and financed price), description, all images, category path, condition, reserved flag, first publication and last renewal, attributes, vehicle or property details, shipping (envío) with carriers and their prices, contact methods, and the seller — type, member since, rating and review count, city; a professional's business name, a private seller's name withheld. | Lead-generation teams call listing to get the full milanuncios ad by id or URL, in any category. | ad_id, include_pii, max_rotations |
Call search from your stack
curl -X POST https://api.reefapi.com/milanuncios/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"bicicleta"}'import requests
r = requests.post(
"https://api.reefapi.com/milanuncios/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "bicicleta"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/milanuncios/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "bicicleta"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.milanuncios.search with {"query":"bicicleta"}.Who uses this API and why
- Car dealers and valuation tools track used-car cash and financed prices, price drops and mileage by make, model, year, fuel and province with cars/search.
- Property analysts follow asking rents and sale prices, price per m², bedrooms and surface by province and city, across flats, houses, premises and garages, with real_estate/search.
- Resale and pricing tools compare second-hand prices by condition and shipping while keeping unpublished prices out of the averages.
- Market-mapping teams measure how much of a category is professional versus private and how much is paid highlighting, without collecting private sellers' personal data.
Questions developers ask before integrating
Which parts of milanuncios does the API cover?
The whole site in three search actions. search covers every marketplace category with milanuncios' own category ids - 1,290 'iphone 13' ads on 2026-09-16. cars/search covers cars, off-roaders, classic cars, motorbikes, vans, trucks, caravans, campervans and quads - 4,535 SEAT Ibiza that day. real_estate/search covers 14 property types for sale and rent plus flat-shares and holiday rentals - 2,773 flats for rent in Barcelona province. listing returns the full ad from any category. milanuncios is Spain only; prices are in EUR.
Is a private seller's name or phone number included?
No. A private seller's name, avatar and postcode are left out, and so are the map coordinates milanuncios attaches to private property ads - the region, province and city stay. milanuncios does not put phone numbers in the ad data; the API says whether the seller accepts chat, a contact form or calls. For professional sellers the business name is returned.
What does a price of null mean?
That the seller published no price. milanuncios sends 0 € for these ads - services, wanted ads, 'a consultar' - and the API returns null with price_not_published true, so they never drag an average down. A price that was lowered carries previous_price and price_drop_pct. Car dealers' ads carry the cash price in price and the financed price in financed_price.
Are paid or highlighted ads marked?
Yes. milanuncios places paid highlighted (destacado) ads at the top of every results page. They match your search, so they stay in the results, each with is_highlighted true, and every page reports highlighted_count. A separate paid top-ad list, when milanuncios returns one, is kept out of the results and counted; include_sponsored returns it apart.
Do the filters really narrow the results?
Each one was checked live on 2026-09-16: the filtered total had to be smaller than the unfiltered one, and every returned row had to match. For 'iphone 13' (1,290 ads): private sellers 1,002, like new 322, shipped 536, price dropped 46, Madrid province 163. For SEAT Ibiza (4,535): 2015 to 2018 659, under 80,000 km 1,329, diesel 1,702, automatic 233. For flats for rent in Barcelona province (2,773): 3 bedrooms or more 868, 60 to 90 m² 954.
Can I sort by price or date?
No. milanuncios returns its own order - paid highlighted ads first, then the most recently renewed ads - and the API says so in sort_applied. Use price_min and price_max to narrow by price instead. Pages go up to the 8,200th result of a search; narrow the search to see further.
Why is an ad from another province in my province search?
Some dealers advertise in more provinces than the one they are in, and milanuncios includes them in each. The row keeps the dealer's own province and lists the others in location.extra_provinces, so you can keep or drop them.
What does milanuncios not publish?
Phone numbers and e-mail addresses. A price for services and wanted ads. Reviews for most sellers - 1 of 16 checked ads had one. The car model as a separate field (it is in the title; the make comes separately). Year and mileage in a motorbike's full ad record - they are on its search row. A sold status: removed ads return NOT_FOUND.
What is the milanuncios API?
milanuncios API is a ReefAPI endpoint group for spain's largest classifieds: marketplace, cars and real estate as json. It returns live JSON through POST requests under /milanuncios/v1.
Is the milanuncios API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. milanuncios calls use the same shared credit balance as every other ReefAPI engine.
Do I need a milanuncios login or account?
No login to milanuncios is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the milanuncios data?
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the milanuncios API use?
milanuncios actions currently cost 1 credit per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.
Can I call milanuncios from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call milanuncios actions with the same key, credit pool and JSON envelope used by normal REST requests.