مرکز توسعهدهندگان، API ترکیبی و سرور MCP فلایکراول
استخراج جامع هر وبسایت یا فایل PDF چندزبانه (چینی، کرهای، ژاپنی، فارسی، عربی، روسی) به مارکداون، CSV استاندارد، JSONL آماده RAG یا بردارهای امبدینگ. انتخاب دقیق خروجیهای دلخواه تنها در یک درخواست API یا اتصال مستقیم به Cursor و کلود با پروتکل بومی MCP.
شروع سریع: استخراج هر آدرس وب در کمتر از ۵ دقیقه
https://api.flycrawl.net/v1
(سازگار کامل با مسیرهای /api/v1 و پشتیبانی خودکار از هردو نگارش snake_case و camelCase)
curl -X POST "https://api.flycrawl.net/v1/scrape" \
-H "Authorization: Bearer fly_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com", "formats": ["markdown"]}'
application/json):
{
"success": true,
"data": {
"markdown": "# Example Domain\n\nThis domain is for use in documentation...",
"content": "# Example Domain\n\nThis domain is for use...",
"metadata": {
"title": "Example Domain",
"url": "https://example.com",
"statusCode": 200,
"tokenCount": 78
}
}
}
Firecrawl SDK Drop-In Compatibility (firecrawl-py & @mendable/firecrawl-js)
Existing applications built with the official firecrawl-py Python SDK or @mendable/firecrawl-js can target FlyCrawl directly by setting api_url="https://flycrawl.net/api/v1". Below is our verified endpoint and parameter support matrix tested via tests/test_firecrawl_compat.py:
| Endpoint | Status | Supported Parameters | Notes / Divergences |
|---|---|---|---|
| POST /v1/scrape | ✅ Fully Supported | url, formats, onlyMainContent, includeTags, excludeTags, headers, waitFor, mobile, actions, timeout |
Standard envelope { success, data: { markdown, content, metadata } }. blockAds handled by Fit-Markdown. |
| POST /v1/crawl | ✅ Supported | url, limit, depth, workers, useJs, country, webhookUrl, dryRun, estimate |
Returns { id, url }. Set dryRun: true for instant zero-credit estimation. Returns 402 Payment Required with suggested_max_pages if balance is insufficient. |
| POST /api/v1/crawl/estimate | ⚡ Extended Feature | url, maxPages, allowMultiDomain |
Lightweight pre-flight site probe. Returns estimated pages, credit cost, user available balance, and affordability calculation. |
| GET /v1/crawl/{id} | ✅ Supported | id |
Returns job status: scraping, completed, with data array. |
| POST /v1/map | ✅ Supported | url, search, includeSubdomains, ignoreSitemap, limit |
Returns { success, links: [...] }. Instant sitemap traversal. |
| POST /v1/sessions | ⚡ Extended Feature | url, actions, storageState, ttlHours |
Initializes persistent authenticated browser session. Cookies & localStorage stored with AES-256-GCM. Pass session_id in scrape/crawl. |
| POST /v1/agent | ⚡ Extended Feature | goal, urls, schema, maxSteps, stream |
Autonomous multi-step ReAct agent. Dynamically conducts search, parallel crawl, and schema synthesis with SSE streaming. |
| POST /v1/monitor | ⚡ Extended Feature | url, selector, diffMode, frequency, webhookUrl |
Smart change detector. Zero-fee guarantee (0 credits billed if page content is unchanged). AI semantic diffs and HMAC webhooks. |
با استفاده از پارامتر dryRun: true در اندپوینت /v1/crawl یا فراخوانی مستقیم /api/v1/crawl/estimate، پیش از مصرف هرگونه کردیت، تعداد صفحات تخمینی، ساختار سایت و هزینه محاسبه و به شما اعلام میشود. در صورت کمبود موجودی، پاسخ ساختاریافته HTTP 402 همراه با حداکثر تعداد صفحه قابل استخراج بر اساس موجودی فعلی (suggested_max_pages) برمیگردد.
# Python Example: Pre-Flight Estimation & Graceful Insufficient Credits Handling
import requests
res = requests.post("https://flycrawl.net/api/v1/crawl",
headers={"Authorization": "Bearer fly_live_your_key"},
json={"url": "https://target-site.com", "limit": 100, "dryRun": True}
)
if res.status_code == 200:
data = res.json()
print(f"Site requires {data['estimated_credits']} credits. Can afford: {data['can_afford']}")
if data["can_afford"]:
# Execute actual crawl:
job = requests.post("https://flycrawl.net/api/v1/crawl",
headers={"Authorization": "Bearer fly_live_your_key"},
json={"url": "https://target-site.com", "limit": 100}
).json()
print(f"Crawl job started: {job['id']}")
elif res.status_code == 402:
err = res.json()
print(f"Insufficient balance! Shortage: {err['shortage']} credits. Suggested max pages: {err['suggested_max_pages']}")
Composable Scrape
Multi-format (MD, CSV, JSONL, Vector) + Inclusions.
Logo & Brand Asset
High-res SVG, Web Manifest, Apple Touch & Favicons.
Multilingual PDF
CJK, RTL (Persian/Arabic), Cyrillic & Latin to Markdown.
Web-to-Vector DB
1536 / 3072-dim embeddings ready for Pinecone & Qdrant.
Data Exporter
RFC 4180 CSV (UTF-8 BOM) & Fine-Tuning JSONL.
Site Mapper
Fast domain URL discovery in under 2 seconds.
Search & Scrape
Live web search engine with auto-scraped Markdown.
🧩 ایپیآی استخراج انتخابی و چندفرمت ترکیبی
دیگر محدود به خروجیهای پیشفرض تکفرمت نباشید. با API ترکیبی FlyCrawl، شما دقیقاً تعیین میکنید چه چیزهایی در پاسخ بازگردد: ترکیب مارکداون تمیز، فایلهای CSV با جداول، خطوط دیتابیس بردای RAG JSONL و وکتورهای ۱۵۳۶ یا ۳۰۷۲ بعدی، به همراه استخراج لوگوی کیفیت بالا و متادیتا.
📋 پارامترهای قابل تنظیم در درخواست:
["markdown", "csv", "jsonl", "vector", "json"]
["logo", "tables", "links", "metadata", "pdf_content"]
"native" (1536), "native-large" (3072), or OpenAI
Custom text chunking for vector ingestion (e.g. 500 chars / 50 overlap)
📐 معماری فنی و سازگاری ریاضی مدلهای امبدینگ بومی
فلایکراول تولید بردار در ابعاد ۱۵۳۶ ('native') و ۳۰۷۲ ('native-large') را به همراه سازگاری کامل با کتابخانههای OpenAI در مسیر /v1/embeddings ارائه میدهد. این سیستم با هدف رفع نگرانی بابت قفلشدگی فضای برداری (Vector Lock-in) طراحی شده و امکان سوئیچ آزادانه میان مدلهای بومی و تجاری را فراهم میسازد.
از هشینگ آنتروپی بالای توکنها بر پایه SHA-256 و نگاشت هارمونیک n-gram بهره میبرد. تمامی بردارها تحت نرمالسازی اقلیدسی L2 واحد (طول برابر ۱.۰) قرار میگیرند که باعث انطباق مستقیم با شباهت کسینوسی در پایگاههای داده برداری میشود.
سازگاری ۱۰۰٪ با Pinecone، Qdrant، ChromaDB، Milvus و افزونه pgvector در PostgreSQL. آرایه float32[] خروجی بدون نیاز به تبدیل ابعاد آماده ذخیرهسازی و ایندکسگذاری است.
چنانچه به بردارهای مدل رسمی OpenAI نیاز دارید، کافی است نام مدل را text-embedding-3-large تنظیم کرده و در صورت تمایل کلید اختصاصی خود را در هدر X-OpenAI-Key ارسال نمایید.
# Python OpenAI Client Drop-in with FlyCrawl /v1/embeddings:
from openai import OpenAI
client = OpenAI(
api_key="fly_live_your_api_key_here",
base_url="https://flycrawl.net/v1"
)
response = client.embeddings.create(
input=["Retrieval-Augmented Generation with FlyCrawl", "High-throughput web scraping"],
model="native-large" # or "native" (1536-dim) or "text-embedding-3-large"
)
print(f"Dimensions: {len(response.data[0].embedding)}") # 3072 floats ready for Pinecone/Qdrant!
🤖 FlyCrawl Model Context Protocol (MCP) Server
اتصال مستقیم و بومی FlyCrawl به Claude Desktop، محیط توسعه Cursor، Windsurf و ایجنتهای هوش مصنوعی. مدلهای زبانی میتوانند خودکار صفحات وب را اسکرپ کنند، لوگوهای وکتور استخراج نمایند، پیدیافهای چندزبانه را بخوانند و دیتابیسهای برداری را آپدیت کنند.
.cursor/mcp.json or Settings > Features > MCP
{
"mcpServers": {
"flycrawl": {
"url": "https://api.flycrawl.net/v1/mcp",
"headers": {
"Authorization": "Bearer YOUR_FLYCRAWL_API_KEY"
}
}
}
}
🛠️ ابزارهای تخصصی ارائهشده به هوش مصنوعی در پروتکل MCP
نمونه کدهای آماده و SDKهای رسمی
# pip install requests import requests API_KEY = "fly_live_your_api_key" # Request clean Markdown, RFC 4180 CSV tables, RAG JSONL and 1536-dim vectors in ONE call: payload = { "url": "https://example.com/products", "formats": ["markdown", "csv", "jsonl", "vector"], "include": ["logo", "tables", "metadata"], "embedding_model": "native" } res = requests.post( "https://api.flycrawl.net/v1/scrape", headers={"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}, json=payload ).json() print(f"Brand Logo: {res.get('logo')}") print(f"CSV Rows: {len(res.get('csv', ''))} chars") print(f"Generated Vectors: {len(res.get('vectors', []))}")
راهنمای مدیریت خطا و ضمانت صورتحساب عادلانه
در طراحی ایجنتهای هوش مصنوعی و خزشگرهای سازمانی، مواجهه با خطاهای سرور مقصد اجتنابناپذیر است. فلایکراول طبق قانون تضمین صورتحساب عادلانه عمل میکند: در صورت بروز خطای سرور مقصد، تایماوت یا مسدودی، هیچ اعتباری از شما کسر نخواهد شد.
- خطاهای ۵۰۰ سرور مقصد: اگر سرور مقصد داون باشد یا ارور ۵۰۰ بدهد، ۰ کردیت کسر میشود.
- تایماوت و خطای DNS: دامنههای نامعتبر یا تایماوت شبکه هزینهای برای شما ایجاد نمیکنند.
- عدم عبور از چالش آنتیربات: اگر سیستم در موارد نادر نتواند کپچای مقصد را باز کند، هیچ هزینهای کسر نمیشود.
- فقط استخراج موفق ۲00: کسر کردیت تنها و تنها در زمان دریافت پاسخ موفق ۲۰۰ و استخراج دیتای تمیز انجام میگیرد.
جدول کدهای خطای API و وضعیت کسر اعتبار
| HTTP Status | Error Code | Credits Billed? | Recommended Agent Action |
|---|---|---|---|
400 Bad Request |
INVALID_URL_OR_SCHEMA |
0 Credits | Verify protocol (http/https) and JSON syntax. Do not retry without modifying request. |
401 Unauthorized |
INVALID_API_KEY |
0 Credits | Ensure Authorization: Bearer fly_live_... header is correctly set. |
402 Payment Required |
INSUFFICIENT_CREDITS |
0 Credits | Top up balance at flycrawl.net/pricing via Card or USDT. |
403 Forbidden |
DOMAIN_EXCLUDED_BY_POLICY |
0 Credits | Domain is excluded per webmaster request or SSRF security rules. Do not retry. |
429 Too Many Requests |
RATE_LIMIT_EXCEEDED |
0 Credits | Exponential backoff with jitter (wait 1-3 seconds before next request). |
502 Bad Gateway |
TARGET_SCRAPE_FAILED |
0 Credits | Target server crashed or blocked connection. Retry once with render_js: true. |
504 Gateway Timeout |
TARGET_TIMEOUT_30S |
0 Credits | Target server did not respond within 30 seconds. Check target website availability. |
الگوی استاندارد بازتلاش در ایجنتها
نحوه تنظیم کلاینت با بازتلاش تصادفی در صورت برخورد با ریتلیمیت یا تایماوت:
from tenacity import retry, stop_after_attempt, wait_exponential_jitter, retry_if_exception
import httpx
# Retry up to 3 times ONLY on 429 or 504 (Fair billing guarantees zero extra costs)
@retry(
stop=stop_after_attempt(3),
wait=wait_exponential_jitter(initial=1, max=5),
retry=retry_if_exception(lambda e: isinstance(e, httpx.HTTPStatusError) and e.response.status_code in (429, 504))
)
def robust_scrape(url: str):
with httpx.Client(base_url="https://api.flycrawl.net/v1") as client:
res = client.post("/scrape", json={"url": url}, headers={"Authorization": "Bearer YOUR_KEY"})
res.raise_for_status()
return res.json()
معماری موتور جستجو، کیفیت و تازگی ایندکس وب
برخلاف موتورهای جستجوی سنتی که نتایج را آلوده به تبلیغات تجاری، لینکهای بازاریابی و کلمات کلیدی اسپم برمیگردانند، اندپوینت /search فلایکراول اختصاصاً برای ایجنتهای هوش مصنوعی مهندسی شده و صفحات منتخب را مستقیماً به مارکداون تمیز تبدیل میکند.
⚡ تازگی ایندکس زنده وب
دسترسی مستقیم به ایندکس زنده وب با بهروزرسانی کمتر از ۱ ساعت برای اخبار، مستندات جدید کتابخانهها و ریپازیتوریهای گیتهاب.
🚫 حذف ۱۰۰٪ تبلیغات و نتایج حمایتی
تمامی تبلیغات گوگل، صفحات کلیکبیت و لینکهای تغییرمسیر تجاری پیش از پردازش کاملاً فیلتر و حذف میشوند.
📉 استخراج تمیز محتوای مقالات برتر
هر نتیجه شامل تایتل، لینک اصلی و متن تمیز مارکداون بدون کدهای جاوااسکریپت زاید است تا مدل هوش مصنوعی فوراً به پاسخ برسد.
معماری دوگانه وکتور: امبدینگهای نورونی و پروجکشن لکزیکال سریع
فلایکراول یک معماری دوگانه و انعطافپذیر برای تولید بردار ارائه میدهد: برای پروژههای RAG و جستجوی معنایی عمیق، از امبدینگهای استاندارد نورونی (مدلهای text-embedding-3 با پشتیبانی از BYOK و کردیت سرور) استفاده میشود؛ و برای خوشهبندی سریع و حذف اسناد تکراری در حافظه با هزینه صفر، پروجکشنهای لکزیکال فوقسریع در کمتر از ۱۰ میلیثانیه محاسبه و تحویل داده میشوند.
text-embedding-3-small & text-embedding-3-largenative (1,536-dim) & native-large (3,072-dim)🐍 پیادهسازی حرفهای RAG: استخراج تمیز با فلایکراول و جستجوی استاندارد
استخراج مارکداون بدون نویز به همراه امبدینگ در یک درخواست HTTP و ایندکس در پایگاه داده برداری:
import httpx
from openai import OpenAI
from qdrant_client import QdrantClient
from qdrant_client.models import PointStruct, Distance, VectorParams
qdrant = QdrantClient(url="http://localhost:6333")
qdrant.recreate_collection("tech_docs", vectors_config=VectorParams(size=1536, distance=Distance.COSINE))
# 1. INGESTION TIME: Extract Fit-Markdown + neural embeddings via FlyCrawl in 1 API call
res = httpx.post(
"https://api.flycrawl.net/v1/scrape",
headers={"Authorization": "Bearer fly_live_your_key"},
json={
"url": "https://example.com/docs",
"formats": ["markdown", "vector"],
"embedding_model": "text-embedding-3-small" # Neural embeddings (or "native" for lexical)
}
).json()
doc_vector = res["data"]["vector"] # 1536-dim float array
qdrant.upsert("tech_docs", points=[PointStruct(id=1, vector=doc_vector, payload={"url": "https://example.com/docs"})])
# 2. QUERY TIME: Embed user question using standard OpenAI client
ai_client = OpenAI()
query_vector = ai_client.embeddings.create(
model="text-embedding-3-small",
input="How do I configure authentication?"
).data[0].embedding
# 3. Semantic cosine retrieval in vector database
search_results = qdrant.search("tech_docs", query_vector=query_vector, limit=3)
print(f"Top matched document: {search_results[0].payload['url']}")
گستره جغرافیایی پروکسی مسکونی و سقف خزش موازی
برای تضمین کیفیت خدمات و تاخیر قابل پیشبینی برای تمام تیمها، فلایکراول چارچوب مشخصی برای شبکه پروکسی مسکونی و سقف خزش موازی تعریف کرده است:
🌍 پوشش جغرافیایی پروکسیهای مسکونی
United States (US), Germany (DE), United Kingdom (GB), France (FR), United Arab Emirates (AE), Turkey (TR), Japan (JP), China (CN), Russia (RU), and Iran (IR).
Extended coverage across Latin America (BR, MX, AR), Southeast Asia (SG, IN, ID, VN), and Australia with city-level sticky sessions available upon enterprise configuration.
⚙️ سقف ورکرها و حجم هر جاب خزش
Up to 64 concurrent workers and 50,000 URLs per asynchronous crawl job (prevents shared-pool starvation and guarantees memory bound safety).
Over 1,000 dedicated parallel worker pods, multi-million URL catalog crawling, and zero rate limits with dedicated Redis queue clusters.
نشستهای ماندگار مرورگر و خزش صفحات خصوصی و نیازمند لاگین
صفحات پشت سد ورود، داشبوردهای کاربری و پرتالهای سازمانی را بدون نیاز به ارسال مکرر نامکاربری و رمز عبور استخراج کنید. فلایکراول مراحل ورود خودکار را اجرا کرده، وضعیت احراز هویت (کوکیها و LocalStorage) را با رمزنگاری پیشرفته AES-256-GCM ذخیره میکند. کافی است پارامتر session_id را در درخواستهای بعدی ارسال کنید.
📋 مراحل ساخت و استفاده از نشست احراز هویت شده:
# Step 1: Initialize session with automated login actions
curl -X POST "https://api.flycrawl.net/v1/sessions" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://news.ycombinator.com/login",
"actions": [
{ "type": "write", "selector": "input[name=acct]", "text": "my_user" },
{ "type": "write", "selector": "input[name=pw]", "text": "secret_pass" },
{ "type": "click", "selector": "input[value=login]" },
{ "type": "wait", "milliseconds": 2000 }
],
"ttl_hours": 168
}'
# Response: { "success": true, "session_id": "sess_9f8a7b6c5d4e...", "expires_at": "..." }
# Step 2: Scrape private authenticated URLs using session_id
curl -X POST "https://api.flycrawl.net/v1/scrape" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://news.ycombinator.com/threads?id=my_user",
"session_id": "sess_9f8a7b6c5d4e..."
}'
ایجنت خودمختار استخراج هدفمحور از چندین وبسایت
تنها هدف کلی یا ساختار JSON مورد نظر را اعلام کنید. ایجنت هوشمند فلایکراول عبارات جستجوی بهینه را تدوین کرده، بهترین منابع وب را پیدا میکند، به طور همزمان صفحات را خزش کرده و دادهها را با انطباق دقیق بر ساختار شما سنتز مینماید. از استریم زنده وضعیت (SSE) به صورت پیشفرض پشتیبانی میشود.
# Python Example: Autonomous Agent with Target JSON Schema
import requests
payload = {
"goal": "Compare pricing tiers, rate limits, and LLM features between Firecrawl and Spider",
"schema": {
"providers": [
{
"name": "string",
"starting_price": "string",
"concurrent_rate_limit": "string",
"markdown_quality": "string",
"unique_features": ["string"]
}
]
},
"max_steps": 5
}
res = requests.post(
"https://api.flycrawl.net/v1/agent",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json=payload
).json()
print("Agent Summary:", res["summary"])
print("Synthesized Data:", res["data"])
print("Sources Visited:", res["sources"])
مانیتورینگ تغییرات وبسایت و موتور تحلیل دیف متنی و مفهومی
تغییرات قیمت رقبا، موجودی انبار، قوانین و مقررات را در بازههای زمانی دلخواه پایش کنید. سیستم بر پایه هش SHA-256 تغییرات را رصد کرده و در صورتی که محتوا دستنخورده باشد، دقیقاً ۰ کردیت کسر میشود. در صورت تغییر، هوش مصنوعی خلاصه تحلیلی تفاوتها را استخراج کرده و وبهوک با امضای امنیتی HMAC ارسال میکند.
# Create a Change Monitor on Pricing Table
curl -X POST "https://api.flycrawl.net/v1/monitor" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/pricing",
"selector": ".pricing-grid",
"diff_mode": "semantic",
"frequency": "daily",
"webhook_url": "https://api.yourdomain.com/webhooks/pricing-change"
}'
# Webhook payload dispatched upon detected change:
{
"event": "monitor.change_detected",
"monitor_id": "mon_4a3b2c1d...",
"url": "https://example.com/pricing",
"detected_at": "2026-10-26T12:00:00Z",
"summary": "• Pro tier price increased from $49/mo to $59/mo.\n• Added 50,000 monthly credits.\n• Annual billing discount changed from 20% to 25%.",
"diff": "--- previous\n+++ current\n- Pro: $49/mo\n+ Pro: $59/mo",
"previous_hash": "a1b2c3...",
"new_hash": "d4e5f6..."
}