AutomationFlowsSlack & Telegram › Create Notion Page Summaries From Urls with Snapshot Site and Slack Alerts

Create Notion Page Summaries From Urls with Snapshot Site and Slack Alerts

BySnapshot Site @snapshotsite on n8n.io

This workflow receives a published page URL via webhook, analyzes the page with Snapshot Site, posts failures or quality issues to Slack, and creates a structured summary page in Notion with the extracted summary, topics, headings, and content-quality notes. Receives a POST…

Webhook trigger★★★★☆ complexity16 nodesN8N Nodes Snapshot SiteSlackNotion
Slack & Telegram Trigger: Webhook Nodes: 16 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #17375 — we link there as the canonical source.

This workflow follows the Notion → Slack recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "id": "ENqU3njgZuvXl7i8",
  "name": "Auto Page Summary \u2192 Notion",
  "tags": [],
  "nodes": [
    {
      "id": "e03975bb-e434-4e7b-a42b-57c55e8c8f1f",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        208,
        -160
      ],
      "parameters": {
        "width": 540,
        "height": 1040,
        "content": "## Auto Page Summary \u2192 Notion\n\n### How it works\n\nThis workflow is triggered by a webhook (e.g. a CMS \"page published\" hook) carrying a URL. It runs Snapshot Site's AI Analyze on that page, checks for API errors, then checks the page's own quality signals (blank page / CAPTCHA detected) before creating a structured Notion page with the AI summary, topics, heading outline, and a content-quality note. Pages that come back blank or CAPTCHA-walled are flagged to Slack instead of getting a garbage summary written to Notion.\n\n### Setup steps\n\n- Install the `n8n-nodes-snapshot-site` community node (Settings \u2192 Community nodes \u2192 Install \u2192 `n8n-nodes-snapshot-site`) \u2014 verified by n8n.\n- Add a Snapshot Site credential, a Slack credential, and a Notion credential.\n- Activate the workflow and copy the Webhook node's Production URL into your CMS's \"on publish\" hook (or call it manually with `{\"url\": \"https://...\"}`).\n- Set the Notion node's parent page and attach your Notion credential.\n- To test without a real webhook call: edit the URL in **Mock Webhook Payload**, then click **Execute workflow** \u2014 the Manual Trigger path feeds the exact same payload shape into the pipeline.\n\n### Customization\n\nSwap the webhook trigger for a Schedule Trigger + Google Sheets read (see the AI extraction pack pattern) if you'd rather batch-process a list of URLs instead of reacting to a publish event. Add more Analyze fields (e.g. `metadata.keywords`) to the Notion page as needed."
      },
      "typeVersion": 1
    },
    {
      "id": "c8dbd0c4-56e0-4b9f-aab2-52a45f35fbf9",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        768,
        112
      ],
      "parameters": {
        "color": 7,
        "width": 560,
        "height": 580,
        "content": "## Receive and analyze\n\nReceives the published page's URL \u2014 from the real webhook, or from the Manual Trigger + mock payload below it for testing \u2014 and runs Snapshot Site's AI Analyze (summary + topics + quality checks) on it."
      },
      "typeVersion": 1
    },
    {
      "id": "bfc5bdc7-1a7b-4534-a57b-cb96356b9baa",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1376,
        48
      ],
      "parameters": {
        "color": 7,
        "width": 576,
        "height": 652,
        "content": "## Handle errors and quality issues\n\nChecks for API errors first, then for blank-page/CAPTCHA content-quality issues \u2014 both get a Slack alert instead of a Notion entry."
      },
      "typeVersion": 1
    },
    {
      "id": "3259a4dc-3f3c-4106-aa97-c438167dbce1",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1968,
        -96
      ],
      "parameters": {
        "color": 7,
        "width": 688,
        "height": 636,
        "content": "## Save to Notion\n\nBuilds a structured summary (topics, headings, quality note) and creates a Notion page for the analyzed content."
      },
      "typeVersion": 1
    },
    {
      "id": "3e1fc88f-8753-4a96-bae0-cde58a410319",
      "name": "When Page Published",
      "type": "n8n-nodes-base.webhook",
      "position": [
        816,
        288
      ],
      "parameters": {
        "path": "page-published",
        "options": {},
        "httpMethod": "POST"
      },
      "typeVersion": 2
    },
    {
      "id": "ea4a4c48-e5c4-4858-96f1-bd51403c46da",
      "name": "When clicking 'Execute workflow'",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        816,
        464
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "055d1c13-1d68-48f2-b1df-3d0d535adaf7",
      "name": "Mock Webhook Payload",
      "type": "n8n-nodes-base.set",
      "position": [
        1136,
        464
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "name": "body.url",
              "type": "string",
              "value": "https://example.com"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "33526f46-22ad-4ae9-b73c-7d4c5e6d56b4",
      "name": "Prepare Request",
      "type": "n8n-nodes-base.noOp",
      "position": [
        1136,
        304
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "ca2733ea-ec16-40c6-b590-339c52a31273",
      "name": "Analyze Page",
      "type": "n8n-nodes-snapshot-site.snapshotSite",
      "onError": "continueErrorOutput",
      "maxTries": 3,
      "position": [
        1408,
        304
      ],
      "parameters": {
        "url": "={{ $json.body.url }}",
        "operation": "analyze",
        "requestOptions": {},
        "additionalFields": {
          "fullSize": true,
          "enableQuality": true,
          "enableSummary": true
        }
      },
      "retryOnFail": true,
      "typeVersion": 1,
      "waitBetweenTries": 5000
    },
    {
      "id": "a0c87c07-d9a8-496c-a03f-465d7c9c8e8b",
      "name": "Check for API Error",
      "type": "n8n-nodes-base.if",
      "position": [
        1616,
        240
      ],
      "parameters": {
        "conditions": {
          "boolean": [
            {
              "value1": "={{ $json.error === true }}",
              "value2": true
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "40d0c098-30ee-420c-9e03-3255a5b0e857",
      "name": "Build Failure Record",
      "type": "n8n-nodes-base.set",
      "position": [
        1616,
        544
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "name": "url",
              "type": "string",
              "value": "={{ $('Prepare Request').item.json.body.url }}"
            },
            {
              "name": "message",
              "type": "string",
              "value": "={{ $json.error?.message || $json.message }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "e94b5741-7f33-4536-90af-1e683ef4a6f4",
      "name": "Notify Analysis Failure",
      "type": "n8n-nodes-base.slack",
      "position": [
        1808,
        544
      ],
      "parameters": {
        "text": "=\ud83d\udd34 Page analysis failed for {{ $json.url }}: {{ $json.message }}",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "name",
          "value": "#content-ops-alerts"
        },
        "otherOptions": {
          "unfurl_links": false,
          "unfurl_media": false
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "93c404db-4670-43ed-8b26-52010bc67c33",
      "name": "Check Content Quality",
      "type": "n8n-nodes-base.if",
      "position": [
        2016,
        304
      ],
      "parameters": {
        "conditions": {
          "boolean": [
            {
              "value1": "={{ $json.quality.isBlank === true || $json.quality.hasCaptcha === true }}",
              "value2": true
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "b2bf919f-7375-4050-80a8-a2eaf6162ee7",
      "name": "Notify Content Quality Issue",
      "type": "n8n-nodes-base.slack",
      "position": [
        2256,
        80
      ],
      "parameters": {
        "text": "=\u26a0\ufe0f {{ $json.url }} came back {{ $json.quality.isBlank ? 'blank' : 'CAPTCHA-walled' }} \u2014 skipped Notion summary. HTTP status: {{ $json.quality.httpStatus }}",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "name",
          "value": "#content-quality"
        },
        "otherOptions": {
          "unfurl_links": false,
          "unfurl_media": false
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "ce2ede4f-0134-426b-bb95-796ada57317a",
      "name": "Build Notion Content",
      "type": "n8n-nodes-base.code",
      "position": [
        2256,
        304
      ],
      "parameters": {
        "jsCode": "const d = $input.item.json;\nconst topics = (d.topics || []).join(', ') || 'None detected';\nconst headingsText = [\n  d.headings?.h1?.length ? `H1: ${d.headings.h1.join(' | ')}` : null,\n  d.headings?.h2?.length ? `H2: ${d.headings.h2.join(' | ')}` : null,\n  d.headings?.h3?.length ? `H3: ${d.headings.h3.join(' | ')}` : null,\n].filter(Boolean).join('\\n') || 'No headings detected';\nconst q = d.quality || {};\nconst qualityText = `Readability: ${q.readabilityScore ?? 'n/a'}/100 | Blank page: ${q.isBlank} | CAPTCHA: ${q.hasCaptcha} | HTTP status: ${q.httpStatus}` +\n  (q.notes?.length ? ` | Notes: ${q.notes.join(', ')}` : '');\nreturn [{\n  json: {\n    pageTitle: d.metadata?.title || d.url,\n    pageUrl: d.url,\n    summary: d.summary || 'No summary generated',\n    topics,\n    headingsText,\n    qualityText,\n  }\n}];"
      },
      "typeVersion": 2
    },
    {
      "id": "4b44377f-d3b0-4480-9c65-cb871ede6376",
      "name": "Create Notion Page",
      "type": "n8n-nodes-base.notion",
      "position": [
        2528,
        304
      ],
      "parameters": {
        "title": "={{ $json.pageTitle }}",
        "pageId": {
          "__rl": true,
          "mode": "id",
          "value": "PLACEHOLDER"
        },
        "blockUi": {
          "blockValues": [
            {
              "type": "heading_2",
              "textContent": "=\ud83d\udd17 {{ $json.pageUrl }}"
            },
            {
              "type": "heading_2",
              "textContent": "Summary"
            },
            {
              "textContent": "={{ $json.summary }}"
            },
            {
              "type": "heading_2",
              "textContent": "Topics"
            },
            {
              "textContent": "={{ $json.topics }}"
            },
            {
              "type": "heading_2",
              "textContent": "Headings Found"
            },
            {
              "textContent": "={{ $json.headingsText }}"
            },
            {
              "type": "heading_2",
              "textContent": "Content Quality"
            },
            {
              "textContent": "={{ $json.qualityText }}"
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 2.2
    }
  ],
  "active": false,
  "settings": {
    "binaryMode": "separate",
    "executionOrder": "v1"
  },
  "versionId": "130eda01-04e5-49d6-b048-a32359bce0d5",
  "nodeGroups": [],
  "connections": {
    "Analyze Page": {
      "main": [
        [
          {
            "node": "Check for API Error",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Build Failure Record",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Request": {
      "main": [
        [
          {
            "node": "Analyze Page",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check for API Error": {
      "main": [
        [
          {
            "node": "Build Failure Record",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Check Content Quality",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When Page Published": {
      "main": [
        [
          {
            "node": "Prepare Request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Build Failure Record": {
      "main": [
        [
          {
            "node": "Notify Analysis Failure",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Build Notion Content": {
      "main": [
        [
          {
            "node": "Create Notion Page",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Mock Webhook Payload": {
      "main": [
        [
          {
            "node": "Prepare Request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Content Quality": {
      "main": [
        [
          {
            "node": "Notify Content Quality Issue",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Build Notion Content",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking 'Execute workflow'": {
      "main": [
        [
          {
            "node": "Mock Webhook Payload",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This workflow receives a published page URL via webhook, analyzes the page with Snapshot Site, posts failures or quality issues to Slack, and creates a structured summary page in Notion with the extracted summary, topics, headings, and content-quality notes. Receives a POST…

Source: https://n8n.io/workflows/17375/ — original creator credit. Request a take-down →

More Slack & Telegram workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Slack & Telegram

Are you tired of the repetitive dance between git push, creating a pull request in GitHub, updating the corresponding task in JIRA, and then manually notifying your team in Slack, or Notion?

HTTP Request, Stop And Error, Jira +2
Slack & Telegram

This workflow is an AI-assisted clean plate and object removal pipeline built for modern VFX production environments. It transforms a single plate image and removal brief into multiple high-quality cl

HTTP Request, Google Drive, Slack +3
Slack & Telegram

This workflow is an AI-driven FX concept generation pipeline that transforms a single VFX brief into multiple high-quality simulation-ready video concepts. It automates ideation, rendering, storage, a

HTTP Request, Google Drive, Notion +2
Slack & Telegram

This workflow receives a new-hire webhook, checks the hire’s personal email in RelayShield for breach and infostealer exposure, provisions a Google Workspace account via the Admin SDK, and logs both t

N8N Nodes Relayshield, Notion, Slack +1
Slack & Telegram

📝 Automation: Instantly Onboard New Clients from Tally Form to Notion, Google Drive & Slack This automation streamlines the client onboarding process by integrating Tally, Notion, Google Drive, and Sl

Google Drive, Notion, Slack