{
  "openapi": "3.0.1",
  "info": {
    "title": "Mercado Livre Scraper — Products, Prices & Sellers",
    "description": "🔥 Up to 30% OFF! Scrape Mercado Livre (Brasil) — no login. Search, listing or product URLs: price, discount, installments, PIX, seller & reputation, rating, reviews, sold qty, 60+ specs, all images. Perfect for price monitoring & market research. ⚡",
    "version": "0.0",
    "x-build-id": "3qkJ9QXeughqgQdbT"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/bgfc97~mercadolivre-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-bgfc97-mercadolivre-scraper",
        "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/bgfc97~mercadolivre-scraper/runs": {
      "post": {
        "operationId": "runs-sync-bgfc97-mercadolivre-scraper",
        "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/bgfc97~mercadolivre-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-bgfc97-mercadolivre-scraper",
        "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": {
          "search": {
            "title": "Search keywords",
            "type": "array",
            "description": "One or more keywords/phrases to search for, e.g. \"iphone 15\", \"tenis nike\". Each keyword is opened as its own search-results page on the chosen country's storefront (a real browser session, not the REST API) and the rendered result cards are scraped, paging automatically until Max items is reached. Leave empty if you only use startUrls / itemUrls.",
            "items": {
              "type": "string"
            }
          },
          "country": {
            "title": "Country",
            "enum": [
              "BR",
              "AR",
              "MX",
              "CL",
              "CO",
              "UY"
            ],
            "type": "string",
            "description": "Which Mercado Livre / Mercado Libre country site to use for keyword search. Only affects `search` (startUrls / itemUrls are opened exactly as given).",
            "default": "BR"
          },
          "sort": {
            "title": "Sort order (search only)",
            "enum": [
              "relevance",
              "price_asc",
              "price_desc"
            ],
            "type": "string",
            "description": "Result ordering for keyword search.",
            "default": "relevance"
          },
          "condition": {
            "title": "Item condition (search only)",
            "enum": [
              "all",
              "new",
              "used"
            ],
            "type": "string",
            "description": "Filter keyword search by item condition.",
            "default": "all"
          },
          "freeShippingOnly": {
            "title": "Free shipping only (search only)",
            "type": "boolean",
            "description": "If enabled, keyword search is filtered to products with free shipping.",
            "default": false
          },
          "minPrice": {
            "title": "Min price (search only)",
            "minimum": 0,
            "type": "integer",
            "description": "Lower bound of the price filter for keyword search, in the country's currency. Leave empty for no lower bound."
          },
          "maxPrice": {
            "title": "Max price (search only)",
            "minimum": 0,
            "type": "integer",
            "description": "Upper bound of the price filter for keyword search, in the country's currency. Leave empty for no upper bound."
          },
          "startUrls": {
            "title": "Listing / category / seller URLs",
            "type": "array",
            "description": "Arbitrary Mercado Livre listing URLs to crawl as result pages — a category page, an official-store page, a seller's listings, or a pre-filtered search URL copied from your browser. Each is scraped and paged automatically up to Max items. For individual product pages use `itemUrls` instead.",
            "items": {
              "type": "string"
            }
          },
          "itemUrls": {
            "title": "Product URLs",
            "type": "array",
            "description": "Full product permalinks to open directly and scrape in full detail, e.g. \"https://www.mercadolivre.com.br/produto-xyz/p/MLB123456\" or any \"...MLB-...\" product URL. Always opened in full regardless of Max items.",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "Overall cap on how many products come out of the search keyword(s) + startUrls combined (does not limit itemUrls, which are always opened in full). The crawler pages through the storefront (~50 products per page) until it reaches this cap.",
            "default": 50
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy configuration. RESIDENTIAL is strongly recommended (and used as a fallback regardless of this setting) — Mercado Livre shows a bot-check / captcha-wall page to datacenter IPs, which a residential IP in a real browser reliably gets past.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          },
          "timeoutSecs": {
            "title": "Page timeout (seconds)",
            "minimum": 15,
            "maximum": 180,
            "type": "integer",
            "description": "How long to wait for each page (search results or product page) to load and render before giving up and retrying with a fresh browser session / proxy IP.",
            "default": 45
          },
          "capsolverApiKey": {
            "title": "CapSolver API key (optional)",
            "type": "string",
            "description": "Optional. If Mercado Livre's bot-check page shows a recognized, sitekey-based widget (Cloudflare Turnstile, hCaptcha, or reCAPTCHA v2), this actor will solve it automatically via CapSolver (capsolver.com, paid, key not included) and continue. If the challenge is a different kind (e.g. a behavioral press-and-hold check with no such widget), or this is left empty, or the solve fails, the actor falls back to retrying with a fresh residential session and — if that still doesn't get through — reports an honest error instead of guessing."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}