{
  "openapi": "3.0.1",
  "info": {
    "title": "Bulldogjob Jobs Scraper",
    "description": "Scrapes job offers from bulldogjob.pl, a Polish IT job board, from its public pages: salaries per contract type, skills, seniority, contract types, locations and company. Same output schema as our other job portal actors.",
    "version": "0.5",
    "x-build-id": "ltDdANu7YPxkZmOte"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/datawatcher~bulldogjob-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-datawatcher-bulldogjob-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/datawatcher~bulldogjob-scraper/runs": {
      "post": {
        "operationId": "runs-sync-datawatcher-bulldogjob-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/datawatcher~bulldogjob-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-datawatcher-bulldogjob-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": {
          "maxResults": {
            "title": "Max results",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of offers returned, in total. 0 = no limit (the run timeout still applies). Free plan Apify users get at most 1000 offers per run, whatever is set here (paying users have no cap). bulldogjob.pl serves 50 offers per page.",
            "default": 50
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "URLs from which the actor starts scraping, instead of a search: a listing/search URL is read as that listing, a specific offer URL is read directly. locations, categories, contractTypes, workType, experience and withSalaryOnly still apply: rows that do not match are dropped. searchQueries is not applied (a warning says so). bulldogjob.pl listing pages (https://bulldogjob.pl/companies/jobs/s/city,Warszawa/role,backend) or offer pages (https://bulldogjob.pl/companies/jobs/257354-...).",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "searchQueries": {
            "title": "Search queries",
            "type": "array",
            "description": "Keywords to search for, one search per line (a technology or a job title). Empty - every offer. bulldogjob.pl has no free-text search: give technologies as it names them (Python, Java, React, SQL); a job title word finds nothing.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Only offers in these cities, written as normal city names; accents and case do not matter (Krakow = Kraków = KRAKÓW). A city the portal does not know gives a warning and no search for it, never an unfiltered search. Empty - anywhere. bulldogjob.pl knows only its own cities: Warszawa, Kraków, Wrocław, Gdańsk, Łódź, Poznań, Katowice, Białystok, Rzeszów, Lublin and Remote; any other city gives a warning and no search.",
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "title": "Categories",
            "type": "array",
            "description": "Only offers in these categories (the output's `categories[].value` values). Empty - all.",
            "items": {
              "type": "string",
              "enum": [
                "backend",
                "frontend",
                "fullstack",
                "mobile",
                "devops",
                "data",
                "ai-ml",
                "testing",
                "security",
                "it-admin",
                "support",
                "embedded",
                "gamedev",
                "erp",
                "architecture",
                "project-management",
                "product",
                "ux-ui",
                "business-analysis",
                "sales",
                "marketing",
                "hr",
                "finance",
                "customer-service",
                "engineering",
                "production",
                "logistics",
                "legal",
                "administration",
                "consulting",
                "education",
                "healthcare",
                "construction",
                "hospitality"
              ],
              "enumTitles": [
                "Backend",
                "Frontend",
                "Full-stack",
                "Mobile",
                "DevOps",
                "Data",
                "AI / ML",
                "Testing",
                "Security",
                "IT admin",
                "Support",
                "Embedded",
                "Game dev",
                "ERP",
                "Architecture",
                "Project management",
                "Product",
                "UX / UI",
                "Business analysis",
                "Sales",
                "Marketing",
                "HR",
                "Finance",
                "Customer service",
                "Engineering",
                "Production",
                "Logistics",
                "Legal",
                "Administration",
                "Consulting",
                "Education",
                "Healthcare",
                "Construction",
                "Hospitality"
              ]
            }
          },
          "contractTypes": {
            "title": "Contract types",
            "type": "array",
            "description": "Only offers that allow one of these contracts (the output's `contractTypes` values). Empty - all. bulldogjob.pl has no contract filter: applied to the rows after they arrive, not by the site. It shows only employment, b2b and other contracts: `mandate`, `specific-task` and `internship` are ignored (a warning says so); with only such values, no search is made.",
            "items": {
              "type": "string",
              "enum": [
                "employment",
                "b2b",
                "mandate",
                "specific-task",
                "internship"
              ],
              "enumTitles": [
                "Employment contract",
                "B2B",
                "Mandate contract",
                "Contract for specific work",
                "Internship"
              ]
            }
          },
          "workType": {
            "title": "Work type",
            "type": "array",
            "description": "Only offers with one of these work types (the output's `workType[].type` values). Empty - all. bulldogjob.pl cannot filter by work type: applied to the rows after they arrive, not by the site. It has no `mobile`: that value is ignored (a warning says so); with only that value, no search is made.",
            "items": {
              "type": "string",
              "enum": [
                "remote",
                "hybrid",
                "onsite",
                "mobile"
              ],
              "enumTitles": [
                "Remote",
                "Hybrid",
                "On-site",
                "Mobile"
              ]
            }
          },
          "experience": {
            "title": "Experience",
            "type": "array",
            "description": "Only offers for these experience levels (the output's `experience.levels[].value` values). Empty - all. bulldogjob.pl filters only junior, mid, senior and lead: intern, expert, manager and executive are ignored (a warning says so); with only such values, no search is made.",
            "items": {
              "type": "string",
              "enum": [
                "intern",
                "junior",
                "mid",
                "senior",
                "expert",
                "lead",
                "manager",
                "executive"
              ],
              "enumTitles": [
                "Intern",
                "Junior",
                "Mid",
                "Senior",
                "Expert",
                "Lead",
                "Manager",
                "Executive"
              ]
            }
          },
          "withSalaryOnly": {
            "title": "With salary only",
            "type": "boolean",
            "description": "Only offers that show a salary (the output's `salaries` is not empty). Off - all offers.",
            "default": false
          },
          "extractFullDetails": {
            "title": "Extract full details",
            "type": "boolean",
            "description": "Fetch each offer's own page (and its company once per run) and return the full data: the description, skills, benefits, languages, company details. Off - listing-level data only, cheaper and faster. An offer start URL is always read. A filter whose field the listing lacks still reads that offer's page to decide.",
            "default": false
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Maximum number of searches/details processed in parallel.",
            "default": 1
          },
          "maxRequestsPerMinute": {
            "title": "Max requests per minute",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum HTTP request rate, for the whole run.",
            "default": 60
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy settings, especially useful when many detail pages are requested.",
            "default": {
              "useApifyProxy": false
            }
          },
          "maxRequestRetries": {
            "title": "Max request retries",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Number of retries after a failed HTTP request.",
            "default": 2
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}