{
  "openapi": "3.0.1",
  "info": {
    "title": "Cannabis Jobs Scraper — 3 US Sources, 4.6K+ Listings",
    "description": "Cannabis jobs from 3 US sources (CareersInCannabis, Vangst, CannabisMarketSpace) — 4,661 listings on last full run. Normalised category, seniority, pay, remote flag, honest dataCompleteness (Vangst detail pages are LISTING_ONLY, blocked by Cloudflare). Duplicates tagged, not merged.",
    "version": "0.1",
    "x-build-id": "yg4qsffIOMQg4GkGF"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/solalab_digital~cannabis-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-solalab_digital-cannabis-jobs-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/solalab_digital~cannabis-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-solalab_digital-cannabis-jobs-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/solalab_digital~cannabis-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-solalab_digital-cannabis-jobs-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": {
          "sourcesToInclude": {
            "title": "Sources to scrape",
            "uniqueItems": true,
            "type": "array",
            "description": "Which sources to read. All three are included by default, which returned 4,661 postings on the last full run. Deselect sources you do not need: every source you include adds records — and therefore cost — to a full run. Measured sizes on 2026-09-16: CareersInCannabis 3,200 (the only source publishing salary), Vangst 1,415 (LISTING_ONLY — title and state only), CannabisMarketSpace 46.",
            "items": {
              "type": "string",
              "enum": [
                "engin",
                "vangst",
                "cannabismarketspace"
              ],
              "enumTitles": [
                "CareersInCannabis — full detail, salary and benefits",
                "Vangst — job title, state and URL only, see docs",
                "CannabisMarketSpace — full detail, mostly corporate roles"
              ]
            },
            "default": [
              "engin",
              "vangst",
              "cannabismarketspace"
            ]
          },
          "maxItems": {
            "title": "Maximum postings to scrape",
            "minimum": 0,
            "type": "integer",
            "description": "Stop the whole run after this many job records have been saved across all sources combined. Set to 0 to scrape every posting currently listed (took about 28 minutes on 2026-09-16 for all three sources). You are never charged for more than this number: concurrent sources share one counter and cannot jointly overshoot it. The budget is divided evenly between the sources you selected, so a capped run is a representative sample rather than a pile of rows from whichever source answers fastest — which means a run may finish slightly under the cap if a source holds fewer postings than its share. Defaults to a small sample so a plain run finishes in well under a minute; raise it or set it to 0 for a full pull.",
            "default": 60
          },
          "includeJobDescription": {
            "title": "Include job description text",
            "type": "boolean",
            "description": "Include the full job description in each record. Turn this off for a smaller, tabular dataset that is easier to load into a spreadsheet or CRM — CareersInCannabis descriptions are HTML and run to several kilobytes each.",
            "default": true
          },
          "maxPages": {
            "title": "Maximum API pages per source",
            "minimum": 0,
            "type": "integer",
            "description": "Limit how many pages of the CareersInCannabis API are walked. Set to 0 for no limit, in which case the Actor keeps paging until the API reports no further results (33 pages of 100 on the 2026-09-16 run — 32 full pages and a short final one). Has no effect on the other two sources, which are read from a single sitemap each rather than paged.",
            "default": 0
          },
          "maxRequestsPerMinute": {
            "title": "Maximum requests per minute, per source",
            "minimum": 1,
            "maximum": 240,
            "type": "integer",
            "description": "Courtesy rate limit applied to each source separately. Each source's own budget still wins where it is stricter: CannabisMarketSpace is a small WordPress site and is never read faster than 20 requests per minute regardless of this setting, and Vangst needs exactly one request. Lower this if you run the Actor frequently.",
            "default": 60
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Usually not needed. All three sources serve their documents to an ordinary HTTP client with no bot protection on the paths this Actor reads. Note that a proxy will NOT unlock Vangst's job detail pages: those sit behind a Cloudflare Turnstile challenge that this Actor deliberately does not attempt to solve, which is why Vangst records are flagged LISTING_ONLY.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}