{
  "openapi": "3.0.1",
  "info": {
    "title": "Xing Jobs Scraper - German Jobs with Salary Ranges",
    "description": "Scrape Xing job listings for the German-speaking market: job title, company, city, employment type and the published salary range in EUR. Search many keywords across many cities in one run, deduplicated. Independent tool, not affiliated with XING.",
    "version": "0.1",
    "x-build-id": "5pXacemsNEC9GaT6i"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapesage~xing-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapesage-xing-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/scrapesage~xing-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapesage-xing-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/scrapesage~xing-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapesage-xing-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": {
          "keywords": {
            "title": "Job keywords",
            "type": "array",
            "description": "Job titles or skills to search, one per line - e.g. <code>software engineer</code>, <code>Pflegefachkraft</code>, <code>Vertrieb</code>. Every keyword is searched in every location. <b>Leave empty and the run returns a small free sample.</b>",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations (cities)",
            "type": "array",
            "description": "A <b>city</b> - <code>Berlin</code>, <code>München</code>, <code>Hamburg</code>, <code>Köln</code>, <code>Wien</code>, <code>Zürich</code> - or the <b>English</b> country name <code>Germany</code> for a nationwide sweep (verified 2026-08-09: returns jobs across Stuttgart, Duisburg, Landshut and more). ⚠️ <code>Deutschland</code>, a region name, and a keyword with no location all return <b>zero</b> on Xing - the run says so rather than failing silently.",
            "items": {
              "type": "string"
            }
          },
          "keywordsFromFile": {
            "title": "Import keywords from a file (one per line)",
            "type": "string",
            "description": "Bulk-load the keyword list. Either <b>paste the whole list</b> (one per line), or give <b>a single link</b> to a public <code>.txt</code>/<code>.csv</code>, a Google Sheet or Drive share link, or an Apify key-value-store record. Blank lines, <code>#</code> comments, CRLF and a UTF-8 BOM all parse. A file that cannot be read stops the run with a clear message."
          },
          "maxPagesPerSearch": {
            "title": "Max pages per search",
            "minimum": 1,
            "type": "integer",
            "description": "How deep to paginate each keyword+city pair. Xing returns roughly 9-11 jobs per page and keeps going for many pages, so 5 pages is about 50 jobs per search.",
            "default": 5
          },
          "employmentTypeFilter": {
            "title": "Employment type",
            "type": "array",
            "description": "Keep only these employment types. Leave empty for all. Note that Xing omits the type on some cards - those are dropped when this filter is on.",
            "items": {
              "type": "string",
              "enum": [
                "full-time",
                "part-time",
                "internship",
                "working-student",
                "freelance",
                "mini-job",
                "apprenticeship",
                "fixed-term"
              ],
              "enumTitles": [
                "Full-time (Vollzeit)",
                "Part-time (Teilzeit)",
                "Internship (Praktikum)",
                "Working student (Werkstudent)",
                "Freelance (Freiberuflich)",
                "Mini-job",
                "Apprenticeship (Ausbildung)",
                "Fixed-term (Befristet)"
              ]
            }
          },
          "withSalaryOnly": {
            "title": "Only jobs that show a salary",
            "type": "boolean",
            "description": "Skip listings with no published salary range. About 1 in 7 Xing cards has no salary.",
            "default": false
          },
          "salaryMin": {
            "title": "Minimum salary (EUR / year)",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only jobs whose upper salary bound is at least this. 0 disables the filter.",
            "default": 0
          },
          "outputFields": {
            "title": "Output fields (leave empty for all)",
            "type": "array",
            "description": "Pick the fields you want and every record is trimmed to exactly those - handy for lean CSV/Sheets exports. <b>Nothing to memorise:</b> open the dropdown and tick, or start typing (<code>salary</code>, <code>company</code>) to filter.",
            "items": {
              "type": "string",
              "enum": [
                "type",
                "jobId",
                "isExternalOffer",
                "url",
                "title",
                "company",
                "location",
                "extraLocationCount",
                "employmentType",
                "employmentTypeRaw",
                "salaryMin",
                "salaryMax",
                "salaryCurrency",
                "salaryText",
                "searchKeyword",
                "searchLocation",
                "searchPage",
                "scrapedAt"
              ],
              "enumTitles": [
                "Record type (type)",
                "Job ID (jobId)",
                "Partner listing (isExternalOffer)",
                "Job URL (url)",
                "Job title (title)",
                "Company (company)",
                "Location (location)",
                "Extra locations count (extraLocationCount)",
                "Employment type, normalised (employmentType)",
                "Employment type as shown (employmentTypeRaw)",
                "Salary minimum (salaryMin)",
                "Salary maximum (salaryMax)",
                "Salary currency (salaryCurrency)",
                "Salary as shown (salaryText)",
                "Matched keyword (searchKeyword)",
                "Matched location (searchLocation)",
                "Result page (searchPage)",
                "Scraped at (scrapedAt)"
              ]
            }
          },
          "maxItems": {
            "title": "Max jobs",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum number of jobs to output across all keyword/city combinations. Duplicates across searches are counted once.",
            "default": 500
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy settings. Xing serves its public job search cleanly to Apify datacenter proxies, which are used by default. If you ever see blocks, switch to Residential.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}