Package Information
Available Nodes
Documentation generating…
Documentation
n8n-nodes-spicrawl
This is an n8n community node. It lets you use Spicrawl in your n8n workflows.
Spicrawl is a web scraping API. It fetches any URL and returns it as clean markdown, HTML, text, a PDF or structured JSON. It renders JavaScript when a page needs it, and runs large URL lists as batch jobs.
n8n is a fair-code licensed workflow automation platform.
Installation
Operations
Credentials
Usage
Examples
Troubleshooting
Compatibility
Resources
Version history
Installation
Follow the installation guide in the n8n community nodes documentation, and install the package n8n-nodes-spicrawl.
Operations
The Spicrawl node has two operations.
| Operation | What it does |
|---|---|
| Scrape URL | Fetches one page and returns it as markdown, HTML, text, a PDF (binary) or a JSON envelope. Can also extract fields with CSS selectors, return page metadata and links, and capture a screenshot (binary). |
| Batch Scrape | Submits a list of URLs as one job, waits for it to finish, then returns one output item per URL. Takes the URLs from a text list or from the input items. |
The node is marked as usable as a tool, so an AI Agent node can call both operations.
Rendering tiers
Every page is loaded by the cheapest tier that can do what you asked for.
| Tier | Choose it with | Use it for |
|---|---|---|
fetch |
Rendering: Fetch (default) | Static pages and server-rendered HTML. Plain HTTP, no JavaScript. |
js |
Rendering: JavaScript | Pages whose content is built by JavaScript. Needed for Wait For Selector, Wait After Load and Block Resources. |
browser |
Chosen for you | Screenshots and PDFs. Costs the most. |
Rendering: Auto (Scrape URL only) starts with fetch and escalates to js only if the page needs it. You pay for the tier that worked. See Credits for current prices. A request that fails costs nothing.
Scrape URL parameters
| Parameter | API field | Notes |
|---|---|---|
| URL | url |
Required. http:// or https://. |
| Response Format | response_format |
Markdown (default), HTML, Text, JSON Envelope, PDF. |
| Rendering | js_render, mode |
Fetch, JavaScript or Auto. |
| Simplify | On by default. Returns the 10 most useful fields. Turn it off for the complete response. |
Options:
| Option | API field | Notes |
|---|---|---|
| Auto-Parse Page Metadata | autoparse |
JSON-LD, OpenGraph, Twitter Card, microdata. Returned under data. |
| Block Resources | block_resources |
Image, Font, Media, Script, Stylesheet. Needs JavaScript or Auto. |
| Bypass Cache | cache |
Sends cache: false. A cache hit is billed like the fetch that stored it. |
| Cache TTL (Seconds) | cache_ttl |
Cannot be combined with Bypass Cache. |
| Custom Headers | custom_headers |
Sent to the target site. |
| Extract Fields (JSON) | extract |
A map of field name to CSS selector, or a JSON Schema with selectors. Returned under data. |
| Main Content Only | main_content_only |
Strips navigation, footers and sidebars. |
| Max Cost (Credits) | max_cost |
Refuses the request, free of charge, if it could cost more. |
| Proxy URL | proxy |
Your own proxy. Residential proxies work best on protected sites. |
| Return Links | links |
All absolute links on the page, under links. |
| Screenshot, Screenshot Format, Screenshot Full Page | screenshot, screenshot_format, screenshot_fullpage |
The image is returned as binary data in the screenshot property. |
| Wait After Load (Ms) | wait |
Needs JavaScript or Auto. |
| Wait For Selector | wait_for |
CSS selector. Needs JavaScript or Auto. |
Batch Scrape parameters
| Parameter | API field | Notes |
|---|---|---|
| URL Source | Text List (one URL per line) or Input Items (one URL from each input item, default expression {{ $json.url }}). Up to 10,000 URLs. |
|
| Response Format | response_format |
Markdown (default), HTML or Text. |
| Rendering | js_render |
Fetch or JavaScript. |
| Simplify | On by default. |
Options: Block Resources, Concurrency, Credit Budget, Custom Headers, Failure Threshold, Job Name, Main Content Only, Max Attempts, Max Cost Per Page (Credits), Max Wait (Minutes), Poll Interval (Seconds), Proxy URL, Wait After Load (Ms), Wait For Selector.
Batch jobs run each URL as one fetch or one render. Extraction, screenshots, PDFs, actions, Auto rendering and the result cache are not available in a batch; the API refuses them with a 400 that names each offending field, and nothing is charged. Use Scrape URL for those.
Batch Scrape runs once for all input items, not once per item. The job is polled until it finishes (or Max Wait is reached), then every finished page is returned.
Credentials
You need a Spicrawl account and an API key.
- Sign in at app.spicrawl.com and open API Keys.
- Create a key. Live keys start with
spicrawl_live_and spend credits. Test keys start withspicrawl_test_. - Give the key the
scrapescope for Scrape URL and thebatchscope for Batch Scrape. - In n8n, create a Spicrawl API credential and paste the key into API Key.
n8n tests the credential by listing your recent requests, which works with any valid key. See Authentication.
Usage
Output of Scrape URL
With Simplify on you get these fields, when they apply:
| Field | Meaning |
|---|---|
url, final_url |
The URL you asked for and the URL after redirects. |
status |
The status the target site answered with. A blocked or missing page is still a successful call: check status. |
content |
The page in the chosen format. |
credits |
Credits charged for this request. |
warnings |
Advisories from the API, for example that the format was changed to JSON. |
data, empty_fields |
Extracted fields. empty_fields lists selectors that matched nothing, which is the first sign a site changed. |
links |
Links found on the page. |
request_id |
Quote it to Spicrawl support. |
Turn Simplify off to also get engine (the tier that served the page), credits_remaining, cache_state, proxy_source and the rest of the JSON envelope. PDFs and screenshots always arrive as binary data, whatever Simplify is set to.
Output of Batch Scrape
One item per finished URL, in submission order:
| Field | Meaning |
|---|---|
seq |
Position of the URL in the job, starting at 0. With Input Items it is the index of the input item. |
url |
The URL as submitted. |
status |
succeeded, failed, cancelled or skipped. |
http_status |
The status the target site answered with. |
content |
The page in the chosen format. |
content_state |
Present only when content is missing: truncated (over 512 KiB), omitted or unavailable. |
credits |
Credits charged for this URL. Only succeeded pages are charged. |
error |
code and retryable for a failed URL. |
batch_id, batch_status |
The job, and how it ended (completed, failed or cancelled). |
Failed URLs are returned too, so filter on status with an IF or Filter node. If nothing finished, the node returns the job itself so you can see why.
Batch results stay readable for 72 hours. If the job does not finish within Max Wait, the node stops with an error that names the job ID; the job keeps running and finished pages are still charged.
Notes
- Scraping is not idempotent: every call is charged, including cache hits. Use n8n's Retry On Fail for errors marked retryable, not for successful calls.
- Errors from the API are shown with their stable code, for example
ERR::AUTH::INSUFFICIENT_SCOPE, plus the API's hint and the request ID. - Use the markdown format when the output goes to an AI model: it is much smaller than HTML.
Examples
Import an example with Workflow menu > Import from URL or clipboard. Select your credential on the Spicrawl node afterwards.
Scrape a page to markdown
{
"nodes": [
{
"name": "When clicking Test workflow",
"type": "n8n-nodes-base.manualTrigger",
"typeVersion": 1,
"position": [0, 0],
"parameters": {}
},
{
"name": "Spicrawl",
"type": "n8n-nodes-spicrawl.spicrawl",
"typeVersion": 1,
"position": [220, 0],
"parameters": {
"operation": "scrape",
"url": "https://example.com",
"responseFormat": "markdown",
"rendering": "fetch",
"simplify": true,
"options": {}
}
}
],
"connections": {
"When clicking Test workflow": {
"main": [[{ "node": "Spicrawl", "type": "main", "index": 0 }]]
}
}
}
Extract product fields from a JavaScript page
Set Rendering to JavaScript, then add the options Wait For Selector (.price) and Extract Fields (JSON):
{
"title": "h1",
"price": ".price",
"images": { "selector": ".gallery img", "kind": "list", "output": "attr", "attribute": "src" },
"next_page": "a.next@href"
}
The fields come back under data:
{
"url": "https://example.com/products/42",
"status": 200,
"credits": 3,
"data": { "title": "Walnut Desk", "price": "$349.00", "images": ["https://example.com/img/desk-1.jpg"] },
"empty_fields": ["next_page"]
}
Take a screenshot
Add the options Screenshot and Screenshot Full Page. The image arrives in the binary property screenshot, ready for a Write Binary File, Google Drive or Send Email node. The call uses the browser tier.
Batch scrape a list of URLs
{
"nodes": [
{
"name": "When clicking Test workflow",
"type": "n8n-nodes-base.manualTrigger",
"typeVersion": 1,
"position": [0, 0],
"parameters": {}
},
{
"name": "Spicrawl",
"type": "n8n-nodes-spicrawl.spicrawl",
"typeVersion": 1,
"position": [220, 0],
"parameters": {
"operation": "batch",
"urlSource": "list",
"urls": "https://example.com/products/1\nhttps://example.com/products/2",
"responseFormat": "markdown",
"rendering": "js",
"simplify": true,
"batchOptions": { "jobName": "nightly-catalog", "concurrency": 20 }
}
}
],
"connections": {
"When clicking Test workflow": {
"main": [[{ "node": "Spicrawl", "type": "main", "index": 0 }]]
}
}
}
To scrape URLs that come from a previous node (a Google Sheet, an RSS feed, a database), set URL Source to Input Items and point URL at the field, for example {{ $json.link }}.
Give an AI agent a web page reader
Add a Spicrawl node to an AI Agent node's tools. The agent fills in the URL and picks the options it needs. Keep Response Format on Markdown, and set Max Cost (Credits) so one tool call can never spend more than you intend.
Troubleshooting
| Error code | What it means | What to do |
|---|---|---|
ERR::AUTH::INVALID_KEY, ERR::AUTH::MISSING_KEY |
The key is wrong or empty. | Copy the key again into the credential. |
ERR::AUTH::INSUFFICIENT_SCOPE |
The key lacks the scope for this operation. | Use a key with scrape (Scrape URL) or batch (Batch Scrape). |
ERR::REQUEST::INCOMPATIBLE_FLAGS |
An option needs another one, for example Wait For Selector needs JavaScript or Auto rendering. | Change Rendering. |
ERR::LIMIT::QUOTA_EXCEEDED |
The monthly credit allowance cannot cover the request. | Submit fewer URLs, set Max Cost, or add credits. |
ERR::LIMIT::RATE_LIMITED, ERR::LIMIT::CONCURRENCY_EXCEEDED (HTTP 429) |
Too many requests per second, or too many in flight. Both are retryable and free. | Enable Retry On Fail on the node, or use Batch Scrape. |
The full list is in the error catalogue.
Compatibility
Developed against n8n 2.x with n8n-workflow 2.42 (n8nNodesApiVersion 1). The package has no runtime dependencies.
Resources
- Source code, in the agent-plugins repository
- n8n community nodes documentation
- Spicrawl documentation
- Scrape API reference
- Batch jobs guide
- Structured data extraction guide
Version history
See CHANGELOG.md.
- 0.1.0: Scrape URL and Batch Scrape.