> ## Documentation Index
> Fetch the complete documentation index at: /help/llms.txt
> Use this file to discover all available pages before exploring further.

# HubSpot forms

> Everyone who submits a HubSpot form becomes a contact in Kerux and can start a campaign, through a HubSpot workflow and no Zapier.

> [!NOTE]
>
> **Pro plan.** Lead forms (the secret URLs in **Forms** and the **Lead form submitted** trigger) are part of Pro and Agency (and the free trial), like Lead Ads. On Starter, **Connections** shows **Part of Pro** with an **Upgrade to Pro** button, and making a URL or adding the trigger shows **Part of Pro: Lead forms (Typeform, Tally, Jotform...)** with the same button. URLs and triggers you already have keep adding contacts on every plan. See [Plans and billing](/help/account/billing.md).

Using HubSpot forms on your site? A HubSpot workflow can send every new submission to Kerux, so the person becomes a contact and starts the campaign you choose.

No Zapier or Make in between: HubSpot sends each submission straight to a secret URL of your workspace, and Kerux reads HubSpot's own format.

## Connect HubSpot forms

**1. Make your secret URL in Kerux**

Go to **Integrations > Connections**. In **Forms**, click **Connect** on the **HubSpot forms** row: a side panel opens. Under **Name your first URL**, type a name you'll recognize (for example *Demo request*) and click **Create URL**, then **Copy**. Keep it private: anyone with this URL can add contacts to your workspace.

**2. Create a workflow**

In HubSpot, go to **Automation > Workflows** and create a contact-based workflow. Webhooks in workflows need **Data Hub Professional or Enterprise** (formerly Operations Hub).

**3. Start it on the form**

Set the enrollment trigger to **Form submission** and pick your form.

**4. Send a webhook**

Add the action **Send a webhook**: method **POST**, your Kerux URL, and in the request body choose the properties to send (email, first name, last name, company, job title and your LinkedIn property).

**5. Turn it on**

Turn the workflow on and submit your form once. In Kerux, the URL's card shows its fields.

Kerux reads HubSpot's property names (`email`, `firstname`, `lastname`, `company`, `jobtitle`, `hs_linkedin_url`...) and, if the workflow sends the whole contact, leaves out HubSpot's own `hs_` and analytics properties. A HubSpot contact who submits again with the same answers is the same submission.

## Choose where each field goes

When the first submission arrives, the URL's card in the panel stops saying **Waiting for your first submission...** and shows **Where each field goes**: every field of that submission (only the field names, never the answers) and where Kerux puts it.

* **Automatic** is Kerux's guess. It uses the field's type when HubSpot sends one (an email question is the email), then the question's words (*First name*, *Company*, *Job title*, *Phone*...), and any answer that is an email address or a LinkedIn profile URL.
* Pick another target to change it: **Email**, **First name**, **Last name**, **First and last name**, **Phone**, **Company**, **Job title**, **Location**, **Address**, **City**, **Country**, **Postal code**, **LinkedIn profile**, a **Custom field** (use it in messages as `{{contact.custom.<name>}}`), or **Don't keep**.
* Click **Save mapping**. Every next submission uses it.

**Test** shows how a sample HubSpot forms submission (taken from HubSpot's documentation) would be read with your mapping. Nothing is saved and no contact is made.

## Start a campaign from the form

**1. Add the trigger**

Open your campaign, go to its **Triggers** tab and click **+ Add** > **Lead form submitted**.

**2. Pick the source**

Under **Source**, pick **HubSpot forms**. Under **Which URL**, pick one of your HubSpot forms URLs or **Any HubSpot forms URL**. Leave **Every form**, or pick **Only these forms** once a submission from them has arrived. Click **Add the trigger**.

Pick **Any source (every lead form and form tool)** instead to start the campaign from every form and every Facebook / Instagram lead ad at once.

## Good to know

* **No LinkedIn profile? They still come in.** People without a LinkedIn URL become contacts by their email. Email and other steps run; LinkedIn steps wait (shown in **Home > Tasks** with the reason *missing LinkedIn URL*) until someone adds their profile, then continue by themselves.
* **Never twice.** HubSpot may send the same submission again (a retry, a test sent twice): Kerux recognizes it by its answers and adds the person once. Someone who is already a contact is updated: empty fields are filled, their answers are saved as custom fields.
* **One URL per form.** Make as many URLs as you like (**Add another URL**), so each campaign can pick its own.
* **If the URL leaks**, click **Make a new URL** on its card: the old one stops working at once. Paste the new one in HubSpot. **Turn off** stops the URL for good.
* **Limits.** Each URL takes up to 60 requests a minute; more get an answer to try again later. A body can be up to 256 KB.
* Only workspace owners and admins can make URLs and see them. Members see **Ask an admin** on the row.
* Answers are data, never instructions: whatever someone types in your form is stored as text, nothing else.

## With the API

The same URLs are in the public API: `GET /v1/integrations/form-relays`, `POST /v1/integrations/form-relays` (`{"tool": "hubspot_forms", "name": "Demo request"}`), `PATCH /v1/integrations/form-relays/{id}` (rename, or `mapping`), `POST /v1/integrations/form-relays/{id}/rotate`, `POST /v1/integrations/form-relays/{id}/test`, `DELETE /v1/integrations/form-relays/{id}`, and `POST /v1/workflows/{id}/lead-form-triggers` (`{"provider": "hubspot_forms", "page_id": "*"}`). See [the API](/help/developers/api.md).

## Sources

* HubSpot: [Use webhooks with HubSpot workflows](https://knowledge.hubspot.com/workflows/how-do-i-use-webhooks-with-hubspot-workflows).

> [!NOTE]
>
> Kerux reads HubSpot's webhook as HubSpot's documentation describes it. If a field arrives somewhere unexpected, change it under **Where each field goes**, or contact support from [Get help](/help/get-help.md).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.