AutomationFlowsCRM & Sales › Collect Web Form Leads and Create Contacts in Hubspot with Submitrax

Collect Web Form Leads and Create Contacts in Hubspot with Submitrax

ByPollupAI @Pollup on n8n.io

This workflow creates a SubmitraX-hosted HTML contact form, serves it via an n8n webhook, and syncs each submission to HubSpot as a create-or-update contact. Starts manually to fetch your SubmitraX workspace ID and create a new SubmitraX form with custom HTML and an email…

Event trigger★★★★☆ complexity14 nodesCustomHubSpot
CRM & Sales Trigger: Event Nodes: 14 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #16298 — we link there as the canonical source.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "id": "gDWoH5l2fJ5rgnEI",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Collect web form submissions and create contacts in HubSpot via Submitrax",
  "tags": [],
  "nodes": [
    {
      "id": "a096ceaa-9359-4e18-9039-10409c943d4a",
      "name": "get workspace ID",
      "type": "CUSTOM.submitrax",
      "position": [
        64,
        0
      ],
      "parameters": {
        "resource": "workspace",
        "requestOptions": {}
      },
      "credentials": {
        "submitraxApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "42821e22-63b3-4b22-96a6-53b0dd6bb1a0",
      "name": "Create a form",
      "type": "CUSTOM.submitrax",
      "position": [
        272,
        0
      ],
      "parameters": {
        "name": "=Contact to hubspot {{$workflow.id}}",
        "operation": "create",
        "workspaceId": "={{ $json.id }}",
        "requestOptions": {},
        "additionalFields": {
          "emailTo": "zeerobug@gmail.com",
          "customHtml": "<style>\n  .contact-form { font-family: 'Inter', system-ui, sans-serif; max-width: 400px; margin: 0 auto; color: #1f2937; }\n  .contact-form label { display: block; margin-bottom: 0.5rem; font-weight: 500; font-size: 0.875rem; }\n  .contact-form input, .contact-form textarea { width: 100%; padding: 0.75rem; border: 1px solid #d1d5db; border-radius: 0.5rem; margin-bottom: 1.25rem; font-size: 1rem; transition: border-color 0.2s; box-sizing: border-box; }\n  .contact-form input:focus, .contact-form textarea:focus { border-color: #4f46e5; outline: none; ring: 2px solid #e0e7ff; }\n  .contact-form button { background-color: #4f46e5; color: white; padding: 0.75rem 1.5rem; border: none; border-radius: 0.5rem; width: 100%; font-weight: 600; font-size: 1rem; cursor: pointer; transition: background-color 0.2s; }\n  .contact-form button:hover { background-color: #4338ca; }\n</style>\n<form action=\"https://s.submitrax.com/fc60f8a676f76e715e2eb0101f2a8682\" method=\"POST\" class=\"contact-form\">\n  <div style=\"margin-bottom: 1.5rem; text-align: center;\">\n    <h2 style=\"margin: 0; font-size: 1.5rem; font-weight: 700;\">Contact Us</h2>\n    <p style=\"margin: 0.5rem 0 0; color: #6b7280;\">We'd love to hear from you.</p>\n  </div>\n  \n  <label for=\"name\">Name</label>\n  <input type=\"text\" id=\"name\" name=\"name\" placeholder=\"John Doe\" required />\n  \n <label for=\"name\">Company</label>\n  <input type=\"text\" id=\"company\" name=\"company\" placeholder=\"my company\" required />\n  \n <label for=\"name\">Website</label>\n  <input type=\"text\" id=\"website\" name=\"website\" placeholder=\"https://my-company-.com\" required />\n  \n  <label for=\"email\">Email</label>\n  <input type=\"email\" id=\"email\" name=\"email\" placeholder=\"john@example.com\" required />\n  \n  <button type=\"submit\">Send Message</button>\n</form>"
        }
      },
      "credentials": {
        "submitraxApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "80c7dff8-326f-4489-973c-aaf8078603b4",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -240,
        -144
      ],
      "parameters": {
        "color": 5,
        "width": 880,
        "height": 320,
        "content": "## Step 1 : Form Creation\n- Create the form\n- Set the HTML in the \"Create form\" node\n- Set the email to receive an alert when a submission has been created"
      },
      "typeVersion": 1
    },
    {
      "id": "57cac06c-c58c-469a-884a-6a741139ec7d",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -240,
        192
      ],
      "parameters": {
        "width": 880,
        "height": 336,
        "content": "## Step 2: Form submission\n### Paste the ID you got from step 1 in the node \"Get a Form\"\n- Load the html of the form\n- Get the production URL of the node \"Form viewer\"\n- Publish the workflow\n- Open the production URL in another TAB\n- Fill in the form and click submit"
      },
      "typeVersion": 1
    },
    {
      "id": "745358e6-78ba-46d8-b492-4bc7f13cf300",
      "name": "Get a form",
      "type": "CUSTOM.submitrax",
      "position": [
        64,
        384
      ],
      "parameters": {
        "formId": "=97136530-9e1d-412d-9a98-1075fd4c3547",
        "operation": "get",
        "requestOptions": {}
      },
      "credentials": {
        "submitraxApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "64858162-1ca8-4b4f-9d5d-225cb14b39b1",
      "name": "Click here to start",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -144,
        0
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "849071c8-9b02-44f4-bec2-2434e4129c6d",
      "name": "Form viewer",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -144,
        384
      ],
      "parameters": {
        "path": "3e00b433-6fa8-41a0-b0f0-1e193c18d74b",
        "options": {},
        "responseMode": "responseNode"
      },
      "typeVersion": 2.1
    },
    {
      "id": "8ebce2be-8fb6-4386-9417-fbd5e78e0b0d",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -240,
        544
      ],
      "parameters": {
        "color": 4,
        "width": 880,
        "height": 320,
        "content": "## Step 3: On form submission, update / Insert in HubSpot\n### Paste the ID you got from step 1 in the node \"Submitrax Trigger\" \n- The trigger is launched when you submit the form\n- Your data is uploaded to Hubspot"
      },
      "typeVersion": 1
    },
    {
      "id": "63ed0305-e355-4d87-9c26-9d746fdc782f",
      "name": "Display the form",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        256,
        384
      ],
      "parameters": {
        "options": {},
        "respondWith": "text",
        "responseBody": "=<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\" />\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n  <title>Contact Us</title>\n  <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n  <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin />\n  <link href=\"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap\" rel=\"stylesheet\" />\n  <style>\n    *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\n \n    body {\n      min-height: 100vh;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      background-color: #f9fafb;\n      padding: 2rem 1rem;\n    }\n \n    .contact-form { font-family: 'Inter', system-ui, sans-serif; max-width: 400px; width: 100%; margin: 0 auto; color: #1f2937; background: #ffffff; padding: 2rem; border-radius: 1rem; box-shadow: 0 4px 24px rgba(0,0,0,0.07); }\n    .contact-form label { display: block; margin-bottom: 0.5rem; font-weight: 500; font-size: 0.875rem; }\n    .contact-form input, .contact-form textarea { width: 100%; padding: 0.75rem; border: 1px solid #d1d5db; border-radius: 0.5rem; margin-bottom: 1.25rem; font-size: 1rem; transition: border-color 0.2s; box-sizing: border-box; font-family: inherit; }\n    .contact-form input:focus, .contact-form textarea:focus { border-color: #4f46e5; outline: none; box-shadow: 0 0 0 3px #e0e7ff; }\n    .contact-form button { background-color: #4f46e5; color: white; padding: 0.75rem 1.5rem; border: none; border-radius: 0.5rem; width: 100%; font-weight: 600; font-size: 1rem; cursor: pointer; transition: background-color 0.2s; font-family: inherit; }\n    .contact-form button:hover { background-color: #4338ca; }\n  </style>\n</head>\n<body>\n {{ $json.custom_html }}\n</body>\n</html>"
      },
      "typeVersion": 1.5
    },
    {
      "id": "9cf4146d-0548-46c5-9e81-15db7f225e5e",
      "name": "SubmitraX Trigger",
      "type": "CUSTOM.submitraxTrigger",
      "position": [
        -144,
        688
      ],
      "parameters": {
        "formId": "=97136530-9e1d-412d-9a98-1075fd4c3547"
      },
      "credentials": {
        "submitraxApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "dfeb7e81-fb01-48ce-b410-dbe0289732fc",
      "name": "Create or update a contact",
      "type": "n8n-nodes-base.hubspot",
      "position": [
        64,
        688
      ],
      "parameters": {
        "email": "={{ $json.data.email }}",
        "options": {},
        "additionalFields": {
          "firstName": "={{ $json.data.name }}",
          "websiteUrl": "={{ $json.data.website }}",
          "companyName": "={{ $json.data.company }}"
        }
      },
      "credentials": {
        "hubspotApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "446ffdbe-5177-4d73-9c74-5e4248ff0efb",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -736,
        -144
      ],
      "parameters": {
        "color": 7,
        "width": 480,
        "height": 1232,
        "content": "## Who it's for\n\nThis template is for marketers, sales teams, and developers who want to capture leads from a serverless HTML form and automatically sync them into HubSpot \u2014 without managing a backend server or a separate form platform subscription. It's ideal for small teams using n8n as their integration layer and HubSpot as their CRM of record.\n\n---\n\n## How it works\n\nThe workflow is split into three logical stages:\n\n**Stage 1 \u2014 Form creation.** A manual trigger kicks off a one-time setup sequence: it retrieves your submitrax workspace ID, then creates a branded contact form (name, company, website, email) hosted entirely by submitrax. An alert email is sent to a designated address whenever a new submission arrives.\n\n**Stage 2 \u2014 Form display.** A webhook node acts as a lightweight web server. When a visitor hits the production URL, n8n fetches the form HTML from submitrax and serves it as a fully styled HTML page \u2014 no hosting infrastructure required.\n\n**Stage 3 \u2014 Lead capture to HubSpot.** When a visitor submits the form, the submitrax trigger fires. The submission payload (name, company, website, email) is mapped directly to a HubSpot `Create or Update Contact` call using OAuth2. If the contact already exists, it is updated; otherwise a new record is created.\n\n---\n\n## How to set up\n\n1. Create a [Submitrax account](https://submitrax.com) and add your API credentials in n8n.\n2. Connect your HubSpot account via OAuth2.\n3. Run the **Click here to start** manual trigger once to create the form and note the generated form ID.\n4. Update the `Get a form` and `SubmitraX Trigger` nodes with the form ID returned in step 3.\n5. Activate the workflow and open the **Form viewer** webhook production URL in a browser to test the end-to-end flow.\n\n---\n\n## Requirements\n\n- n8n (v1.x or later, cloud or self-hosted)\n- A [submitrax](https://submitrax.com) account with API access\n- A HubSpot account with OAuth2 credentials configured in n8n\n\n---\n\n## How to customize the workflow\n\n- **Change the form fields:** Edit the `customHtml` property in the **Create a form** node. Add or remove `<input>` elements and update the HubSpot mapping in **Create or update a contact** accordingly.\n- **Style the form:** Modify the inline CSS in either the form creation node or the **Display the form** webhook response node.\n- **Route to a different CRM:** Replace the HubSpot node with any CRM node (Salesforce, Pipedrive, etc.) and remap the submitrax `$json.data.*` fields to match.\n- **Add a confirmation page:** Insert a second **Respond to Webhook** node after the HubSpot step to show a thank-you page to the submitter.\n- **Notify your team:** Add a Slack or email node after **Create or update a contact** to alert your sales team in real time when a new lead arrives."
      },
      "typeVersion": 1
    },
    {
      "id": "e5fc222c-941a-4765-982d-56837799fbd8",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -240,
        880
      ],
      "parameters": {
        "color": 2,
        "width": 880,
        "height": 220,
        "content": "## Contact me\n- If you need any modification to this workflow\n- if you need some help with this workflow\n- Or if you need any workflow in n8n, Make, or Langchain / Langgraph\n\nWrite to me: [thomas@pollup.net](mailto:thomas@pollup.net)\n\n**Take a look at my others workflows [here](https://n8n.io/creators/zeerobug/)**\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "b4190d18-2962-4179-a52a-b3f2646625e6",
      "name": "Code in JavaScript",
      "type": "n8n-nodes-base.code",
      "position": [
        480,
        0
      ],
      "parameters": {
        "jsCode": "const formId = $input.first().json.id;\nconsole.log(`Copy this form ID into your trigger and Get a form nodes: ${formId}`);\nreturn [{ json: { formId, instruction: \"Paste this ID into SubmitraX Trigger and Get a form nodes, then activate the workflow.\" } }];"
      },
      "typeVersion": 2
    }
  ],
  "active": false,
  "settings": {
    "binaryMode": "separate",
    "executionOrder": "v1"
  },
  "versionId": "583e9249-991a-4401-a68d-9ae7dad51f7f",
  "nodeGroups": [],
  "connections": {
    "Get a form": {
      "main": [
        [
          {
            "node": "Display the form",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Form viewer": {
      "main": [
        [
          {
            "node": "Get a form",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create a form": {
      "main": [
        [
          {
            "node": "Code in JavaScript",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "get workspace ID": {
      "main": [
        [
          {
            "node": "Create a form",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "SubmitraX Trigger": {
      "main": [
        [
          {
            "node": "Create or update a contact",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Click here to start": {
      "main": [
        [
          {
            "node": "get workspace ID",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This workflow creates a SubmitraX-hosted HTML contact form, serves it via an n8n webhook, and syncs each submission to HubSpot as a create-or-update contact. Starts manually to fetch your SubmitraX workspace ID and create a new SubmitraX form with custom HTML and an email…

Source: https://n8n.io/workflows/16298/ — original creator credit. Request a take-down →

More CRM & Sales workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

CRM & Sales

This workflow is built for digital agencies and sales teams that sell services to ecommerce brands. If you prospect Shopify store owners and want a repeatable, automated pipeline from discovery to CRM

HTTP Request, HubSpot
CRM & Sales

Property Lead Contact Enrichment from CRM. Uses httpRequest, spreadsheetFile, hubspot, emailSend. Event-driven trigger; 16 nodes.

HTTP Request, Spreadsheet File, HubSpot +1
CRM & Sales

This workflow automatically qualifies great leads from a form and sends them an email 😮.. It also adds the user to Hubspot if not already added and records the outreach. Add you MadKudu, Hunter, and G

Form Trigger, HTTP Request, Hunter +2
CRM & Sales

This template automatically discovers companies that match your Ideal Customer Profile (ICP), finds the right people inside those companies and enriches them — ready to drop straight into HubSpot. Lau

HTTP Request, HubSpot, Gmail
CRM & Sales

Noop Hubspot. Uses noOp, stickyNote, httpRequest, hubspot. Event-driven trigger; 12 nodes.

HTTP Request, HubSpot, HubSpot Trigger