Skip to main content

Confirm

Are you sure?

Integrations

URLpipe in n8n

Any URL to Markdown, a screenshot or metadata inside a workflow — with the HTTP Request node you already have.

By · Last updated: September 2026

TL;DR

URLpipe needs no custom node in n8n: the built-in HTTP Request node posts to an endpoint such as https://urlpipe.dev/markdown with a Header Auth credential and a JSON body. Use sync: true and a timeout above 60 seconds for quick calls, or pass an n8n Webhook URL as report_to and let the result start the next workflow.

Free plan, no credit card. 1,000 credits a month.

Step 1

Set up the credential once

In n8n, create a credential of type Header Auth: name Authorization, value Bearer YOUR_API_KEY, using a project API key from the URLpipe dashboard. Every HTTP Request node that calls URLpipe picks this credential, so the key lives in one place and never in the workflow JSON.

Step 2

The HTTP Request node, field by field

FieldValue
Method<code>POST</code>
URL<code>https://urlpipe.dev/markdown</code> — or <code>/screenshot</code>, <code>/meta</code>, <code>/scrape</code>…
AuthenticationGeneric Credential Type → Header Auth → your URLpipe credential
Send BodyOn — Body Content Type <strong>JSON</strong>, Specify Body <strong>Using JSON</strong>
JSON<code>{"url": "{{ $json.url }}", "sync": true}</code>
Options → ResponseResponse Format <strong>Text</strong> for /markdown and /screenshot; <strong>JSON</strong> for /meta, /console, /lighthouse, /scrape
Options → Timeout<code>70000</code> ms. The node's default is 10 seconds; a sync call can take up to 60

{{ $json.url }} takes the URL from the incoming item, so the node runs once per row of a sheet, per RSS item, per record — whatever the previous node produced.

Copy and paste

An importable workflow

Copy this JSON and paste it onto an n8n canvas (or use Import from File). Open the HTTP Request node, choose your Header Auth credential, and run it. It reads a page as Markdown into a field called markdown.

urlpipe-markdown.json
{
  "name": "URLpipe: URL to Markdown",
  "nodes": [
    {
      "parameters": {},
      "id": "6f1a2b3c-1d2e-4f50-8a9b-0c1d2e3f4a51",
      "name": "Manual Trigger",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [0, 0]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://urlpipe.dev/markdown",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "{\n  \"url\": \"https://example.com\",\n  \"sync\": true\n}",
        "options": {
          "response": {
            "response": {
              "responseFormat": "text",
              "outputPropertyName": "markdown"
            }
          },
          "timeout": 70000
        }
      },
      "id": "6f1a2b3c-1d2e-4f50-8a9b-0c1d2e3f4a52",
      "name": "URLpipe: Markdown",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [240, 0]
    }
  ],
  "connections": {
    "Manual Trigger": {
      "main": [
        [
          { "node": "URLpipe: Markdown", "type": "main", "index": 0 }
        ]
      ]
    }
  },
  "settings": { "executionOrder": "v1" }
}

Swap the fixed URL for an expression — ={ "url": "{{ $json.url }}", "sync": true } — once a real trigger feeds it. For a screenshot, change the URL to /screenshot: the text response is the image in Base64, and the Convert to File node turns it into a binary file.

Step 3

Async: let the result start the workflow

For Lighthouse audits, big batches or anything slow, don't hold the node open. Build a second workflow that starts with a Webhook node (method POST), copy its Production URL, and pass it as report_to:

HTTP Request node — JSON body, async
{
  "url": "{{ $json.url }}",
  "operations": ["markdown", "meta"],
  "report_to": "https://your-n8n.example.com/webhook/urlpipe-results",
  "labels": { "row": "{{ $json.id }}" }
}

The first workflow gets back {"token": …, "status": "accepted"} at once. When the work is done, URLpipe posts the result to the Webhook node: body.success, body.result, body.labels.row to match it to your data, and body.error on failure. The webhook must be a public https (or http) address on the default port — a URL with :5678 or any other port is refused, and so are IP addresses and localhost. n8n Cloud's webhook URLs qualify; a self-hosted instance needs a public hostname on port 443.

Turn on webhook signing in the project's settings and deliveries carry an HMAC-SHA256 signature; verifying it needs the raw request body — see signing & verifying.

Limits

What it costs, and what it doesn't do

  • Each node execution is one API call at the usual rate: 1 credit for Markdown or a screenshot, 5 for metadata. A repeat inside seven days is a free cache hit, so re-running a workflow while you build it costs nothing.
  • The HTTP API allows 60 requests a minute and 15 per 10 seconds per project; on a big list, use the node's Batching option to space requests out.
  • There is no URLpipe community node yet — this recipe uses n8n's own HTTP Request node, which is all the API needs.

FAQ

Frequently asked questions

Is there an official URLpipe node for n8n?
Not yet. The HTTP Request node does everything the API needs: a POST with a JSON body and a Header Auth credential.
Why does my n8n request time out?
The HTTP Request node's default timeout is 10 seconds. Set Options → Timeout to 70000 ms for sync calls, or use async with a Webhook node for anything slow.
How do I get the result of an async request in n8n?
Pass an n8n Webhook node's production URL as report_to. URLpipe posts the result there, with your labels, when it is ready.
Can my self-hosted n8n receive URLpipe webhooks on port 5678?
No. Webhook URLs must use the default port for their scheme at a public hostname. Put n8n behind a reverse proxy on 443.

Connect it in five minutes.

Free plan, no card. Confirm your email and your API key is live — you'll be making real requests in minutes.