workflow.jsonmarketingN8nv1.0.0

n8n: Web Scraper to Sheet

Scrapes a list of URLs on a schedule, extracts key data, and posts results to Slack.

Setup time: ~10 min
Last updated: Mar 16, 2026
byRunbooks Communitycontributor

Template

workflow.json
{
  "name": "Web Scraper to Sheet",
  "nodes": [
    {
      "name": "Daily Schedule",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1,
      "position": [250, 300],
      "parameters": {
        "rule": { "interval": [{ "field": "hours", "hoursInterval": 24 }] }
      }
    },
    {
      "name": "URL List",
      "type": "n8n-nodes-base.code",
      "typeVersion": 1,
      "position": [450, 300],
      "parameters": {
        "jsCode": "return [ { json: { url: 'https://example.com/pricing' } }, { json: { url: 'https://example.com/blog' } }, { json: { url: 'https://example.com/changelog' } } ];"
      }
    },
    {
      "name": "Fetch Pages",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 3,
      "position": [650, 300],
      "parameters": {
        "method": "GET",
        "url": "={{ $json.url }}",
        "options": { "timeout": 10000 }
      }
    },
    {
      "name": "Extract Data",
      "type": "n8n-nodes-base.code",
      "typeVersion": 1,
      "position": [850, 300],
      "parameters": {
        "jsCode": "const html = items[0].json.data || ''; const titleMatch = html.match(/<title>(.*?)<\/title>/i); const title = titleMatch ? titleMatch[1] : 'No title'; const wordCount = html.replace(/<[^>]*>/g, '').split(/\s+/).length; return [{ json: { url: items[0].json.url, title, wordCount, scrapedAt: new Date().toISOString() } }];"
      }
    },
    {
      "name": "Post to Slack",
      "type": "n8n-nodes-base.slack",
      "typeVersion": 2,
      "position": [1050, 300],
      "parameters": {
        "resource": "message",
        "operation": "post",
        "channel": "#scrape-results",
        "text": "={{ ':mag: Scraped: ' + $json.title + ' (' + $json.wordCount + ' words) - ' + $json.url }}"
      }
    }
  ],
  "connections": {
    "Daily Schedule": { "main": [[{ "node": "URL List" }]] },
    "URL List": { "main": [[{ "node": "Fetch Pages" }]] },
    "Fetch Pages": { "main": [[{ "node": "Extract Data" }]] },
    "Extract Data": { "main": [[{ "node": "Post to Slack" }]] }
  },
  "active": false,
  "settings": {}
}

Setup

  1. 1

    Copy the workflow JSON above.

  2. 2

    In n8n, go to Workflows and click Import.

  3. 3

    Paste the JSON and update credential references.

  4. 4

    Activate the workflow.

Import into n8n

This is an n8n workflow. Import it directly into your n8n instance.

  1. 1

    Open your n8n instance (localhost:5678 or your cloud URL).

  2. 2

    Go to Workflows and click the + New button.

  3. 3

    Click the three-dot menu in the top right, then select "Import from JSON".

  4. 4

    Paste the workflow JSON from the template above.

  5. 5

    Update any placeholder values (channel names, webhook URLs, credentials).

  6. 6

    Activate the workflow with the toggle in the top right.

# Alternatively, import via n8n CLI:
n8n import:workflow --input=workflow.json

Version History

v1.0.0Initial releaseMar 16, 2026

Framework

N8n

Requirements

HTTP Request (n8n node)
Code (n8n node)
Slack (n8n node)

File type

workflow.json

Version

v1.0.0

Updated Mar 16, 2026

Contributor

Runbooks Community

Community submission

You might also like