{
  "openapi": "3.0.1",
  "info": {
    "title": "China Jobs Feed 中国招聘: Zhaopin, Liepin, 51job, Lagou, Shixiseng",
    "description": "Search nine Chinese job boards in one run: Zhaopin 智联招聘, Liepin 猎聘, 51job 前程无忧, ChinaHR, Shixiseng, Lagou and more. Get one job format with monthly CNY salary, English city and education labels, cross-board duplicate groups, and new, updated or closed jobs on each scheduled run.",
    "version": "0.1",
    "x-build-id": "THfklW4UnrCMoEgUj"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/getascraper~china-jobs-feed/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-getascraper-china-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/getascraper~china-jobs-feed/runs": {
      "post": {
        "operationId": "runs-sync-getascraper-china-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/getascraper~china-jobs-feed/run-sync": {
      "post": {
        "operationId": "run-sync-getascraper-china-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": {
          "sources": {
            "title": "Job boards",
            "type": "array",
            "description": "Which Chinese job boards to read. Each board is searched with the same keywords, cities and filters, and every row says which board it came from. 51job and Lagou need a real browser, so they are slower and count as premium boards; they run on their own after the other boards finish and need at least 1024 MB of run memory (900 MB minimum). Lagou is switched off by default because it is blocked on some attempts and then returns nothing.",
            "items": {
              "type": "string",
              "enum": [
                "zhaopin",
                "iguopin",
                "chinahr",
                "liepin",
                "echinacities",
                "jobui",
                "shixiseng",
                "51job",
                "lagou"
              ],
              "enumTitles": [
                "Zhaopin 智联招聘 (largest board, Chinese)",
                "iGuopin 国聘 (state-owned and campus roles)",
                "ChinaHR 中华英才网 (mainstream roles, no descriptions)",
                "Liepin 猎聘 (mid and senior roles, search by job category)",
                "eChinaCities Jobs (English, teaching and expat roles)",
                "Jobui 职友集 (up to 20 jobs per keyword and city)",
                "Shixiseng 实习僧 (internships and campus roles)",
                "51job 前程无忧 (premium, browser based)",
                "Lagou 拉勾网 (premium, tech roles, sometimes unavailable)"
              ]
            },
            "default": [
              "zhaopin",
              "iguopin",
              "chinahr",
              "liepin"
            ]
          },
          "startUrls": {
            "title": "Board search links",
            "type": "array",
            "description": "Optional search links copied from a supported board (Zhaopin, iGuopin, ChinaHR, Liepin, eChinaCities, Jobui, Shixiseng, 51job, Lagou). The board is detected from each link. Empty the Job boards list to read only the pasted links; a link that belongs to no supported board is reported and skipped.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Job titles or skills to search. Chinese and English both work, for example Python or 数据分析. Every keyword is searched in every city. eChinaCities only understands English words, so Chinese keywords are skipped there. Liepin matches your keyword to its closest job category. Leave empty to browse without a keyword on boards that allow it.",
            "default": [
              "Python"
            ],
            "items": {
              "type": "string"
            }
          },
          "expandKeywords": {
            "title": "Add Chinese and English synonyms",
            "type": "boolean",
            "description": "Also search a short built-in list of synonyms for common titles (for example Python also searches Python工程师 and Python开发). Finds more jobs and uses more requests.",
            "default": false
          },
          "cities": {
            "title": "Cities",
            "type": "array",
            "description": "Chinese cities in English, Chinese or GB code, for example Shanghai, 深圳 or 440300. Leave the list empty, or enter Nationwide, to search all of China. An unknown city is reported with suggestions and never turned into a nationwide search. Each board supports the cities it has verified codes for and says so when it skips one.",
            "default": [
              "Beijing"
            ],
            "items": {
              "type": "string"
            }
          },
          "employmentKind": {
            "title": "Job kind",
            "enum": [
              "any",
              "fulltime",
              "internship",
              "campus"
            ],
            "type": "string",
            "description": "Keep full-time jobs, internships or campus recruitment only. Boards that do not publish a kind simply return nothing for kinds they do not have.",
            "default": "any"
          },
          "experience": {
            "title": "Experience band",
            "enum": [
              "any",
              "fresh-graduate",
              "1-3",
              "3-5",
              "5-10",
              "10-plus"
            ],
            "type": "string",
            "description": "Keep jobs whose required experience overlaps this band. Jobs that do not state experience are dropped when a band is chosen.",
            "default": "any"
          },
          "education": {
            "title": "Minimum education",
            "enum": [
              "any",
              "associate",
              "bachelor",
              "master",
              "phd"
            ],
            "type": "string",
            "description": "Keep jobs that ask for at least this level. Jobs that do not state an education level are dropped when a level is chosen.",
            "default": "any"
          },
          "companyTypes": {
            "title": "Company types",
            "type": "array",
            "description": "Keep employers of these ownership types (private, state-owned, foreign-owned, joint venture, listed). Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "private",
                "soe",
                "foreign",
                "joint-venture",
                "listed"
              ],
              "enumTitles": [
                "Private",
                "State-owned",
                "Foreign-owned",
                "Sino-foreign joint venture",
                "Listed company"
              ]
            },
            "default": []
          },
          "minMonthlySalaryCny": {
            "title": "Minimum monthly salary (CNY)",
            "minimum": 0,
            "maximum": 10000000,
            "type": "integer",
            "description": "Keep jobs whose published salary range reaches at least this monthly amount. Yearly and daily pay is converted to a monthly figure first. Jobs with no published salary are dropped when a salary limit is set."
          },
          "maxMonthlySalaryCny": {
            "title": "Maximum monthly salary (CNY)",
            "minimum": 0,
            "maximum": 10000000,
            "type": "integer",
            "description": "Keep jobs whose published salary range starts at or below this monthly amount."
          },
          "onlyDisclosedSalary": {
            "title": "Only jobs with a published salary",
            "type": "boolean",
            "description": "Drop jobs that say salary is negotiable or show no salary at all.",
            "default": false
          },
          "postedWithinDays": {
            "title": "Posted within (days)",
            "minimum": 1,
            "maximum": 365,
            "type": "integer",
            "description": "Keep jobs posted or updated within this many days. Jobs that carry no date cannot be checked and are dropped when this is set."
          },
          "companyNames": {
            "title": "Company names",
            "type": "array",
            "description": "Keep only jobs from companies whose name contains one of these words.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Exclude words",
            "type": "array",
            "description": "Drop jobs whose title, company, category or tags contain any of these words. English words match whole words only (excluding go keeps Google jobs); Chinese words match anywhere in the text.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "includeDescription": {
            "title": "Include full description",
            "type": "boolean",
            "description": "Add the job description text where the board provides it. Makes rows larger.",
            "default": false
          },
          "includeRecruiterSignals": {
            "title": "Include recruiter activity signals",
            "type": "boolean",
            "description": "Add how recently and how often the recruiter replies, where the board shows it. Counts and recency only, no names.",
            "default": false
          },
          "includeRecruiterNames": {
            "title": "Include recruiter names",
            "type": "boolean",
            "description": "Add the recruiter name, title and avatar where the board shows them. These are personal details, so they stay off unless you need them.",
            "default": false
          },
          "includeSourceFields": {
            "title": "Include board source record",
            "type": "boolean",
            "description": "Attach the untouched record from the board under provenance, for audits and fields not mapped to the common format.",
            "default": false
          },
          "convertToUsd": {
            "title": "Add USD salary figures",
            "type": "boolean",
            "description": "Add monthly salary in US dollars using the current exchange rate. If the rate cannot be loaded the USD fields are left out.",
            "default": false
          },
          "monitorScope": {
            "title": "Monitor name",
            "type": "string",
            "description": "Give a name to track this search over time. Each run marks every row NEW, UPDATED, UNCHANGED or REOPENED, and a job that stays gone on two complete scans is reported CLOSED. Use the same name and settings on every scheduled run. Leave empty for a one-off run.",
            "default": ""
          },
          "outputMode": {
            "title": "Output mode",
            "enum": [
              "all",
              "changesOnly",
              "compact"
            ],
            "type": "string",
            "description": "All rows with every field, only rows that are new or changed since the last run, or a short compact row for feeds. Compact rows keep one row per job.",
            "default": "all"
          },
          "uniqueOnly": {
            "title": "One row per job across boards",
            "type": "boolean",
            "description": "When the same job is listed on several boards, keep only the richest copy. Every row carries a cluster id either way, so you can also group them yourself.",
            "default": false
          },
          "includeClosed": {
            "title": "Report closed jobs",
            "type": "boolean",
            "description": "When monitoring, add a short CLOSED row for each job that disappeared on two complete scans. Closed rows count as delivered rows.",
            "default": true
          },
          "maxTotalRows": {
            "title": "Maximum rows in total",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Hard limit on rows delivered by the whole run. It is shared fairly between the boards, and a board that finds less hands its share to the others.",
            "default": 25
          },
          "maxItemsPerSource": {
            "title": "Maximum rows per board",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Most jobs read from one board in this run (split across your keyword and city combinations).",
            "default": 25
          },
          "maxPagesPerSource": {
            "title": "Maximum result pages per search",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Most result pages read for each keyword and city on a board. A search that stops here is not treated as complete, so it can not report closed jobs.",
            "default": 5
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Optional. By default each board is tried without a proxy first and moves to a proxy only if it is refused. A proxy chosen here is used for every board instead."
          },
          "boardOptions": {
            "title": "Board-specific options",
            "type": "object",
            "description": "Optional per-board settings as JSON, keyed by board id. For example {\"iguopin\": {\"categoryIds\": [\"...\"]}} or {\"51job\": {\"industry\": \"...\", \"sortBy\": \"1\"}}. Unknown keys are ignored.",
            "default": {}
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}