{
  "openapi": "3.0.1",
  "info": {
    "title": "Milanuncios (Segunda Mano) Scraper - Ads, Prices, Province",
    "description": "Collect public Milanuncios ads from any category, province or keyword: ad ID, title, price in EUR, province, city, category path, publish time and seller type. No login, no cookies, no personal seller data. Rows are deduplicated; empty and partial inputs are never charged.",
    "version": "0.2",
    "x-build-id": "LfWSCn8vg2sqA0Fzt"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/lanternlab318~milanuncios/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-lanternlab318-milanuncios",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/lanternlab318~milanuncios/runs": {
      "post": {
        "operationId": "runs-sync-lanternlab318-milanuncios",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/lanternlab318~milanuncios/run-sync": {
      "post": {
        "operationId": "run-sync-lanternlab318-milanuncios",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "searchQueries": {
            "title": "Keywords",
            "type": "array",
            "description": "One Milanuncios search keyword per line, in Spanish (bicicleta, iphone 15, sofá chaise longue). Each keyword is searched separately, in the province set below, and its ads are labelled with it. An ad that matches several keywords is returned once and charged once. Leave empty if you give result page URLs instead.",
            "items": {
              "type": "string"
            }
          },
          "searchUrls": {
            "title": "Result page URLs",
            "type": "array",
            "description": "Milanuncios result-list URLs, one per line - open the category, the filter or the search you want on milanuncios.com and copy the address bar: https://www.milanuncios.com/coches-de-segunda-mano-en-madrid/, https://www.milanuncios.com/pisos/, https://www.milanuncios.com/motos-de-segunda-mano/?precio_hasta=3000. Every filter in the URL is kept. A URL copied from page 3 starts collecting at page 3.",
            "items": {
              "type": "string"
            }
          },
          "province": {
            "title": "Province",
            "type": "string",
            "description": "Spanish province slug as Milanuncios spells it in its own /anuncios-en-<slug>/ links: madrid, barcelona, valencia, sevilla, baleares, guipuzcoa, vizcaya, tenerife - lowercase, unaccented Castilian, one word for almost every province. It narrows the keywords above to that province. A slug Milanuncios does not have is reported as url_not_found rather than quietly searched across all of Spain. It does not change the result page URLs, because Milanuncios keeps the province inside the path of each category page and the slug differs per category - put it in the URL itself there. Leave empty to search all of Spain."
          },
          "maxListings": {
            "title": "Max listings",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Upper bound on the listing rows this run writes in total. One Milanuncios result page carries 41-42 ads, so this also decides how many pages per input the run may walk. The input that hits the bound is marked partial with reason \"listing_limit_reached\".",
            "default": 100
          },
          "maxListingsPerInput": {
            "title": "Max listings per keyword or URL",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Optional share of the run budget for one keyword or URL. Leave it empty and the first input may spend the whole of maxListings, which is what a run with a single input wants; set it when you give several inputs and want each of them collected. An input that reaches its share is marked partial with reason \"listing_limit_reached\" and the next input still gets its own."
          },
          "maxUpstreamRequests": {
            "title": "Max Milanuncios requests",
            "minimum": 1,
            "maximum": 400,
            "type": "integer",
            "description": "Hard ceiling on the HTTP requests this run sends to Milanuncios, counting every result page and every retry. Left empty, the Actor works a ceiling out from your inputs and maxListings. At the ceiling collection stops - the inputs not reached are written with partialReason \"upstream_request_cap\" and the run then ends normally."
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "The proxy the requests to Milanuncios go through. The default is Apify Proxy residential with a Spanish exit IP, which is what this Actor is measured on: Milanuncios answers a datacenter IP with a 403 \"Pardon Our Interruption\" interstitial, and a Spanish residential IP with the fully rendered result list. Changing this is likely to make runs report partialReason \"blocked\".",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "ES"
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}