CrawlForge MCP
Alat AsasBerbilang Format2 credits

scrape

Pengekstrakan berbilang format bersatu daripada satu ambilan. Minta markdown, HTML, HTML mentah, teks, pautan, metadata, tangkapan skrin atau JSON daripada satu muatan halaman — setiap format yang diminta disajikan daripada ambilan yang sama, dan format yang gagal dikembalikan sebagai amaran dan bukannya menggagalkan keseluruhan panggilan. Tambah format highlights atau question dengan pertanyaan untuk mendapatkan hanya ayat, baris jadual dan blok kod yang sepadan — teks halaman kata demi kata dengan ofset ke dalam markdown, tanpa model dalam laluan — dengan 1 credit tambahan. Hantar escalate: true dan halaman yang kembali sebagai dinding bot dan bukan halaman akan diambil semula sekali melalui pelayar stealth dalam panggilan yang sama, dengan 5 credits tambahan.

Kes Penggunaan

Satu Panggilan Ganti Empat

Dapatkan markdown, pautan dan metadata daripada satu halaman dalam satu permintaan tanpa merantai fetch_url, extract_links dan extract_metadata.

Markdown Sedia untuk LLM

Minta markdown dengan onlyMainContent dihidupkan untuk menyalurkan teks halaman yang bersih dan bebas bingkai terus ke saluran RAG atau prompt.

Petikan Arkib

Minta rawHtml dan markdown serentak untuk menyimpan sumber tepat bersama salinan yang bersih untuk dibaca, daripada satu pengambilan sahaja.

Satu Pengambilan, Banyak Format

Enam format berharga 2 credits yang sama seperti satu, jadi saluran yang memerlukan markdown, links dan metadata patut meminta ketiga-tiganya dalam satu panggilan dan bukan tiga.

Petik Halaman, Bukan Ringkaskannya

Minta highlights dengan pertanyaan, atau question dengan soalan, untuk mendapatkan hanya ayat, baris jadual dan blok kod yang sepadan — teks halaman kata demi kata dengan ofset ke dalam markdown panggilan yang sama, supaya ejen memetik sumber dan bukannya memparafrasakannya. Tidak seperti alat ambilan yang meringkaskan, tiada model dalam laluan.

Endpoint

POST/api/v1/tools/scrape
Auth Required
1 req/s pada pelan Free
2 credits

Parameters

