开发者文档

LinkedIn 采集器 API 指南

采集为异步:提交 run → 轮询 → 取数。完整流程见 快速开始;统一响应信封 / run 状态机 / 计费 / 错误码见 认证与错误处理。本页只列各端点的提交目标字段输出字段


通用约定

Base URL https://api.antsdata.com/v1
方法 POST(提交 run)
鉴权 Authorization: Bearer ants_xxxxxxxxxxxx
Content-Type application/json

提交体统一为 { "deliveryMode": "async", "recordLimit": 1000, "targets": [ … ] }targets[] 每个元素的字段见下方各端点「目标字段」表。提交返回 HTTP 201 + { "code": 0, "message": "ok", "data": { "id": <run 号>, "status": "queued" } },随后按 id 轮询 GET /v1/scraper/runs/{id}succeeded,再 GET /v1/scraper/runs/{id}/records 分页取数。

💡 也可用 deliveryMode: "sync" 同步模式(小任务阻塞等终态,超时自动 fallback 转轮询)——详见 快速开始 · 同步模式

端点总览:

端点 路径 说明
个人主页 /v1/scraper/linkedin/profile 采集个人档案(含经历 / 教育 / 技能 / 语言 / 证书)
公司主页 /v1/scraper/linkedin/company 采集公司主页公开信息
职位搜索 /v1/scraper/linkedin/jobs 按条件搜索职位列表
个人主页动态 /v1/scraper/linkedin/posts 采集个人主页动态帖子
公司主页动态 /v1/scraper/linkedin/posts-company 采集公司主页动态帖子

Profile — 个人主页

按 URL 采集个人主页公开信息(含工作经历、教育背景、技能)。每个 URL 是一个采集目标(target),一个 run 内可批量提交多个。

端点POST /v1/scraper/linkedin/profile

目标字段targets[] 每个元素):

字段 类型 必填 说明
profileUrl string ✅必填 个人主页 URL(每行独立投递;须含 /in/<vanity>

输出字段records 每条):

字段 类型 说明
fullName string 全名
headline string 头衔
location string 所在城市
industry string 所在行业
summary string 详细自我介绍
profileUrl string Profile 链接
profileImageUrl string 头像 URL
bannerImageUrl string 背景图 URL
connections number 人脉连接数
followersCount number 关注者数
experience array 工作经历
experience.title string 职位名称
experience.company string 公司名称
experience.companyUrl string 公司 LinkedIn 链接
experience.dateRange string 任职时间段
experience.location string 工作地点
experience.description string 职位描述
experience.isCurrent boolean 是否为当前职位
education array 教育经历
education.school string 学校名称
education.degree string 学位
education.fieldOfStudy string 专业方向
education.dateRange string 就读时间段
skills array 技能标签列表
languages array 语言
languages.name string 语言名称
languages.proficiency string 熟练度
certifications array 证书
certifications.name string 证书名称
certifications.authority string 颁发机构
certifications.issueDate string 颁发日期

提交示例(一个 run 采集 2 个主页):

curl -X POST "https://api.antsdata.com/v1/scraper/linkedin/profile" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "deliveryMode": "async",
    "recordLimit": 1000,
    "targets": [
      { "profileUrl": "https://www.linkedin.com/in/williamhgates/" },
      { "profileUrl": "https://www.linkedin.com/in/satyanadella/" }
    ]
  }'

返回 201{ "code": 0, "data": { "id": 1287345, "status": "queued" } }。记下 id,轮询 GET /v1/scraper/runs/1287345succeeded,再取记录。


Company — 公司主页

按 URL 采集公司主页公开信息。每个 URL 是一个采集目标(target),一个 run 内可批量提交多个。

端点POST /v1/scraper/linkedin/company

目标字段targets[] 每个元素):

字段 类型 必填 说明
companyUrl string ✅必填 公司主页 URL(每行独立投递;须含 /company/<slug>

输出字段records 每条):

字段 类型 说明
companyId string LinkedIn 内部公司 ID
name string 公司全称
description string 公司简介
website string 官网 URL
industry string 所属行业
companySize string 公司规模区间
foundedYear number 成立年份
headquarters object 总部
headquarters.city string 总部城市
headquarters.country string 总部国家
headquarters.address string 总部详细地址
followers number LinkedIn 关注者数
employeesOnLinkedIn number LinkedIn 上注册的员工数
specialties array 业务专长标签
locations array 办公地点
locations.city string 城市
locations.country string 国家
locations.address string 地址
companyUrl string 公司主页链接

提交示例:

