Gravity Forms Webhooks Without the Elite Add-On — Built by AI in the Plugin
Gravity Forms keeps webhooks behind the paid Webhooks Add-On. The free alternative: describe the integration to Build with AI and the agent wires gform_after_submission to your endpoint — with field mapping, retries, and a full event log. Manual setup takes five steps if you prefer clicking.
TL;DR
- No Webhooks Add-On or Elite license needed — Build with AI wires
gform_after_submissionto any endpoint from one sentence - The agent maps numeric field IDs (
args.0.1,args.0.2…) to readable keys likenameandemailfrom the real captured payload - Delivery is queued with automatic retries (1 min, 2 min, 4 min, 8 min — 5 attempts), full event log, and one-click replay
Describe It Once — The Agent Builds It
Open Webhook Actions in the WordPress admin and type:
prompt — paste into Build with AI
When a Gravity Forms form is submitted, send the entry as JSON to my webhook: https://your-n8n-url/webhook/test
The agent first gathers context — you'll see read-only ability chips like list_triggers and get_trigger_schema as it scans the action hooks available on your site and finds gform_after_submission, which fires once per successful entry after validation passes and the entry is stored.
It then proposes an ordered plan: create the webhook, point it at your endpoint, and — once a captured payload exists — map the numeric Gravity Forms field IDs to readable keys. With "Review plan before running" enabled you can edit any step before it executes.
When the run finishes you get "Build complete." with a one-click enable toggle. New webhooks are always created disabled — nothing fires until you confirm. Endpoint auth goes through the encrypted Credentials Vault (auth_credential_id), never plaintext headers, and the agent will never ask you to paste a secret into the chat.
Prefer to Set It Up by Hand?
The same result takes five steps in the admin UI — no AI provider needed:
- Install the plugin
Search for FlowSystems in Plugins → Add Plugin — it narrows the WordPress.org search to exactly one result.
- Create a new webhook
Go to Webhooks → Add Webhook, name it (e.g., "Gravity Forms → n8n").
- Select the trigger
Set the WordPress action hook to
gform_after_submission— it fires once per successful Gravity Forms entry.action hook — paste into the trigger field
gform_after_submission
- Set the endpoint URL
For n8n: add a Webhook node, set HTTP Method to
POST, and copy its Production URL into the plugin's webhook URL field. The full n8n path — bearer auth, payload mapping, end-to-end test — is in Send Gravity Forms Submissions to n8n via Webhook. - Save and test
Submit your Gravity Forms form. Check the Event Log in the plugin admin to see the delivery status and the raw payload that was sent.
Gravity Forms webhooks in action — form submission, Event Log delivery status, and raw payload in log details
Writing the integration yourself with gform_after_submission and wp_remote_post()? The hook parameters, rgar() field access, and why bare HTTP calls silently drop entries in production are covered in the gform_after_submission hook reference.
Example Payload
Here's what a typical Gravity Forms submission looks like when it arrives at your endpoint. The args property is an array — args[0] is the entry, args[1] is the full form definition (fields, confirmations, notifications) and is omitted here for brevity.
Field values are stored under their numeric field ID as string keys: "1" is Full Name, "2" is Email, and so on.
POST body — application/json (args[1] form definition omitted)
{ "event": { "id": "efab972c-09bc-460b-9ec3-ad63484b3b14", "timestamp": "2026-04-01T15:30:47Z", "version": "1.0" }, "hook": "gform_after_submission", "args": [ { "id": "3", "status": "active", "form_id": "1", "ip": "172.22.0.1", "source_url": "https://your-wordpress-site.com/gravity-forms-example/", "currency": "USD", "date_created": "2026-04-01 15:30:47", "created_by": "1", "1": "Mateusz", "2": "[email protected]", "3": "(150) 010-0900", "4": "general", "5": "Hey, this is example test form message!" } ], "timestamp": 1775057447, "site": { "url": "https://your-wordpress-site.com" } }
Numeric keys are unwieldy in workflows — which is why the field mapping matters. Build with AI applies it for you via the captured payload (dot-notation paths like args.0.1 → name), so every future delivery arrives with name, email, phone instead of "1", "2", "3". You can do the same in the admin UI without code:
Mapping is also scriptable over HTTP — see the REST API reference for the PUT /schemas route.
What You Get Beyond the Setup
Every delivery is dispatched from a background queue, so form submissions are never blocked by a slow or unavailable endpoint. Failures retry automatically with exponential backoff — 1 min, 2 min, 4 min, 8 min, 5 attempts — and every attempt is logged with status code and response body. Anything that exhausts its retries stays in the event log, replayable from the admin UI or via the REST API (POST /wp-json/fswa/v1/logs/{id}/retry) — without asking the user to resubmit.
Why this matters in production — and why bare wp_remote_post() integrations lose leads silently — is covered in Why WordPress webhooks silently fail in production and How the retry and replay system works.
What about the official Gravity Forms Webhooks Add-On?
It exists, it works, and it is gated behind the most expensive licence. The Webhooks Add-On is bundled with the Gravity Forms Elite licence (and the Nonprofit licence). Basic and Pro licence holders cannot install it without upgrading — which is the single most common reason people end up looking for another way to send a form submission to a URL.
If you already hold an Elite licence, use it. It is first-party, it is maintained by the Gravity Forms team, and it supports per-feed conditional logic so a form can fire different webhooks for different answers. There is no reason to add a second plugin for something your licence already covers.
The differences worth knowing before you decide, in either direction:
- Scope. The add-on sends Gravity Forms entries. It does not know about WooCommerce orders, user registrations, or any other
do_actionon the site — those need a different tool anyway, so a forms-only add-on is a partial answer if forms are not the only thing you need to send. - Retry behaviour. Check what happens to a failed delivery before you rely on it. A webhook that fires once and drops the entry on a 503 is very different from one that queues and retries, and that difference only shows up in production.
- Delivery history. Being able to answer "did entry 4,812 arrive, and what did the endpoint say" three weeks later is a logging question, not a sending question.
- Licence maths. If the only reason to go Elite is webhooks, price the upgrade against the alternative. If you were going Elite anyway, the add-on is free.
Either way, the underlying hook is the same one: gform_after_submission. Its parameters, the entry array shape and the field-ID string keys are documented in the gform_after_submission reference, and every submission-stage hook is listed in the Gravity Forms hooks reference.
Common questions always ask.
Don't see yours? Open an issue on GitHub or check the full reference in the API docs.