{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "59e7cffa-7c2c-4553-85d5-2b5dda0d3d35",
      "name": "Zoom Attendee Webhook",
      "type": "n8n-nodes-base.webhook",
      "position": [
        0,
        192
      ],
      "parameters": {
        "path": "zoom-attendee",
        "options": {},
        "httpMethod": "POST"
      },
      "typeVersion": 1
    },
    {
      "id": "65945d65-096c-4ea6-aa1a-973d1472c44d",
      "name": "Normalize Attendee Data",
      "type": "n8n-nodes-base.code",
      "position": [
        240,
        192
      ],
      "parameters": {
        "jsCode": "// Normalize Zoom attendee payload\nconst e = $input.first().json;\nconst attendee = e.payload.object.participant;\n\nreturn {\n  json: {\n    meeting_id: e.payload.object.id,\n    topic: e.payload.object.topic,\n    join_time: attendee.join_time,\n    leave_time: attendee.leave_time,\n    duration: attendee.duration,\n    name: attendee.user_name,\n    email: attendee.email || attendee.user_email || 'unknown',\n    timestamp: new Date().toISOString()\n  }\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "b63ed47f-ba9f-4b98-abdd-744c245740e1",
      "name": "Save to Airtable",
      "type": "n8n-nodes-base.airtable",
      "position": [
        480,
        192
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "id",
          "value": "YOUR_AIRTABLE_BASE_ID"
        },
        "table": {
          "__rl": true,
          "mode": "id",
          "value": "YOUR_AIRTABLE_TABLE_ID"
        },
        "columns": {
          "value": {
            "Tag": "New Lead",
            "Name": "={{ $json.name }}",
            "Email": "={{ $json.email }}",
            "Topic": "={{ $json.topic }}",
            "Duration": "={{ $json.duration }}",
            "Join Time": "={{ $json.join_time }}",
            "Leave Time": "={{ $json.leave_time }}",
            "Meeting ID": "={{ $json.meeting_id }}"
          },
          "mappingMode": "defineBelow"
        },
        "options": {},
        "operation": "upsert"
      },
      "credentials": {
        "airtableTokenApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "c0975e57-0a4d-4658-9218-8e51988fad34",
      "name": "Setup Instructions",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -288,
        144
      ],
      "parameters": {
        "content": "\n## \ud83d\udee0\ufe0f Setup Steps\n### 1. Zoom\n- Create a Zoom App with **`meeting.participant_joined`** event.  \n- Paste workflow webhook URL.\n\n### 2. Airtable\n- Create a base called **CRM**.  \n- Table: **Attendees**.  \n- Columns:  \n  - Meeting ID  \n  - Topic  \n  - Name  \n  - Email  \n  - Join Time  \n  - Leave Time  \n  - Duration  \n  - Tag  \n\n### 3. n8n\n- Replace `YOUR_AIRTABLE_BASE_ID` + `YOUR_AIRTABLE_TABLE_ID` in the workflow.  \n- Connect Airtable API key.  \n\n---\n\n## \ud83d\udcca Example Airtable Row\n| Meeting ID | Topic         | Name     | Email              | Join Time            | Duration | Tag      |\n|------------|--------------|----------|--------------------|----------------------|----------|----------|\n| 999-123-456 | Sales Demo   | Sarah L. | sarah@email.com    | 2025-08-30T10:02:00Z | 45 min   | New Lead |\n"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Zoom Attendee Webhook": {
      "main": [
        [
          {
            "node": "Normalize Attendee Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Normalize Attendee Data": {
      "main": [
        [
          {
            "node": "Save to Airtable",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}