curl -X POST "https://api.antsdata.com/v1/scraper/linkedin/company" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "deliveryMode": "async",
    "recordLimit": 1000,
    "targets": [
      { "companyUrl": "https://www.linkedin.com/company/microsoft/" }
    ]
  }'

返回 201{ "code": 0, "data": { "id": 1287346, "status": "queued" } }。轮询该 idsucceeded 再取记录。


Jobs — 职位搜索

按关键词、地点、经验级别等条件搜索职位列表。一个搜索条件是一个采集目标(target)

端点POST /v1/scraper/linkedin/jobs

目标字段targets[] 每个元素):

字段 类型 必填 说明
keywords string 搜索关键词(如 software engineer;建议至少传关键词,否则返回热门列表)
location string 地点(如 United States / Berlin
resultsLimit number 返回职位数上限(1–1000,默认 100,受 max_count 计费上限压低)
experienceLevel string 经验级别:INTERNSHIP / ENTRY_LEVEL / ASSOCIATE / MID_SENIOR / DIRECTOR / EXECUTIVE
jobType string 工作类型:FULL_TIME / PART_TIME / CONTRACT / TEMPORARY / VOLUNTEER / INTERNSHIP / OTHER
workplaceType string 办公方式:ON_SITE / REMOTE / HYBRID
postedWithinDays number 发布时间范围(天,仅 1 / 7 / 30 有效)
companyNames array 按公司名数组过滤(spider 先 typeahead 查公司 ID)
salaryMin number 最低年薪(USD)
country string 出口国家 ISO 代码(如 US / DE

输出字段records 每条):

字段 类型 说明
jobUrl string 职位详情页 URL
jobId string LinkedIn 职位 ID
title string 职位名称
description string 职位描述(JD;HTML 抽取)
applyUrl string 申请链接(可能为空)
postAt string 发布时间(可能为空)
company object 公司信息
company.name string 公司名称
company.link string 公司 LinkedIn 链接
company.logo string 公司 Logo URL(可能为空)
company.industries string 所属行业
location string 地点
jobLevel string 职级(如 Mid-Senior;可能为空)
jobType string 工作类型(如 Full-time;可能为空)
jobFunction string 职能(如 Engineering;可能为空)
applicantsCount string 申请人数(数字字符串,可能为空)
requirements object 任职要求
requirements.skills string 技能要求(可能为空串)
requirements.education string 学历要求
requirements.experience string 经验要求(可能缺失)
salary object 薪资范围
salary.currency string 币种
salary.minAmount number 薪资下限
salary.maxAmount number 薪资上限
salary.payPeriod string 计薪周期(如 YEAR)

提交示例:

curl -X POST "https://api.antsdata.com/v1/scraper/linkedin/jobs" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "deliveryMode": "async",
    "recordLimit": 1000,
    "targets": [
      {
        "keywords": "data engineer",
        "location": "United States",
        "resultsLimit": 100,
        "experienceLevel": "MID_SENIOR",
        "jobType": "FULL_TIME",
        "workplaceType": "REMOTE"
      }
    ]
  }'

返回 201{ "code": 0, "data": { "id": 1287347, "status": "queued" } }。轮询该 idsucceeded 再分页取职位列表。


Posts — 个人主页动态

采集个人主页发布的动态帖子。profileUrlscompanyUrls 至少一侧非空

端点POST /v1/scraper/linkedin/posts

目标字段targets[] 每个元素):

字段 类型 必填 说明
profileUrls array 二选一 个人主页 URL 列表(含 linkedin.com/in/…);与 companyUrls 至少一侧非空
companyUrls array 二选一 公司主页 URL 列表(含 linkedin.com/company/…
resultsLimit number 每 URL 帖子数上限(1–200,默认 25,受 max_count 计费上限压低)
includeComments boolean 是否抓取每帖顶层评论(默认关闭,输出无 comments 字段;开启后附带评论、成本近翻倍)
country string 出口国家 ISO 代码(如 us),不传走全球混播

输出字段records 每条):

