Indeed 职位搜索数据 API
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 令牌。
应用截图
API 端点一览
获取相关职位(小组件)
POST
/v1/jobs/recommendationsopendata驱动安卓主屏小组件:最多五个相关职位,含 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/cardsopendata按 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/initopendata引导求职者会话: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/profileosint加载“我”标签页使用的登录 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/conversationsosint分页登录求职者收件箱:会话 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/recentopendata返回登录求职者的最近搜索条件(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-tagsosint从登录的 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/statusopendata列出 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/listopendata加载 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-summaryosint消息标签页的角标计数: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/tokenosint把登录会话 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/keywordsopendataWhat 搜索框的联想输入: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-countopendata返回自某时间戳起匹配已保存关键词/地点组合的新职位数量——驱动新职位角标。
认证方式: 可选登录会话。查询参数 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 天交付
- 验收通过后才付款
- 仅在授权范围内作业