Skip to main content

Send Real-Time Submission Data with Webhooks

Set up JSON POST requests for completed funnel submissions

Written by Megan

Available on

❌ Free

❌ Start

❌ Grow

✅ Scale

Webhooks let involve.me automatically send submission data to your server as JSON as soon as a participant completes your funnel.

Instead of polling an API, webhooks push the data to you in real time. No code is needed on your side to initiate the request.

Common use cases include syncing submissions to a custom CRM, triggering automated workflows, sending data to a database, or building your own custom integration.

How to set up a webhook

Step 1: Open your funnel and click Integrations in the top navigation bar.

Step 2: Find the Webhooks integration card and click Connect.

Step 3: Enter your endpoint URL, for example: (e.g., https://www.your-website.com/your-webhook).

⚠️ For live connections, your endpoint must use HTTPS / SSL. HTTP endpoints can be used for testing only.

Step 4: Click Test Webhook to verify your endpoint.

involve.me will send your most recent participant’s data to the URL you entered. This test also works over HTTP, so you can test locally before going live.

ℹ️ The Response section shows your server’s response for debugging purposes. This response is not used inside your funnels.

Step 5.Click Connect to save and activate the webhook.

Test your webhook

Before going live, we recommend testing your webhook so you can confirm that the data arrives in the format you expect.

Option 1: Use the built-in test. Click Test Webhook in the setup dialog.

involve.me sends your most recent participant’s data to the endpoint.

Option 2: Use a webhook testing service. You can use a free service like webhook.site to inspect the full payload. Paste the webhook.site URL as your endpoint, submit a test entry in your funnel, and review the JSON that arrives

Add a custom header

You can add a custom header to authorize webhook requests on your server. This is a recommended security practice.

To enable it, select Add Custom Header (optional) during setup.

Then enter your Header Name and Header Value, and click Connect to save.

For example, you might use Authorization as the Header Name and Bearer your-secret-token as the Header Value.

Example webhook payload

Here is a complete example of what involve.me sends to your endpoint when a participant completes a funnel:

{
  "event": {
    "type": "finished_participant",
    "version": 1,
    "created_at": "2026-03-23 14:30:00"
  },
  "data": {
    "participant_id": "9c3e839e2aacc5bd8bff7deb2ad039eb",
    "project_name": "My Lead Gen Quiz",
    "project_url": "my-lead-gen-quiz",
    "correctly_answered": 3,
    "score": "75.0",
    "calculator_result": "19.99",
    "calculator_results": {
      "d79imhx": 112.20,
      "f7fj306": 86.30
    },
    "has_outcomes": true,
    "outcome": "Premium Plan",
    "outcome_points": "19.99",
    "country_code": "US",
    "anonymized_ip": "c234a39a7469be63dc31f044e520e43323b9688d",
    "seconds_to_complete": 35,
    "embed_url": "https://mywebsite.com/pricing",
    "device_type": "computer",
    "remote_id": null,
    "opened_at": "2026-03-23 14:29:25",
    "finished_at": "2026-03-23 14:30:00",
    "personal_data": {
      "first_name": "Jane",
      "last_name": "Doe",
      "email": "jane@example.com",
      "phone": "+1234567890",
      "organization_name": "Acme Inc",
      "job_title": "Marketing Manager"
    },
    "questions": [
      {
        "id": "8211e586e9b2fd29bc3707c619ca359d",
        "type": "default",
        "question_text": "What is your team size?",
        "answered_correctly": true,
        "max_value": "10.0",
        "answers_given": [
          {
            "response_text": "11-50 people",
            "connected_outcome": "Premium Plan",
            "correct": true,
            "value": "7.5"
          }
        ]
      }
    ]
  }
}

Webhook Reference

When the webhook sends data

The finished_participant webhook sends data when a participant reaches the last page of your funnel, meaning the thank you page or outcome page.

Request type: POST
User-Agent: involve.me
Host: AWS IP ranges, eu-central-1 only

Event Object

Field

Type

Description

type

string

"finished_participant" — use this to identify the event

version

integer

Currently always 1

created_at

string

UTC timestamp: "YYYY-MM-DD HH:MM:SS"

Data Object — Submission Details

Field

Type

Description

participant_id

string

Unique identifier for the participant. May be null during test connections.

project_name

string

Name of the funnel

project_url

string

URL slug of the funnel

correctly_answered

integer | null

Number of correctly answered questions. null if no questions in funnel.

score

string | null

Sum of all answer values (as decimal string). null if no scored questions.

calculator_result

string | null

Result of the first calculator element. null if no calculator.

calculator_results

object

All calculator results as {"calculator_id": value}.

has_outcomes

boolean

true if the funnel uses multiple outcomes. Determines which fields appear in questions.

outcome

string

Winning outcome name. Only present when has_outcomes is true.

outcome_points

string | null

Sum of answer values for the winning outcome.

country_code

string | null

Two-letter country code based on participant IP.

anonymized_ip

string

Hashed IP. Useful for identifying duplicate entries.

seconds_to_complete

integer

Time from funnel load to last page, in seconds.

embed_url

string | null

URL of the page where the funnel was embedded. null if not embedded.

device_type

string

phone, tablet, or computer

remote_id

string | null

Custom identifier if set via hidden fields.

opened_at

string

UTC timestamp when participant loaded the funnel.

finished_at

string

UTC timestamp when participant reached the last page.

personal_data

object

Contact form data: first_name, last_name, email, phone, organization_name, job_title, street_address, zip_code, city, state, country, etc. Fields are null if not collected.

questions

array

Array of question objects (see below).

Question Object

Each question in the funnel appears as an object in the questions array:

Field

Type

Description

id

string

Unique identifier. Changes if the question is cut/pasted or the funnel is duplicated.

type

string

"default" (choice/dropdown), "input" (text), "slider", "rating", "checkbox", "fileUpload", or "dateTimePicker"

question_text

string

The question text as shown to the participant.

answered_correctly

boolean

Only available if has_outcomes is false and type is "default".

max_value

string

Max possible score for this question. Only for type "default".

checked

boolean

Whether the checkbox was checked. Only for type "checkbox".

answers_given

array

Array of answer objects (see below). Not available for "checkbox" type.

ℹ️ Hidden fields are treated as text answers, so hidden field data appears in the question object.

Answer Object

Each answer given by a participant appears in the answers_given array.

The available fields depend on the question type.

Field

Available for

Description

response_text

default, input, dateTimePicker

The answer text. For dateTimePicker: format is "YYYY-MM-DD hh:mm:ss".

response_image

default

URL to the answer image. null if not an Image Answer element.

response_icon

default

Icon class (e.g., "fa-arrows-spin"). Only for icon library selections.

connected_outcome

default (outcomes only)

The outcome this answer endorses. Only when has_outcomes is true.

correct

default (no outcomes)

Whether this specific answer is marked as correct. Only when has_outcomes is false.

value

default

The score value assigned to this answer (decimal as string).

rating_percent

rating

Percentage between 0–1 (e.g., 0.75 = 75%).

rating_input

rating

The rating value (e.g., 4 out of 5 stars).

rating_max

rating

Maximum rating (e.g., 5 stars).

slider_input

slider

The value selected on the slider.

slider_min / slider_max

slider

The slider range boundaries.

file_url

fileUpload

Download URL for the uploaded file.

file_name

fileUpload

Original file name (e.g., "photo.jpg").

file_bytes

fileUpload

File size in bytes.

file_type

fileUpload

MIME type (e.g., "image/jpeg").

Duplicated Funnels

If you duplicate a funnel that already has a webhook configured, the webhook settings are duplicated as well.

The duplicated funnel will send data to the same endpoint. You can update the endpoint on the duplicate funnel if needed.

Troubleshooting

Webhook data is not being sent:

  • Make sure your endpoint uses HTTPS. HTTP endpoints are accepted for testing only.

  • Check that the webhook is connected, not just saved. Go to Integrations → Webhooks to verify the status.

  • The webhook sends data only when a participant reaches the last page, meaning the thank you page or outcome page. Partial submissions do not trigger it.

Data does not match what you expected

  • Fields like outcome and connected_outcome only appear when has_outcomes is true. If your funnel uses score-based outcomes, check the score and outcome_points fields instead.

  • participant_id may be null when using the "Test Webhook" button if no participant exists yet.

  • Scores and calculator results are sent as decimal strings (e.g., "37.5"), not numbers. Parse them accordingly in your code.

The Response section shows an error

  • A 4xx error usually means your server is rejecting the request. Check whether a custom header is needed for authorization.

  • A 5xx error means your server had an internal error. Check your server logs.

  • A timeout means your server took too long to respond. Webhooks expect a response within a few seconds.

Need a custom integration? If webhooks do not cover your use case, you can also use the Zapier integration as a no-code alternative that connects to 5,000+ apps.

Did this answer your question?