{
  "openapi": "3.0.1",
  "info": {
    "title": "51job Scraper 前程无忧: China Jobs, Salaries & Hiring Data",
    "description": "51job scraper for public China job postings. Export source URLs, CNY salary data, education, experience, locations, company context, and bilingual fields for hiring research. Filter by city, industry, job function, employment type, and posting recency, with webhook notifications for new listings.",
    "version": "2.3",
    "x-build-id": "A01AzJcnHjsdNjm5e"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/getascraper~51job-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-getascraper-51job-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/getascraper~51job-scraper/runs": {
      "post": {
        "operationId": "runs-sync-getascraper-51job-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/getascraper~51job-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-getascraper-51job-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",
        "required": [
          "sourceMode",
          "proxyConfiguration"
        ],
        "properties": {
          "sourceMode": {
            "title": "Source mode",
            "enum": [
              "search",
              "urls"
            ],
            "type": "string",
            "description": "Build searches from the filters below, or run exact public 51job search-result URLs.",
            "default": "search"
          },
          "queries": {
            "title": "Search keywords",
            "minItems": 1,
            "maxItems": 20,
            "type": "array",
            "description": "Keywords such as python, data engineer, 人工智能, or 软件工程师. Every keyword is combined with every selected city.",
            "items": {
              "type": "string"
            },
            "default": [
              "python"
            ]
          },
          "cities": {
            "title": "Cities",
            "minItems": 1,
            "maxItems": 20,
            "type": "array",
            "description": "Select one or more 51job city codes. The Actor removes duplicate jobs across the resulting search combinations.",
            "items": {
              "type": "string",
              "enum": [
                "000000",
                "010000",
                "020000",
                "030200",
                "040000",
                "180200",
                "090200",
                "080200",
                "060000",
                "070300"
              ],
              "enumTitles": [
                "All China / 全国",
                "Beijing / 北京",
                "Shanghai / 上海",
                "Guangzhou / 广州",
                "Shenzhen / 深圳",
                "Wuhan / 武汉",
                "Chengdu / 成都",
                "Hangzhou / 杭州",
                "Nanjing / 南京",
                "Suzhou / 苏州"
              ]
            },
            "default": [
              "020000"
            ]
          },
          "startUrls": {
            "title": "Direct 51job search URLs",
            "type": "array",
            "description": "Optional HTTPS links beginning with https://we.51job.com/pc/search. Detail pages and unrelated hosts are rejected.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "experience": {
            "title": "Experience required",
            "enum": [
              "all",
              "0",
              "1",
              "2",
              "3",
              "4",
              "5"
            ],
            "type": "string",
            "description": "Filter by source-published work experience requirement.",
            "default": "all"
          },
          "education": {
            "title": "Education required",
            "enum": [
              "all",
              "1",
              "2",
              "3",
              "4"
            ],
            "type": "string",
            "description": "Minimum source-published education requirement.",
            "default": "all"
          },
          "employmentType": {
            "title": "Employment type code",
            "type": "string",
            "description": "Optional 51job public-search employment-type code. Leave blank unless copied from a supported public search URL.",
            "default": ""
          },
          "companyType": {
            "title": "Company type",
            "enum": [
              "all",
              "01",
              "02",
              "03",
              "04",
              "05"
            ],
            "type": "string",
            "description": "Filter by corporate structure.",
            "default": "all"
          },
          "companySize": {
            "title": "Company size",
            "enum": [
              "all",
              "01",
              "02",
              "03",
              "04",
              "05",
              "06"
            ],
            "type": "string",
            "description": "Filter by source-published employee range.",
            "default": "all"
          },
          "industries": {
            "title": "Industry codes",
            "maxItems": 5,
            "type": "array",
            "description": "Optional source industry codes from a public 51job search URL.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "jobFunctions": {
            "title": "Job function codes",
            "maxItems": 5,
            "type": "array",
            "description": "Optional source job-function codes from a public 51job search URL.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "salaryBand": {
            "title": "Salary-band code",
            "type": "string",
            "description": "Optional salary-band code copied from a supported public 51job search URL. Leave blank for all salaries.",
            "default": ""
          },
          "postedWithin": {
            "title": "Posted-within code",
            "type": "string",
            "description": "Optional 51job issue-date code copied from a supported public search URL.",
            "default": ""
          },
          "sortBy": {
            "title": "Sort code",
            "type": "string",
            "description": "Optional 51job public-search sort code.",
            "default": "0"
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "maxItems": 20,
            "type": "array",
            "description": "Exclude rows whose title, company, description, industry, function, or source tags contain any supplied keyword.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "includeRecruiterSignals": {
            "title": "Include public recruiter signals",
            "type": "boolean",
            "description": "Include only source-published recruiter name, role, labels, online status, and status fields when available.",
            "default": true
          },
          "minRecruiterResponsiveness": {
            "title": "Minimum recruiter responsiveness score",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Keep only jobs whose recruiter responsiveness score (0-100, derived from the source's own recent-reply, today's-reply-count, and resume-activity labels) meets this minimum. Jobs with no responsiveness signal at all are excluded once this is set. Leave empty for no filtering."
          },
          "maxItems": {
            "title": "Maximum output rows",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Global maximum across all queries and cities. The run reports when this cap prevents complete source coverage.",
            "default": 25
          },
          "maxPagesPerSearch": {
            "title": "Maximum pages per search",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Safety cap on public result pages fetched for each keyword-city search.",
            "default": 5
          },
          "outputMode": {
            "title": "Output mode",
            "enum": [
              "full",
              "compact"
            ],
            "type": "string",
            "description": "Full records are best for research; compact records are better for databases, alerts, and feeds.",
            "default": "full"
          },
          "monitorMode": {
            "title": "Monitoring mode",
            "enum": [
              "snapshot",
              "changes"
            ],
            "type": "string",
            "description": "Snapshot returns every matching job. Changes compares complete runs and emits only new, updated, reappeared, or safely expired jobs.",
            "default": "snapshot"
          },
          "stateName": {
            "title": "Monitoring state name",
            "type": "string",
            "description": "Stable name that separates one watchlist or schedule from another.",
            "default": "default"
          },
          "includeUnchanged": {
            "title": "Include unchanged jobs",
            "type": "boolean",
            "description": "Include unchanged rows during changes mode. Disabled by default to avoid duplicate result charges.",
            "default": false
          },
          "notifyOnNoChanges": {
            "title": "Send no-change heartbeat",
            "type": "boolean",
            "description": "Send a webhook heartbeat when a complete monitoring run finds no selected changes.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Datacenter routing is the tested default and keeps proxy cost low. Switch to Residential with Singapore, Hong Kong, or Japan only if a larger run is blocked or rate-limited.",
            "default": {
              "useApifyProxy": true
            }
          },
          "notificationWebhookUrl": {
            "title": "Change notification webhook URL",
            "type": "string",
            "description": "Optional secret HTTPS endpoint for a bounded JSON change summary. It is used only in changes mode."
          },
          "notificationEvents": {
            "title": "Notification events",
            "maxItems": 4,
            "uniqueItems": true,
            "type": "array",
            "description": "Change types that can trigger the webhook.",
            "items": {
              "type": "string",
              "enum": [
                "NEW",
                "UPDATED",
                "REAPPEARED",
                "EXPIRED"
              ],
              "enumTitles": [
                "New jobs",
                "Updated jobs",
                "Reappeared jobs",
                "Expired jobs"
              ]
            },
            "default": [
              "NEW",
              "UPDATED",
              "REAPPEARED",
              "EXPIRED"
            ]
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}