{
  "openapi": "3.0.1",
  "info": {
    "title": "MercadoLibre Scraper: Products, Reviews, Q&A, Sellers",
    "description": "Scrape MercadoLibre and Mercado Livre across all 9 LATAM marketplaces: Mexico, Argentina, Brazil, Chile, Colombia, Peru, Uruguay, Ecuador, Dominican Republic. Pull products (title, price, brand, specs, variations), reviews, buyer Q&A, and seller catalogs.",
    "version": "0.0",
    "x-build-id": "E797BV9HyhYFUX5cy"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/sourabhbgp~mercadolibre-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-sourabhbgp-mercadolibre-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/sourabhbgp~mercadolibre-scraper/runs": {
      "post": {
        "operationId": "runs-sync-sourabhbgp-mercadolibre-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/sourabhbgp~mercadolibre-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-sourabhbgp-mercadolibre-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": {
          "mode": {
            "title": "Mode",
            "enum": [
              "reviews",
              "product",
              "search",
              "seller"
            ],
            "type": "string",
            "description": "What to scrape. 'reviews' returns paginated reviews for one product across all 9 LATAM marketplaces. 'product' returns full PDP fields (title, price, brand, attributes, variations, seller, inline reviews, Q&A). 'search' returns paginated keyword results. 'seller' returns a seller's full catalog. Product/search/seller use the Apify residential proxy automatically; reviews works from datacenter.",
            "default": "reviews"
          },
          "country": {
            "title": "Country",
            "enum": [
              "MX",
              "AR",
              "BR",
              "EC",
              "DO",
              "CL",
              "CO",
              "PE",
              "UY"
            ],
            "type": "string",
            "description": "MercadoLibre country marketplace. All nine Latin-American sites are supported across every mode (reviews, product, search, seller). The selected country routes the residential proxy to in-country IPs for product/search/seller modes and selects the right TLD for built URLs. Runs that find no records for a country are not charged per-result.",
            "default": "MX"
          },
          "productUrls": {
            "title": "Product URLs",
            "type": "array",
            "description": "One or more MercadoLibre product URLs. Used by 'reviews' and 'product' modes. Accepts both catalog (.../p/MLM…) and article (articulo.*/MLM-…) URLs. The prefilled example is an iPhone PDP on MLM.",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max Items",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Maximum items to return. 0 = no limit. Search: products; Product: PDPs; Reviews: reviews PER PRODUCT, so 3 product URLs at 50 returns up to 150 rows (the practical ceiling for a very popular product is ~900, because MeLi hard-caps single-bucket pagination at offset 300); Seller: items per seller.",
            "default": 50
          },
          "reviewRating": {
            "title": "Review Rating Filter",
            "enum": [
              "all",
              "1",
              "2",
              "3",
              "4",
              "5"
            ],
            "type": "string",
            "description": "In 'reviews' mode, scrape only reviews with this star rating. Leave it on 'all' (the default) to sweep every rating and sort bucket and recover the deepest set of unique reviews for the product. Picking a single rating returns that bucket only, which is a much smaller set.",
            "default": "all"
          },
          "reviewOrder": {
            "title": "Review Sort Order",
            "enum": [
              "relevance",
              "dateCreated"
            ],
            "type": "string",
            "description": "Sort order for reviews. 'relevance' is MeLi's helpfulness-ranked default; 'dateCreated' returns newest first. This applies when 'Review Rating Filter' is set to a specific rating (1-5). When the filter is 'all', the deep sweep already runs both sort orders in parallel, so it returns the full result set either way and this setting has no effect on how much you get.",
            "default": "relevance"
          },
          "searchQuery": {
            "title": "Search Query",
            "type": "string",
            "description": "Keyword to search. Only used in 'search' mode when no Start URLs are provided."
          },
          "scrapeProductDetails": {
            "title": "Scrape Product Details For Each Result",
            "type": "boolean",
            "description": "In 'search' mode, open every result's product page and add the detail fields to the same row: full description, condition, complete image gallery, seller name and reputation, catalog product ID, product attributes and category breadcrumbs. Off by default. Turning it on adds one page fetch per result, so runs take longer, but the number of results and the price per result stay the same.",
            "default": false
          },
          "sellerUrls": {
            "title": "Seller URLs",
            "type": "array",
            "description": "One or more seller URLs. Accepts: _CustId_ listings (https://listado.mercadolibre.com.mx/_CustId_95428411), brand stores (https://www.mercadolibre.com.mx/tienda/phone-depot), BR brand stores (https://www.mercadolivre.com.br/loja/samsung), independent eshops (.../pagina/<slug>), or a bare numeric custId (95428411). Plain nicknames are not accepted. Each seller produces one profile row (with followers, dates, banner, brand, corridor menu) plus per-item catalog rows.",
            "items": {
              "type": "string"
            }
          },
          "includeSellerProfile": {
            "title": "Include Seller Profile Row",
            "type": "boolean",
            "description": "When enabled, emits one summary row per seller before the catalog rows. Profile carries followers count, date created, tags, banner and logo URLs, free trial dates, brand info, corridor menu, and compliance flags (moderations, debts, restrictions). Argentina returns catalog items only, no storefront profile row.",
            "default": true
          },
          "includeFeaturedItems": {
            "title": "Include Featured Corridor Items",
            "type": "boolean",
            "description": "Optional. When enabled, walks each storefront's section menu (Smartphones, Promociones, and so on) and emits one row per featured item per section: typically about 50 items per section and around 500 per brand store. Useful for brand monitoring. Off by default since it multiplies row count and cost. Only fires when a seller profile row was fetched successfully.",
            "default": false
          },
          "maxItemsPerSeller": {
            "title": "Max Items Per Seller",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Per-seller cap on catalog rows. 0 = derived automatically from Max Items (divided across input sellers). Set explicitly for batch runs where you want, e.g., 100 items × 20 sellers regardless of the global cap.",
            "default": 0
          },
          "includeReviews": {
            "title": "Include Inline Reviews",
            "type": "boolean",
            "description": "In 'product' mode, include the top 5 reviews from JSON-LD. Full paginated reviews require 'reviews' mode.",
            "default": true
          },
          "includeQuestions": {
            "title": "Include Q&A",
            "type": "boolean",
            "description": "In 'product' mode, include buyer questions + seller answers from the PDP.",
            "default": true
          },
          "includeVariations": {
            "title": "Include Variations",
            "type": "boolean",
            "description": "In 'product' mode, include all product variations (color/size/storage).",
            "default": true
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Direct URLs to scrape. Accepts search, product, reviews, and seller URLs from any of the 9 marketplaces. Paste the full URL and the country and mode are detected for you. Alternative to the mode specific URL fields above.",
            "items": {
              "type": "string"
            }
          },
          "maxConcurrency": {
            "title": "Max Concurrency",
            "minimum": 1,
            "maximum": 24,
            "type": "integer",
            "description": "Maximum parallel requests across all (product × rating × sort) slice tasks. 8 is a safe default for residential proxy; bump up for large batches (50+ products) if you see throughput stalling. Capped at 24 to avoid MeLi rate-limits.",
            "default": 8
          },
          "useResidentialProxy": {
            "title": "Use Residential Proxy (paid plans)",
            "type": "boolean",
            "description": "Product, search, and seller modes always route through a country matched residential proxy, so this toggle is informational for those modes. Reviews mode does not need one. Residential traffic adds Apify's proxy usage fee on top of actor pricing.",
            "default": 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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}