采集为异步:提交 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/1287345至succeeded,再取记录。
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" } }。轮询该id至succeeded再取记录。
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" } }。轮询该id至succeeded再分页取职位列表。
Posts — 个人主页动态
采集个人主页发布的动态帖子。profileUrls 与 companyUrls 至少一侧非空。
端点: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" } }。轮询该id至succeeded再取帖子记录。
Posts by Company — 公司主页动态
采集公司主页发布的动态帖子。以公司主页 URL 为主入口,companyUrls 与 profileUrls 至少一侧非空。
端点: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" } }。轮询该id至succeeded再取帖子记录。
取数与轮询
所有端点提交后统一按 run 生命周期取数:
- 轮询
GET /v1/scraper/runs/{id}(建议退避 1s→2s→5s)至succeeded/failed(终态)。 GET /v1/scraper/runs/{id}/records?page=1&pageSize=20分页取记录,items[]即上方「输出字段」。- 或
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: 采集需要登录目标账号吗?
不需要。仅采集公开数据;私密账号无法采集。
