{
  "openapi": "3.0.1",
  "info": {
    "title": "Arbeitsagentur Jobs Feed — German Federal Employment Agency",
    "description": "Scrape arbeitsagentur.de — Germany's official public employment portal with over 1 million live job listings from the Bundesagentur für Arbeit. Get structured job records with salary data, geo-coordinates, and employer profiles for every posting.",
    "version": "1.1",
    "x-build-id": "t6vO3i6shUZWzIyBy"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/blackfalcondata~arbeitsagentur-jobs-feed/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-blackfalcondata-arbeitsagentur-jobs-feed",
        "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~arbeitsagentur-jobs-feed/runs": {
      "post": {
        "operationId": "runs-sync-blackfalcondata-arbeitsagentur-jobs-feed",
        "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~arbeitsagentur-jobs-feed/run-sync": {
      "post": {
        "operationId": "run-sync-blackfalcondata-arbeitsagentur-jobs-feed",
        "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 title or keyword (e.g., 'Software Developer', 'Krankenpfleger')"
          },
          "location": {
            "title": "📍 Location",
            "type": "string",
            "description": "City or region (e.g., 'Berlin', 'München', 'Hamburg')"
          },
          "maxResults": {
            "title": "💯 Max Results",
            "minimum": 0,
            "maximum": 500,
            "type": "integer",
            "description": "Maximum number of job listings to return. Set 0 for unlimited; use carefully because each emitted record is billable.",
            "default": 25
          },
          "startUrls": {
            "title": "🔗 Job URLs (paste mode)",
            "type": "array",
            "description": "Paste specific arbeitsagentur.de job links to scrape exactly those listings instead of running a search. Accepts portal and job-detail URLs. When provided, the search term and filters are ignored.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "mode": {
            "title": "⚙️ Mode",
            "enum": [
              "full",
              "incremental"
            ],
            "type": "string",
            "description": "Full mode returns all matching jobs. Incremental mode classifies records as NEW, UPDATED, UNCHANGED, REAPPEARED, or EXPIRED. First run for a new search state has no baseline and may emit all matching jobs; later runs emit only changes unless emitUnchanged or emitExpired is enabled.",
            "default": "full"
          },
          "includeDetails": {
            "title": "📋 Include Full Details",
            "type": "boolean",
            "description": "Fetch full job description, employer profile, benefits, and structured salary range (where the employer specifies pay) for each listing. Slower but richer data.",
            "default": false
          },
          "radius": {
            "title": "📡 Search Radius (km)",
            "minimum": 0,
            "maximum": 200,
            "type": "integer",
            "description": "Radius around location in km",
            "default": 0
          },
          "contractType": {
            "title": "📝 Contract Type",
            "enum": [
              "",
              "BEFRISTET",
              "UNBEFRISTET"
            ],
            "type": "string",
            "description": "Filter by contract duration",
            "default": ""
          },
          "jobType": {
            "title": "💼 Job Type",
            "enum": [
              "",
              "ARBEIT",
              "AUSBILDUNG",
              "SELBSTAENDIGKEIT",
              "PRAKTIKUM"
            ],
            "type": "string",
            "description": "Filter by listing type",
            "default": ""
          },
          "workType": {
            "title": "Work Type",
            "enum": [
              "",
              "VOLLZEIT",
              "TEILZEIT",
              "HOMEOFFICE",
              "MINIJOB",
              "SCHICHT"
            ],
            "type": "string",
            "description": "Filter by working hours",
            "default": ""
          },
          "bundesland": {
            "title": "Federal State (Bundesland)",
            "enum": [
              "",
              "BADEN_WUERTTEMBERG",
              "BAYERN",
              "BERLIN",
              "BRANDENBURG",
              "BREMEN",
              "HAMBURG",
              "HESSEN",
              "MECKLENBURG_VORPOMMERN",
              "NIEDERSACHSEN",
              "NORDRHEIN_WESTFALEN",
              "RHEINLAND_PFALZ",
              "SAARLAND",
              "SACHSEN",
              "SACHSEN_ANHALT",
              "SCHLESWIG_HOLSTEIN",
              "THUERINGEN"
            ],
            "type": "string",
            "description": "Filter by German federal state. For best performance, combine with a location — broad queries scoped only to a sparse state may take longer to complete.",
            "default": ""
          },
          "remoteOnly": {
            "title": "Remote Only",
            "type": "boolean",
            "description": "Only show jobs with home office option",
            "default": false
          },
          "disabilityOnly": {
            "title": "♿ Disability-Suitable Only",
            "type": "boolean",
            "description": "Only return listings explicitly marked as suitable for people with disabilities (schwerbehindertengerecht).",
            "default": false
          },
          "careerChange": {
            "title": "🔀 Career Changers Only",
            "type": "boolean",
            "description": "Only return listings flagged as suitable for career changers (Quereinsteiger).",
            "default": false
          },
          "sortBy": {
            "title": "↕️ Sort By",
            "enum": [
              "relevance",
              "date",
              "distance"
            ],
            "type": "string",
            "description": "Result ordering. Relevance is the portal default; date sorts newest-first; distance requires a Location + Search Radius.",
            "default": "relevance"
          },
          "publishedSince": {
            "title": "Published Since (days)",
            "minimum": 0,
            "maximum": 30,
            "type": "integer",
            "description": "Only show jobs published within the last N days. 0 = any time, 1 = last 24h, 7 = last week, 30 = last month.",
            "default": 0
          },
          "includeTemporaryWork": {
            "title": "Include Temporary Staffing",
            "type": "boolean",
            "description": "Include jobs from temporary staffing agencies (Zeitarbeitsfirmen)",
            "default": true
          },
          "employer": {
            "title": "Employer",
            "type": "string",
            "description": "Employer name (e.g., 'BMW', 'Deutsche Bahn', 'Robert Bosch GmbH'). Common brand names are resolved to the registered company name where possible. For guaranteed results, use the exact registered name (e.g., 'BMW AG')."
          },
          "skipReposts": {
            "title": "🚫 Skip Reposts",
            "type": "boolean",
            "description": "Exclude listings detected as reposts of previously seen jobs.",
            "default": false
          },
          "emitUnchanged": {
            "title": "♻️ Emit Unchanged Jobs",
            "type": "boolean",
            "description": "In incremental mode, also emit jobs whose reference number and modified date have not changed since the previous run.",
            "default": false
          },
          "emitExpired": {
            "title": "⚰️ Emit Expired Jobs",
            "type": "boolean",
            "description": "In incremental mode, emit EXPIRED records for previously seen jobs that no longer appear in the current matching result set. This requires scanning the full result set for the configured search.",
            "default": false
          },
          "compact": {
            "title": "📦 Compact Output",
            "type": "boolean",
            "description": "When true, each result is reduced to the most essential fields — referenceId, title, employer, location, region, publishedDate, contractType, isRemote, portalUrl — plus contentHash and changeType for change tracking. The heavy description field is omitted. Use this in AI-agent and MCP workflows where token budgets matter — compact output is significantly smaller than full output, reducing context window consumption and cost.",
            "default": false
          },
          "descriptionMaxLength": {
            "title": "✂️ Description Max Length",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Truncate the description field to this many characters, appending '...' if truncated. 0 means no truncation. Use in AI-agent workflows to control context window usage — 200–500 characters is usually enough for an LLM to classify or summarise a job. Applies to full/detail output; compact mode omits the description entirely.",
            "default": 0
          },
          "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
          },
          "appConnector": {
            "title": "Send results to Notion (or another connected app)",
            "type": "string",
            "description": "Optional. Pick a connected app under Settings → API & Integrations to receive your results. Notion is supported today (a run-summary page); other MCP connectors are best-effort as Apify expands its catalog."
          },
          "mcpIssueTeam": {
            "title": "Issue tracker team",
            "type": "string",
            "description": "Only when the connected app is an issue tracker: the team (name or ID) the summary issue is created under, if that app requires one."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}