Indeed Job Search 图标

Indeed 职位搜索数据 API

Indeed Jobs · 招聘求职

Indeed 职位搜索暴露一套 graph 风格职位 API——下文中以 /v1/jobs/recommendations 与 /v1/jobs/cards 为例——另有 REST 风格调用覆盖投递状态(/v1/applications/status)、面试(/v1/interviews/list)、未读计数、会话换令牌(/v1/auth/token)与关键词联想(/v1/suggest/keywords)。

有两个接口面很少受到关注。在任何其他调用之前,/v1/session/init 先引导会话,返回 ctk 跟踪键、服务 URL 与 IP 国家,且可凭应用 API-key 请求头加国家、语言请求头匿名调用。登录后,/v1/account/profile 返回 Passport 身份(firstName、emailAddress、accountId),/v1/messages/conversations 分页雇主收件箱,每个会话带 unreadCount 与 messagePreview。

Indeed Job Search(包名 com.indeed.android.jobsearch,版本 296.1.0)是 Indeed 的安卓客户端,覆盖职位搜索、投递、面试与雇主消息。首页信息流、My Jobs、登录与收件箱背后,应用调用 graph 风格职位 API(推荐职位、职位卡片水合、会话初始化、账号资料、雇主会话、简历标签)与 REST 端点(投递状态、面试列表、未读消息、会话换令牌、关键词补全、新职位计数)。匿名调用发送应用 API-key 请求头;登录调用追加 OAuth Bearer 令牌。

应用截图

  • Indeed Job Search 应用截图 1
  • Indeed Job Search 应用截图 2
  • Indeed Job Search 应用截图 3
  • Indeed Job Search 应用截图 4
  • Indeed Job Search 应用截图 5
  • Indeed Job Search 应用截图 6
  • Indeed Job Search 应用截图 7
  • Indeed Job Search 应用截图 8

