{
  "openapi": "3.0.1",
  "info": {
    "title": "Drogasil Brazil Pharmacy, Health & Beauty Scraper",
    "description": "Scrape Drogasil (drogasil.com.br) medicines, health and beauty products by keyword, catalogue section or pasted link. Returns EAN, brand, price in BRL, discount, multi-buy price, stock, images, variants and the regulatory block. Incremental mode tracks daily changes.",
    "version": "1.1",
    "x-build-id": "25zQVAbm07lehCaSA"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~drogasil-com-br-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-drogasil-com-br-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/abotapi~drogasil-com-br-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-drogasil-com-br-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/abotapi~drogasil-com-br-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-drogasil-com-br-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",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "url"
            ],
            "type": "string",
            "description": "Choose 'search' to search the catalogue by keyword or browse a catalogue section, or 'url' to scrape pasted links: product pages, catalogue section pages and search result pages are all accepted.",
            "default": "search"
          },
          "queries": {
            "title": "Search keywords",
            "type": "array",
            "description": "Only used when mode = search, ignored in url mode. One or more keywords, for example dipirona, vitamina c or shampoo. Leave empty and pick a Catalogue section below to browse a whole section instead.",
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "title": "Catalogue sections",
            "uniqueItems": true,
            "type": "array",
            "description": "Only used when mode = search, ignored in url mode. Browse whole catalogue sections. Each selected section is walked on its own, so selecting several returns products from all of them. Combine with keywords to run both.",
            "items": {
              "type": "string",
              "enum": [
                "medicamentos",
                "saude",
                "vitaminas-e-suplementos",
                "beleza",
                "beleza-premium",
                "cuidados-diarios",
                "mamae-bebe",
                "pet",
                "marcas-exclusivas"
              ],
              "enumTitles": [
                "Medicines",
                "Health",
                "Vitamins & supplements",
                "Beauty",
                "Premium beauty",
                "Daily care",
                "Mum & baby",
                "Pet supplies",
                "Exclusive brands"
              ]
            }
          },
          "urls": {
            "title": "Store links",
            "type": "array",
            "description": "Only used when mode = url, ignored in search mode. Mix freely: product pages such as https://www.drogasil.com.br/<product-slug>.html , section pages such as https://www.drogasil.com.br/beleza/maquiagem/batom.html , or search pages such as https://www.drogasil.com.br/search?w=dipirona .",
            "items": {
              "type": "string"
            }
          },
          "brands": {
            "title": "Brand",
            "type": "array",
            "description": "Optional. Keep only products of these brands, spelled exactly as the store spells them on its own brand filter (for example Neosaldina, Vult, Nivea, Ruby Rose). Selecting several returns products from any of them. Leave empty for all brands.",
            "items": {
              "type": "string"
            }
          },
          "minPrice": {
            "title": "Minimum price (BRL)",
            "minimum": 0,
            "type": "integer",
            "description": "Optional. Keep only products priced at or above this amount, in Brazilian reais. Applied by the store itself, so it narrows the result count at the source."
          },
          "maxPrice": {
            "title": "Maximum price (BRL)",
            "minimum": 0,
            "type": "integer",
            "description": "Optional. Keep only products priced at or below this amount, in Brazilian reais. Applied by the store itself, so it narrows the result count at the source."
          },
          "soldBy": {
            "title": "Sold by",
            "enum": [
              "any",
              "drogasil",
              "marketplace"
            ],
            "type": "string",
            "description": "Optional. Keep only products sold by the pharmacy's own stock, or only products sold by its marketplace partners. The pharmacy's own stock is what the store can fulfil from its own branches; a marketplace partner ships the order itself.",
            "default": "any"
          },
          "excludeKits": {
            "title": "Exclude multi-product kits",
            "type": "boolean",
            "description": "Optional. Drop bundled kits and keep only single products. Applied by the store itself, so it narrows the result count at the source.",
            "default": false
          },
          "prescriptionFilter": {
            "title": "Prescription requirement",
            "enum": [
              "any",
              "prescription_only",
              "no_prescription"
            ],
            "type": "string",
            "description": "Optional. Keep only prescription medicines, or only products that need no prescription. The store publishes the prescription stripe classification on every product but does not offer it as a filter, so this is applied to the products that come back and a run may therefore return fewer than Max products.",
            "default": "any"
          },
          "inStockOnly": {
            "title": "Only products currently in stock",
            "type": "boolean",
            "description": "Optional. Keep only products the store currently reports live stock for. Requires Fetch product details, because live stock is only published on the product page.",
            "default": false
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "price_asc",
              "price_desc"
            ],
            "type": "string",
            "description": "The order the store returns results in. Relevance is the store's own default ordering.",
            "default": "relevance"
          },
          "fetchDetails": {
            "title": "Fetch product details",
            "type": "boolean",
            "description": "Read each product's own page to add the barcode (EAN), the pre-discount price and discount, the multi-buy 'leve mais por menos' price per unit and its qualifying quantity, the Pix and instalment prices, live stock, the full image gallery, the description, the per-variant rows with their own price and stock, and the regulatory block: active ingredient, dosage, manufacturer, health-ministry registration number, prescription stripe classification, controlled-substance and psychotropic codes, therapeutic class and the package-insert link. Turn off for a faster, cheaper run that returns listing fields only.",
            "default": true
          },
          "maxItems": {
            "title": "Max products",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of products to return across the whole run. This is the run's cap. Use 0 for unlimited.",
            "default": 20
          },
          "maxPages": {
            "title": "Max result pages per keyword, section or link",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of result pages read per keyword, catalogue section or link. 0 means no limit, which is the default: the run then stops only at Max products, at the end of the results, or when a page returns nothing new.",
            "default": 0
          },
          "resumeFromRunId": {
            "title": "Resume from a previous run",
            "type": "string",
            "description": "Paste a previous run ID or dataset ID to continue a large catalogue pull without returning or charging for products already collected there. Use this after an interrupted run. For recurring daily monitoring of the same search, use Incremental mode below instead."
          },
          "incrementalMode": {
            "title": "Incremental changes for scheduled runs",
            "type": "boolean",
            "description": "Turn this on for daily or recurring monitoring. The first run returns every matching product as NEW. Later runs normally return only NEW, UPDATED and REAPPEARED products. Turn on Emit unchanged or Emit expired only when you also want those rows returned (and billed). State is kept separately for each search, filter and detail setup; use State key to name or deliberately share a monitoring campaign. To continue one specific interrupted run instead, use Resume from a previous run above.",
            "default": false
          },
          "stateKey": {
            "title": "State key (optional, incremental mode only)",
            "type": "string",
            "description": "Optional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently configured runs. Leave empty to let the actor derive a key automatically from the search, filters and detail settings, so different searches never mix state with each other."
          },
          "emitUnchanged": {
            "title": "Emit unchanged products (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return products that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have, so leave it off unless you want the full snapshot every run.",
            "default": false
          },
          "emitExpired": {
            "title": "Emit expired products (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return products that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked search, so never when Max products capped it or when Resume was used. This returns, and bills, extra synthetic rows, so leave it off unless you need expiry tracking.",
            "default": false
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Leave the default on unless you have a reason to change it. The run reads the store through a connection built for stores that turn automated readers away, set up for you; any pool you select here is still honoured, tried on its own first and kept as the fallback, and the run reports in its log if the store starts refusing.",
            "default": {
              "useApifyProxy": true
            }
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API & Integrations, then select it here. Notion gets a rich page-per-item export; other connectors get a best-effort write or digest. Leave empty to skip; never changes the dataset output. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com)."
          },
          "notionParentPageUrl": {
            "title": "Notion parent page (Notion connector only)",
            "type": "string",
            "description": "URL or id of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors."
          },
          "maxNotifyListings": {
            "title": "Max items to export per connector",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on items written to each connector per run. Does not affect the dataset.",
            "default": 50
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}