Crawl
1. Introduction
Crawl is a high-performance Web Crawling API built for developers and data teams. It packages complex web data collection capabilities into a ready-to-use data service.
Simply provide a target URL to retrieve structured web data. Crawl supports single-page scraping, batch collection, and site-wide crawling for use cases such as AI data acquisition, content analysis, and market monitoring.
Crawl uses advanced fingerprint browser technology to accurately simulate real browsing environments and navigate dynamic anti-bot controls. Browser rendering, dynamic page parsing, data cleaning, proxy orchestration, and automatic retries are built in. Results can be returned as HTML, Markdown, screenshots, and other formats. With a single API, you can collect web data reliably and efficiently without maintaining complex crawler infrastructure.
Core Benefits
Developer-Friendly API
The lightweight API is easy to integrate into an existing application.
- REST API: Complete a scrape through a single API without a complex crawler framework.
- Multi-language SDKs: Use Python, Node.js, Go, and other mainstream languages.
- Structured output: Receive consistent page metadata and Markdown content that AI and business systems can consume directly.
AI-Ready Output
The output is optimized for AI applications.
- Multiple input and output formats: Convert URLs, web pages, and documents into Markdown, PDF, or images.
- Intelligent main-content extraction: Remove noise such as advertisements and navigation while retaining the primary content.
- Lower token usage: Cleaner Markdown reduces token consumption and improves AI processing efficiency.
JavaScript Rendering
Full browser rendering makes dynamic pages easier to scrape.
- JavaScript rendering: Supports modern websites built with React, Vue, Next.js, and similar frameworks.
- Wait for page readiness: Wait for a CSS selector or for a custom duration.
- Browser automation: Click, scroll, type, and execute JavaScript.
Reliability and Retries
Built-in recovery improves scrape success rates and reduces application-side processing.
- Automatic retries: Recover automatically from network errors and page-load failures.
- Synchronous and asynchronous tasks: Support real-time requests and background batch processing.
- Task status queries: Retrieve execution status and results by Task ID.
- Batch monitoring: Track task progress, failures, and results.
High Concurrency and Queue Scheduling
Crawl is designed for large-scale data collection.
- Concurrent execution: Process multiple URLs and tasks concurrently.
- Priority queues: Schedule tasks according to priority.
- Rate limits: Control request rates by plan to reduce the risk of triggering target-site controls.
Predictable Costs
Reduce infrastructure and long-term maintenance costs.
- Flexible billing: Pay by request, successful scrape, or subscription plan.
- Free credit: Validate your use case with trial credit.
- Multiple plans: Starter, Growth, and Scale plans support different workloads.
- No infrastructure to maintain: Focus on your application instead of operating proxies, browser clusters, and task schedulers.
2. How to Use Crawl
Quick Start
Create an Nstproxy account to begin using Crawl.
You can choose one of the following billing options:
- Free trial: Receive trial credit after registration and quickly explore Crawl.
- Pay per use: Add funds to your account and pay only for actual usage, with no subscription required.
- Subscription plan: Select a plan that matches your workload for higher included credit, better pricing, and additional resource support.
Go to Dashboard → Crawl Playground, obtain an API key, and use it to call the Crawl API.
Example
The following request scrapes https://example.com and returns the page in Markdown format.
Request:
curl -X POST "https://api.nstproxy.com/api/v1/crawl/scrape/submit-sync" \
-H "x-api-key: <API-KEY>" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com", "formats": ["markdown"]}'Response:
{
"data": {
"code": 0,
"data": {
"markdown": "# Example Domain\n\nThis domain is for use in documentation examples without needing permission. Avoid use in operations.\n\n[Learn more](https://iana.org/domains/example)",
"markdownRef": "z4vHy1TDb8sRfMQturQ127OCgpu8nfInb4aTSz74dlEPiHDwaPXuPEVCvkkGVUgw2_E5lyEkFkJqss_bkAGm_3xLFHRPrq7PO-4vPhNkV4wVMEv-",
"metadata": {
"language": "en",
"statusCode": 200,
"title": "Example Domain"
}
},
"status": "completed",
"success": true
},
"err": false,
"msg": "SUCCESS",
"code": 200
}You can also view task results on Dashboard → Crawl → Data Output. The latest 100 results are retained.
API Usage
Every endpoint requires an API token for authentication.
Header example:
x-api-key: YOUR_API_KEY
Content-Type: application/json2.1 Scrape a Single Page
Single-page scraping retrieves one URL and returns Markdown, HTML, links, screenshots, PDF, raw data, or other requested results.
Typical use cases include:
- Extracting the main content from a web page
- Converting a page to Markdown
- Retrieving page HTML
- Extracting links
- Capturing a screenshot or exporting a PDF
- Scraping dynamically rendered content
Synchronous Scraping
A synchronous request waits for the task to complete and returns the result directly. It is suitable for real-time use cases where page processing time is predictable.
Endpoint:
POST /api/v1/crawl/scrape?async=trueRequest:
{
"url": "https://example.com",
"formats": ["markdown"],
"timeout": 60000,
"onlyMainContent": true
}Response:
{
"code": 200,
"err": false,
"msg": "success",
"data": {
"code": 0,
"success": true,
"status": "completed",
"data": {
"markdown": "# Example Domain",
"markdownRef": "xxx",
"links": ["https://www.iana.org/domains/example"],
"metadata": {
"title": "Example Domain",
"statusCode": 200,
"language": "en"
}
}
}
}Asynchronous Scraping
An asynchronous request immediately returns a task ID. Use the task ID to retrieve the result later. This method is suitable for slower pages and batch workloads.
Endpoint:
POST /api/v1/crawl/scrapeRequest:
{
"url": "https://example.com",
"formats": ["markdown"],
"timeout": 60000,
"onlyMainContent": true
}Response:
{
"code": 200,
"err": false,
"msg": "success",
"data": {
"id": "01KKKB6KPJT558N4MS5EMWF6TV",
"status": "processing",
"cached": false
}
}Retrieve the result:
GET /api/v1/crawl/scrape/result/{taskId}2.2 Site-Wide Crawl
A site-wide crawl starts from one URL and automatically discovers and scrapes pages on the same site. Use maximum depth, maximum page count, and URL inclusion or exclusion rules to control the crawl scope.
Endpoint:
POST /api/v1/crawlRequest:
{
"url": "https://example.com",
"formats": ["markdown", "html"],
"maxDepth": 3,
"maxPages": 50,
"includeUrls": ["*example.com/docs/*"],
"excludeUrls": ["*example.com/admin/*"],
"ignoreQuery": true,
"onlyMainContent": true,
"timeout": 60000
}Response:
{
"code": 200,
"err": false,
"msg": "success",
"data": {
"id": "01KKKCD3KXW3TB5R8BBWDA3VYP",
"status": "processing"
}
}2.3 Query Task Status
Query a Single-Page Scrape Result
The response contains the task status, success state, and scrape result.
Endpoint:
GET /api/v1/crawl/scrape/result/{taskId}Response:
{
"data": {
"code": 0,
"data": {
"markdownRef": "nL9gU9mOz9uHEtfXObDTo8K2wPh3F0ekLeDT_-NR-0Bl3-yl2_1kKY16Vbjy3Nj1nPpGK5o9GYnnSvAZqZxNRgrhgKuHrBS9JK4YgQHb0wYBUv20",
"metadata": {
"language": "en",
"statusCode": 200,
"title": "Example Domain"
},
"rawDataRef": "GTZQPXe-_oEWhBvlN1ZbOJt1unITySNEjb1QzVgv_FKTHVJrOe1h59O_hwVB2MaO98nq-V4EU6V1qdQAYz6sqT3mz-GEi85CxW7E5ptiO5MecpOsHg"
},
"status": "completed",
"success": true
},
"err": false,
"msg": "SUCCESS",
"code": 200
}Query Site-Wide Crawl Status
The response contains the crawl status, success state, and progress.
Endpoint:
GET /api/v1/crawl/status/{crawlId}Response:
{
"data": {
"code": 0,
"completed": 5,
"failed": 0,
"id": "01KXMX69PNHS92BA98HND5Z7T9",
"pending": 0,
"status": "completed",
"total": 5
},
"err": false,
"msg": "SUCCESS",
"code": 200
}Query Crawled Pages
Endpoint:
GET /api/v1/crawl/pages/{crawlId}Response:
{
"code": 200,
"err": false,
"msg": "success",
"data": {
"total": 25,
"completed": 8,
"nextCursor": "xxx",
"data": [
{
"taskId": "01KKKB6KPJT558N4MS5EMWF6TV",
"url": "https://example.com/docs/start",
"success": true,
"status": "completed",
"data": {
"markdownRef": "xxx",
"htmlRef": "xxx",
"links": ["https://example.com/docs/next"],
"metadata": {
"title": "Getting Started",
"statusCode": 200
}
}
}
]
}
}2.4 Read Large Results
For larger HTML, Markdown, screenshot, PDF, or raw-data results, the API may return a reference token such as:
markdownRefhtmlRefrawDataRefscreenshotRefpdfRef
Use the storage endpoint to retrieve the original content:
GET /api/v1/crawl/storage/read?st={ref}Typical use cases include:
- Downloading screenshots
- Downloading PDFs
- Reading raw page data
Output Formats
Crawl supports several output formats, including Markdown, HTML, Raw Data, PDF, Screenshot, and Links. For large results, the response may contain a reference token such as markdownRef, htmlRef, rawDataRef, pdfRef, or screenshotRef. Use the storage endpoint to retrieve the complete content.
3.1 Markdown
Markdown is the recommended output format for AI use cases. Crawl converts the page body, document content, or cleaned HTML into well-structured Markdown, reducing interference from advertisements, navigation, scripts, and other irrelevant content.
Suitable for:
- LLM context
- RAG document ingestion
- AI Agent tool results
- Knowledge-base construction
- Content summarization and question answering
- Information extraction and classification
- Document structuring
Characteristics:
- Clear text structure that models can understand easily
- Lower token usage than HTML
- Preserves headings, paragraphs, lists, links, and other basic semantic structure
- Can be combined with
onlyMainContentto produce cleaner main content
3.2 Raw Data / rawHTML
Raw Data contains the original page data returned by the target site, usually the original HTML. It is closer to the network or browser response and is suitable when you want to control parsing yourself.
Suitable for:
- Custom parsing
- Preserving the original page structure
- Debugging scrape results
- Comparing content before and after cleaning
- Investigating encoding, anti-bot responses, redirects, and empty pages
- Saving original web-page snapshots
Characteristics:
- Preserves more of the original content
- Useful for technical investigation and secondary parsing
- Usually has a larger payload
- Not recommended as direct LLM input because it may contain many irrelevant tags, scripts, and styles
3.3 HTML
HTML output contains parsed and cleaned page HTML. Compared with Raw Data, it retains page structure while removing some irrelevant content. Selector parameters can further control the returned area.
Suitable for:
- Custom parsing
- Preserving page structure
- Debugging
- Displaying page content
- Additional cleaning or rule-based extraction
- Preserving tables, links, images, and other structures in the main content
Characteristics:
- Preserves HTML tags and page structure
- Use
targetSelectorto return a specific area - Use
removeSelectorsto remove advertisements, pop-ups, and other elements - Use
includeTagsandexcludeTagsto control retained or removed tags - Better than Markdown for structured page parsing, but less suitable as direct LLM input
3.4 PDF
PDF output exports a page as a PDF file. It is useful when you need to preserve the page's reading layout or archive it. The file can also be used for text extraction, search indexing, or content comparison.
Suitable for:
- Basic full-text extraction
- Search indexing
- Content comparison
- Page archiving
- Report generation
- Audit and compliance retention
- Offline reading and file distribution
Characteristics:
- Preserves the page's print layout
- Suitable for archiving and downstream document processing
- Usually returned as
pdfRefand retrieved through the storage endpoint - Dynamic pages can be rendered with JavaScript before export
3.5 Screenshot
Screenshot output captures the rendered page. It is suitable for visual archiving, page-state validation, and competitor monitoring. For dynamic pages, Crawl can complete JavaScript rendering and browser actions before taking the screenshot.
Suitable for:
- Page archiving
- Visual validation
- Competitor monitoring
- Compliance retention
- Page redesign monitoring
- Preserving visual evidence of advertisements, prices, rankings, and other page elements
- Investigating failed or unexpected scrape results
Characteristics:
- Preserves the visual state of a page
- Useful when text alone is not sufficient
- Can wait for rendering with
jsRender - Can capture the entire page or a selected element after browser actions
- Usually returned as
screenshotRefand retrieved through the storage endpoint
SDK Examples
Node.js, Python, and Go SDKs are available for direct integration into application services, data-collection scripts, AI Agent tools, and RAG ingestion workflows.
4.1 Node.js
Repository: github.com/nstdata-ai/crawl-node (opens in a new tab)
Installation
npm install @nstdata-ai/crawlTypeScript Types
The Node.js SDK includes TypeScript declarations:
{
"types": "dist/index.d.ts"
}Synchronous Single-Page Scrape
import { NstDataClient, Format } from "@nstdata-ai/crawl";
const TOKEN = process.env.NSTDATA_API_TOKEN || "YOUR_API_TOKEN";
async function main() {
const client = new NstDataClient(TOKEN);
const res = await client.submitScrapeTaskSync({
url: "https://example.com/",
formats: [Format.MARKDOWN],
timeout: 60000,
onlyMainContent: true,
});
const markdown = await res.data?.getMarkdown();
console.log(markdown);
}
main().catch(console.error);Site-Wide Crawl
import { NstDataClient, Format } from "@nstdata-ai/crawl";
const client = new NstDataClient("YOUR_API_TOKEN");
const submit = await client.submitCrawlTask({
url: "https://example.com/",
formats: [Format.MARKDOWN, Format.HTML],
maxDepth: 3,
maxPages: 50,
ignoreQuery: true,
onlyMainContent: true,
});
console.log(submit.id);
const status = await client.getCrawlStatus(submit.id!);
console.log(status);4.2 Python
Repository: github.com/nstdata-ai/crawl-py (opens in a new tab)
Installation
pip install nstdata-ai-crawlPython Package
import nstdata_ai_crawlSynchronous Single-Page Scrape
import os
from nstdata_ai_crawl import NstDataClient, ScrapeRequestDto, Format
TOKEN = os.getenv("NSTDATA_API_TOKEN", "YOUR_API_TOKEN")
with NstDataClient(TOKEN) as client:
res = client.submit_scrape_task_sync(ScrapeRequestDto(
url="https://example.com/",
formats=[Format.MARKDOWN],
timeout=60000,
onlyMainContent=True,
))
print(res.data.get_markdown())Site-Wide Crawl
from nstdata_ai_crawl import NstDataClient, CrawlRequestDto, Format
with NstDataClient("YOUR_API_TOKEN") as client:
submit = client.submit_crawl_task(CrawlRequestDto(
url="https://example.com/",
formats=[Format.MARKDOWN, Format.HTML],
maxDepth=3,
maxPages=50,
ignoreQuery=True,
onlyMainContent=True,
))
print(submit.id)
status = client.get_crawl_status(submit.id)
print(status)4.3 Go
Repository: github.com/nstdata-ai/crawl-go (opens in a new tab)
Installation
go get github.com/nstdata-ai/crawl-goGo Module
module github.com/nstdata-ai/crawl-goSynchronous Single-Page Scrape
package main
import (
"context"
"fmt"
"log"
crawl "github.com/nstdata-ai/crawl-go"
)
func main() {
ctx := context.Background()
client := crawl.NewClient("YOUR_API_TOKEN")
res, err := client.SubmitScrapeTaskSync(ctx, &crawl.ScrapeRequestDto{
URL: "https://example.com/",
Formats: []string{crawl.FormatMarkdown},
Timeout: 60000,
OnlyMainContent: true,
})
if err != nil {
log.Fatal(err)
}
markdown, _ := res.Data.GetMarkdown(ctx)
fmt.Println(markdown)
}Site-Wide Crawl
package main
import (
"context"
"fmt"
"log"
crawl "github.com/nstdata-ai/crawl-go"
)
func main() {
ctx := context.Background()
client := crawl.NewClient("YOUR_API_TOKEN")
submit, err := client.SubmitCrawlTask(ctx, &crawl.CrawlRequestDto{
URL: "https://example.com/",
Formats: []string{crawl.FormatMarkdown, crawl.FormatHTML},
MaxDepth: 3,
MaxPages: 50,
IgnoreQuery: true,
OnlyMainContent: true,
})
if err != nil {
log.Fatal(err)
}
fmt.Println(submit.Id)
status, err := client.GetCrawlStatus(ctx, submit.Id)
if err != nil {
log.Fatal(err)
}
fmt.Println(status)
}Integration
Nstdata Crawl can serve as a general-purpose web data collection layer for AI Agents, RAG systems, data pipelines, and internal enterprise applications. It reliably retrieves, renders, and converts web content into formats suitable for downstream processing, so each application does not need to maintain its own crawlers, browser clusters, proxies, retry logic, and content-cleaning pipeline.
5.1 AI Agent Integration
AI Agents often need current information from company websites, news pages, product documentation, blogs, forums, or public resources. Nstdata Crawl can act as the Agent's web-reading tool: the Agent provides a URL, Crawl returns Markdown, HTML, or structured output, and the Agent then summarizes, answers questions, compares content, or extracts fields.
Typical workflow:
- The Agent receives a user question or task objective.
- The Agent determines which URLs it needs to access.
- The Agent calls Nstdata Crawl to scrape the pages.
- Crawl returns cleaned Markdown.
- The Agent uses the Markdown to summarize, answer questions, extract structured data, or generate a report.
This approach is useful for applications that need real-time web content:
| Use case | How Crawl is used |
|---|---|
| Research Agent | Read websites, paper pages, news, and industry sources to generate research summaries or comparison reports. |
| Sales Intelligence Agent | Scrape company websites, careers pages, press releases, and product pages to extract customer profiles, business changes, and sales signals. |
| Market Monitoring Agent | Continuously monitor competitor sites, pricing pages, announcements, and market changes to generate trend analysis and alerts. |
5.2 RAG Integration
In a RAG system, web content normally passes through collection, cleaning, chunking, embedding, and ingestion. Nstdata Crawl handles collection and content cleaning, converting complex pages into Markdown and reducing downstream text-processing work.
Typical workflow:
- Use Nstdata Crawl to scrape target pages or an entire site.
- Clean and normalize the returned Markdown.
- Split the content into chunks by heading, paragraph, or token count.
- Generate vectors with an embedding model.
- Store the text, vectors, and metadata in a vector database.
- When a user asks a question, retrieve relevant chunks and pass them to an LLM to generate an answer.
Common integration components include:
| Type | Examples |
|---|---|
| RAG framework | LangChain, LlamaIndex |
| Embedding model | OpenAI Embeddings |
| Vector database | Pinecone, Weaviate, Qdrant, pgvector |
This architecture is suitable for enterprise knowledge bases, documentation Q&A, product-manual assistants, industry research libraries, and competitor intelligence databases.
Error Codes
6.1 HTTP Status Codes
| HTTP | Client error / message | Meaning | Recommended action |
|---|---|---|---|
| 200 | No HTTP error. A failed task may include success: false, errorCode, and errorMessage in the body. | The query succeeded, although the task itself may have failed. | Check success, status, errorCode, and errorMessage. |
| 202 | No error. Submission returns id and status: "processing". | The asynchronous task was accepted. | Poll the result using the returned ID. |
| 400 | missing user id | The x-user-id header is missing. | Add the x-user-id request header. |
| 400 | invalid request body: ... | The JSON body is invalid or a required field is missing. | Check the JSON, required fields, and field types. |
| 400 | Query parameter 'st' is required / st is required | A storage GET request is missing the resource token. | Add ?st=<token>. |
| 400 | invalid resource token | The storage token cannot be decoded or has been modified. | Use the reference token returned in the task result. |
| 400 | Body field 'path' is required / path is required | A raw storage POST request is missing path. | Send {"path":"..."}. |
| 400 | invalid resource path / invalid storage path | The raw path or downstream storage path is invalid. | Check the URI scheme and path. |
| 400 | invalid request | Task Center returned InvalidArgument. | Check the request parameters and task ID. |
| 401 | unauthorized | The x-internal-app-key header is missing or incorrect. | Verify the internal app-key request header. |
| 402 | insufficient balance | Task Center rejected the task because the balance is insufficient. | Add funds or use a user/team with sufficient balance. |
| 403 | URL too long | The URL exceeds 2,048 characters. | Shorten the URL. |
| 403 | invalid URL | The URL could not be parsed. | Send a valid URL. |
| 403 | URL scheme not allowed | Only HTTP and HTTPS are allowed. | Use an HTTP or HTTPS URL. |
| 403 | URL not allowed | The URL was blocked by SSRF protection, a blocklist, private-IP protection, or metadata-domain protection. | Use a public target URL. |
| 403 | could not resolve hostname | The hostname could not be resolved. | Check the domain's DNS configuration. |
| 403 | access denied | Task Center returned PermissionDenied. | Confirm that the task belongs to the matching user or team. |
| 404 | task not found | The scrape task does not exist or is not accessible. | Check the task ID and request identity. |
| 404 | crawl session not found | The crawl session does not exist or is not accessible. | Check the crawl ID and request identity. |
| 404 | storage object not found | The storage object does not exist. | Confirm that the reference or path came from a valid task result. |
| 429 | rate limit exceeded | The API rate limit was exceeded. | Retry later. The response includes Retry-After: 1. |
| 429 | rate limit exceeded: <downstream message> | Task Center rejected the request because of a rate limit. | Reduce the request rate according to the message. |
| 429 | concurrency limit reached: <downstream message> | Task Center rejected the request because the concurrency limit was reached. | Reduce concurrency and wait for running tasks to complete. |
| 500 | server error | Gin panic recovery caught an unexpected exception. | Retry. Contact support if the error persists. |
| 503 | task center unavailable | Task Center gRPC is unavailable or returned an unknown error. | Retry later. |
| 503 | storage unavailable | Storage is unavailable, or synchronous reference hydration failed. | Retry later. If a synchronous request fails, query the reference through the asynchronous endpoint. |
| 503 | task list unavailable | The MongoDB task-list query failed. | Retry later. |
| 503 | sync canceled | The synchronous request context was canceled. | Send the request again and avoid closing the client connection too early. |
| 503 | billing service is temporarily unavailable... | The billing service is unavailable. | Retry later. |
| 503 | failed to estimate task cost | Cost estimation failed. | Retry later and check the request size. |
| 503 | failed to reserve billing balance | Balance reservation failed. | Retry later or check the account balance. |
| 503 | task not accepted[: ...] | Task Center rejected the task with an unrecognized business error. | Adjust the request according to the appended message or contact support. |
| 504 | sync timed out | /scrape/sync or /search/sync waited longer than 120 seconds. | Use asynchronous submission and polling, or reduce the task size. |
6.2 Task Failure Codes Returned with HTTP 200
| Error code | Error message | Meaning | Recommended action |
|---|---|---|---|
access_denied | Access denied by the target site | The target site is blocklisted. | The site cannot be scraped. |
timeout | The request timed out | The scrape timed out. | Increase timeout, simplify the steps, or retry later. |
parse_error | The page could not be parsed | Page parsing failed. | Try another format, adjust the selector, or confirm that the page is accessible. |
internal_error | An internal error occurred | A downstream or unknown internal error occurred. | Retry. Contact support if the error persists. |
Concurrency, Rate Limits, and Performance
- Average single-page response time: Average response latency is within 6 seconds, depending on page type, scrape complexity, and proxy-node quality.
- Maximum timeout: To optimize resource scheduling, the maximum timeout for one request is 60 seconds.
- Page size limit: Crawl supports pages up to 50 MB to maintain efficient parsing and content quality.
- Proxy region selection: Custom geographic locations are supported for localized data collection.
- Queue priorities: Growth and Scale subscribers receive higher queue priority.
3. Billing
Crawl supports Pay Per Use and subscription billing.
Pay Per Use: No subscription is required. Charges are deducted from the account balance according to actual usage.
Subscription: The subscription amount is converted into Included Credits. Included Credits can pay for usage-based services, including Pay Per Use proxy traffic, Crawl, and Proxy Manager. Included Credits are consumed before other account balances.
Included Credits are valid for 30 days and follow the subscription billing cycle. They can only be used during the current billing cycle, and unused credit does not roll over to the next cycle. Visit the Subscriptions page for detailed pricing and features.
- Billing unit (request/page render):
- A request is billable when page content is successfully retrieved. Receiving an HTTP response without a network error—including selected statuses such as 404 and 403—is considered a successful request.
- Bandwidth is billed according to actual usage.
- JavaScript rendering and other services:
- JavaScript rendering: Included in the base service at no additional charge.
- Markdown extraction: Included in the base service at no additional charge.
- PDF generation: Included in the base service at no additional charge.
- Screenshots: Included in the base service at no additional charge.
- Proxy billing: Proxy traffic and usage are billed separately as needed.
- Failed-request policy: Requests that fail to retrieve page content because of a system error are not billed.
- Free trial credit: New users receive $1 USD in trial credit after registering and applying for a trial.
- Pay Per Use rate: The base rate is $1.2 per 1,000 requests.
- Enterprise plans: Custom service agreements and pricing are available for enterprise requirements.
4. FAQ
-
How is Crawl different from a standard HTTP request?
A standard HTTP request normally retrieves only the static HTML returned by a server. It cannot handle JavaScript rendering, asynchronous content loading, client-side routing, or complex page behavior.
Crawl runs in a real browser environment and supports dynamic rendering, content extraction, screenshots, PDF generation, proxy access, and task management. It is better suited to production web data collection.
-
Does Crawl support JavaScript rendering?
Yes. For pages that load content with JavaScript, Crawl can wait for rendering to complete. You can configure a wait duration or wait for a specific element.
-
Does Crawl support authenticated cookies?
Yes. Pass cookies in the request to access content that requires a signed-in session or other permissions.
-
Does Crawl support screenshots?
Yes. Crawl can capture screenshots for page archiving, visual analysis, content review, and similar use cases.
-
Does Crawl support multiple URLs?
Multiple URLs are currently supported through concurrent tasks. Submit multiple asynchronous single-page scrape tasks and use concurrency controls for large-scale collection.
-
Does Crawl support site-wide crawling?
Yes. A site-wide crawl automatically discovers pages from an entry URL. Use maximum depth, maximum page count, inclusion rules, and exclusion rules to control the scope.
-
Does Crawl support webhooks?
Webhooks are not currently supported. Query task status to retrieve execution progress and final results. Webhook support is planned for a future release.
-
Does Crawl support custom headers?
Yes. Configure custom headers in the request, including language, User-Agent, and application-specific identifiers.
-
Can I select a proxy region?
Yes. Crawl Proxy supports country or region selection to improve regional access, collection stability, and target-site availability.
-
Are failed requests billed?
No charge is incurred when a system error prevents Crawl from retrieving page content.