API 端点一览

  • 获取相关职位(小组件)

    POST /v1/jobs/recommendations opendata

    驱动安卓主屏小组件:最多五个相关职位,含 matchReason、title、sourceEmployerName、overallRating、compensation.formattedText 与 viewJobRedirectClickUrl。

    认证方式: 应用 API-key 请求头加国家、语言、客户端与跟踪请求头。登录后可选 OAuth Bearer 访问令牌。

    • findRelevantJobs
    • trackingKey
    • matchReason
    • title
    • sourceEmployerName
    • employer
    • key
    • overallRating
    • location
    • formatted
    • compensation
    • formattedText
    • indeedApply
    • scopes
    • dateOnIndeed
    • description
    • viewJobRedirectClickUrl

    依据应用界面重构的示意示例,并非实时抓包。

    POST /v1/jobs/recommendations HTTP/1.1
    Content-Type: application/json
    X-App-Key: <app-api-key>
    X-Country: US
    X-Locale: en_US
    X-Client: android-widget
    X-Tracking-Key: <tk>
    
    {
      "limit": 5,
      "context": "homeWidget"
    }
    {
      "trackingKey": "1abcdefghijklmn",
      "results": [{
        "matchReason": {"type": "RECENT_QUERY", "query": "product manager", "location": "Austin, TX"},
        "job": {
          "title": "Staff Product Manager",
          "sourceEmployerName": "Example Corp",
          "employer": {"key": "example-corp", "overallRating": {"value": 4.1}},
          "location": {"formatted": {"short": "Austin, TX"}},
          "compensation": {"key": "USD_140K_180K", "formattedText": "$140,000 - $180,000 a year"},
          "indeedApply": {"scopes": ["RESUME"]},
          "dateOnIndeed": "2026-09-24T12:00:00Z",
          "description": {"text": "Own the job-seeker home feed."}
        },
        "viewJobRedirectClickUrl": "https://example.com/viewjob?jk=abc123"
      }]
    }

    依据应用界面推导;端点细节为示意说明,并非实际抓包。

    • 依据主屏小组件的职位刷新流程重建
    • 依据携带最多五个推荐职位及匹配原因的小组件负载重建
  • 水合职位卡片

    POST /v1/jobs/cards opendata

    按 jobKeys 水合搜索结果页与会话中的职位卡片:title、格式化 location、雇主 logo、overallRating、compensation.formattedText 与 attributes。

    认证方式: 应用 API-key 请求头加国家、语言与跟踪请求头。可选 OAuth Bearer 访问令牌。

    • jobData
    • key
    • url
    • title
    • location
    • formatted
    • short
    • long
    • sourceEmployerName
    • squareLogoUrls
    • url64
    • url128
    • overallRating
    • compensation
    • formattedText
    • attributes
    • label

    依据应用界面重构的示意示例,并非实时抓包。

    POST /v1/jobs/cards HTTP/1.1
    Content-Type: application/json
    X-App-Key: <app-api-key>
    X-Country: US
    X-Locale: en_US
    X-Tracking-Key: <tk>
    
    {
      "jobKeys": ["abc123def456"]
    }
    {
      "results": [{
        "job": {
          "key": "abc123def456",
          "url": "https://example.com/viewjob?jk=abc123def456",
          "title": "Staff Product Manager",
          "location": {"formatted": {"short": "Austin, TX", "long": "Austin, TX 78701"}},
          "sourceEmployerName": "Example Corp",
          "employer": {
            "squareLogoUrls": {"url64": "https://example.com/s/logo64.png", "url128": "https://example.com/s/logo128.png"},
            "overallRating": {"value": 4.1}
          },
          "compensation": {"formattedText": "$140,000 - $180,000 a year"},
          "attributes": [{"key": "jobtype", "label": "Full-time"}]
        }
      }]
    }

    依据应用界面推导;端点细节为示意说明,并非实际抓包。

    • 依据搜索结果与会话中职位卡片的水合流程重建
  • 求职者移动应用初始化

    POST /v1/session/init opendata

    引导求职者会话:cookie 跟踪键(ctk)、服务 URL、实验分桶、IP 国家、服务条款横幅与强制升级标记。

    认证方式: 应用 API-key 请求头加国家与语言请求头。可选 OAuth Bearer 访问令牌。

    • jobseekerMobileAppInit
    • ctk
    • services
    • name
    • url
    • proctorResult
    • deviceId
    • matrixVersion
    • ipCountry
    • ipLookupCountry
    • attributionParametersPayload
    • affiliateKey
    • showBlockingTOSBanner
    • showForceUpgradeModal
    • tosModalContent

    依据应用界面重构的示意示例,并非实时抓包。

    POST /v1/session/init HTTP/1.1
    Content-Type: application/json
    X-App-Key: <app-api-key>
    X-Country: US
    X-Locale: en_US
    
    {
      "platform": "ANDROID",
      "appVersion": "296.1.0"
    }
    {
      "ctk": "1ctkexample",
      "services": [{"name": "jobgraph", "url": "https://example.com/v1"}],
      "proctorResult": {"deviceId": "dev-9f2a", "matrixVersion": "2026.09.1"},
      "ipCountry": "US",
      "ipLookupCountry": "US",
      "attributionParametersPayload": {"affiliateKey": "", "host": "www.example.com", "keywords": "product manager"},
      "showBlockingTOSBanner": false,
      "showForceUpgradeModal": false,
      "tosModalContent": {"version": "2026-01"}
    }

    依据应用界面推导;端点细节为示意说明,并非实际抓包。

    • 依据引导求职者会话的应用启动序列重建
  • 当前 Passport 账号

    POST /v1/account/profile osint

    加载“我”标签页使用的登录 Passport 身份——firstName、lastName、emailAddress、isVerified、accountId——以及收件箱未读计数。

    认证方式: 来自会话换令牌的 OAuth Bearer 访问令牌,加应用 API-key、国家与语言请求头。

    • currentUser
    • PassportAccount
    • firstName
    • lastName
    • emailAddress
    • isVerified
    • accountId
    • isConfirmed
    • isSignedIn
    • creationDate
    • globalUnreadEventCount
    • unreadConversationCount

    依据应用界面重构的示意示例,并非实时抓包。

    POST /v1/account/profile HTTP/1.1
    Content-Type: application/json
    Authorization: Bearer <access_token>
    X-App-Key: <app-api-key>
    X-Country: US
    X-Locale: en_US
    
    {
      "include": ["accountProfile", "unreadCounts"]
    }
    {
      "currentUser": {
        "account": {
          "type": "PassportAccount",
          "accountProfile": {
            "accountName": {"firstName": "Alex", "lastName": "Rivera"},
            "email": {"emailAddress": "[email protected]", "isVerified": true}
          },
          "accountId": "acct-1001",
          "emailAddress": "[email protected]",
          "isConfirmed": true,
          "isSignedIn": true,
          "creationDate": "2019-04-12T08:11:00Z"
        }
      },
      "globalUnreadEventCount": 3,
      "unreadConversationCount": 2
    }

    依据应用界面推导;端点细节为示意说明,并非实际抓包。

    • 依据“我”标签页的登录账号加载流程重建
  • 查找雇主会话

    POST /v1/messages/conversations osint

    分页登录求职者收件箱:会话 id、unreadCount、雇主参与者、关联职位、lastEvent.messagePreview 与 moderationStatus。

    认证方式: 来自会话换令牌的 OAuth Bearer 访问令牌,加应用 API-key、国家、语言与跟踪请求头。

    • findConversations
    • conversations
    • id
    • unreadCount
    • participants
    • role
    • accountKey
    • participantName
    • job
    • key
    • title
    • lastEvent
    • messagePreview
    • locks
    • reasonCode
    • moderationStatus
    • pageInfo

    依据应用界面重构的示意示例,并非实时抓包。

    POST /v1/messages/conversations HTTP/1.1
    Content-Type: application/json
    Authorization: Bearer <access_token>
    X-App-Key: <app-api-key>
    X-Country: US
    X-Locale: en_US
    X-Tracking-Key: <tk>
    
    {
      "conversationFilter": {"excludedLabels": ["ARCHIVE", "SPAM"]},
      "first": 20
    }
    {
      "conversations": [{
        "id": "Y29udjoxMjM",
        "userReadsInfo": {"unreadCount": 1},
        "participants": [{"role": "EMPLOYER", "accountKey": "emp-441", "participantName": "Example Corp Recruiter"}],
        "job": {"key": "abc123def456", "title": "Staff Product Manager"},
        "lastEvent": {"type": "MESSAGE", "messagePreview": "Are you free Thursday?"},
        "locks": {"reasonCode": null},
        "moderationStatus": "NONE"
      }],
      "pageInfo": {"endCursor": "cursor-20", "hasNextPage": true}
    }

    依据应用界面推导;端点细节为示意说明,并非实际抓包。

    • 依据雇主消息收件箱的分页流程重建
  • 最近职位搜索

    POST /v1/search/recent opendata

    返回登录求职者的最近搜索条件(query、location),用于为首页信息流与小组件提供种子数据。

    认证方式: 来自会话换令牌的 OAuth Bearer 访问令牌,加应用 API-key、国家与语言请求头。

    • currentJobSeekerPortrait
    • rawActivities
    • recentJobSearches
    • uid
    • timestamp
    • criteria
    • query
    • location

    依据应用界面重构的示意示例,并非实时抓包。

    POST /v1/search/recent HTTP/1.1
    Content-Type: application/json
    Authorization: Bearer <access_token>
    X-App-Key: <app-api-key>
    X-Country: US
    X-Locale: en_US
    
    {}
    {
      "recentJobSearches": [{
        "uid": "rjs-7788",
        "timestamp": "2026-09-26T18:04:00Z",
        "criteria": {"query": "product manager", "location": "Austin, TX"}
      }]
    }

    依据应用界面推导;端点细节为示意说明,并非实际抓包。

    • 依据首页信息流的最近搜索种子行为重建
  • 求职者资料上的简历标签

    POST /v1/profile/resume-tags osint

    从登录的 jobSeekerProfile 读取简历 id 与 tags,供投递与职位匹配使用。

    认证方式: 来自会话换令牌的 OAuth Bearer 访问令牌,加应用 API-key、国家与语言请求头。

    • jobSeekerProfile
    • profile
    • resume
    • id
    • tags

    依据应用界面重构的示意示例,并非实时抓包。

    POST /v1/profile/resume-tags HTTP/1.1
    Content-Type: application/json
    Authorization: Bearer <access_token>
    X-App-Key: <app-api-key>
    X-Country: US
    X-Locale: en_US
    
    {}
    {
      "jobSeekerProfile": {
        "profile": {
          "resume": {
            "id": "resume-9",
            "tags": ["product-management", "b2b-saas"]
          }
        }
      }
    }

    依据应用界面推导;端点细节为示意说明,并非实际抓包。

    • 依据投递流程中的简历处理重建
  • 投递状态职位(My Jobs)

    GET /v1/applications/status opendata

    列出 My Jobs 标签页已投递与浏览过的职位:jobKey、company.name、管道状态、applyTime、encryptedIaAppId 与 applicationStatus。

    认证方式: 会话 cookie 或 OAuth Bearer 访问令牌。查询参数 type、applyUpdateStartTime、tk(跟踪键)与 from。

    • success
    • appStatusJobs
    • appTk
    • jobTitle
    • jobKey
    • jobUrl
    • jobExpired
    • jobFraudulent
    • withdrawn
    • location
    • company
    • name
    • candidateStatus
    • selfReportedStatus
    • employerJobStatus
    • userJobStatus
    • applyTime
    • indeedApplyable
    • encryptedIaAppId
    • encryptedAdvCandId
    • applicationStatus
    • applicationStatusAction
    • applicationStatusTimestamp

    依据应用界面重构的示意示例,并非实时抓包。

    GET /v1/applications/status?type=APPLIED&applyUpdateStartTime=0&tk=<tk>&from=myjobs HTTP/1.1
    Authorization: Bearer <access_token>
    Accept: application/json
    {
      "success": true,
      "body": {
        "appStatusJobs": [{
          "appTk": "1apptk",
          "jobTitle": "Staff Product Manager",
          "jobKey": "abc123def456",
          "jobUrl": "https://example.com/viewjob?jk=abc123def456",
          "jobExpired": false,
          "jobReported": false,
          "jobFraudulent": false,
          "withdrawn": false,
          "location": "Austin, TX",
          "company": {"name": "Example Corp"},
          "statuses": {
            "candidateStatus": {"status": "APPLIED", "timestamp": 1727049600000},
            "selfReportedStatus": {"status": "WAITING", "timestamp": 1727049600000},
            "employerJobStatus": {"status": "ACTIVE", "timestamp": 1727049600000},
            "userJobStatus": {"status": "APPLIED"}
          },
          "applyTime": 1727049600000,
          "indeedApplyable": true,
          "hasIaAppId": true,
          "hasApplicationPreview": true,
          "hasInterviewNowAccess": false,
          "normalizedJobTitle": "product manager",
          "employerEstimatedResponseDays": 7,
          "encryptedIaAppId": "ia-enc-1",
          "encryptedAdvCandId": "cand-enc-1",
          "applicationStatus": "UNDER_REVIEW",
          "applicationStatusAction": "WAIT",
          "applicationStatusTimestamp": 1727136000000,
          "companyApplyUrl": null
        }]
      }
    }

    依据应用界面推导;端点细节为示意说明,并非实际抓包。

    • 依据 My Jobs 投递列表的刷新流程重建
  • 列出面试

    GET /v1/interviews/list opendata

    加载 My Jobs 的面试邀请:formatType、status、durationInMinutes、invitationNote、jobDetails 与 timeSlots。

    认证方式: 会话 cookie 或 OAuth Bearer 访问令牌。查询参数 statuses、formats、start、tk 与 from。

    • id
    • externalInterviewId
    • formatType
    • status
    • durationInMinutes
    • interviewGTS
    • outcome
    • invitationNote
    • availabilityBasedScheduling
    • jobDetails
    • title
    • company
    • jobKey
    • jobUrl
    • location
    • fraudulent
    • timeSlots

    依据应用界面重构的示意示例,并非实时抓包。

    GET /v1/interviews/list?statuses=INVITED,SCHEDULED&formats=VIDEO,PHONE&start=0&tk=<tk>&from=myjobs HTTP/1.1
    Authorization: Bearer <access_token>
    Accept: application/json
    {
      "success": true,
      "body": {
        "interviews": [{
          "id": "int-441",
          "externalInterviewId": "ext-882",
          "formatType": "VIDEO",
          "status": "SCHEDULED",
          "durationInMinutes": "30",
          "interviewGTS": true,
          "outcome": null,
          "invitationNote": "Looking forward to chatting.",
          "availabilityBasedScheduling": true,
          "jobDetails": {
            "title": "Staff Product Manager",
            "company": "Example Corp",
            "jobKey": "abc123def456",
            "jobUrl": "https://example.com/viewjob?jk=abc123def456",
            "location": "Austin, TX",
            "fraudulent": "false",
            "reportedByUser": "false"
          },
          "timeSlots": [{"start": "2026-09-30T16:00:00Z", "end": "2026-09-30T16:30:00Z"}]
        }]
      }
    }

    依据应用界面推导;端点细节为示意说明,并非实际抓包。

    • 依据 My Jobs 中的面试邀请界面重建
  • 未读消息汇总

    GET /v1/messages/unread-summary osint

    消息标签页的角标计数:totalUnreadConversationCount 与 totalUnreadMessageCount。

    认证方式: 会话 cookie 或 OAuth Bearer 访问令牌。固定的 client 查询参数标识安卓应用。

    • data
    • totalUnreadConversationCount
    • totalUnreadMessageCount

    依据应用界面重构的示意示例,并非实时抓包。

    GET /v1/messages/unread-summary?client=android-app HTTP/1.1
    Authorization: Bearer <access_token>
    Accept: application/json
    {
      "data": {
        "totalUnreadConversationCount": 2,
        "totalUnreadMessageCount": 5
      }
    }

    依据应用界面推导;端点细节为示意说明,并非实际抓包。

    • 依据消息标签页的角标更新重建
  • 会话 cookie 换 OAuth 令牌

    POST /v1/auth/token osint

    把登录会话 cookie 换成 OAuth access_token / expires_in / scope / token_type,用作应用 graph 与职位服务的 Bearer 认证。

    认证方式: 请求携带会话 cookie(含刷新令牌 cookie)。表单字段 client_id 与 scope。后续调用发送 Authorization: Bearer access_token。

    • client_id
    • scope
    • access_token
    • expires_in
    • token_type

    依据应用界面重构的示意示例,并非实时抓包。

    POST /v1/auth/token HTTP/1.1
    Content-Type: application/x-www-form-urlencoded
    Cookie: refresh_token=<refresh>
    
    client_id=android-app&scope=openid%20profile%20email
    {
      "access_token": "eyJhbGciOi...",
      "expires_in": 3600,
      "scope": "openid profile email",
      "token_type": "Bearer"
    }

    依据应用界面推导;端点细节为示意说明,并非实际抓包。

    • 依据登录会话的升级流程重建
  • 关键词自动补全(what)

    GET /v1/suggest/keywords opendata

    What 搜索框的联想输入:query 加 country/language/ctk 返回搜索结果页使用的 suggestion 字符串。

    认证方式: 无需认证。查询参数 query、ctk、country、language、count;可选会话标识。

    • query
    • ctk
    • country
    • language
    • count
    • formatted
    • suggestion
    • formattedSuggestion

    依据应用界面重构的示意示例,并非实时抓包。

    GET /v1/suggest/keywords?query=product%20man&ctk=<ctk>&country=US&language=en&count=8&formatted=1 HTTP/1.1
    Accept: application/json
    [
      {
        "suggestion": "product manager",
        "formattedSuggestion": "<b>product man</b>ager"
      },
      {
        "suggestion": "product management intern",
        "formattedSuggestion": "<b>product man</b>agement intern"
      }
    ]

    依据应用界面推导;端点细节为示意说明,并非实际抓包。

    • 依据搜索框的联想输入行为重建
  • 已保存搜索的新职位计数

    GET /v1/jobs/new-count opendata

    返回自某时间戳起匹配已保存关键词/地点组合的新职位数量——驱动新职位角标。

    认证方式: 可选登录会话。查询参数 hl、q(关键词)、l(地点)与 since(epoch 时间戳)。

    • status
    • body
    • key
    • newCount

    依据应用界面重构的示意示例,并非实时抓包。

    GET /v1/jobs/new-count?hl=en&q=product%20manager&l=Austin%2C%20TX&since=1727049600000 HTTP/1.1
    Accept: application/json
    {
      "status": "ok",
      "body": {
        "key": "product manager|Austin, TX",
        "newCount": 14
      }
    }

    依据应用界面推导;端点细节为示意说明,并非实际抓包。

    • 依据已保存搜索的新职位角标重建

