CrawlForge MCP
数据提取1 credit

scrape_template

20 个预置提取器:热门站点、通过平台自有文档化公开 API 读取的六个 ATS 招聘板,以及免密钥的政府 API。无需 schema、无需选择器、无需 LLM——传入模板名称,配合 URL 或 params 即可。每次调用 1 credit,无论返回多少条记录。

使用场景

快速获取电商数据

无需编写任何选择器即可获取 Amazon 商品的价格、评分和库存。

聚合开发者资料

将 GitHub 仓库、npm 包和 Stack Overflow 活动汇总到一个开发者视图中。

社交媒体监控

用每个来源一个端点的方式追踪 Product Hunt 发布和 Hacker News;Reddit 则用 reddit-thread 读取帖子,用 reddit_search 读取评论树。

一次调用读取整个招聘板

读取某公司 Greenhouse、Lever、Ashby、Workable、Recruitee 或 Teamtailor 招聘板上的全部已发布职位——数值直接来自平台自有 API,而不是从招聘页面解析而来。

Endpoint

POST/api/v1/tools/scrape_template
Auth Required
Free 计划 1 req/s
1 credit

Parameters

请传入 `url` 或 `params`,不要两者皆无。 list 两者都不需要,而 auto 始终需要 url。页面模板需要 url;平台 API 连接器接受 params,或者接受一个招聘板 URL 并自行解析成 API 端点。
NameTypeRequiredDefaultDescription
template
stringRequired-
模板名称——20 个受支持模板之一。传入 `"auto"` 可根据 `url` 自动选择模板;响应中返回的是实际选中的标识符,绝不是字面量 `"auto"`。传入 `"list"` 则以编程方式发现这些模板。
Example: github-repo
url
stringOptional-
要抓取的 URL。除非 `template` 为 `"list"`,或你改用 `params` 调用连接器,否则必填。
Example: https://github.com/mysleekdesigns/crawlforge-mcp
params
objectOptional-
供读取平台 API(而非页面)的连接器使用的输入:招聘板的板标识符(`company`)、`shopify-collection` 的 `store` 与 `collection`、`nhtsa-vin` 的 `vin`、`npi-provider` 使用登记库自身的检索字段。各连接器的额外选项也放在这里:Greenhouse 的 `content: true`、Workable 的 `details: true`、Lever 的 `skip`/`limit`、Teamtailor 的 `per_page`/`offset`。缺少必填输入时会被拒绝,并指明具体是哪个参数。
Example: { "company": "stripe" }
timeout
numberOptional15000
请求超时时间,单位毫秒(5000–60000)。
Example: 15000
respect_robots
booleanOptionaltrue
遵守目标站点的 robots.txt。保持 `true` 时,robots.txt 对 `CrawlForge` 禁止的路径会在抓取之前以 403 拒绝,且不扣除 credits。仅在你与目标站点另有约定时才设为 `false`——此时响应会带上一条 `warnings`,并且该覆盖会记录到你的 API key 上。
Example: true

模板:页面与商品

20 个模板,分为三组。 每个模板都返回一种针对其来源调整过的规范化 JSON 结构。

amazon-product
商品标题、价格、评分、评论、库存状态
shopify-product
精确价格、原价、每个变体的库存与选项——读自店铺自己的 JSON,因此价格不会被误读或编造。适用于任何 Shopify 店铺,包括自定义域名。当店铺拒绝其 JSON 端点(401、403、404 或 410)时,记录改从商品页面自身的 schema.org JSON-LD 读取,标记为 source: json-ld 并附带警告;各变体库存、对比价和选项名称不在 JSON-LD 中,这些字段为 null
shopify-collection
从店铺自己的 products.json 读取某个集合中的全部商品,价格和库存与 shopify-product 针对单件商品返回的同样权威。默认每页 30 个,最多 250 个
github-repo
star 数、fork 数、语言、最近提交、描述
youtube-video
标题、频道、播放量、点赞数、时长、发布日期
reddit-thread
来自 Arctic Shift 存档的帖子记录——id、标题、subreddit、作者、得分、赞同比例、评论数、正文、flair、删除状态(reddit.com 封禁直接抓取)。把 id 传给 reddit_search 并设置 mode "thread" 即可获取评论树
hacker-news-front-page
热门条目、得分和评论数
producthunt-launch
产品名称、标语、分类、官网、关注者与评价数
stackoverflow-question
问题、投票数、回答、标签、采纳情况
npm-package
版本、每周下载量、许可证、依赖项

