AutomationFlowsAI & RAG › Rerank Pm Priorities Every 2 Hours Using Openai, Notion, and Slack

Rerank Pm Priorities Every 2 Hours Using Openai, Notion, and Slack

ByYassin Zehar @yassinzehar on n8n.io

AI-powered priority re-evaluation every 2 hours. Analyzes new signals, meeting decisions, emails, and blockers, then runs 3 AI passes (Impact, Urgency, Final Ranking) to suggest re-ranking. Only updates when the ranking actually changes.

Cron / scheduled trigger★★★★★ complexityAI-powered45 nodesNotionOpenAISlack
AI & RAG Trigger: Cron / scheduled Nodes: 45 Complexity: ★★★★★ AI nodes: yes Added:

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

This workflow follows the Notion → OpenAI 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": "Bx2w5dd0BPnbui0a",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "PM Daily Smart Priority Reranker",
  "tags": [],
  "nodes": [
    {
      "id": "f3a488b4-5c92-457d-8fb8-77c5623fa8f4",
      "name": "Sticky Note - How It Works",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        752,
        -240
      ],
      "parameters": {
        "width": 350,
        "height": 260,
        "content": "## How it works\n\nEvery 2 hours during work days, re-evaluates all open priorities using fresh signals, meetings, emails, and blockers. Three AI passes (Impact, Urgency, Final Ranking) produce a new ranking. Only updates Notion if the ranking actually changed."
      },
      "typeVersion": 1
    },
    {
      "id": "908a0473-bec3-493d-8191-155600a40c68",
      "name": "Sticky Note - Context Collection",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1136,
        -240
      ],
      "parameters": {
        "color": 7,
        "width": 1470,
        "height": 1096,
        "content": "## Context Collection\n\nFive parallel pulls: open priorities, recent high-impact signals, today's meeting decisions, recent urgent emails, and overdue or blocked actions."
      },
      "typeVersion": 1
    },
    {
      "id": "9de9aedf-585d-46e0-afad-059bd89f95b6",
      "name": "Sticky Note - Priority Matrix",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2640,
        -240
      ],
      "parameters": {
        "color": 7,
        "width": 814,
        "height": 1096,
        "content": "## Priority Matrix\n\nBuilds a detailed context matrix linking each priority to its relevant signals, emails, and decisions. Deduplicates and normalizes the data."
      },
      "typeVersion": 1
    },
    {
      "id": "20c556d0-cb2a-44f7-a77c-ccc7a2d14ffa",
      "name": "Sticky Note - 3-Pass AI Scoring",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3472,
        -240
      ],
      "parameters": {
        "color": 7,
        "width": 894,
        "height": 1096,
        "content": "## 3-Pass AI Scoring\n\nPass 1: Impact Analysis scores each priority. Pass 2: Urgency Recalibration adjusts for deadlines. Pass 3: Final Ranking with rationale."
      },
      "typeVersion": 1
    },
    {
      "id": "f9e14de6-673c-49ad-957d-b260c566fd08",
      "name": "Sticky Note - Change Detection",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        4384,
        -240
      ],
      "parameters": {
        "color": 7,
        "width": 1742,
        "height": 1096,
        "content": "## Change Detection\n\nCompareDatasets identifies ranking differences. If changes, batch-updates Notion and posts before/after to Slack."
      },
      "typeVersion": 1
    },
    {
      "id": "b130f053-78c3-4f5a-b3d2-09b0fbcc9044",
      "name": "Rerank Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        1232,
        352
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "0 */2 8-18 * * 1-5"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "e867aad1-3e6a-42fa-a89d-679ff3e00af0",
      "name": "Read Settings",
      "type": "n8n-nodes-base.notion",
      "position": [
        1472,
        352
      ],
      "parameters": {
        "options": {},
        "resource": "databasePage",
        "operation": "getAll",
        "returnAll": true,
        "databaseId": "31e06bab-3ebe-813a-858d-dfec8df6b644"
      },
      "typeVersion": 2.2
    },
    {
      "id": "8374b191-9bb2-4585-bddf-6cae44eb84c9",
      "name": "Check Demo Mode",
      "type": "n8n-nodes-base.if",
      "position": [
        1680,
        352
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "conditions": [
            {
              "operator": {
                "type": "boolean",
                "operation": "equals"
              },
              "leftValue": "={{ $json.properties?.demo_mode?.checkbox }}",
              "rightValue": true
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "7f525011-d6b1-4414-83f9-6c5ac079acf7",
      "name": "Get Open Priorities",
      "type": "n8n-nodes-base.notion",
      "position": [
        1968,
        -32
      ],
      "parameters": {
        "options": {},
        "resource": "databasePage",
        "operation": "getAll",
        "returnAll": true,
        "databaseId": "31e06bab-3ebe-81fe-9d0c-e65a49a99ef3"
      },
      "typeVersion": 2.2
    },
    {
      "id": "75dab067-a4d4-4ab7-9e4a-26ee6fd9ab4e",
      "name": "Sort Priorities",
      "type": "n8n-nodes-base.sort",
      "position": [
        2192,
        -32
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "973f2f53-a0fb-4742-a29a-9e88bf5ef293",
      "name": "Limit Top 20",
      "type": "n8n-nodes-base.limit",
      "position": [
        2400,
        -32
      ],
      "parameters": {
        "maxItems": 20
      },
      "typeVersion": 1
    },
    {
      "id": "25038e8f-90f1-4174-ad6c-12c368d306ec",
      "name": "Normalize Priorities",
      "type": "n8n-nodes-base.code",
      "position": [
        2672,
        -32
      ],
      "parameters": {
        "jsCode": "const items = $input.all().map(i => i.json);\nreturn [{ json: { source: 'priorities', items: items.map((item, idx) => ({ id: item.id, title: item.properties?.Name?.title?.[0]?.plain_text || 'Untitled', currentRank: idx + 1, status: item.properties?.Status?.select?.name || 'Open', priority: item.properties?.Priority?.number || 0, due: item.properties?.Due?.date?.start || null })) } }];"
      },
      "typeVersion": 2
    },
    {
      "id": "5df6cb9a-b372-4ccb-b495-8c55813f7a45",
      "name": "Get Recent Signals",
      "type": "n8n-nodes-base.notion",
      "position": [
        1952,
        160
      ],
      "parameters": {
        "options": {},
        "resource": "databasePage",
        "operation": "getAll",
        "returnAll": true,
        "databaseId": "31e06bab-3ebe-811b-b204-c5f41b273303"
      },
      "typeVersion": 2.2
    },
    {
      "id": "25681add-c177-41e1-ae3a-f2e96a51e834",
      "name": "Filter High Signals",
      "type": "n8n-nodes-base.filter",
      "position": [
        2192,
        160
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "conditions": [
            {
              "operator": {
                "type": "string",
                "operation": "isNotEmpty"
              },
              "leftValue": "={{ $json.properties?.Impact?.select?.name }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "c50a3b05-5c6a-4c72-9de4-250d229c35db",
      "name": "Normalize Signals",
      "type": "n8n-nodes-base.code",
      "position": [
        2400,
        160
      ],
      "parameters": {
        "jsCode": "const items = $input.all().map(i => i.json);\nreturn [{ json: { source: 'signals', items: items.map(i => ({ id: i.id, title: i.properties?.Name?.title?.[0]?.plain_text || '', impact: i.properties?.Impact?.select?.name || 'Medium', category: i.properties?.Category?.select?.name || 'General' })) } }];"
      },
      "typeVersion": 2
    },
    {
      "id": "fdbe5d84-0acb-4a5b-bd0d-ef3951ff208b",
      "name": "Get Meeting Decisions",
      "type": "n8n-nodes-base.notion",
      "position": [
        1952,
        320
      ],
      "parameters": {
        "options": {},
        "resource": "databasePage",
        "operation": "getAll",
        "returnAll": true,
        "databaseId": "31e06bab-3ebe-8108-b9d7-cde4bd8192b6"
      },
      "typeVersion": 2.2
    },
    {
      "id": "52c3bdc5-7e55-439c-9829-d8627cc54de6",
      "name": "Normalize Meetings",
      "type": "n8n-nodes-base.code",
      "position": [
        2192,
        320
      ],
      "parameters": {
        "jsCode": "const items = $input.all().map(i => i.json);\nreturn [{ json: { source: 'meetings', items: items.map(i => ({ id: i.id, title: i.properties?.Name?.title?.[0]?.plain_text || '', decisions: i.properties?.Decisions?.rich_text?.map(t => t.plain_text).join(' ') || '' })) } }];"
      },
      "typeVersion": 2
    },
    {
      "id": "8199d342-0cd9-4345-af37-4712e7b4c899",
      "name": "Get Urgent Emails",
      "type": "n8n-nodes-base.notion",
      "position": [
        1952,
        496
      ],
      "parameters": {
        "options": {},
        "resource": "databasePage",
        "operation": "getAll",
        "returnAll": true,
        "databaseId": "31e06bab-3ebe-81d6-8c12-f607c8ff3b3f"
      },
      "typeVersion": 2.2
    },
    {
      "id": "6200b5db-ebaf-436c-b77b-90f9944251f6",
      "name": "Filter Urgent Emails",
      "type": "n8n-nodes-base.filter",
      "position": [
        2192,
        496
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "conditions": [
            {
              "operator": {
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.properties?.Priority?.select?.name }}",
              "rightValue": "Urgent"
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "60ed80aa-674d-47ac-a5b1-b13a3cc2e007",
      "name": "Normalize Emails",
      "type": "n8n-nodes-base.code",
      "position": [
        2432,
        496
      ],
      "parameters": {
        "jsCode": "const items = $input.all().map(i => i.json);\nreturn [{ json: { source: 'emails', items: items.map(i => ({ id: i.id, subject: i.properties?.Subject?.title?.[0]?.plain_text || '', sender: i.properties?.From?.email || '', urgency: i.properties?.Priority?.select?.name || 'Normal' })) } }];"
      },
      "typeVersion": 2
    },
    {
      "id": "889b8b11-7547-4063-a355-1ae4ec2bfaef",
      "name": "Get Blocked Actions",
      "type": "n8n-nodes-base.notion",
      "position": [
        1952,
        672
      ],
      "parameters": {
        "options": {},
        "resource": "databasePage",
        "operation": "getAll",
        "returnAll": true,
        "databaseId": "31e06bab-3ebe-8190-894f-f211aea15dc4"
      },
      "typeVersion": 2.2
    },
    {
      "id": "efbb502b-6958-4d9b-b37e-294ef50514f0",
      "name": "Filter Overdue Actions",
      "type": "n8n-nodes-base.filter",
      "position": [
        2192,
        672
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "conditions": [
            {
              "operator": {
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.properties?.Status?.select?.name }}",
              "rightValue": "Blocked"
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "4e599368-29a5-4851-8c4a-de0c4049aab5",
      "name": "Normalize Blockers",
      "type": "n8n-nodes-base.code",
      "position": [
        2432,
        672
      ],
      "parameters": {
        "jsCode": "const items = $input.all().map(i => i.json);\nreturn [{ json: { source: 'blockers', items: items.map(i => ({ id: i.id, title: i.properties?.Name?.title?.[0]?.plain_text || '', status: i.properties?.Status?.select?.name || 'Open', due: i.properties?.Due?.date?.start || null })) } }];"
      },
      "typeVersion": 2
    },
    {
      "id": "f1274a7c-1806-4c5b-be97-ce6a4f99df8a",
      "name": "Merge Context",
      "type": "n8n-nodes-base.merge",
      "position": [
        2832,
        352
      ],
      "parameters": {
        "mode": "combine",
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "156f541f-7192-45a8-81e4-55b321a70741",
      "name": "Build Priority Matrix",
      "type": "n8n-nodes-base.code",
      "position": [
        3088,
        352
      ],
      "parameters": {
        "jsCode": "const allItems = $input.all().map(i => i.json);\nconst context = { priorities: [], signals: [], meetings: [], emails: [], blockers: [] };\nfor (const item of allItems) {\n  if (item.source && context[item.source] !== undefined) context[item.source] = item.items || [];\n}\n\nconst matrix = context.priorities.map(p => {\n  const relatedSignals = context.signals.filter(s => {\n    const pTitle = (p.title || '').toLowerCase();\n    const sTitle = (s.title || '').toLowerCase();\n    return pTitle.split(' ').some(w => w.length > 3 && sTitle.includes(w));\n  });\n  const relatedEmails = context.emails.filter(e => {\n    const pTitle = (p.title || '').toLowerCase();\n    const eSubject = (e.subject || '').toLowerCase();\n    return pTitle.split(' ').some(w => w.length > 3 && eSubject.includes(w));\n  });\n  const relatedBlockers = context.blockers.filter(b => {\n    const pTitle = (p.title || '').toLowerCase();\n    const bTitle = (b.title || '').toLowerCase();\n    return pTitle.split(' ').some(w => w.length > 3 && bTitle.includes(w));\n  });\n  return { ...p, relatedSignals, relatedEmails, relatedBlockers, signalCount: relatedSignals.length, emailCount: relatedEmails.length, blockerCount: relatedBlockers.length };\n});\n\nreturn [{ json: { matrix, meetings: context.meetings, totalPriorities: context.priorities.length, totalSignals: context.signals.length, totalBlockers: context.blockers.length } }];"
      },
      "typeVersion": 2
    },
    {
      "id": "2ec6572d-a0cf-4425-bed6-400e4c7b8d49",
      "name": "Remove Duplicates",
      "type": "n8n-nodes-base.removeDuplicates",
      "position": [
        3328,
        352
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "c90a874f-4e55-4f97-adad-da721f721eed",
      "name": "AI Pass 1 - Impact",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        3632,
        144
      ],
      "parameters": {
        "resource": "chat"
      },
      "typeVersion": 1.4
    },
    {
      "id": "b5931836-ae31-4537-a816-0cfbf4babb6c",
      "name": "Parse Impact",
      "type": "n8n-nodes-base.code",
      "position": [
        3872,
        144
      ],
      "parameters": {
        "jsCode": "const content = $json.message?.content || '';\nlet parsed;\ntry { const m = content.match(/\\{[\\s\\S]*\\}/); parsed = m ? JSON.parse(m[0]) : { impactScores: [] }; } catch(e) { parsed = { impactScores: [] }; }\nreturn [{ json: { impactScores: parsed.impactScores || parsed } }];"
      },
      "typeVersion": 2
    },
    {
      "id": "5eaa7337-fb66-429c-8e98-19b65c866508",
      "name": "Set Impact Scores",
      "type": "n8n-nodes-base.set",
      "position": [
        4096,
        144
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "is1",
              "name": "impact",
              "type": "object",
              "value": "={{ $json }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "58c80947-c8dd-4993-9861-750ac5c3c9aa",
      "name": "AI Pass 2 - Urgency",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        3632,
        400
      ],
      "parameters": {
        "resource": "chat"
      },
      "typeVersion": 1.4
    },
    {
      "id": "cef96c97-7833-4c7c-b340-1b1ee984c811",
      "name": "Parse Urgency",
      "type": "n8n-nodes-base.code",
      "position": [
        3872,
        400
      ],
      "parameters": {
        "jsCode": "const content = $json.message?.content || '';\nlet parsed;\ntry { const m = content.match(/\\{[\\s\\S]*\\}/); parsed = m ? JSON.parse(m[0]) : { urgencyScores: [] }; } catch(e) { parsed = { urgencyScores: [] }; }\nreturn [{ json: { urgencyScores: parsed.urgencyScores || parsed } }];"
      },
      "typeVersion": 2
    },
    {
      "id": "3e668810-36de-45e0-a404-a05c8b087c4b",
      "name": "Set Urgency Scores",
      "type": "n8n-nodes-base.set",
      "position": [
        4096,
        400
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "us1",
              "name": "urgency",
              "type": "object",
              "value": "={{ $json }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "b4433701-c557-479b-9296-c49441e9fe70",
      "name": "AI Pass 3 - Final Rank",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        3632,
        656
      ],
      "parameters": {
        "resource": "chat"
      },
      "typeVersion": 1.4
    },
    {
      "id": "de44ed65-1be7-46c3-8674-220b112c81d1",
      "name": "Parse Ranking",
      "type": "n8n-nodes-base.code",
      "position": [
        3872,
        656
      ],
      "parameters": {
        "jsCode": "const content = $json.message?.content || '';\nlet parsed;\ntry { const m = content.match(/\\{[\\s\\S]*\\}/); parsed = m ? JSON.parse(m[0]) : { ranking: [] }; } catch(e) { parsed = { ranking: [] }; }\nreturn [{ json: { newRanking: parsed.ranking || [] } }];"
      },
      "typeVersion": 2
    },
    {
      "id": "0937ac04-f78c-4c86-8c2a-105f22d7364d",
      "name": "Compare Rankings",
      "type": "n8n-nodes-base.compareDatasets",
      "position": [
        4464,
        640
      ],
      "parameters": {
        "options": {},
        "mergeByFields": {
          "values": [
            {
              "field1": "id",
              "field2": "id"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "f8fdc38a-8ed1-460f-a6a6-cc5c6b9a9294",
      "name": "Any Changes",
      "type": "n8n-nodes-base.if",
      "position": [
        4672,
        384
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "conditions": [
            {
              "operator": {
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.newRanking?.length > 0 }}",
              "rightValue": "true"
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "3ccd3393-ccf3-4843-bfec-02dad457ea6e",
      "name": "Build Change Summary",
      "type": "n8n-nodes-base.code",
      "position": [
        4864,
        176
      ],
      "parameters": {
        "jsCode": "const ranking = $json.newRanking || [];\nlet summary = ':arrows_counterclockwise: *Priority Re-Ranking Update*\\n\\n';\nsummary += `_${new Date().toISOString().split('T')[0]} ${new Date().toTimeString().split(' ')[0]}_\\n\\n`;\nsummary += '*New Priority Order:*\\n';\nranking.forEach(r => {\n  const arrow = r.change === 'up' ? ':arrow_up:' : r.change === 'down' ? ':arrow_down:' : ':white_circle:';\n  summary += `${r.rank}. ${arrow} *${r.title}* (Score: ${r.finalScore}) - ${r.rationale || ''}\\n`;\n});\nsummary += `\\n_${ranking.filter(r => r.change !== 'same').length} priorities changed position_`;\nreturn [{ json: { ...($json), changeSummary: summary, changedCount: ranking.filter(r => r.change !== 'same').length } }];"
      },
      "typeVersion": 2
    },
    {
      "id": "82cbd250-acc0-4307-942d-dceb40eebdd7",
      "name": "Prepare Update Batch",
      "type": "n8n-nodes-base.code",
      "position": [
        4912,
        352
      ],
      "parameters": {
        "jsCode": "const ranking = $json.newRanking || [];\nreturn ranking.map(r => ({ json: { pageId: r.id, rank: r.rank, finalScore: r.finalScore, rationale: r.rationale } }));"
      },
      "typeVersion": 2
    },
    {
      "id": "659f0bf7-e295-4975-853a-e13f7f9ebed8",
      "name": "Batch Updates",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        5216,
        400
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "edad9b00-5314-437d-83c1-ec047c91f784",
      "name": "Update Notion Priority",
      "type": "n8n-nodes-base.notion",
      "position": [
        5536,
        400
      ],
      "parameters": {
        "pageId": "={{ $json.pageId }}",
        "options": {},
        "resource": "databasePage",
        "operation": "update"
      },
      "typeVersion": 2.2
    },
    {
      "id": "9d3770a4-e56a-4305-8aae-d46e6dd1fb8f",
      "name": "Format Slack Update",
      "type": "n8n-nodes-base.code",
      "position": [
        5072,
        176
      ],
      "parameters": {
        "jsCode": "const ranking = $json.newRanking || [];\nlet text = ':arrows_counterclockwise: *Priority Ranking Updated*\\n\\n';\nranking.slice(0, 5).forEach(r => {\n  const arrow = r.change === 'up' ? ':arrow_up:' : r.change === 'down' ? ':arrow_down:' : ':white_circle:';\n  text += `${r.rank}. ${arrow} ${r.title} (${r.finalScore})\\n`;\n});\nreturn [{ json: { slackText: text } }];"
      },
      "typeVersion": 2
    },
    {
      "id": "204b4138-0973-4936-9da5-3ba53ebdd905",
      "name": "Post Ranking Change",
      "type": "n8n-nodes-base.slack",
      "position": [
        5392,
        160
      ],
      "parameters": {
        "text": "={{ $json.slackText }}",
        "otherOptions": {}
      },
      "typeVersion": 2.2
    },
    {
      "id": "a6dad597-240f-4226-af6d-16b7e3cc973a",
      "name": "No Changes",
      "type": "n8n-nodes-base.noOp",
      "position": [
        4896,
        608
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "b5e79ce6-de0b-4e20-9ce7-2b6d84fedc1a",
      "name": "Slack No Changes",
      "type": "n8n-nodes-base.slack",
      "position": [
        5104,
        608
      ],
      "parameters": {
        "text": "={{ ':white_check_mark: Priority reranker ran at ' + new Date().toISOString() + ' - no ranking changes detected.' }}",
        "otherOptions": {}
      },
      "typeVersion": 2.2
    },
    {
      "id": "f190ee9a-85a4-40f2-8840-2880baae0c24",
      "name": "Create Audit Log",
      "type": "n8n-nodes-base.notion",
      "position": [
        5936,
        560
      ],
      "parameters": {
        "options": {},
        "resource": "databasePage",
        "databaseId": "31e06bab-3ebe-811b-af1f-f186b6dbdf3e"
      },
      "typeVersion": 2.2
    }
  ],
  "active": false,
  "settings": {
    "binaryMode": "separate",
    "availableInMCP": false,
    "executionOrder": "v1"
  },
  "versionId": "f2af4d9c-2a13-4fa9-8185-18c209c77501",
  "connections": {
    "No Changes": {
      "main": [
        [
          {
            "node": "Slack No Changes",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Any Changes": {
      "main": [
        [
          {
            "node": "Build Change Summary",
            "type": "main",
            "index": 0
          },
          {
            "node": "Prepare Update Batch",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "No Changes",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Limit Top 20": {
      "main": [
        [
          {
            "node": "Normalize Priorities",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse Impact": {
      "main": [
        [
          {
            "node": "Set Impact Scores",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Batch Updates": {
      "main": [
        [
          {
            "node": "Update Notion Priority",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge Context": {
      "main": [
        [
          {
            "node": "Build Priority Matrix",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse Ranking": {
      "main": [
        [
          {
            "node": "Compare Rankings",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse Urgency": {
      "main": [
        [
          {
            "node": "Set Urgency Scores",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read Settings": {
      "main": [
        [
          {
            "node": "Check Demo Mode",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Rerank Trigger": {
      "main": [
        [
          {
            "node": "Read Settings",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Demo Mode": {
      "main": [
        [
          {
            "node": "Get Open Priorities",
            "type": "main",
            "index": 0
          },
          {
            "node": "Get Recent Signals",
            "type": "main",
            "index": 0
          },
          {
            "node": "Get Meeting Decisions",
            "type": "main",
            "index": 0
          },
          {
            "node": "Get Urgent Emails",
            "type": "main",
            "index": 0
          },
          {
            "node": "Get Blocked Actions",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Sort Priorities": {
      "main": [
        [
          {
            "node": "Limit Top 20",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Compare Rankings": {
      "main": [
        [
          {
            "node": "Any Changes",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Normalize Emails": {
      "main": [
        [
          {
            "node": "Merge Context",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Slack No Changes": {
      "main": [
        [
          {
            "node": "Create Audit Log",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Urgent Emails": {
      "main": [
        [
          {
            "node": "Filter Urgent Emails",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Normalize Signals": {
      "main": [
        [
          {
            "node": "Merge Context",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Remove Duplicates": {
      "main": [
        [
          {
            "node": "AI Pass 1 - Impact",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Impact Scores": {
      "main": [
        [
          {
            "node": "AI Pass 2 - Urgency",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Pass 1 - Impact": {
      "main": [
        [
          {
            "node": "Parse Impact",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Recent Signals": {
      "main": [
        [
          {
            "node": "Filter High Signals",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Normalize Blockers": {
      "main": [
        [
          {
            "node": "Merge Context",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Normalize Meetings": {
      "main": [
        [
          {
            "node": "Merge Context",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Urgency Scores": {
      "main": [
        [
          {
            "node": "AI Pass 3 - Final Rank",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Pass 2 - Urgency": {
      "main": [
        [
          {
            "node": "Parse Urgency",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter High Signals": {
      "main": [
        [
          {
            "node": "Normalize Signals",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format Slack Update": {
      "main": [
        [
          {
            "node": "Post Ranking Change",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Blocked Actions": {
      "main": [
        [
          {
            "node": "Filter Overdue Actions",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Open Priorities": {
      "main": [
        [
          {
            "node": "Sort Priorities",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Post Ranking Change": {
      "main": [
        [
          {
            "node": "Create Audit Log",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Build Change Summary": {
      "main": [
        [
          {
            "node": "Format Slack Update",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter Urgent Emails": {
      "main": [
        [
          {
            "node": "Normalize Emails",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Normalize Priorities": {
      "main": [
        [
          {
            "node": "Merge Context",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Update Batch": {
      "main": [
        [
          {
            "node": "Batch Updates",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Build Priority Matrix": {
      "main": [
        [
          {
            "node": "Remove Duplicates",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Meeting Decisions": {
      "main": [
        [
          {
            "node": "Normalize Meetings",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Pass 3 - Final Rank": {
      "main": [
        [
          {
            "node": "Parse Ranking",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter Overdue Actions": {
      "main": [
        [
          {
            "node": "Normalize Blockers",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Notion Priority": {
      "main": [
        [
          {
            "node": "Batch Updates",
            "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

AI-powered priority re-evaluation every 2 hours. Analyzes new signals, meeting decisions, emails, and blockers, then runs 3 AI passes (Impact, Urgency, Final Ranking) to suggest re-ranking. Only updates when the ranking actually changes.

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

More AI & RAG workflows → · Browse all categories →

Related workflows

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

AI & RAG

Automatically backs up your workflows to Github and generates documentation in a Notion database. Weekly run, uses the "internal-infra" tag to look for new or recently modified workflows Uses a Notion

HTTP Request, Notion, Slack +3
AI & RAG

Who is this for This workflow is perfect for busy professionals, consultants, and anyone who frequently travels between meetings. If you want to make the most of your free time between appointments an

Google Calendar, Notion, OpenWeatherMap +3
AI & RAG

The workflow triggers every weekday at 8 AM, automatically fetching the latest papers from Hugging Face for easy access.

HTTP Request, Notion, OpenAI +1
AI & RAG

[업무] 일일 업무 보고 자동화 - 스케줄. Uses slack, openAi, notion. Scheduled trigger; 6 nodes.

Slack, OpenAI, Notion
AI & RAG

A scheduled process aggregates content from eight distinct data sources and standardizes all inputs into a unified format. AI models perform sentiment scoring, detect conspiracy or misinformation sign

HTTP Request, OpenAI, Postgres +2