Inbound Webhooks
Overview
The Inbound Webhooks trigger lets any external app or service send data into your WordPress site and start an Advanced Form Integration (AFI) workflow. Instead of waiting for a form on your own website to be submitted, AFI gives you a unique webhook URL. Whenever an outside platform (a form builder, CRM, payment processor, or automation tool) sends data to that URL, AFI captures it, cleans it up, and forwards it to any connected platform you choose.
This is ideal when the data originates outside WordPress. For example, a Typeform or Jotform submission, a payment event, or a custom script can all flow straight into your other tools through a single URL. Inbound Webhooks is a PRO feature.
Possible Integrations
When an external service posts data to your webhook URL, AFI can send it onward in many ways, such as:
- Create a new row in Google Sheets with the received data.
- Add or update a contact in a Mailchimp or Brevo (Sendinblue) list.
- Create an organization, contact, deal, or note in a CRM like Pipedrive, HubSpot, or Zoho.
- Post a message to Slack or Microsoft Teams.
- Similar integrations to 50+ other platforms. Please check out the supported list here.
How It Works
The Inbound Webhooks trigger follows three simple steps inside the integration editor:
- Copy the webhook URL and add it to the external app that should send data.
- Receive one sample event so AFI can read the fields being sent.
- Map those fields into your chosen action platform, then save.
Here is the full configuration panel you will be working with:
Creating a New Integration
Follow the steps below to start an inbound webhook integration.
- Go to
WordPress Admin > AFI Menu > Add New. - A default title will be auto-filled in the Integration Title input box. You can change it to something relevant.
- In
Trigger > Form / Data Providerselect Inbound Webhooks. - In the
Form / Task Namedropdown, select Inbound Webhooks.
Step 1: Copy the Webhook URL
As soon as you select the Inbound Webhooks trigger, AFI generates a unique, secret URL for this integration. Copy it with the Copy URL button and paste it into the external app’s webhook or “send to URL” setting.
The Rotate button generates a brand new URL and disables the old one. Use it if the URL is ever exposed or you want to revoke access for an old configuration. After rotating, remember to update the URL in the external app as well.
Step 2: Receive Data
To map fields, AFI needs to see one real example of the data the external app sends. Click Receive Data, then trigger one genuine event in the external app (for example, submit the Typeform once). The incoming fields will appear in the viewer below so you can map them.
You also have two helpers here:
- Send test event: posts a small sample payload to your own URL so you can preview the field structure without configuring the external app first.
- View last payload: re-opens the most recently captured data so you can revisit the fields at any time.
The “From” Selector
Popular platforms wrap their data in their own structure, which can be awkward to map. The From dropdown tells AFI which platform is sending the data so it can present clean, readable field names.
- Auto-detect (default): AFI recognizes known platforms automatically from the shape of the incoming data. This works well for most cases, so you can usually leave it as is.
- Typeform / Jotform: force that platform’s clean field layout.
- Other: keep the raw fields exactly as received, with no clean-up. Use this for custom sources.
Step 3: Map the Received Fields
Once an event is received, the captured fields appear in a viewer. Nested data is shown as an indented tree so you can see the structure clearly. Each field has a Copy button that copies the field as a merge tag (wrapped in double curly braces), ready to paste into your action platform.
Use the Filter fields box at the top to quickly find a field by name or value when the payload is large.
To map a field, copy its key and paste it into the matching field of your chosen action. For example, mapping an email to a Mailchimp or CRM contact:
You can also type field keys manually. Just wrap the key in double curly braces, for example {{answer__email}}. Nested values use a double underscore between levels, for example {{answer__name__first}}.
Step 4: Choose the Action and Save
- In the
Action > Platformdropdown, select the platform where you want to send the data. If you do not see it, go to the plugin settings page and activate it. - Complete the field mapping using the merge tags you copied. The fields differ per platform. Please check out the documentation page for Receiver Platforms.
- Apply Conditional Logic if required.
- Click the Save Integration button and you are done.
From now on, every time the external app sends data to your webhook URL, AFI will map it and forward it to the connected platform automatically.
Securing the Webhook (Optional)
Because the webhook URL accepts data from the public internet, you can optionally require a shared secret so that only requests carrying the correct secret are accepted. This blocks anyone who might guess or stumble upon the URL.
To enable it:
- Click Generate to create a strong secret, or type your own.
- Click Save.
- Configure the external app to send the secret with each request, using either of these methods:
- As an HTTP header named
X-AFI-Webhook-Secret, or - As a query string added to the URL, for example
?secret=your-secret-value.
- As an HTTP header named
Requests without the correct secret are rejected. Leaving the secret empty keeps the webhook open to any request, which is fine for trusted or hard-to-guess setups.
Platform Field Reference
When AFI recognizes a platform (or you select it in the “From” dropdown), it cleans up the raw payload into readable keys. Here is what to expect:
| Platform | Detected By | Example Mapped Keys |
|---|---|---|
| Typeform | Auto-detected, or select “Typeform” | form_id, submitted_at, answer__<ref> (for example answer__email) |
| Jotform | Auto-detected, or select “Jotform” | formID, submissionID, answer__<field> (for example answer__name__first) |
| Other / Custom | Select “Other”, or no match found | The raw keys exactly as received, with nested levels joined by __ |
Tips and Notes
- The webhook URL accepts
POSTrequests and reads JSON, form-encoded, and query-string data. - Nested data is flattened with a double underscore between levels, for example
customer__address__city. - If you rotate the URL, update it in the external app, otherwise data will stop arriving.
- Before saving, the “Receive Data” preview uses automatic detection. Once the integration is saved, your exact “From” choice is always respected.
- Use Conditional Logic to forward only certain submissions, for example only when a status field equals a specific value.