{
  "id": "As8TxF3PjyXygc0o",
  "meta": {
    "instanceId": "a059b3dfdab56aa587cc6a2c8635f6f2700cf0c7064dbfb5981c26f7ad9eab88"
  },
  "name": "🧹 Archive (delete) duplicate items from a Notion database",
  "tags": [],
  "nodes": [
    {
      "id": "b758ce01-7f5e-4bdc-a4c3-6c00d6bc022a",
      "name": "Every day",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -180,
        660
      ],
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "1ca45ba5-4635-4710-9807-26f22d535059",
      "name": "Get pages from database",
      "type": "n8n-nodes-base.notion",
      "position": [
        60,
        560
      ],
      "parameters": {
        "options": {},
        "resource": "databasePage",
        "operation": "getAll",
        "returnAll": true,
        "databaseId": {
          "__rl": true,
          "mode": "list",
          "value": ""
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "ef8c8cfa-12fb-4fb9-8552-09f69f1f358d",
      "name": "Aggregate all items",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        500,
        560
      ],
      "parameters": {
        "options": {},
        "aggregate": "aggregateAllItemData",
        "destinationFieldName": "pages"
      },
      "typeVersion": 1
    },
    {
      "id": "f1c3c0ad-f904-4d63-a131-0b045a21ce04",
      "name": "Format items properly",
      "type": "n8n-nodes-base.set",
      "position": [
        280,
        560
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "309a1e9b-f3e9-41a0-aadb-aa74bc993fe9",
              "name": "id",
              "type": "string",
              "value": "={{ $json.id }}"
            },
            {
              "id": "ad6e8fa9-9872-456d-971f-3cef940b7d8a",
              "name": "property_to_check",
              "type": "string",
              "value": "=\"SET YOUR PROPERTY HERE\""
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "5d39d3b7-604d-4aca-bf9a-3bb09bddad66",
      "name": "Filter duplicates",
      "type": "n8n-nodes-base.code",
      "position": [
        720,
        560
      ],
      "parameters": {
        "jsCode": "const inputData = $input.first().json.pages;\n\nconst seen = new Set();\nconst duplicates = new Map();\n\ninputData.forEach(item => {\n  const propertyValue = item.property_to_check;\n  if (seen.has(propertyValue)) {\n    duplicates.set(propertyValue, item);\n  } else {\n    seen.add(propertyValue);\n  }\n});\n\nconst output = Array.from(duplicates.values()).map(item => ({ json: item }));\n\nreturn output;"
      },
      "typeVersion": 2
    },
    {
      "id": "55a8f0eb-702b-4056-a28c-96a7ade7c2cd",
      "name": "Archive pages",
      "type": "n8n-nodes-base.notion",
      "position": [
        920,
        560
      ],
      "parameters": {
        "pageId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $json.id }}"
        },
        "operation": "archive"
      },
      "typeVersion": 2.2
    },
    {
      "id": "2c9655ea-401c-410b-a4b1-b001ae6dbe4b",
      "name": "When a page is added to the database",
      "type": "n8n-nodes-base.notionTrigger",
      "position": [
        -180,
        460
      ],
      "parameters": {
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "databaseId": {
          "__rl": true,
          "mode": "list",
          "value": ""
        }
      },
      "typeVersion": 1
    },
    {
      "id": "672b647c-d009-45c3-b69e-6dfe85992e15",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        0
      ],
      "parameters": {
        "width": 860,
        "height": 460,
        "content": "## 🧹 Archive (delete) extra duplicate items from Notion database\n### ABOUT THIS WORKFLOW\nThis n8n workflow automatically gets duplicate database pages based on a property and \"archives\" them (equivalent to deleting them), leaving just one copy.\n\n### SETUP\n1. Create a Notion credential.\n2. Add it to the Notion nodes, selecting the appropriate database.\n3. In the \"Set\" node (\"Format items properly\"), specify a reference to the property you want to check for duplicates and assign it to the field \"property_to_check\". I recommend using the n8n property drag-and-drop feature.\n4. Enjoy!\n\n### ABOUT THE TRIGGERS\nThis workflow offers two possible triggers by default:\n- Run every time a page is added to the database.\n- Run every day.\n\n\nYou can enable, disable, or modify these triggers as you like."
      },
      "typeVersion": 1
    },
    {
      "id": "83881bd3-60e3-40be-a469-0b7acb21d2be",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -240,
        400
      ],
      "parameters": {
        "color": 5,
        "width": 220,
        "height": 420,
        "content": "## TRIGGERS"
      },
      "typeVersion": 1
    },
    {
      "id": "cd4b8717-19ae-42d6-ac87-bbdd071dd774",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        480
      ],
      "parameters": {
        "color": 6,
        "width": 860,
        "height": 340,
        "content": "## GET DUPLICATE PAGES"
      },
      "typeVersion": 1
    },
    {
      "id": "087fb844-2241-4ed9-976d-9bdc7ccd8aa5",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        880,
        400
      ],
      "parameters": {
        "color": 3,
        "width": 180,
        "height": 420,
        "content": "## ARCHIVE (DELETE)"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "fdd2e5ad-4ff5-4432-a5f9-ebbeb1a1a6cb",
  "connections": {
    "Every day": {
      "main": [
        [
          {
            "node": "Get pages from database",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter duplicates": {
      "main": [
        [
          {
            "node": "Archive pages",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Aggregate all items": {
      "main": [
        [
          {
            "node": "Filter duplicates",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format items properly": {
      "main": [
        [
          {
            "node": "Aggregate all items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get pages from database": {
      "main": [
        [
          {
            "node": "Format items properly",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When a page is added to the database": {
      "main": [
        [
          {
            "node": "Get pages from database",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}