Setiap format yang diminta disajikan daripada satu ambilan halaman, jadi meminta enam format berkos 2 credits yang sama seperti meminta satu. Format highlights atau question berskop pertanyaan menambah 1 credit, dicaj sekali setiap permintaan sama ada anda menyertakan satu atau kedua-duanya. Dengan escalate: true, unjuran ialah siling pada 7 credits, 8 bersama format berskop pertanyaan; 5 credits peringkat peningkatan hanya dicaj apabila ambilan biasa disekat dan peringkat itu benar-benar berjalan.
NameTypeRequiredDefaultDescription
url
stringRequired-
URL yang hendak dikikis (mesti termasuk protokol: http:// atau https://)
Example: https://example.com
formats
arrayOptional["markdown"]
Format output yang hendak dikembalikan. Satu atau lebih daripada `markdown`, `html`, `rawHtml`, `text`, `links`, `metadata`, serta dua format objek berskop pertanyaan: `{ "type": "highlights", "query": "…", "max_highlights": 10, "mode": "extractive" }` mengembalikan ayat dan blok kod yang paling sepadan dengan `query` (`max_highlights` 1–50, lalai 10) — `kind` ialah `sentence` atau `code_block` pada API REST terhos; unit `table_row` dikembalikan oleh pelayan MCP, yang markdownnya mengekalkan jadual sebagai baris berpaip, manakala API REST meratakan jadual kepada teks — dan `{ "type": "question", "question": "…", "mode": "extractive" }` mengembalikan `answer` yang disusun daripada petikan yang paling sepadan. Kedua-duanya mengembalikan teks halaman kata demi kata; setiap unit membawa `offset` dan `length` ke dalam format `markdown` panggilan yang sama (tetapan `onlyMainContent` yang sama), jadi minta `markdown` juga untuk memetik dengan pengesan lokasi. `mode: "model"` ditolak di sini dengan 400 — ia memerlukan LLM dan hanya tersedia pada pelayan MCP. `screenshot` dan `json-schema` lulus pengesahan tetapi kemudiannya ditolak dengan 400 — ia memerlukan pelayar atau LLM, yang tidak disediakan oleh API REST terhos.
Example: ["markdown", { "type": "highlights", "query": "Starter plan price" }, { "type": "question", "question": "How much does the Starter plan cost?" }]
onlyMainContent
booleanOptionaltrue
Buang navigasi, pengepala dan pengaki supaya hanya kandungan utama artikel dikembalikan.
Example: true
escalate
booleanOptionalfalse
Pilih untuk menyertai satu percubaan semula automatik melalui pelayar stealth apabila ambilan biasa kembali sebagai dinding bot dan bukan halaman — halaman cabaran Cloudflare, Amazon, DataDome, PerimeterX, Akamai atau Vercel, cengkerang kosong, atau ruang letak pendek bertajuk ralat. Ambilan biasa sentiasa berjalan dahulu; hanya apabila ia disekat barulah panggilan yang sama memaparkan halaman itu dengan pelayar stealth dan memperoleh setiap format yang diminta daripada apa yang dipaparkannya, jadi halaman yang disekat berkos satu panggilan dan bukan dua. Peningkatan ini menggunakan semula laluan stealth yang sama seperti [stealth_mode](/docs/api-reference/tools/stealth-mode) dan pintu robots.txt yang sama, dan tidak menambah sebarang pengendalian baharu terhadap pertahanan bot. Dinding yang turut menolak paparan stealth tetap kembali sebagai halaman disekat, membawa `escalated: true` dan tidak dicaj: peningkatan ini menjimatkan perjalanan kedua, ia tidak menjanjikan halaman itu. Ia paling boleh diharap apabila ambilan biasa gagal semata-mata kerana halaman itu memerlukan JavaScript untuk dipaparkan. Respons kemudiannya membawa `escalated`, dan `stealth` apabila nilainya `true`. Menambah 5 credits, dicaj hanya apabila peringkat peningkatan benar-benar berjalan. Pada pelayan MCP sahaja, hos yang menyekat sesuatu permintaan diingati selama 24 jam, jadi panggilan `escalate: true` berikutnya ke hos itu melangkau ambilan biasa yang pasti gagal dan menyatakannya dalam amaran.
Example: true
escalate_engine
stringOptionalplaywright
Enjin pelayar bagi peringkat peningkatan: "playwright" (lalai) atau "camoufox" (berasaskan Firefox, ketahanan pengesanan yang lebih kuat; tersedia hanya di tempat ia dipasang pada backend). Diabaikan melainkan `escalate` ialah `true` dan ambilan biasa disekat.
Example: camoufox
respect_robots
booleanOptionaltrue
Hormati robots.txt tapak sasaran. Dibiarkan pada `true`, laluan yang dilarang untuk `CrawlForge` ditolak dengan 403 sebelum apa-apa diambil dan tiada credits dicaj. Tetapkan kepada `false` hanya untuk sasaran yang anda mempunyai perjanjian sendiri dengannya — respons kemudiannya membawa entri `warnings` dan tindakan mengatasi itu direkodkan pada API key anda.
Example: true
max_inline_chars
numberOptional40000
Hasil terbesar yang dikembalikan sebaris, dalam aksara JSON-nya (1,000-10,000,000). Melebihinya, respons membawa `preview` (`max_inline_chars` aksara pertama markdown), `result_handle`, `total_chars`, `truncated: true` dan `expires_at`, dan [read_result](/docs/api-reference/tools/read-result) membaca selebihnya dengan 1 credit setiap panggilan. Hasil tersimpan disimpan selama 1 jam.
Example: 40000
redact_pii
boolean | objectOptionalfalse
Buang data peribadi daripada teks yang dikembalikan oleh panggilan ini, sebelum hasilnya disimpan atau dihantar balik. `true` ialah singkatan bagi `{ mode: "fast" }` — keempat-empat kelas regex, bertag. Setiap kali anda meminta penyuntingan, respons membawa `redaction: { entities, count, mode }` di dalam `data`, walaupun tiada apa-apa yang sepadan (`count: 0`), jadi "tiada apa-apa ditemui" tidak pernah disalah anggap sebagai "parameter itu diabaikan"; kelas tanpa padanan ditinggalkan dan bukan dilaporkan sebagai `0`. Penyuntingan berjalan **sebelum** hasil itu disimpan, jadi hasil besar yang dibaca kemudian dengan [read_result](/docs/api-reference/tools/read-result) sudah pun disunting. Dua batas yang disengajakan: alamat (`url`, `link`, `href`, `canonical_url`) tidak pernah disunting, dan kiraan yang diperoleh daripada teks (`content_length`, `word_count`, `character_count`) menggambarkan teks itu sebagaimana ia diekstrak, sebelum penyuntingan.
Example: true

Contoh Permintaan

cURL

terminalBash
curl -X POST https://crawlforge.dev/api/v1/tools/scrape \
  -H "X-API-Key: cf_test_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com",
    "formats": [
      "markdown", "links", "metadata",
      { "type": "highlights", "query": "professional plan price per month" }
    ],
    "onlyMainContent": true,
    "escalate": true
  }'

