用 Python 调用 Glassdoor 薪资数据 API:按职位、城市和公司查询薪资

发布于 2026年10月8日

做薪酬对标、海外招聘分析或 offer 评估时,最核心的问题是:某个职位在某个城市、某家公司,到底值多少钱。Glassdoor 上有大量员工匿名提交的薪资样本,但网页有登录墙和反爬限制,自建爬虫要维护代理池、Cookie 和页面解析,成本高且不稳定。Glassdoor 数据接口把这些公开数据整理成普通 GET 请求:一次调用就能拿到按职位和公司划分的薪资区间、样本量和置信度。本文用 Python 演示完整链路:公司名解析为 company_id,查单公司薪资,再与市场估值对比,最后批量拉取全公司薪资列表。

接口一览

本文涉及薪资链路的四个操作,完整参数见 Glassdoor 数据 API 文档页:

操作必填参数用途
company-searchquery按公司名搜索,解析出全项目通用的 company_id
company-salariescompany_id、job_title查某公司某职位的薪资区间(最低/中位/最高)
salary-estimatejob_title、location不限公司,查某职位在某城市的市场薪资估值
company-salaries-v2company_id分页浏览某公司所有职位的薪资报告列表

同项目还有公司概览(company-overview)、员工评价(company-reviews)、职位搜索(job-search / company-jobs)和面试经验(company-interviews),FAQ 里会简要说明。

准备工作

注册并在控制台复制自己的 API Key,新账号自带免费测试额度。请把 Key 放在服务端环境变量里(下文用 OPENDATA_API_KEY),不要写进前端代码或公开仓库;Key 出现在查询参数中,可能进入访问日志,注意脱敏。接口数据来自公开内容,仅供研究与信息参考。

第一步:公司名解析为 company_id

除 salary-estimate 外,薪资、评价、职位、面试接口都以 company_id 为入口。先用 company-search 把公司名解析成 ID:

curl --get 'https://api.opendata-api.com/api/project/glassdoor/company-search?key=YOUR_API_KEY' \
  --data-urlencode 'query=google' \
  --data-urlencode 'limit=5'

响应外层是 {code, message, data} 信封:code=200 只表示平台受理了请求,业务结果要看 data。这里 data 是按相关度排序的公司数组,每项含 company_id、name、rating、review_count、salary_count、job_count、headquarters_location、logo、industry 等字段。建议解析一次后把 company_id 入库,后续接口全部复用它。如果 data 是空数组,说明没有匹配公司,应停止流程而不是原地重试。

第二步:查某公司某职位的薪资

company-salaries 返回单个估值:总包最低/中位/最高(min_salary、median_salary、max_salary),并拆出基本工资(*_base_salary)与额外薪酬(*_additional_pay),附 salary_period(如 YEAR)、salary_currency、salary_count(背后的员工报告数)和 confidence 置信度。可选 location + location_type(CITY/STATE/COUNTRY)把口径从全国收窄到城市,years_of_experience 按经验年限分档:

curl --get 'https://api.opendata-api.com/api/project/glassdoor/company-salaries?key=YOUR_API_KEY' \
  --data-urlencode 'company_id=9079' \
  --data-urlencode 'job_title=software engineer' \
  --data-urlencode 'location=san francisco' \
  --data-urlencode 'location_type=CITY'

注意一个容易踩的坑:company_id 不存在时 HTTP 仍是 200,code 也是 200,但响应里没有 data 字段。这是业务层的"未找到",应当停止后续流程,既不能当成有效数据入库,也不要原地重试。

第三步:Python 对比公司薪资与市场行情

salary-estimate 不需要公司 ID,传职位和城市就能拿到该市场的薪资估值区间(含薪资周期与币种)。把两个接口串起来,就能回答"这家公司的 offer 相对市场水平是高是低":

import os
import time

import requests

BASE = "https://api.opendata-api.com/api/project/glassdoor"
KEY = os.environ["OPENDATA_API_KEY"].strip()


def call(operation_id, params):
    resp = requests.get(
        f"{BASE}/{operation_id}",
        params={"key": KEY, **params},
        timeout=30,
    )
    resp.raise_for_status()  # HTTP layer: 4xx/5xx means transport or quota trouble
    envelope = resp.json()
    if str(envelope.get("code")) != "200":
        raise RuntimeError(f"Platform rejected the request: {envelope.get('message')}")
    return envelope.get("data")


def resolve_company_id(name):
    data = call("company-search", {"query": name, "limit": 1})
    if not data:
        return None  # Empty array means no matching employer
    return str(data[0].get("company_id"))


def company_salary(company_id, job_title, location=None):
    params = {"company_id": company_id, "job_title": job_title}
    if location:
        params.update({"location": location, "location_type": "CITY"})
    # Unknown company id returns HTTP 200 with no data field at all
    return call("company-salaries", params)


def market_salary(job_title, location):
    return call("salary-estimate", {
        "job_title": job_title,
        "location": location,
        "location_type": "CITY",
    })


