{
  "openapi": "3.0.1",
  "info": {
    "title": "Flowzz Scraper",
    "description": "[💰 $4 / 1K] Extract German medical cannabis data from Flowzz: flowers, extracts, edibles, strains and 635 pharmacies. Get THC/CBD, genetics, producer, origin and ratings, plus the per-gram price every pharmacy currently charges with its address and delivery options.",
    "version": "1.0",
    "x-build-id": "ndQyM2efBm2zunTh4"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/solidcode~flowzz-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-solidcode-flowzz-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/solidcode~flowzz-scraper/runs": {
      "post": {
        "operationId": "runs-sync-solidcode-flowzz-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/solidcode~flowzz-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-solidcode-flowzz-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": {
          "dataType": {
            "title": "What to extract",
            "enum": [
              "flowers",
              "extracts",
              "edibles",
              "strains",
              "pharmacies"
            ],
            "type": "string",
            "description": "Pick the Flowzz catalogue you want. Cannabis Flowers is by far the largest (about 2,100 in stock, about 4,000 including products no pharmacy currently carries). Extracts has about 180 in stock. Edibles is a very small catalogue - only a handful of products exist. Strains are the underlying genetics with their THC/CBD ranges. Pharmacies is the directory of 635 German pharmacies that dispense medical cannabis."
          },
          "startUrls": {
            "title": "Specific Flowzz pages",
            "type": "array",
            "description": "Optional. Paste Flowzz product, strain or pharmacy pages, for example https://flowzz.com/product/skk-bc-36-1-blue-caviar. A bare slug such as skk-bc-36-1-blue-caviar also works. When you add anything here, the catalogue above is not browsed and only these pages are extracted. Product pages are looked up across Flowers, Extracts and Edibles, so you do not need to know which catalogue a product belongs to.",
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "Maximum results",
            "minimum": 0,
            "type": "integer",
            "description": "How many records to return. Set to 0 to take everything available: about 4,000 cannabis flowers, 1,650 strains or 635 pharmacies. When browsing Flowers, Extracts or Edibles the results arrive a page at a time and Flowzz occasionally repeats a product inside a page, so a run can land a few records either side of this number rather than cutting a page in half. Flowzz also never serves fewer than 12 products at a time, so any limit below 12 returns 12. Strains, the Pharmacies directory and any run with a search term are cut to this number exactly."
          },
          "includePharmacyPrices": {
            "title": "Include pharmacy prices",
            "type": "boolean",
            "description": "Add every pharmacy currently selling the product, with its price per gram, stock status, address, coordinates and website. Popular products are stocked by 100+ pharmacies, so this makes each row much richer. Only applies to Flowers, Extracts and Edibles - Strains and the Pharmacies directory ignore it."
          },
          "includeDetails": {
            "title": "Include terpenes and full descriptions",
            "type": "boolean",
            "description": "Look up each record's detail page to add its terpene profile and long German description. Works on Flowers, Extracts, Edibles and Strains. This needs one extra lookup per record, so a large run takes noticeably longer - leaving 'Maximum results' at 0 on the flowers catalogue can take longer than a run is allowed to last, and the run will then stop early and save what it has. Flowzz fills in product descriptions only rarely, and extracts carry a terpene list less often than flowers do; strain descriptions are the best populated of all. Does not apply to the Pharmacies directory."
          },
          "searchTerm": {
            "title": "Search term",
            "type": "string",
            "description": "Keep only records whose name, strain or producer contains this text, for example 'Lemon' or 'Cantourage'. For the Pharmacies directory it matches the pharmacy name, city and postcode. Close spelling matches from the Flowzz site search are included too, and those extras are capped by Flowzz at 120 products or 50 strains - the plain text match itself covers the whole catalogue and is not capped."
          },
          "genetics": {
            "title": "Genetics",
            "uniqueItems": true,
            "type": "array",
            "description": "Keep only products with these genetics. Leave empty for all. Picking several plain types (Indica, Sativa, Hybrid) widens the result. But 'Indica dominant' and 'Sativa dominant' describe which way a hybrid leans, so combining one of those with a plain type narrows to products that are both - for example Sativa together with Indica dominant is a contradiction and returns nothing. Pick the dominant options on their own, or alongside Hybrid. Does not apply to the Pharmacies directory.",
            "items": {
              "type": "string",
              "enum": [
                "Indica",
                "Sativa",
                "Hybrid",
                "Indica dominant",
                "Sativa dominant"
              ],
              "enumTitles": [
                "Indica",
                "Sativa",
                "Hybrid",
                "Indica dominant (hybrid)",
                "Sativa dominant (hybrid)"
              ]
            }
          },
          "minThc": {
            "title": "Minimum THC (%)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Only products with at least this much THC, for example 25. Leave empty for no minimum."
          },
          "maxThc": {
            "title": "Maximum THC (%)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Only products with at most this much THC. Leave empty for no maximum."
          },
          "minCbd": {
            "title": "Minimum CBD (%)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Only products with at least this much CBD. Useful for finding CBD-rich varieties. Leave empty for no minimum."
          },
          "maxCbd": {
            "title": "Maximum CBD (%)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Only products with at most this much CBD. Leave empty for no maximum."
          },
          "minPricePerGram": {
            "title": "Minimum price per gram (EUR)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Only products whose cheapest pharmacy price is at least this many euros per gram. Leave empty for no minimum."
          },
          "maxPricePerGram": {
            "title": "Maximum price per gram (EUR)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Only products whose cheapest pharmacy price is at most this many euros per gram, for example 6. Leave empty for no maximum. Flowzz prices top out well below 100 EUR/g, so 100 behaves the same as no maximum."
          },
          "inStockOnly": {
            "title": "In stock only",
            "type": "boolean",
            "description": "Skip products that no pharmacy currently has available. Leave this off to also see products that exist on Flowzz but are out of stock everywhere - that is roughly half of the flowers catalogue. Does not apply to Strains or the Pharmacies directory."
          },
          "sortBy": {
            "title": "Sort results by",
            "enum": [
              "recommended",
              "priceAsc",
              "priceDesc",
              "thcDesc",
              "thcAsc",
              "cbdDesc",
              "ratingDesc",
              "newest",
              "strain"
            ],
            "type": "string",
            "description": "Order the results before the maximum above is applied - handy for grabbing the cheapest or strongest products first. Applies to Flowers, Extracts, Edibles and Strains. The Pharmacies directory is always returned in Flowzz's own order."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}