字段 类型 说明
postId string 帖子 URN(urn:li:activity:<id> 格式)
permalink string 帖子永久链接
text string 正文文本
createdAt string 发帖时间(ISO 8601 UTC)
author object 作者信息(type 恒为入口侧的 person / company)
author.type string 作者类型(person / company
author.name string 作者名称
author.url string 作者主页链接
metrics object 互动指标
metrics.reactionsCount number 表情反应总数
metrics.commentsCount number 评论数
media array 帖子媒体(转发原帖归为 article,url 指向原帖)
media.type string 媒体类型(image / video / article / document
media.url string 媒体 URL
media.thumbnailUrl string 视频缩略图 URL(仅 type=video 时携带)
media.title string 文章/文档标题(仅 type=article/document 时携带)
comments array 顶层评论(仅 includeComments=true 时存在该键)
comments.commentId string 评论 ID
comments.text string 评论内容
comments.authorName string 评论者姓名
comments.createdAt string 评论时间

提交示例:

curl -X POST "https://api.antsdata.com/v1/scraper/linkedin/posts" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "deliveryMode": "async",
    "recordLimit": 1000,
    "targets": [
      {
        "profileUrls": ["https://www.linkedin.com/in/williamhgates/"],
        "resultsLimit": 25,
        "includeComments": false
      }
    ]
  }'

返回 201{ "code": 0, "data": { "id": 1287348, "status": "queued" } }。轮询该 idsucceeded 再取帖子记录。


Posts by Company — 公司主页动态

采集公司主页发布的动态帖子。以公司主页 URL 为主入口,companyUrlsprofileUrls 至少一侧非空

端点POST /v1/scraper/linkedin/posts-company

目标字段targets[] 每个元素):

字段 类型 必填 说明
companyUrls array 二选一 公司主页 URL 列表(含 linkedin.com/company/…);与 profileUrls 至少一侧非空
profileUrls array 二选一 个人主页 URL 列表(含 linkedin.com/in/…
resultsLimit number 每 URL 帖子数上限(1–200,默认 25,受 max_count 计费上限压低)
includeComments boolean 是否抓取每帖顶层评论(默认关闭,输出无 comments 字段;开启后附带评论、成本近翻倍)
country string 出口国家 ISO 代码(如 us),不传走全球混播

输出字段records 每条,同 Posts):

字段 类型 说明
postId string 帖子 URN(urn:li:activity:<id> 格式)
permalink string 帖子永久链接
text string 正文文本
createdAt string 发帖时间(ISO 8601 UTC)
author object 作者信息(type 恒为入口侧的 person / company)
author.type string 作者类型(person / company
author.name string 作者名称
author.url string 作者主页链接
metrics object 互动指标
metrics.reactionsCount number 表情反应总数
metrics.commentsCount number 评论数
media array 帖子媒体(转发原帖归为 article,url 指向原帖)
media.type string 媒体类型(image / video / article / document
media.url string 媒体 URL
media.thumbnailUrl string 视频缩略图 URL(仅 type=video 时携带)
media.title string 文章/文档标题(仅 type=article/document 时携带)
comments array 顶层评论(仅 includeComments=true 时存在该键)
comments.commentId string 评论 ID
comments.text string 评论内容
comments.authorName string 评论者姓名
comments.createdAt string 评论时间

提交示例:

curl -X POST "https://api.antsdata.com/v1/scraper/linkedin/posts-company" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "deliveryMode": "async",
    "recordLimit": 1000,
    "targets": [
      {
        "companyUrls": ["https://www.linkedin.com/company/microsoft/"],
        "resultsLimit": 25,
        "includeComments": false
      }
    ]
  }'

返回 201{ "code": 0, "data": { "id": 1287349, "status": "queued" } }。轮询该 idsucceeded 再取帖子记录。


取数与轮询

所有端点提交后统一按 run 生命周期取数:

  1. 轮询 GET /v1/scraper/runs/{id}(建议退避 1s→2s→5s)至 succeeded / failed(终态)。
  2. GET /v1/scraper/runs/{id}/records?page=1&pageSize=20 分页取记录,items[] 即上方「输出字段」。
  3. GET /v1/scraper/runs/{id}/download?format=csv 下载整份产物。

端到端示例(含 Python 提交 / 轮询 / 取数)见 快速开始;信封、状态机、计费与错误码见 认证与错误处理


FAQ

Q: 调用后会直接返回数据吗?

不会。采集是异步的:提交拿 run id,轮询到 succeeded 后按 id 取记录。

Q: 一个 run 能采集多个主页 / 公司吗?

可以。Profile / Company 每个 URL 一个 target,一个 run 可含多个 target;逐目标成败见 run 对象的 tasks[](详见认证与错误处理)。

Q: 个人动态与公司动态用哪个端点?

采个人主页动态用 /posts(主入口 profileUrls);采公司主页动态用 /posts-company(主入口 companyUrls)。两端点出参字段一致。

Q: 采集需要登录目标账号吗?

不需要。仅采集公开数据;私密账号无法采集。


下一步