company_id = resolve_company_id("google")
if company_id is None:
    raise SystemExit("Company not found; stop instead of retrying")

offer = company_salary(company_id, "software engineer", location="san francisco")
if offer:
    print("company median:", offer.get("median_salary"), offer.get("salary_currency"))
    print("reports behind it:", offer.get("salary_count"), offer.get("confidence"))

time.sleep(1)  # Pause between calls
market = market_salary("software engineer", "san francisco")
if market:
    print("market estimate payload:", market)  # Range plus period and currency

第四步:批量拉取全公司薪资列表

需要某公司所有职位的薪资分布时,用 company-salaries-v2 分页浏览,不必一个职位一个职位地查:

curl --get 'https://api.opendata-api.com/api/project/glassdoor/company-salaries-v2?key=YOUR_API_KEY' \
  --data-urlencode 'company_id=9079' \
  --data-urlencode 'sort=MOST_SALARIES' \
  --data-urlencode 'page=1'

sort 支持 MOST_SALARIES(报告数最多的职位优先)、HIGH_TO_LOW(薪资从高到低)、MOST_RECENT(最新报告优先);可用 job_title、location 收窄列表,用 page 逐页翻完。行数据与公司薪资页一致,可直接进分布图或导出 CSV。

薪资字段的解读要点

  • 总包与拆分:median_salary 是总包中位数,基本工资与额外薪酬(奖金、股票等)分别在 *_base_salary 与 *_additional_pay 里,做对比时先统一口径。
  • 周期与币种:salary_period 可能是年薪也可能是时薪,跨国家对比务必先看 salary_currency 再做汇率归一。
  • 样本量加权:salary_count 小、confidence 低的估值波动大,建基准库时建议按样本量设最小阈值。
  • 区域站点:所有接口支持 domain 参数切换区域站点(默认美国站),做英国、印度等市场时带上对应域名,结果更贴近当地口径。

使用场景

  • Offer 评估工具:候选人输入公司和职位,对比该公司中位数与市场估值。
  • 薪酬对标表:同一职位跨多家目标公司批量查 company-salaries,建基准库。
  • 招聘市场分析:salary-estimate 按城市横切同一职位,画薪酬热力图。
  • 人力资源预算:按经验年限分档估算各岗位薪酬带。
  • 雇主品牌与舆情:company-reviews 拉取员工评价的优缺点文本做情感分析。

常见问题

Glassdoor 有官方 API 吗? 官方接口基本只面向合作方开放,普通开发者很难申请到。本平台提供的是第三方数据接口,数据来自公开可查内容,供研究与信息参考。

怎么抓取 Glassdoor 数据不被封? 不要自建爬虫。网页端有登录墙和行为风控,需要住宅代理池加浏览器指纹,成本高且随时可能失效。走数据接口就是普通 HTTPS 请求,不需要任何代理。

如何获取 Glassdoor 公司 ID? 调用 company-search 传公司名(如 query=google),返回数组里每项的 company_id 即为所求。解析一次入库,后续所有接口复用。

如何批量获取公司薪资数据? 两条路:对固定职位清单循环调 company-salaries;或用 company-salaries-v2 按页翻完某公司全部职位的薪资报告。注意控制请求间隔。

海外招聘信息用什么 API 接口? 本项目的 job-search 支持按关键词和城市搜全球在招职位,可按发布时间、远程、易申请、最低公司评分过滤;company-jobs 则能拉取某公司全部在招岗位。两者都返回职位链接与薪资区间(如雇主披露)。

怎么用 Python 调用 Glassdoor 接口? 见上文完整示例:requests 发 GET,先查 code 信封再取 data,公司名先解析成 company_id,识别"HTTP 200 但无 data"的未找到语义。

薪资对比数据从哪里可以拿到? 公司维度用 company-salaries(含样本量与置信度),市场维度用 salary-estimate(不限公司),两者相减就是溢价或折价。

如何获取某公司的面试经验和面试题? 用 company-interviews 传 company_id,返回候选人提交的面试流程、真实面试题、难度与结果,支持按职位过滤和 received_offer_only 只看拿到 offer 的样本。

怎么做公司评价的舆情监控? 用 company-reviews 定时拉取:每页 10 条,可按关键词、语言、在职状态过滤,按 MOST_RECENT 排序只看最新评价,响应里的 page_count 和 filtered_review_count 用于规划翻页。职位搜索场景注意 job-search 用的是不透明 cursor 翻页令牌,要原样带回,不要按页码推算。另外所有接口都支持 domain 参数切换区域站点(如英国 www.glassdoor.co.uk),做非美国市场时记得带上。

更多支持

如果你还需要 Indeed、LinkedIn、Levels.fyi、Kununu 等相似平台的数据接口,可以通过联系我们页面提出需求,我们会按需评估新增。对数据安全或调用量有更高要求的团队,也支持源码级私有化部署。

立即试用

在 Glassdoor 数据 API 页面在线测试,或阅读 company-search、company-salaries、salary-estimate 与 company-salaries-v2 的参考文档。单次调用费用见定价。