{
  "openapi": "3.0.1",
  "info": {
    "title": "Hiring.Cafe Scraper — 2.8M AI-Enriched Jobs from 46 ATS",
    "description": "Scrape Hiring.Cafe (hiring.cafe) — AI-enriched job aggregator with 2.8M+ listings from 46 ATS platforms. Structured salary, company, and remote-work data with incremental tracking for recurring job monitoring.",
    "version": "0.1",
    "x-build-id": "nuwWvb3c61TYJMmsY"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/blackfalcondata~hiringcafe-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-blackfalcondata-hiringcafe-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/blackfalcondata~hiringcafe-scraper/runs": {
      "post": {
        "operationId": "runs-sync-blackfalcondata-hiringcafe-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/blackfalcondata~hiringcafe-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-blackfalcondata-hiringcafe-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": {
          "query": {
            "title": "🔍 Search Term(s)",
            "type": "string",
            "description": "Job search keywords. Leave blank to browse all jobs."
          },
          "startUrls": {
            "title": "🔗 Hiring.Cafe Search URLs",
            "type": "array",
            "description": "Optional Hiring.Cafe search result URLs. Supports direct slug URLs such as https://hiring.cafe/jobs/software-engineer/locations/united-states and Hiring.Cafe URLs with ?searchState=... for exact structured locations selected on Hiring.Cafe. For simple international country searches, use the Country dropdown.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "country": {
            "title": "🌍 Country",
            "enum": [
              "US",
              "GB",
              "CA",
              "DE",
              "NL",
              "FR",
              "ES",
              "SE",
              "NO",
              "DK",
              "IE",
              "AU",
              "AT",
              "BE",
              "CH",
              "FI",
              "IT",
              "PL",
              "PT",
              "RO",
              "GR",
              "HU",
              "CZ",
              "SK",
              "SI",
              "NZ",
              "SG",
              "ZA",
              "CN",
              "IN",
              "ID",
              "PK",
              "JP",
              "KR",
              "BR",
              "MX",
              "TR",
              "VN",
              "PH",
              "TH",
              "MY",
              "EG",
              "NG",
              "SA",
              "AE",
              "TW",
              "IL",
              "CO",
              "CR",
              "BG"
            ],
            "type": "string",
            "description": "Country market to search. The dropdown runs country-level searches across 50 verified markets. United States also supports direct city/region slugs through Location and Start URLs; non-US Location is applied as a result filter after country search.",
            "default": "US"
          },
          "countries": {
            "title": "🌍 Countries",
            "uniqueItems": true,
            "type": "array",
            "description": "Optional multi-country mode. Select multiple country-level markets to search in one run. When set, this overrides Country and uses Max Results Per Country; Start URLs still take priority if provided.",
            "items": {
              "type": "string",
              "enum": [
                "US",
                "GB",
                "CA",
                "DE",
                "NL",
                "FR",
                "ES",
                "SE",
                "NO",
                "DK",
                "IE",
                "AU",
                "AT",
                "BE",
                "CH",
                "FI",
                "IT",
                "PL",
                "PT",
                "RO",
                "GR",
                "HU",
                "CZ",
                "SK",
                "SI",
                "NZ",
                "SG",
                "ZA",
                "CN",
                "IN",
                "ID",
                "PK",
                "JP",
                "KR",
                "BR",
                "MX",
                "TR",
                "VN",
                "PH",
                "TH",
                "MY",
                "EG",
                "NG",
                "SA",
                "AE",
                "TW",
                "IL",
                "CO",
                "CR",
                "BG"
              ],
              "enumTitles": [
                "United States",
                "United Kingdom",
                "Canada",
                "Germany",
                "Netherlands",
                "France",
                "Spain",
                "Sweden",
                "Norway",
                "Denmark",
                "Ireland",
                "Australia",
                "Austria",
                "Belgium",
                "Switzerland",
                "Finland",
                "Italy",
                "Poland",
                "Portugal",
                "Romania",
                "Greece",
                "Hungary",
                "Czechia",
                "Slovakia",
                "Slovenia",
                "New Zealand",
                "Singapore",
                "South Africa",
                "China",
                "India",
                "Indonesia",
                "Pakistan",
                "Japan",
                "South Korea",
                "Brazil",
                "Mexico",
                "Turkey",
                "Vietnam",
                "Philippines",
                "Thailand",
                "Malaysia",
                "Egypt",
                "Nigeria",
                "Saudi Arabia",
                "United Arab Emirates",
                "Taiwan",
                "Israel",
                "Colombia",
                "Costa Rica",
                "Bulgaria"
              ]
            }
          },
          "location": {
            "title": "📍 Location",
            "type": "string",
            "description": "City, state, or region. United States direct searches are supported. For non-US countries, this filters the country-level result window by location text. For exact non-US city/region targeting, paste a Hiring.Cafe URL with ?searchState=... into Start URLs; otherwise leave empty to run country-level search."
          },
          "workplaceTypes": {
            "title": "🏢 Workplace Type",
            "uniqueItems": true,
            "type": "array",
            "description": "Filter results by workplace type.",
            "items": {
              "type": "string",
              "enum": [
                "Remote",
                "Hybrid",
                "Onsite"
              ],
              "enumTitles": [
                "Remote",
                "Hybrid",
                "Onsite"
              ]
            }
          },
          "seniorityLevels": {
            "title": "📈 Seniority Levels",
            "uniqueItems": true,
            "type": "array",
            "description": "Filter results by seniority level.",
            "items": {
              "type": "string",
              "enum": [
                "Entry Level",
                "Mid Level",
                "Senior Level",
                "Executive"
              ],
              "enumTitles": [
                "Entry Level",
                "Mid Level",
                "Senior Level",
                "Executive"
              ]
            }
          },
          "commitmentTypes": {
            "title": "🕒 Commitment Types",
            "uniqueItems": true,
            "type": "array",
            "description": "Filter results by employment commitment.",
            "items": {
              "type": "string",
              "enum": [
                "Full Time",
                "Part Time",
                "Contract",
                "Internship",
                "Temporary"
              ],
              "enumTitles": [
                "Full Time",
                "Part Time",
                "Contract",
                "Internship",
                "Temporary"
              ]
            }
          },
          "onlyTransparentSalaries": {
            "title": "💵 Only Transparent Salaries",
            "type": "boolean",
            "description": "Only include jobs where Hiring.Cafe reports transparent compensation.",
            "default": false
          },
          "minSalary": {
            "title": "💰 Minimum Salary",
            "minimum": 0,
            "type": "integer",
            "description": "Only include jobs whose reported salary range reaches at least this amount."
          },
          "maxSalary": {
            "title": "💰 Maximum Salary",
            "minimum": 0,
            "type": "integer",
            "description": "Only include jobs whose reported salary range starts at or below this amount."
          },
          "postedWithinDays": {
            "title": "🗓️ Posted Within Days",
            "minimum": 0,
            "type": "integer",
            "description": "Only include jobs with an estimated posted date within the last N days. 0 = no date filter.",
            "default": 0
          },
          "maxResults": {
            "title": "💯 Max Results",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum total results (0 = unlimited). Memory scales automatically: 256 MB up to 1000, 512 MB up to 2000, 1024 MB above.",
            "default": 25
          },
          "maxResultsPerCountry": {
            "title": "💯 Max Results Per Country",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Used only when Countries is set. Limits results per selected country before cross-country deduplication. 0 = unlimited per country.",
            "default": 25
          },
          "includeDetails": {
            "title": "📋 Include Full Details",
            "type": "boolean",
            "description": "Fetch full job details. Enables cleaned descriptions plus email, phone, URL, and social-profile extraction when that contact data is present in the job text.",
            "default": true
          },
          "descriptionMaxLength": {
            "title": "✂️ Description Max Length",
            "minimum": 0,
            "type": "integer",
            "description": "Truncate description to N chars. 0 = no truncation.",
            "default": 0
          },
          "outputMode": {
            "title": "🧾 Output Mode",
            "enum": [
              "full",
              "table",
              "compact"
            ],
            "type": "string",
            "description": "Choose full structured output, a table-friendly subset, or compact AI-agent output.",
            "default": "full"
          },
          "compact": {
            "title": "📦 Compact Output",
            "type": "boolean",
            "description": "Legacy alias for outputMode=compact. Core fields only for AI-agent/MCP workflows.",
            "default": false
          },
          "incrementalMode": {
            "title": "♻️ Incremental Mode",
            "type": "boolean",
            "description": "Compare against previous run state.",
            "default": false
          },
          "stateKey": {
            "title": "🔑 State Key",
            "type": "string",
            "description": "Optional stable identifier for the tracked search universe. Leave empty to auto-derive a stable identifier from your search inputs — different keyword/location/filter combinations get isolated state automatically."
          },
          "skipReposts": {
            "title": "🚫 Skip Reposts",
            "type": "boolean",
            "description": "In incremental mode, skip jobs that appear to be reposts of previously-seen expired jobs (same content hash).",
            "default": false
          },
          "emitUnchanged": {
            "title": "📤 Emit Unchanged",
            "type": "boolean",
            "description": "In incremental mode, include unchanged jobs in the dataset. Useful when you want a full snapshot with changeType on every record.",
            "default": false
          },
          "emitExpired": {
            "title": "🧹 Emit Expired",
            "type": "boolean",
            "description": "In incremental mode, include EXPIRED tombstone records for jobs that were active in previous state but are absent from the current result window.",
            "default": false
          },
          "telegramToken": {
            "title": "🤖 Telegram Bot Token",
            "type": "string",
            "description": "Telegram bot token from @BotFather. Required for Telegram notifications."
          },
          "telegramChatId": {
            "title": "💬 Telegram Chat ID",
            "type": "string",
            "description": "Telegram chat or channel ID where alerts are sent (e.g. \"-100123456789\" for a private group, or \"@yourchannel\")."
          },
          "discordWebhookUrl": {
            "title": "🎮 Discord Webhook URL",
            "type": "string",
            "description": "Discord incoming webhook URL. Get one from Server Settings → Integrations → Webhooks."
          },
          "slackWebhookUrl": {
            "title": "💼 Slack Webhook URL",
            "type": "string",
            "description": "Slack incoming webhook URL. Create at api.slack.com/messaging/webhooks."
          },
          "whatsappPhoneNumberId": {
            "title": "📱 WhatsApp Phone Number ID",
            "type": "string",
            "description": "WhatsApp Business phone number ID from Meta Business Manager (NOT the phone number itself — the numeric ID shown next to your business number). Free service-conversation messages within 24 hours of last user-initiated contact."
          },
          "whatsappAccessToken": {
            "title": "🔐 WhatsApp Access Token",
            "type": "string",
            "description": "Meta Cloud API access token with `whatsapp_business_messaging` scope. Get a permanent token from a system user in Meta Business Manager."
          },
          "whatsappTo": {
            "title": "📨 WhatsApp Recipient",
            "type": "string",
            "description": "Recipient phone in E.164 format (e.g. +919876543210). Recipient must have messaged your business number within the last 24 hours — outside that window, free-form text is rejected by Meta."
          },
          "webhookUrl": {
            "title": "🪝 Generic Webhook URL",
            "type": "string",
            "description": "Generic webhook URL that receives a JSON POST with the full job payload + run metadata. Universal escape hatch for n8n / Make / Zapier / your own backend."
          },
          "webhookHeaders": {
            "title": "🔑 Webhook Headers",
            "type": "object",
            "description": "Optional headers (e.g. {\"Authorization\": \"Bearer xyz\"}) sent with the webhook POST."
          },
          "notificationLimit": {
            "title": "📊 Max Jobs Per Notification",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Maximum number of jobs included in each notification message (1–20). Excess jobs are still in the dataset; notifications get a summary line.",
            "default": 5
          },
          "notifyOnlyChanges": {
            "title": "🔄 Notify Only New/Updated",
            "type": "boolean",
            "description": "When Incremental Mode is on, only send notifications for NEW / UPDATED / REAPPEARED jobs. Has no effect outside incremental mode.",
            "default": false
          },
          "descriptionFormat": {
            "title": "Description format",
            "enum": [
              "all",
              "text",
              "html",
              "markdown"
            ],
            "type": "string",
            "description": "Pick a single description representation. `all` keeps every variant; `text` / `html` / `markdown` drop the others.",
            "default": "all"
          },
          "excludeEmptyFields": {
            "title": "Exclude empty fields from output",
            "type": "boolean",
            "description": "Drop null, empty-string, and empty-array fields from each record before push. Smaller payloads for AI agents and dashboards.",
            "default": 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}