模板:招聘板

六家招聘管理系统,各自通过该平台记录为公开、免认证使用的端点读取。六者都归一到同一种职位结构,因此两个招聘板可以直接合并而无需按数据源映射——招聘板 API 指南介绍了该结构及其理由。

greenhouse-jobs
Job Board API。一次请求返回全部已发布职位;描述通过 content: true 可选获取
lever-postings
Postings API,已分离出团队、工作投入类型和办公模式。支持 skip/limit 分页
ashby-jobs
Public Job Posting API。部门、团队、雇佣类型与办公模式;描述需通过 descriptions: true 选择加入
workable-jobs
公开的 accounts 端点。地点的各个组成部分和远程办公标志;描述通过 details: true 可选获取
recruitee-offers
Careers Site API。部门、地点、雇佣类型代码和薪资区间
teamtailor-jobs
招聘站点已文档化的 RSS 源,读取时保留其 tt: 命名空间。除非 per_page 另行指定,否则返回 100 个职位

模板:政府 API

免费、免密钥的美国联邦 API,由发布它们的机构自行提供文档。

nhtsa-vin
通过 NHTSA 的 vPIC API 解码 VIN——品牌、车型、年份、配置、车身、发动机、工厂,完整字段集置于 raw 之下。接受部分 VIN;vPIC 自身的错误码会被呈现而不是吞掉
npi-provider
CMS 的 NPPES 美国医疗服务提供者登记库,可按编号、姓名、专业分类或地点检索。每个 NPI 一条记录,不附加任何关联信息

列表连接器一次调用返回多条记录

读取列表端点的连接器会在 data 下返回 items 和 count,而不是单条记录。shopify-collection 和全部六个招聘板连接器都是这种方式。

  • 每条职位记录都带有同样的十二个字段——id、title、url、location、department、team、employment_type、remote、published_at、updated_at、description、source——平台未发布的字段为 null,绝不是猜测。
  • 在 params 中传入招聘板标识符,或传入招聘板 URL,连接器会自行解析出 API 端点。
  • Greenhouse、Workable 和 Ashby 把描述设为可选,因为它占据了绝大部分载荷:一个大型 Greenhouse 招聘板在 content: true 下从 349 KB 增至 4.2 MB,OpenAI 拥有 767 个职位的 Ashby 招聘板在 descriptions: true 下达 5.9 MB。
  • 无论返回多少条记录,费用都是固定的每次调用 1 credit。
发送 { "template": "list" }(无需 url)即可获取完整列表以及每一项的 mode:list 表示一次调用返回多条记录的连接器,entity 表示只返回单条记录的连接器。适合用来保持客户端 SDK 同步。

有意未发布

smartrecruiters-postings 不在其中:SmartRecruiters 公开记录了它的 Posting API,但 api.smartrecruiters.com/robots.txt 对所有代理禁止一切访问,唯一例外是 LinkedInBot(2026-08-28 核实),而我们没有为此覆盖 robots.txt。Workday 的 wday/cxs 端点是招聘站点自身的内部端点,而非文档化的公开 API,因此也没有任何连接器读取它。招聘板 API 指南列出了还有哪些内容不在范围之内,以及原因。

请求示例

cURL — github-repo

terminalBash
curl -X POST https://crawlforge.dev/api/v1/tools/scrape_template \
  -H "X-API-Key: cf_test_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "template": "github-repo",
    "url": "https://github.com/mysleekdesigns/crawlforge-mcp"
  }'

TypeScript — amazon-product

scrapeTemplate.tsTypescript
const response = await fetch('https://crawlforge.dev/api/v1/tools/scrape_template', {
  method: 'POST',
  headers: {
    'X-API-Key': process.env.CRAWLFORGE_API_KEY!,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    template: 'amazon-product',
    url: 'https://www.amazon.com/dp/B08XYZ1234',
    timeout: 20000,
  }),
});

const data = await response.json();
if (data.success) {
  const product = data.data.extracted;
  console.log(product.title, product.price, product.rating);
}

cURL — 发现模板

terminalBash
curl -X POST https://crawlforge.dev/api/v1/tools/scrape_template \
  -H "X-API-Key: cf_test_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "template": "list" }'

cURL — 用 params 调用 greenhouse-jobs

terminalBash
curl -X POST https://crawlforge.dev/api/v1/tools/scrape_template \
  -H "X-API-Key: cf_test_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "template": "greenhouse-jobs",
    "params": { "company": "stripe" }
  }'

