{
  "name": "Duplicate lead check in Airtable",
  "nodes": [
    {
      "id": "dup-trigger",
      "name": "New lead trigger",
      "type": "n8n-nodes-base.airtableTrigger",
      "typeVersion": 1,
      "position": [
        -912,
        96
      ],
      "parameters": {
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "authentication": "airtableTokenApi",
        "baseId": {
          "__rl": true,
          "mode": "id",
          "value": "appXXXXXXXXXXXXXX"
        },
        "tableId": {
          "__rl": true,
          "mode": "id",
          "value": "tblXXXXXXXXXXXXXX"
        },
        "triggerField": "Created",
        "additionalFields": {}
      }
    },
    {
      "id": "dup-search",
      "name": "Search by email",
      "type": "n8n-nodes-base.airtable",
      "typeVersion": 2.2,
      "position": [
        -688,
        96
      ],
      "parameters": {
        "operation": "search",
        "base": {
          "__rl": true,
          "mode": "id",
          "value": "appXXXXXXXXXXXXXX"
        },
        "table": {
          "__rl": true,
          "mode": "id",
          "value": "tblXXXXXXXXXXXXXX"
        },
        "filterByFormula": "={{ \"{Email} = \\\"\" + $json.fields.Email + \"\\\"\" }}",
        "options": {}
      }
    },
    {
      "id": "dup-code",
      "name": "Count matches per lead",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        -464,
        96
      ],
      "parameters": {
        "mode": "runOnceForAllItems",
        "jsCode": "const searchResults = $input.all().map(i => i.json);\nconst triggerItems = $('New lead trigger').all();\nreturn triggerItems.map((t) => {\n  const email = t.json.fields.Email;\n  const matchCount = searchResults.filter(r => r.fields && r.fields.Email === email).length;\n  return { json: { id: t.json.id, email, matchCount, isDuplicate: matchCount > 1 } };\n});\n"
      }
    },
    {
      "id": "dup-if",
      "name": "Is duplicate?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.3,
      "position": [
        -240,
        96
      ],
      "parameters": {
        "conditions": {
          "options": {
            "version": 1,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "conditions": [
            {
              "leftValue": "={{ $json.isDuplicate }}",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              },
              "rightValue": "",
              "id": "condition-duplicate"
            }
          ],
          "combinator": "and"
        },
        "options": {}
      }
    },
    {
      "id": "dup-mark-dup",
      "name": "Mark as Duplicate",
      "type": "n8n-nodes-base.airtable",
      "typeVersion": 2.2,
      "position": [
        0,
        0
      ],
      "parameters": {
        "operation": "update",
        "base": {
          "__rl": true,
          "mode": "id",
          "value": "appXXXXXXXXXXXXXX"
        },
        "table": {
          "__rl": true,
          "mode": "id",
          "value": "tblXXXXXXXXXXXXXX"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "id": "={{ $json.id }}",
            "Status": "Duplicate"
          },
          "schema": [
            {
              "id": "id",
              "displayName": "id",
              "required": false,
              "defaultMatch": true,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "Status",
              "displayName": "Status",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": false
            }
          ],
          "matchingColumns": [
            "id"
          ]
        },
        "options": {}
      }
    },
    {
      "id": "dup-mark-new",
      "name": "Mark as New",
      "type": "n8n-nodes-base.airtable",
      "typeVersion": 2.2,
      "position": [
        0,
        192
      ],
      "parameters": {
        "operation": "update",
        "base": {
          "__rl": true,
          "mode": "id",
          "value": "appXXXXXXXXXXXXXX"
        },
        "table": {
          "__rl": true,
          "mode": "id",
          "value": "tblXXXXXXXXXXXXXX"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "id": "={{ $json.id }}",
            "Status": "New"
          },
          "schema": [
            {
              "id": "id",
              "displayName": "id",
              "required": false,
              "defaultMatch": true,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "Status",
              "displayName": "Status",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": false
            }
          ],
          "matchingColumns": [
            "id"
          ]
        },
        "options": {}
      }
    }
  ],
  "connections": {
    "New lead trigger": {
      "main": [
        [
          {
            "node": "Search by email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Search by email": {
      "main": [
        [
          {
            "node": "Count matches per lead",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Count matches per lead": {
      "main": [
        [
          {
            "node": "Is duplicate?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Is duplicate?": {
      "main": [
        [
          {
            "node": "Mark as Duplicate",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Mark as New",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  }
}
