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

# Lead forms from any form tool

> Typeform, Tally, Jotform, Webflow, Google Forms, Unbounce, Fillout, HubSpot, Framer, Carrd or any tool that sends a webhook: every submission becomes a contact and can start a campaign, without 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).

Your forms can send every submission straight to Kerux. The person becomes a contact (with or without a LinkedIn profile) and starts the campaign you choose, the same way a Facebook or Instagram lead ad does. No Zapier, Make or n8n in between.

| Form tool | How it sends | Guide |
| - | - | - |
| Typeform | Its webhook | [Typeform](/help/integrations/forms/typeform.md) |
| Tally | Its webhook (free on every plan) | [Tally](/help/integrations/forms/tally.md) |
| Jotform | Its webhook (multipart) | [Jotform](/help/integrations/forms/jotform.md) |
| Webflow forms | Site webhook, Form submission | [Webflow forms](/help/integrations/forms/webflow.md) |
| Google Forms | A short Apps Script | [Google Forms](/help/integrations/forms/google-forms.md) |
| Unbounce | Page webhook | [Unbounce](/help/integrations/forms/unbounce.md) |
| Fillout | Its webhook | [Fillout](/help/integrations/forms/fillout.md) |
| HubSpot forms | A workflow's Send a webhook | [HubSpot forms](/help/integrations/forms/hubspot-forms.md) |
| Framer forms | Send To > Webhook | [Framer forms](/help/integrations/forms/framer.md) |
| Carrd | Custom form, Send to URL | [Carrd](/help/integrations/forms/carrd.md) |
| Facebook / Instagram lead ads | Zapier or Make (a direct connection isn't available yet) | [Facebook and Instagram lead ads](/help/integrations/facebook-lead-ads.md) |

## Any other form tool

If your tool can send a webhook (or "send to URL"), it works too. In **Integrations > Connections**, open **Forms** > **Other form tool** and make a URL. Kerux reads:

* **JSON**, **form fields** (`application/x-www-form-urlencoded`) and **multipart** bodies.
* Flat fields, or answers grouped under `answers`, `fields` or `custom`. A list of up to 25 submissions at once also works.
* Clear names help: `email`, `full_name` (or `first_name` and `last_name`), `phone`, `company`, `job_title`, `linkedin_url`, `form_name`, and a submission id as `submission_id` or `response_id` so a retry isn't added twice. Every other field becomes a custom field.

Then choose where each field goes from your first submission, as the guides explain.

## How it works

1. **One secret URL per form.** Each URL has a name you choose, its own field mapping and its own counter. Owners and admins make them in **Integrations > Connections > Forms**.
2. **Waiting for your first submission.** The URL's card checks by itself until one arrives, then shows the fields it had (names only, never answers) and where each goes. Change any of them and click **Save mapping**.
3. **Lead form submitted.** In a campaign's **Triggers** tab, **+ Add** > **Lead form submitted** starts the campaign from a source (**Any source**, Facebook / Instagram, or a form tool), one URL or all of them, and every form or only some.
4. **Same person, one contact.** Someone already in your contacts (same LinkedIn profile or email) is updated, not added again. The same submission sent twice is added once.
5. **No LinkedIn URL?** They still come in. LinkedIn steps wait in **Home > Tasks** (*missing LinkedIn URL*) until someone adds the profile.

The contact's history shows **Submitted a Typeform form (Demo request)** (or the tool and form it came from), and the engagement score counts the submission.

## What Kerux answers

| Answer | Meaning |
| - | - |
| `200` | Received. The answer lists each submission: `accepted`, `duplicate` or `skipped`. |
| `401 INVALID_SECRET` | The URL is wrong, was replaced by **Make a new URL**, or was turned off. Copy it again from Kerux. |
| `422 NO_ANSWERS` | The body had no fields Kerux could read. |
| `429 RATE_LIMITED` | More than 60 requests this minute for this URL. Form tools send it again later; nothing is lost. |
| `503 RETRY` | Kerux couldn't save it right now. Send it again: it's never added twice. |

## With the API

`GET /v1/integrations/form-tools` lists the tools. Manage URLs with `GET` and `POST /v1/integrations/form-relays`, `GET`, `PATCH` (rename or `mapping`) and `DELETE /v1/integrations/form-relays/{id}`, `POST .../{id}/rotate` and `POST .../{id}/test`. Start a campaign from a form with `POST /v1/workflows/{id}/lead-form-triggers` (`provider`: `*`, `meta` or a tool such as `typeform`; `page_id`: `*` or a URL's id). See [the API](/help/developers/api.md).


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