TypeScript

scrape.tsTypescript
// npm install crawlforge-sdk
import { CrawlForge, ToolError } from 'crawlforge-sdk';

const client = new CrawlForge({ apiKey: process.env.CRAWLFORGE_API_KEY });

try {
  const result = await client.scrape({
    url: 'https://example.com',
    formats: [
      'markdown', 'links', 'metadata',
      // 1 extra credit: the matching sentences, table rows and code blocks, verbatim, with offsets
      { type: 'highlights', query: 'professional plan price per month' },
    ],
    onlyMainContent: true,
    // Only when the plain fetch meets a bot wall: one stealth render in this same call (5 extra credits)
    escalate: true,
  });

  // result.data is untyped in crawlforge-sdk 0.1 — its shape is the Response Example below.
  const { formats } = result.data as {
    formats: { markdown: string; links: string[]; metadata: { title: string }; highlights: { text: string }[] };
  };
  console.log('Markdown:', formats.markdown);
  console.log('Links found:', formats.links.length);
  console.log('Title:', formats.metadata.title);
  // Each highlight is verbatim page text; offset/length index formats.markdown.
  console.log('Best match:', formats.highlights[0]?.text);

  // A success with warnings is a PARTIAL result — some formats came back, others didn't.
  if (result.warnings.length > 0) {
    console.warn('Partial result:', result.warnings);
  }

  console.log('Credits used:', result.creditsUsed);
  console.log('Credits remaining:', result.creditsRemaining);
} catch (err) {
  // A bot wall the stealth render could not pass either: not charged, blocked.vendor names it.
  if (err instanceof ToolError && err.blocked) {
    console.error('Blocked by', err.blocked.vendor, '— escalated:', err.escalated);
  } else {
    throw err;
  }
}

Python

scrape.pyPython
# pip install crawlforge
from crawlforge import CrawlForge, ToolError

client = CrawlForge()  # reads CRAWLFORGE_API_KEY

try:
    result = client.scrape(
        url='https://example.com',
        formats=[
            'markdown', 'links', 'metadata',
            # 1 extra credit: the matching sentences, table rows and code blocks, verbatim, with offsets
            {'type': 'highlights', 'query': 'professional plan price per month'},
        ],
        onlyMainContent=True,
        # Only when the plain fetch meets a bot wall: one stealth render in this same call (5 extra credits)
        escalate=True,
    )
except ToolError as e:
    # A bot wall the stealth render could not pass either: not charged, blocked names the vendor.
    print(f"Blocked: {e.blocked} (escalated: {e.escalated})")
    raise

# result.data is a plain dict — its shape is the Response Example below.
formats = result.data['formats']
print(f"Markdown: {formats['markdown']}")
print(f"Links found: {len(formats['links'])}")
print(f"Title: {formats['metadata']['title']}")
# Each highlight is verbatim page text; offset/length index formats['markdown'].
print(f"Best match: {formats['highlights'][0]['text']}")

# A success with warnings is a PARTIAL result — some formats came back, others didn't.
if result.warnings:
    print(f"Partial result: {result.warnings}")

print(f"Credits used: {result.credits_used}")
print(f"Credits remaining: {result.credits_remaining}")

Contoh Respons