数据类别

  • 职位列表
  • 投递申请
  • 面试
  • 身份信息
  • 消息
  • 搜索历史
  • 简历

数据使用场景与案例

  • 人才管道对账

    ATS 每晚同步 My Jobs 的 applicationStatus、encryptedIaAppId 与面试 formatType/status,让招聘方看到的管道与候选人在 Indeed 中看到的一致。

  • 公开卡片中的职位市场脉搏

    劳动力市场看板可水合 getJobsData 卡片(title、compensation.formattedText、overallRating、location.formatted),且不存储候选人个人身份信息。

  • 雇主回复的收件箱 SLA

    求职者 CRM 可监控 FindConversations 的 unreadCount 与 /messaging/jobseekers/v2/summary 的未读总数,当雇主会话停滞时触发提醒。

  • 投递时的身份匹配

    背景调查服务商可在提交 Indeed Apply 前,把 initGraph 返回的 Passport firstName/lastName/emailAddress/accountId 与 GetResumeTags 返回的简历 id 绑定。

常见问题

Indeed 职位卡片来自哪里?

应用向 graph 风格职位 API 发 POST——首页小组件对应 /v1/jobs/recommendations,结果卡片对应 /v1/jobs/cards——返回标题、雇主名称、薪资文本与总体评分。

Indeed 职位搜索如何认证?

调用发送应用 API-key 请求头及国家、语言请求头。登录后应用在 /v1/auth/token 把会话换成 OAuth 访问令牌,并以 Bearer 方式发送。

登录账号暴露哪些身份字段?

账号资料调用返回名字、姓氏、邮箱地址、验证状态与账号 id,以及收件箱未读计数。

哪些调用驱动 My Jobs?

GET /v1/applications/status 列出已投递职位及每条投递的管道状态;GET /v1/interviews/list 列出面试邀请,含形式、时间段与职位详情。

相关主题

  • Indeed 职位搜索 API
  • Indeed 职位推荐 API
  • Indeed 投递状态 API
  • Indeed 会话令牌交换
  • Indeed 面试 API
  • Indeed 自动补全建议

需要集成这个 App 的数据 API?

我们可为任意指定 App 交付定制集成——源码交付 USD 500 起,或托管 API 按调用计费。告诉我们您需要的数据即可。

  • 每个项目均签 NDA 与 SOW
  • 3–7 天交付
  • 验收通过后才付款
  • 仅在授权范围内作业

获取报价