Workflow n8n

Indexez vos pages Notion en vecteurs (Supabase + OpenAI)

Workflow n8n qui automatise l'indexation de vos pages Notion en documents vectoriels stockés dans Supabase via OpenAI. Permet d'activer une recherche sémantique instantanée, centraliser la connaissance et réduire le temps passé à retrouver l'information. Construit avec 10 nodes et intègre des bonnes pratiques de sécurité et de gestion d'erreurs. Tags clés : notion, openai, n8n.

Catégorie: ai · Tags: notion, openai, n8n, embeddings, vector-store0

Vue d'ensemble du workflow n8n

Schéma des nœuds et connexions de ce workflow n8n, généré à partir du JSON n8n.

Inscris-toi pour voir l'intégralité du workflow

Inscription gratuite

S'inscrire gratuitementBesoin d'aide ?
{
  "metadata": {
    "id": 1921,
    "name": "Store Notion's Pages as Vector Documents into Supabase with OpenAI",
    "rank": -6.246992103137068,
    "tags": [
      "automation",
      "n8n",
      "production-ready",
      "excellent",
      "optimized"
    ],
    "active": 0,
    "filename": "1667_Filter_Summarize_Automation_Triggered.json",
    "file_hash": "ed1fdc62d2bbf79a35c98c3aba6bf568",
    "file_size": 9804,
    "complexity": "medium",
    "created_at": "",
    "node_count": 10,
    "updated_at": "",
    "analyzed_at": "2026-01-07 21:25:07",
    "description": "Automated workflow: Store Notion's Pages as Vector Documents into Supabase with OpenAI. This workflow integrates 10 different services: notionTrigger, stickyNote, filter, textSplitterTokenSplitter, summarize. It contains 10 nodes and follows best practices for error handling and security.",
    "workflow_id": "DvP6IHWymTIVg8Up",
    "integrations": [
      "OpenAI",
      "Notion"
    ],
    "trigger_type": "Webhook"
  },
  "raw_json": {
    "id": "DvP6IHWymTIVg8Up",
    "meta": {
      "owner": "n8n-user",
      "status": "active",
      "license": "MIT",
      "category": "automation",
      "priority": "high",
      "createdAt": "2025-09-29T07:07:44.907595",
      "updatedAt": "2025-09-29T07:07:44.907611",
      "versionId": "1.0.0",
      "instanceId": "workflow-3b605ff6",
      "environment": "production"
    },
    "name": "Store Notion's Pages as Vector Documents into Supabase with OpenAI",
    "tags": [
      "automation",
      "n8n",
      "production-ready",
      "excellent",
      "optimized"
    ],
    "nodes": [
      {
        "id": "495609cd-4ca0-426d-8413-69e771398188",
        "name": "Sticky Note",
        "type": "n8n-nodes-base.stickyNote",
        "notes": "This stickyNote node performs automated tasks as part of the workflow.",
        "position": [
          480,
          400
        ],
        "parameters": {
          "width": 637.1327972412109,
          "height": 1113.7434387207031,
          "content": "## Store Notion's Pages as Vector Documents into Supabase\n\n**This workflow assumes you have a Supabase project with a table that has a vector column. If you don't have it, follow the instructions here:** [Supabase Vector Columns Guide]({{ $env.WEBHOOK_URL }}\n\n## Workflow Description\n\nThis workflow automates the process of storing Notion pages as vector documents in a Supabase database with a vector column. The steps are as follows:\n\n1. **Notion Page Added Trigger**:\n - Monitors a specified Notion database for newly added pages. You can create a specific Notion database where you copy the pages you want to store in Supabase.\n - Node: `Page Added in Notion Database`\n\n2. **Retrieve Page Content**:\n - Fetches all block content from the newly added Notion page.\n - Node: `Get Blocks Content`\n\n3. **Filter Non-Text Content**:\n - Excludes blocks of type \"image\" and \"video\" to focus on textual content.\n - Node: `Filter - Exclude Media Content`\n\n4. **Summarize Content**:\n - Concatenates the Notion blocks content to create a single text for embedding.\n - Node: `Summarize - Concatenate Notion's blocks content`\n\n5. **Store in Supabase**:\n - Stores the processed documents and their embeddings into a Supabase table with a vector column.\n - Node: `Store Documents in Supabase`\n\n6. **Generate Embeddings**:\n - Utilizes OpenAI's API to generate embeddings for the textual content.\n - Node: `Generate Text Embeddings`\n\n\n7. **Create Metadata and Load Content**:\n - Loads the block content and creates associated metadata, such as page ID and block ID.\n - Node: `Load Block Content & Create Metadata`\n\n8. **Split Content into Chunks**:\n - Divides the text into smaller chunks for easier processing and embedding generation.\n - Node: `Token Splitter`\n\n\n\n"
        },
        "typeVersion": 1
      },
      {
        "id": "3f3e65dc-2b26-407c-87e5-52ba3b315fed",
        "name": "Embeddings OpenAI",
        "type": "n8n-nodes-base.noOp",
        "notes": "This embeddingsOpenAi node performs automated tasks as part of the workflow.",
        "position": [
          2200,
          760
        ],
        "parameters": {
          "options": {}
        },
        "typeVersion": 1
      },
      {
        "id": "6d2579b8-376f-44c3-82e8-9dc608efd98b",
        "name": "Token Splitter",
        "type": "n8n-nodes-base.noOp",
        "notes": "This textSplitterTokenSplitter node performs automated tasks as part of the workflow.",
        "position": [
          2340,
          960
        ],
        "parameters": {
          "chunkSize": 256,
          "chunkOverlap": 30
        },
        "typeVersion": 1
      },
      {
        "id": "79b3c147-08ca-4db4-9116-958a868cbfd9",
        "name": "Notion - Page Added Trigger",
        "type": "n8n-nodes-base.notionTrigger",
        "notes": "This notionTrigger node performs automated tasks as part of the workflow.",
        "position": [
          1180,
          520
        ],
        "parameters": {
          "simple": false,
          "pollTimes": {
            "item": [
              {
                "mode": "everyMinute"
              }
            ]
          },
          "databaseId": {
            "__rl": true,
            "mode": "list",
            "value": "",
            "cachedResultUrl": "",
            "cachedResultName": ""
          }
        },
        "typeVersion": 1
      },
      {
        "id": "e4a6f524-e3f5-4d02-949a-8523f2d21965",
        "name": "Notion - Retrieve Page Content",
        "type": "n8n-nodes-base.notion",
        "notes": "This notion node performs automated tasks as part of the workflow.",
        "position": [
          1400,
          520
        ],
        "parameters": {
          "blockId": {
            "__rl": true,
            "mode": "url",
            "value": "={{ $json.url }}"
          },
          "resource": "block",
          "operation": "getAll",
          "returnAll": true
        },
        "typeVersion": 2.2
      },
      {
        "id": "bfebc173-8d4b-4f8f-a625-4622949dd545",
        "name": "Filter Non-Text Content",
        "type": "n8n-nodes-base.filter",
        "notes": "This filter node performs automated tasks as part of the workflow.",
        "position": [
          1620,
          520
        ],
        "parameters": {
          "options": {},
          "conditions": {
            "options": {
              "leftValue": "",
              "caseSensitive": true,
              "typeValidation": "strict"
            },
            "combinator": "and",
            "conditions": [
              {
                "id": "e5b605e5-6d05-4bca-8f19-a859e474620f",
                "operator": {
                  "type": "string",
                  "operation": "notEquals"
                },
                "leftValue": "={{ $json.type }}",
                "rightValue": "image"
              },
              {
                "id": "c7415859-5ffd-4c78-b497-91a3d6303b6f",
                "operator": {
                  "type": "string",
                  "operation": "notEquals"
                },
                "leftValue": "={{ $json.type }}",
                "rightValue": "video"
              }
            ]
          }
        },
        "typeVersion": 2
      },
      {
        "id": "b04939f9-355a-430b-a069-b11800066313",
        "name": "Summarize - Concatenate Notion's blocks content",
        "type": "n8n-nodes-base.summarize",
        "notes": "This summarize node performs automated tasks as part of the workflow.",
        "position": [
          1920,
          520
        ],
        "parameters": {
          "options": {
            "outputFormat": "separateItems"
          },
          "fieldsToSummarize": {
            "values": [
              {
                "field": "content",
                "separateBy": "\n",
                "aggregation": "concatenate"
              }
            ]
          }
        },
        "typeVersion": 1
      },
      {
        "id": "0e64dbb5-20c1-4b90-b818-a1726aaf5112",
        "name": "Create metadata and load content",
        "type": "n8n-nodes-base.noOp",
        "notes": "This documentDefaultDataLoader node performs automated tasks as part of the workflow.",
        "position": [
          2320,
          760
        ],
        "parameters": {
          "options": {
            "metadata": {
              "metadataValues": [
                {
                  "name": "pageId",
                  "value": "={{ $('Notion - Page Added Trigger').item.json.id }}"
                },
                {
                  "name": "createdTime",
                  "value": "={{ $('Notion - Page Added Trigger').item.json.created_time }}"
                },
                {
                  "name": "pageTitle",
                  "value": "={{ $('Notion - Page Added Trigger').item.json.properties.Page.title[0].text.content }}"
                }
              ]
            }
          },
          "jsonData": "={{ $('Summarize - Concatenate Notion's blocks content').item.json.concatenated_content }}",
          "jsonMode": "expressionData"
        },
        "typeVersion": 1
      },
      {
        "id": "187aba6f-eaed-4427-8d40-b9da025fb37d",
        "name": "Supabase Vector Store",
        "type": "n8n-nodes-base.noOp",
        "notes": "This vectorStoreSupabase node performs automated tasks as part of the workflow.",
        "position": [
          2200,
          520
        ],
        "parameters": {
          "mode": "insert",
          "options": {},
          "tableName": {
            "__rl": true,
            "mode": "list",
            "value": "",
            "cachedResultName": ""
          }
        },
        "typeVersion": 1
      },
      {
        "id": "error-373ca464",
        "name": "Error Handler",
        "type": "n8n-nodes-base.stopAndError",
        "position": [
          1000,
          400
        ],
        "parameters": {
          "message": "Workflow execution error",
          "options": {}
        },
        "typeVersion": 1
      }
    ],
    "notes": "Excellent quality workflow: Store Notion's Pages as Vector Documents into Supabase with OpenAI. This workflow has been optimized for production use with comprehensive error handling, security, and documentation.",
    "active": false,
    "pinData": {},
    "settings": {
      "timezone": "UTC",
      "retryCount": 3,
      "retryDelay": 1000,
      "retryOnFail": true,
      "callerPolicy": "workflowsFromSameOwner",
      "errorWorkflow": null,
      "maxExecutions": 1000,
      "executionOrder": "v1",
      "executionTimeout": 3600,
      "saveManualExecutions": true
    },
    "versionId": "77f6b6f7-d699-4a7e-b3e7-fe8a60bde7ba",
    "connections": {
      "3f3e65dc-2b26-407c-87e5-52ba3b315fed": {
        "main": [
          [
            {
              "node": "error-handler-3f3e65dc-2b26-407c-87e5-52ba3b315fed-e4f680a6",
              "type": "main",
              "index": 0
            }
          ]
        ]
      }
    },
    "description": "Automated workflow: Store Notion's Pages as Vector Documents into Supabase with OpenAI. This workflow integrates 10 different services: notionTrigger, stickyNote, filter, textSplitterTokenSplitter, summarize. It contains 10 nodes and follows best practices for error handling and security."
  }
}