200 OK4218ms
{
"success": true,
"data": {
"url": "https://example.com",
"formats": {
"markdown": "# Example\n\nMain content scraped from https://example.com. The Starter plan costs $12 per month and includes three seats. Annual billing lowers the Starter plan to $10 per month.",
"highlights": [
{
"text": "The Starter plan costs $12 per month and includes three seats.",
"kind": "sentence",
"offset": 58,
"length": 62,
"score": 6.612
},
{
"text": "Annual billing lowers the Starter plan to $10 per month.",
"kind": "sentence",
"offset": 121,
"length": 56,
"score": 5.809
}
],
"answer": {
"text": "The Starter plan costs $12 per month and includes three seats.",
"grounded": true,
"evidence": [
{
"text": "The Starter plan costs $12 per month and includes three seats.",
"kind": "sentence",
"offset": 58,
"length": 62,
"score": 6.612
}
]
}
},
"escalated": true,
"stealth": {
"engine": "playwright",
"vendor_detected": "cloudflare"
},
"scraped_at": "2026-08-26T14:30:00.000Z"
},
"credits_used": 8,
"credits_remaining": 992,
"processing_time": 4218
}
Field Descriptions
data.urlURL yang diambil.
data.formatsSatu kunci bagi setiap format yang diminta — kandungan yang diekstrak berada di dalam sini, bukan di aras atas data.
data.formats.markdownKandungan utama ditukar kepada markdown (hadir apabila `markdown` diminta).
data.formats.highlightsAyat dan blok kod berkedudukan tertinggi yang sepadan dengan `query`, kata demi kata (hadir apabila format `highlights` diminta). Setiap unit membawa `text`, `kind` (`sentence` atau `code_block` pada API REST terhos; unit `table_row` dikembalikan oleh pelayan MCP, yang markdownnya mengekalkan jadual sebagai baris berpaip, manakala API REST meratakan jadual kepada teks), `offset`, `length` dan `score` — nilai kaitan BM25 mentah, bermakna untuk susunan sahaja, bukan keyakinan 0–1.
data.formats.highlights.offsetIndeks aksara ke dalam format `markdown` panggilan yang sama (tetapan `onlyMainContent` yang sama): `markdown.slice(offset, offset + length) === text`.
data.formats.answerJawapan kepada `question` (hadir apabila format `question` diminta): `text` ialah bukti paling sepadan yang dicantumkan, dan `evidence` menyenaraikan sehingga 5 unit sokongan.
data.formats.answer.groundedSentiasa `true` pada API REST — teksnya ialah kandungan halaman kata demi kata, tiada apa-apa yang disintesis.
data.escalatedSama ada peringkat peningkatan berjalan (hadir hanya apabila permintaan menghantar `escalate: true`). `false` bermakna ambilan biasa mengembalikan halaman dan hanya kos asas dicaj.
data.stealthBagaimana halaman itu dipaparkan (hadir hanya apabila `escalated` ialah `true`): `engine` ialah pelayar yang berjalan, dan `vendor_detected` menamakan vendor pertahanan bot yang ditemui oleh ambilan biasa — `cloudflare`, `amazon`, `datadome`, `perimeterx`, `akamai` atau `vercel` — atau `null` apabila dindingnya ialah cengkerang kosong atau ruang letak ralat dan bukan cabaran bernama.
data.scraped_atCap masa ISO 8601 bagi pengambilan.
credits_usedCredits yang dicaj bagi permintaan ini — 2 setiap scrape, tanpa mengira berapa banyak format yang anda minta, tambah 1 apabila format `highlights` atau `question` disertakan, tambah 5 apabila peringkat peningkatan berjalan. Di sini: 2 + 1 + 5.
credits_remainingBaki credits anda.

Pengendalian Ralat

Input Tidak Sah (400 Bad Request)

Format URL tidak sah, formats mengandungi nilai di luar senarai yang disokong, atau format highlights atau question meminta mode: "model", yang memerlukan LLM dan hanya tersedia pada pelayan MCP. Sekurang-kurangnya satu format diperlukan apabila medan itu dihantar.

URL Disekat (403 Forbidden)

Sasaran diselesaikan kepada alamat peribadi, dalaman atau link-local dan ditolak oleh perlindungan SSRF. Hanya URL yang boleh dicapai secara awam boleh dikikis.