响应示例

200 OK0.8s
{
"success": true,
"data": {
"template": "greenhouse-jobs",
"params": {
"company": "stripe"
},
"data": {
"items": [
{
"id": "4012345",
"title": "Staff Software Engineer",
"url": "https://job-boards.greenhouse.io/stripe/jobs/4012345",
"location": "Seattle, Washington, United States",
"department": null,
"team": null,
"employment_type": null,
"remote": null,
"published_at": "2026-08-04T17:12:03.000Z",
"updated_at": "2026-08-21T09:44:51.000Z",
"description": null,
"source": "greenhouse-jobs",
"raw_extra": {
"internal_job_id": "4098765",
"requisition_id": "REQ-1234",
"offices": null
}
}
],
"count": 571,
"company": "Stripe"
},
"template_name": "Greenhouse Job Board",
"extracted_at": "2026-08-28T12:00:00.000Z",
"fetched_url": "https://boards-api.greenhouse.io/v1/boards/stripe/jobs"
},
"credits_used": 1,
"credits_remaining": 999,
"processing_time": 812
}
Field Descriptions
data.data.items每个已发布职位一条记录,采用所有招聘板连接器共享的十二字段结构
data.data.items[0].departmentGreenhouse 仅在 `content: true` 时才返回部门,因此摘要记录在此报告 null,而不是根据职位名称猜测出的部门
data.data.count本次响应中的记录数;若数据源声明了更大的总数,还会返回 `total_available`
data.template_name实际运行的模板的可读名称
data.fetched_url实际读取的端点——只要它与你传入的内容不同就会出现,其中包括所有仅用 `params` 的调用
credits_used每次调用固定 1 credit,与模板和记录数无关

错误处理

连接器无法构造请求(400 Bad Request)

参数问题,在抓取任何内容之前即被拒绝,且从不计费。INVALID_TEMPLATE_PARAMS 会带上连接器自己的消息,指明它需要的参数——job-boards.greenhouse.io/<token> 中的招聘板 token、<company>.recruitee.com 中的子域。MISSING_URL 表示你把 params 传给了一个读取页面、且没有 params 形式的模板。NO_TEMPLATE_MATCH 表示 template: "auto" 未能从该 URL 识别出任何模板——请自行指定模板,或用 template: "list" 核对。

被 robots.txt 拦截(403 Forbidden)

目标站点的 robots.txt 对 CrawlForge 禁止了该路径。若你与目标站点另有约定,可设置 respect_robots: false 予以覆盖——该覆盖会记录到你的 API key 上。该覆盖不适用于列入 CrawlForge 永久排除名单的主机——无论 respect_robots 取何值,这类主机一律被拒绝。该检查针对模板实际抓取的 URL,而 shopify-product 与 npm-package 抓取的是同一主机上的机器可读端点,并非你传入的 URL。

credit 费用

1 credit
每次请求 1 credit
每次调用固定 1 credit。这是从受支持站点提取结构化数据最便宜的方式。

提示: 需要某个不受支持的站点?使用 scrape_structured 配合自定义选择器(2 credits),或使用 extract_with_llm 进行 LLM 驱动的提取。

相关工具

scrape_structured
自定义 CSS 选择器提取(2 credits)
extract_with_llm
面向任意站点的 LLM 驱动提取
reddit_search
通过社区存档获取 Reddit 帖子、评论与讨论串(5 credits)
准备好一次调用即可抓取热门站点了吗?免费注册,获取 1,000 credits。

页脚

CrawlForge MCP

面向 AI Agent 的企业级网页抓取。29 个专业 MCP 工具,专为构建智能系统的现代开发者而设计。

产品

  • 功能
  • Playground
  • 价格
  • 应用场景
  • 集成
  • 替代方案
  • 更新日志

资源

  • 快速上手
  • API 参考
  • 模板
  • 指南
  • 博客
  • 术语表
  • 常见问题
  • 网站地图

开发者

  • MCP 协议
  • Claude Desktop
  • Cursor IDE
  • LangChain
  • LlamaIndex

公司

  • 关于我们
  • 联系我们
  • 隐私政策
  • 服务条款
  • 可接受使用政策
  • Cookie

保持更新

获取新工具和新功能的最新动态。

基于 Next.js 和 MCP 协议构建

© 2025-2026 CrawlForge。保留所有权利。