{
  "name": "Automate contract signing from Tally to Airtable and DocuSign",
  "nodes": [
    {
      "id": "3aece8bb-db25-4999-a1d6-f8437158cdc5",
      "name": "Receive Tally Form Submission",
      "type": "n8n-nodes-base.webhook",
      "position": [
        3584,
        1056
      ]
    },
    {
      "id": "65c2fa2f-47b9-4267-b0fc-2e96094f94dd",
      "name": "Respond to Webhook",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        3776,
        1056
      ]
    },
    {
      "id": "8fd95630-4c94-444f-88c2-84ac2a2a2109",
      "name": "Normalize Form Payload",
      "type": "n8n-nodes-base.code",
      "position": [
        3984,
        1056
      ]
    },
    {
      "id": "125bbcc4-b37f-4be6-82ad-957ce4d1aeed",
      "name": "Create Airtable Contract Record",
      "type": "n8n-nodes-base.airtable",
      "position": [
        4224,
        992
      ]
    },
    {
      "id": "db5416cf-151e-4f34-96ec-2e28b52bbc36",
      "name": "Lookup Service Provider in Airtable",
      "type": "n8n-nodes-base.airtable",
      "position": [
        4224,
        1184
      ]
    },
    {
      "id": "f4d6e45a-e0d4-4325-8b04-759f98e872ea",
      "name": "Merge Contract and Provider Data",
      "type": "n8n-nodes-base.merge",
      "position": [
        4480,
        1088
      ]
    },
    {
      "id": "187ba781-b9f7-4802-a7e1-1ae580084734",
      "name": "Map Envelope Fields",
      "type": "n8n-nodes-base.set",
      "position": [
        4816,
        1104
      ]
    },
    {
      "id": "5d7c8c0f-725a-4d12-9385-5907a09f8842",
      "name": "Route by Signing Arrangement",
      "type": "n8n-nodes-base.switch",
      "position": [
        5024,
        1088
      ]
    },
    {
      "id": "324965a3-7f2e-42fc-b04a-4fcbc8f5e802",
      "name": "Send DocuSign Envelope (Both Contacts)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        5328,
        960
      ]
    },
    {
      "id": "fc233fc1-2e0a-4cea-891e-9ac1acdaf0aa",
      "name": "Send DocuSign Envelope (Primary Only)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        5328,
        1152
      ]
    },
    {
      "id": "df4b2e67-0281-4a15-be68-7cba6601eab4",
      "name": "Send DocuSign Envelope (Secondary Only)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        5328,
        1360
      ]
    },
    {
      "id": "8b707a9c-a8c4-496c-85e8-982fbaed4588",
      "name": "Update Contract Status (Both)",
      "type": "n8n-nodes-base.airtable",
      "position": [
        5744,
        1024
      ]
    },
    {
      "id": "0a90c616-f3fb-4666-ad51-fdc0d76c54ee",
      "name": "Update Contract Status (Primary)",
      "type": "n8n-nodes-base.airtable",
      "position": [
        5744,
        1216
      ]
    },
    {
      "id": "1ac67141-d6d2-4a68-8083-02e465ac3f09",
      "name": "Update Contract Status (Secondary)",
      "type": "n8n-nodes-base.airtable",
      "position": [
        5744,
        1424
      ]
    },
    {
      "id": "33d04e63-2e5f-4218-9290-46d0e8817f19",
      "name": "Log Signers to Airtable (Both)",
      "type": "n8n-nodes-base.airtable",
      "position": [
        6000,
        1024
      ]
    },
    {
      "id": "75c583f6-2273-48c8-b6de-2cfe3d7884d4",
      "name": "Log Signers to Airtable (Primary)",
      "type": "n8n-nodes-base.airtable",
      "position": [
        6000,
        1216
      ]
    },
    {
      "id": "52abf005-46b2-487d-8662-4c104526292f",
      "name": "Log Signers to Airtable (Secondary)",
      "type": "n8n-nodes-base.airtable",
      "position": [
        6000,
        1424
      ]
    },
    {
      "id": "5ac458fe-33fe-4149-840b-7602192226d7",
      "name": "Sticky Note - Intro",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2976,
        592
      ],
      "parameters": {
        "width": 500,
        "height": 888,
        "content": "## Automated Contract Signing with Tally and DocuSign\n\n### **What it does:**\nAutomatically processes form submissions (Tally), stores contract data in Airtable, looks up service provider details, rout"
      }
    },
    {
      "id": "8272ae99-0ab6-45ff-a434-5817cf806465",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3536,
        832
      ],
      "parameters": {
        "width": 568,
        "height": 440,
        "content": "## 1. Receive & Normalize\n\nTally form webhook triggers the workflow. The Respond to Webhook node immediately returns a 200 OK to prevent retries. The Code node extracts and normalizes all fields from "
      }
    },
    {
      "id": "ac69646a-e56a-46cd-904a-40c853436bad",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        4144,
        832
      ],
      "parameters": {
        "width": 582,
        "height": 524,
        "content": "## 2. Airtable CRM — Store & Enrich\n\nCreates a new contract record in the **Contracts** table (status: `pending`), then looks up the selected service provider from the **Service Providers** table. The"
      }
    },
    {
      "id": "8171e41d-18f0-4a8c-b1d0-6f615a2f6e3b",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        4768,
        832
      ],
      "parameters": {
        "width": 888,
        "height": 684,
        "content": "## 3. Route & Send DocuSign Envelope\n\nMaps all fields for the DocuSign API, then routes by signing arrangement to send the correct contract template:\n- **Both Contacts** — Primary + Secondary + Provid"
      }
    },
    {
      "id": "a0eaa807-f225-415c-942c-427bf03b50a6",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        5696,
        832
      ],
      "parameters": {
        "width": 616,
        "height": 780,
        "content": "## 4. Post-Send CRM Tracking\n\nAfter DocuSign sends the envelope successfully:\n1. Updates the contract record status to `sent` with the `envelope_id`\n2. Logs signer details to the **Signers** table for"
      }
    },
    {
      "id": "8a0d2627-43b6-4f87-b709-41c869df0e43",
      "name": "Sticky Note - Airtable Setup",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2976,
        1504
      ],
      "parameters": {
        "width": 540,
        "height": 980,
        "content": "## Airtable Setup Guide\n\nCreate these 3 tables in your Airtable base:\n\n### Table 1: `Contracts`\n| Column | Type |\n|---|---|\n| `primary_contact_name` | Single line text |\n| `primary_contact_email` | Em"
      }
    },
    {
      "id": "bdf4824b-665c-4a04-a613-82a5cbdbb40b",
      "name": "Sticky Note - DocuSign Setup",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3568,
        1504
      ],
      "parameters": {
        "width": 540,
        "height": 320,
        "content": "## DocuSign Setup\n\n1. Create 3 DocuSign templates matching the signing arrangements\n2. Define roles in each template: `PrimaryContact`, `SecondaryContact`, `ServiceProvider`, `CompanyRep1`, `CompanyRe"
      }
    },
    {
      "id": "724ced4f-f7a9-43c6-91d7-e63d6f57b3c5",
      "name": "Contact & Attribution",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        6368,
        832
      ],
      "parameters": {
        "width": 700,
        "height": 1284,
        "content": "## Was this helpful? Get in touch!\n\n[![clic](https://vptkuqoipqbebipqjnqw.supabase.co/storage/v1/object/public/Milo%20Bravo/seeAxWUupcOOXY5tntexZ_video.gif)](https://tally.so/r/EkKGgB)\n\nI really hope "
      }
    }
  ],
  "connections": {
    "Respond to Webhook": {
      "main": [
        [
          {
            "node": "Normalize Form Payload",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Map Envelope Fields": {
      "main": [
        [
          {
            "node": "Route by Signing Arrangement",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Normalize Form Payload": {
      "main": [
        [
          {
            "node": "Create Airtable Contract Record",
            "type": "main",
            "index": 0
          },
          {
            "node": "Lookup Service Provider in Airtable",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Route by Signing Arrangement": {
      "main": [
        [
          {
            "node": "Send DocuSign Envelope (Both Contacts)",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Send DocuSign Envelope (Primary Only)",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Send DocuSign Envelope (Secondary Only)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Receive Tally Form Submission": {
      "main": [
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Contract Status (Both)": {
      "main": [
        [
          {
            "node": "Log Signers to Airtable (Both)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Airtable Contract Record": {
      "main": [
        [
          {
            "node": "Merge Contract and Provider Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge Contract and Provider Data": {
      "main": [
        [
          {
            "node": "Map Envelope Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Contract Status (Primary)": {
      "main": [
        [
          {
            "node": "Log Signers to Airtable (Primary)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Contract Status (Secondary)": {
      "main": [
        [
          {
            "node": "Log Signers to Airtable (Secondary)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Lookup Service Provider in Airtable": {
      "main": [
        [
          {
            "node": "Merge Contract and Provider Data",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Send DocuSign Envelope (Primary Only)": {
      "main": [
        [
          {
            "node": "Update Contract Status (Primary)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send DocuSign Envelope (Both Contacts)": {
      "main": [
        [
          {
            "node": "Update Contract Status (Both)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send DocuSign Envelope (Secondary Only)": {
      "main": [
        [
          {
            "node": "Update Contract Status (Secondary)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}