Credits Tidak Mencukupi (402 Payment Required)

Akaun anda tidak mempunyai credits yang mencukupi. Beli lebih banyak credits atau naik taraf pelan anda.

Had Kadar Dilampaui (429 Too Many Requests)

Anda telah melampaui had kadar pelan anda. Tunggu sebentar atau naik taraf pelan anda untuk had yang lebih tinggi.

Backend Peningkatan Tidak Dikonfigurasikan (503 TOOL_NOT_AVAILABLE)

escalate: true menjalankan peringkat stealth-nya pada backend pelaksanaan CrawlForge. Apabila backend itu tidak dikonfigurasikan, peringkat itu mengembalikan 503 dan tiada credits dicaj untuknya.

Disekat oleh robots.txt (403 Forbidden)

robots.txt tapak sasaran melarang laluan ini untuk CrawlForge. Tetapkan respect_robots: false untuk mengatasinya jika anda mempunyai perjanjian sendiri dengan sasaran — tindakan mengatasi itu direkodkan pada API key anda. Tindakan mengatasi itu tidak sampai kepada hos yang berada dalam senarai penarikan diri kekal CrawlForge, yang ditolak tanpa mengira nilai respect_robots.

Petua Pro: Meminta markdown, links dan metadata serentak berharga 2 credits yang sama seperti meminta satu — setiap format diperoleh daripada satu muatan halaman. Minta segala yang mungkin anda perlukan dalam satu panggilan; format highlights atau question menambah 1 credit sekali sahaja, bukan bagi setiap format.

Kos Credits

2 credits
2 credits setiap permintaan
Setiap permintaan scrape yang berjaya berkos 2 credits tidak kira berapa banyak format yang anda minta, kerana setiap format disajikan daripada satu ambilan. Format highlights atau question menambah 1 credit, dicaj sekali setiap permintaan sama ada anda menyertakan satu atau kedua-duanya. Panggilan dengan escalate: true diunjurkan sehingga 7 credits, 8 bersama format berskop pertanyaan, dan hanya membayar tambahan 5 credits peningkatan apabila ambilan biasa kembali sebagai dinding bot dan peringkat stealth berjalan — tidak pernah melebihi unjuran.

Pelan Free: 1,000 credits sekali sahaja = 500 permintaan

Pelan Hobby: 5,000 credits/bulan = 2,500 permintaan (USD 19/bulan)

Pelan Professional: 50,000 credits/bulan = 25,000 permintaan (USD 99/bulan)

Pelan Business: 250,000 credits/bulan = 125,000 permintaan (USD 399/bulan)

Alat Berkaitan

fetch_url
Ambilan HTTP mentah apabila anda mahu badan respons yang asli (1 credit)
extract_content
Pengekstrakan kandungan utama berasaskan readability untuk satu halaman (2 credits)
batch_scrape
Jalankan pengekstrakan yang sama merentas banyak URL sebagai kerja tak segerak (5 credits)
scrape_with_actions
Klik, tatal atau isi borang sebelum mengikis halaman yang berat dengan JS (5 credits)
Sedia mencuba scrape? Daftar secara percuma dan dapatkan 1,000 credits untuk mula membina.

Footer

CrawlForge MCP

Web scraping gred perusahaan untuk Ejen AI. 30 alat MCP khusus yang direka untuk pembangun moden yang membina sistem pintar.

Produk

  • Ciri
  • Playground
  • Harga
  • Kes Penggunaan
  • Integrasi
  • Alternatif
  • Changelog

Sumber

  • Mula Bekerja
  • Rujukan API
  • Templat
  • Panduan
  • Blog
  • Glosari
  • Soalan Lazim
  • Peta Laman

Pembangun

  • Protokol MCP
  • Claude Desktop
  • Cursor IDE
  • LangChain
  • LlamaIndex

Syarikat

  • Tentang
  • Hubungi
  • Privasi
  • Terma
  • Penggunaan Boleh Diterima
  • Keselamatan
  • Cookies

Kekal dikemas kini

Dapatkan kemas kini terkini tentang alat dan ciri baharu.

Dibina dengan Next.js dan protokol MCP

© 2025-2026 CrawlForge. Hak cipta terpelihara.