{
  "openapi": "3.0.1",
  "info": {
    "title": "Arbeitnow Jobs Scraper - Germany & Visa Sponsorship",
    "description": "Scrape Arbeitnow job listings across Germany and Europe: title, company, location, remote flag, the board's own visa-sponsorship flag, job types, tags, full description, listing date and apply URL. Optional lookups add the real publication date, expiry and the employer's own application link.",
    "version": "0.1",
    "x-build-id": "xhgNrsAfGWG5pDAx5"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/dami_studio~arbeitnow-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-dami_studio-arbeitnow-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/dami_studio~arbeitnow-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-dami_studio-arbeitnow-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/dami_studio~arbeitnow-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-dami_studio-arbeitnow-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": {
          "maxItems": {
            "title": "How many postings",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Stop after this many postings. Set it on its own and you get the newest postings on the board; add any filter below and you get the newest that match.\n\nArbeitnow carries roughly the last week of listings, about 7,500 postings when this was measured, so asking for more than the board holds simply returns everything it has."
          },
          "searchQueries": {
            "title": "Keywords",
            "type": "array",
            "description": "Words that must appear in the posting - title, company, location, tags or the description text. A posting matches if it contains every word in one of your phrases, so \"data engineer\" needs both words but \"python\" needs only the one. German and English both work, since the board carries both.\n\nWorth knowing: Arbeitnow's feed has no search parameter, so this filter runs on our side after the postings are read. Anything that does not match is dropped and never charged - you only pay for the postings you get back.",
            "items": {
              "type": "string"
            }
          },
          "visaSponsorshipOnly": {
            "title": "Only jobs that sponsor a visa",
            "type": "boolean",
            "description": "Return only the postings Arbeitnow flags as offering visa sponsorship. This is the board's own flag, not a guess of ours, and it is the list behind its \"Visa Sponsorship Jobs in Germany\" page - 242 postings when this was last measured.\n\nLeave it off and you still get the flag: every row carries visaSponsorship as true or false either way."
          },
          "remoteOnly": {
            "title": "Only remote jobs",
            "type": "boolean",
            "description": "Keep only postings Arbeitnow marks as remote. That flag is sparse - around 5 in 100 postings on a typical page - because most of this board is on-site work in Germany."
          },
          "location": {
            "title": "Location contains",
            "type": "string",
            "description": "Keep only postings whose location text contains this, case-insensitive. \"Berlin\", \"München\", \"Hamburg\".\n\nThe location on Arbeitnow is whatever the employer typed, so it ranges from \"Stuttgart\" to \"Berlin, Berlin, Germany\" to an empty string. A plain city name is the reliable way to use this. Postings with no location at all cannot match and are dropped uncharged."
          },
          "jobTypes": {
            "title": "Job types",
            "type": "array",
            "description": "Keep only postings carrying one of these types. Arbeitnow's types come from the employer and are not a fixed list - the common ones are \"Full time\", \"Part time\", \"Permanent\", \"Experienced\", \"Entry\", \"Intern\", \"Working student\", \"Contract\" and \"Fixed term\", and some employers write theirs in German. Matching is partial and case-insensitive, so \"student\" catches \"Working student\".",
            "items": {
              "type": "string"
            }
          },
          "postedWithin": {
            "title": "Listed within",
            "enum": [
              "",
              "day",
              "3days",
              "week",
              "2weeks"
            ],
            "type": "string",
            "description": "Only postings Arbeitnow listed inside this window. Note this is the date the board picked the posting up, which is the only date available before the job page is read - turn on \"Read each job page\" below if you need the date the employer actually published it. The two can be weeks apart."
          },
          "maxPagesScanned": {
            "title": "How far back to read",
            "minimum": 1,
            "maximum": 120,
            "type": "integer",
            "description": "How many pages of the board to read through while looking for matches. Only applies when you have set a keyword, location, job type, remote or date filter - those are applied on our side, so a search that matches nothing would otherwise walk the whole board and still hand you nothing.\n\n10 pages is roughly the newest 1,300 postings, about a day and a half. That is plenty for any keyword people actually search for - \"engineer\" alone matches a good share of page one. Raise it when you are after something rare and want the actor to dig further back; the board tops out around 7,500 postings in total, which is about 72 pages. Pulls with no filters ignore this setting and simply read until they have the number you asked for."
          },
          "includeDescription": {
            "title": "Include the job description",
            "type": "boolean",
            "description": "Keep the full posting text, as HTML and as plain text. It arrives in the same request as everything else, so this costs nothing extra and changes nothing about the charge - it only makes the rows bigger. Turn it off if you are feeding a spreadsheet."
          },
          "includeJobDetails": {
            "title": "Read each job page",
            "type": "boolean",
            "description": "Fetches each posting's own page for the things the feed leaves out: the date the employer published it, the date it expires, a normalised employment type, a postal code, and a salary where one is published.\n\nBe realistic about the salary part. On a random sample of 14 postings, 14 had a real publication date and an expiry, 4 had a postal code, and 1 published a salary. Most German employers do not print a number. This also adds one request per posting, so a large run takes noticeably longer."
          },
          "resolveApplyUrl": {
            "title": "Follow the apply link",
            "type": "boolean",
            "description": "Every row already carries Arbeitnow's apply link. Turn this on and the actor follows it one hop to record where the application actually lands - the employer's own page on Greenhouse, Lever, Personio, Workday and so on - in employerApplyUrl, plus the system's name in atsProvider.\n\nIt is one small request per posting and it is what you want if you are building an application pipeline rather than a job list."
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Optional. Leave this alone unless you need the run to go out through a particular network. Your own proxy servers are used exactly as given."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}