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

# Framer forms

> Everyone who submits a form on your Framer site becomes a contact in Kerux 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).

Have a form on your Framer site? Everyone who submits it can become a contact in Kerux and start the campaign you choose.

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

## Connect Framer forms

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

Go to **Integrations > Connections**. In **Forms**, click **Connect** on the **Framer 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. Pick the form**

In Framer, select the form on the canvas.

**3. Send it to Kerux**

In the right sidebar, click **Add...** next to **Send To** and pick **Webhook**. Paste your Kerux URL (it starts with `https://`). You don't need a secret.

**4. Publish and test**

Publish your site and submit the form once. In Kerux, the URL's card shows its fields.

Framer sends the form as JSON with your inputs' names as keys, so name your inputs clearly (*Email*, *Name*, *Company*, *LinkedIn*). Kerux uses Framer's submission id to recognize a retry.

## 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 Framer 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 Framer forms submission (taken from Framer'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 **Framer forms**. Under **Which URL**, pick one of your Framer forms URLs or **Any Framer 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.** Framer may send the same submission again (a retry, a test sent twice): Kerux recognizes it by Framer's submission id 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 Framer. **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": "framer", "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": "framer", "page_id": "*"}`). See [the API](/help/developers/api.md).

## Sources

* Framer: [Connect Framer forms to a webhook](https://www.framer.com/help/articles/framer-form-webhook-setup/).

> [!NOTE]
>
> Kerux reads Framer's webhook as Framer'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.