Send Every Gravity Forms Submission Straight Into Keap

The moment someone completes your Gravity Forms form, the lead is cleaned and written into Keap as a de-duplicated contact — no copy-paste, no missed leads.

difficulty Beginnersetup 30 minresult A new Keap contact appears within seconds of each Gravity Forms submission, with name, email and company already filled in.
  1. 1

    Step 1 — Receive the submission

    Add a Webhook node (POST). Copy its URL into Gravity Forms as the submission endpoint so every completed form is pushed to n8n instantly.

  2. 2

    Step 2 — Normalise the fields

    Add a Set node. Create email, firstname, lastname and company and map each from the payload, e.g. {{ $json.body.email }}. This shields the rest of the flow from Gravity Forms's field naming.

  3. 3

    Step 3 — Reject empty emails

    Add an If node with the condition {{ $json.email }} is not empty. The true branch continues; the false branch can alert you to a broken form.

  4. 4

    Step 4 — Write to the CRM

    Add a node (or HTTP Request) for Keap and upsert the contact keyed on email.

  5. 5

    Step 5 — Confirm receipt

    Add a Respond to Webhook node returning Lead saved. This 200 response stops Gravity Forms from retrying the submission.

Frequently asked questions

My Gravity Forms field names are different — will this still work?

Yes. Only the expressions in the `Set` node (Step 2) reference field names. Change `{{ $json.body.email }}` to match the exact keys Gravity Forms sends and every downstream step keeps working.

Will I get duplicate contacts in Keap?

No. Step 4 upserts keyed on email address, so a repeat submission updates the existing Keap record instead of creating a second one.

About this recipe. Recipes on FlowRecipesHub are written for business owners, not developers, and are tested before publishing — how recipes get made. Some ingredient links are affiliate links that cost you nothing — full disclosure.