{
  "openapi": "3.0.1",
  "info": {
    "title": "Mercado Libre Scraper: Cars, Property & Category Alerts",
    "description": "Mercado Libre scraper for car, property and category pages in Mexico, Argentina, Colombia (TuCarro), Chile (Portal Inmobiliario), Uruguay and Brazil. Monitor new listings, price drops and gone ones: a Mercado Libre sold items tracker with sell-through rate and median price. No login.",
    "version": "1.0",
    "x-build-id": "0SyFL0SPGiXMwfpgz"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/accountable_eel~mercadolibre-listing-lookup/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-accountable_eel-mercadolibre-listing-lookup",
        "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/accountable_eel~mercadolibre-listing-lookup/runs": {
      "post": {
        "operationId": "runs-sync-accountable_eel-mercadolibre-listing-lookup",
        "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/accountable_eel~mercadolibre-listing-lookup/run-sync": {
      "post": {
        "operationId": "run-sync-accountable_eel-mercadolibre-listing-lookup",
        "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",
        "required": [
          "searches"
        ],
        "properties": {
          "searches": {
            "title": "Mercado Libre pages to watch (paste a category or vertical URL, or a make / path / category slug)",
            "type": "array",
            "description": "One per line. Paste a car, property or category page URL from Mercado Libre, TuCarro or Portal Inmobiliario (filters included), or type a make like \"nissan\" and pick the country and meaning below. Keyword-search links (lista. / listado.) are not supported: Mercado Libre blocks automated keyword search. Accepted formats: https://autos.mercadolibre.com.mx/nissan, https://www.portalinmobiliario.com/arriendo/departamento/providencia-metropolitana, https://www.mercadolivre.com.br/c/celulares-e-telefones, toyota. You're only charged for the ones we actually find — a miss costs nothing.",
            "items": {
              "type": "string"
            }
          },
          "testRun": {
            "title": "Try it first — only process the first 5",
            "type": "boolean",
            "description": "Turn this on to test your input on a small sample before running the full list. Turn it off to process everything.",
            "default": false
          },
          "onlyFound": {
            "title": "Hide rows with no result",
            "type": "boolean",
            "description": "Only keep rows where something was actually found. Misses are always free, whether or not you show them here.",
            "default": false
          },
          "includeKeywords": {
            "title": "Only keep rows containing",
            "type": "array",
            "description": "Optional. Only keep results that mention at least one of these words (e.g. a job title, a city, a product name). Leave empty to keep everything.",
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Skip rows containing",
            "type": "array",
            "description": "Optional. Drop any result that mentions one of these words. Leave empty to skip nothing.",
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "Stop after this many results",
            "minimum": 1,
            "type": "integer",
            "description": "Optional. Stop the run once this many results have been found — useful for a quick, cheap sample. Leave blank for no limit."
          },
          "country": {
            "title": "Country",
            "enum": [
              "mx",
              "ar",
              "co",
              "cl",
              "uy",
              "br"
            ],
            "type": "string",
            "description": "Used for lines that are not links. A pasted Mercado Libre URL always uses its own country. Brazil supports category pages only: Mercado Livre's Brazil car and property pages sit behind its bot check.",
            "default": "mx"
          },
          "vertical": {
            "title": "What a plain line means",
            "enum": [
              "cars",
              "property",
              "category"
            ],
            "type": "string",
            "description": "Used for lines that are not links. Cars turns \"nissan\" into https://autos.mercadolibre.com.mx/nissan (TuCarro in Colombia). Property turns a path into a Portal Inmobiliario (Chile) or inmuebles.mercadolibre page. Category turns a slug into https://www.mercadolivre.com.br/c/<slug>. Pasting the exact page URL from your browser, filters included, is always the most precise option.",
            "default": "cars"
          },
          "maxListingsPerSearch": {
            "title": "Most listings to return per search",
            "type": "integer",
            "description": "Mercado Libre shows 48 listings per page; this actor follows the site's own next-page link until it reaches your limit (max 1000). You pay per listing returned, so this is also your budget control.",
            "default": 100
          },
          "sort": {
            "title": "Sort",
            "enum": [
              "relevance",
              "price_asc",
              "price_desc",
              "newest"
            ],
            "type": "string",
            "description": "Applied by following the page's own sort link. Car pages offer price sorts only; if a page doesn't offer the sort you chose, the default order is kept and the log says so.",
            "default": "relevance"
          },
          "publishedToday": {
            "title": "Published today filter (\"Publicados hoy\")",
            "enum": [
              "auto",
              "always",
              "never"
            ],
            "type": "string",
            "description": "Mercado Libre has no reliable newest-first sort on car pages, but it does have a \"Publicados hoy\" filter. With monitoring on, Auto applies it so each run reads today's new listings instead of the most relevant ones. Schedule every few hours so listings published late in the day are caught before midnight (Mercado Libre's day, in the country's time zone). With \"Alert on gone listings\" on, Auto reads the whole page instead: a listing leaves the \"today\" view at midnight whether or not it sold, so the sold signal needs the full page.",
            "default": "auto"
          },
          "residentialFallback": {
            "title": "Retry on a residential IP when Mercado Libre shows its bot check",
            "type": "boolean",
            "description": "On by default. Mercado Libre sends some pages (for example the Mexico car pages) to an \"account verification\" check when they are requested from a data-centre IP. With this on, those pages are fetched again through Apify's residential proxy in the page's own country, which is slower and costs a little more per page (still well inside the listing price). Turn it off to never use residential; affected pages then come back as BLOCKED rows, free.",
            "default": true
          },
          "minPrice": {
            "title": "Minimum price",
            "type": "integer",
            "description": "Optional, in the listing's own currency. Applied client-side. Portal Inmobiliario mixes UF (CLF) and peso (CLP) prices in one search, so check the currency column when you set this."
          },
          "maxPrice": {
            "title": "Maximum price",
            "type": "integer",
            "description": "Optional, in the listing's own currency. Applied client-side. Leave empty for no maximum."
          },
          "deltaMode": {
            "title": "Only return results that are new, or dropped in price, since the last run",
            "type": "boolean",
            "description": "Turns this actor into a monitor. A listing counts as new when its Mercado Libre item ID has not been returned by a previous run of the same watchlist, and as a price drop when its price falls since it was last seen (see \"Minimum price drop\" below). Already-seen, unchanged listings are dropped before you are billed, so a quiet run costs only the run fee. With monitoring on, the actor also applies Mercado Libre's own \"Publicados hoy\" (published today) filter where the page offers it; see \"Published today filter\" below. Tick \"Alert on gone listings\" to also get the listings that disappeared from the page (delisted, most often sold) and a sell-through rate. The first run has nothing to compare against, so (unless \"Seed silently\" is on) it returns everything and remembers it.",
            "default": false
          },
          "deltaName": {
            "title": "Watchlist name (optional)",
            "type": "string",
            "description": "Leave empty and we derive one from this run's search settings, so two schedules with different settings keep separate memories. Type your own name to keep one memory across a settings change, or to have two schedules share one.",
            "default": ""
          },
          "alertOnNew": {
            "title": "Alert on new listings",
            "type": "boolean",
            "description": "On by default. Turn off to have this watchlist report price drops only, not brand-new listings.",
            "default": true
          },
          "alertOnPriceDrop": {
            "title": "Alert on price drops",
            "type": "boolean",
            "description": "On by default. Turn off to have this watchlist report new listings only, ignoring price changes on ones you've already seen.",
            "default": true
          },
          "alertOnGone": {
            "title": "Alert on gone listings (sold signal)",
            "type": "boolean",
            "description": "Off by default. When on, a listing this watchlist saw before and that is no longer on the page comes back as a row with changeType \"gone\", its last price, first and last sighting and days listed. gonePresumedSold is true when it was seen on 2+ runs in a row and priced at or under the page's median. Gone means delisted: most often sold, sometimes withdrawn or paused. Mercado Libre pages are sorted by relevance, so a listing is only called gone when the whole page was read in one run (pick a page narrow enough to fit under \"Most listings to return\", max 1000). Gone rows are ordinary listing rows, billed like any other; gone listings are counted for the sell-through rate even when this is off.",
            "default": false
          },
          "minPriceDropPct": {
            "title": "Minimum price drop to count as an alert (%)",
            "type": "integer",
            "description": "A listing must drop by at least this percentage since it was last seen to be reported as a price-drop.",
            "default": 5
          },
          "skipFirstRun": {
            "title": "Seed silently (no rows on the first run)",
            "type": "boolean",
            "description": "Instead of returning every current listing as \"new\" the first time a watchlist runs, this banks them silently and starts alerting from the second run on. Stops a fresh watchlist from spamming a hundred messages to your webhook on day one.",
            "default": false
          },
          "columns": {
            "title": "Which columns do you want?",
            "type": "array",
            "description": "Choose which pieces of information to include in each result row. All are included by default.",
            "items": {
              "type": "string",
              "enum": [
                "searchQuery",
                "searchUrl",
                "country",
                "pageType",
                "publishedTodayOnly",
                "sortApplied",
                "viaResidentialProxy",
                "listingCount",
                "totalAvailable",
                "truncated",
                "newCount",
                "priceDropCount",
                "goneCount",
                "sellThroughRate",
                "medianPrice",
                "medianPriceCurrency",
                "monitorStatus",
                "listings",
                "listingId",
                "title",
                "price",
                "currency",
                "isPriceFrom",
                "vertical",
                "listingType",
                "isOfficialStore",
                "officialStoreName",
                "year",
                "km",
                "rooms",
                "bathrooms",
                "areaM2",
                "attributes",
                "location",
                "imageUrl",
                "changeType",
                "isNew",
                "previousPrice",
                "priceDropPct",
                "firstSeenAt",
                "lastSeenAt",
                "daysListed",
                "url"
              ],
              "enumTitles": [
                "Search (your input line)",
                "Mercado Libre page read",
                "Country",
                "Page type (search / category-deals)",
                "Filtered to \"Publicados hoy\"",
                "Sort applied",
                "Fetched through a residential IP",
                "Listings returned",
                "Total matching on Mercado Libre",
                "More results were available",
                "New listings this run",
                "Price drops this run",
                "Gone since last run (delisted, most often sold)",
                "Sell-through rate, watchlist lifetime (0-1)",
                "Median price of the page (most common currency)",
                "Currency of the median price",
                "Monitoring status (quiet / seeded runs)",
                "All listings found (full list)",
                "Mercado Libre item ID (MLM..., MLB...)",
                "Title",
                "Price",
                "Currency",
                "Price is a \"from\" price",
                "Vertical (cars / property / category)",
                "Listing type (Mercado Libre domain)",
                "Official store",
                "Official store name",
                "Year (cars)",
                "Kilometres (cars)",
                "Rooms / bedrooms (property)",
                "Bathrooms (property)",
                "Area m² (property)",
                "Attributes as shown on the card",
                "Location",
                "Image",
                "new / price-drop / gone / seen",
                "Is this listing new?",
                "Previous price",
                "Price drop %",
                "First seen on a run",
                "Last seen on a run",
                "Days listed (first to last seen)",
                "Listing link"
              ]
            },
            "default": [
              "searchQuery",
              "searchUrl",
              "country",
              "pageType",
              "publishedTodayOnly",
              "sortApplied",
              "viaResidentialProxy",
              "listingCount",
              "totalAvailable",
              "truncated",
              "newCount",
              "priceDropCount",
              "goneCount",
              "sellThroughRate",
              "medianPrice",
              "medianPriceCurrency",
              "monitorStatus",
              "listings",
              "listingId",
              "title",
              "price",
              "currency",
              "isPriceFrom",
              "vertical",
              "listingType",
              "isOfficialStore",
              "officialStoreName",
              "year",
              "km",
              "rooms",
              "bathrooms",
              "areaM2",
              "attributes",
              "location",
              "imageUrl",
              "changeType",
              "isNew",
              "previousPrice",
              "priceDropPct",
              "firstSeenAt",
              "lastSeenAt",
              "daysListed",
              "url"
            ]
          },
          "expandRows": {
            "title": "One row per listing (recommended) — turn off for one row per search instead",
            "type": "boolean",
            "description": "When on, each listing found gets its own row instead of being grouped under its search. You're still only charged once per search, no matter how many rows it produces.",
            "default": true
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Parallel requests. Keep conservative — this target has no browser fallback, so getting blocked costs more than slow-and-steady.",
            "default": 5
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy config. Residential recommended for anti-bot-sensitive targets.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}