Workflow: 🧹 Archive (delete) duplicate items from a Notion database
Integrations: aggregate, code, notion, notionTrigger, scheduleTrigger, set, stickyNote

{"id": "As8TxF3PjyXygc0o", "meta": {"instanceId": "a059b3dfdab56aa587cc6a2c8635f6f2700cf0c7064dbfb5981c26f7ad9eab88"}, "name": "\ud83e\uddf9 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": "## \ud83e\uddf9 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}]]}}}