Skip to main content

How to Use involve.me Webhooks

Set up webhooks to receive real-time submission data via JSON POST requests. Includes setup steps, payload reference, and troubleshooting.

Written by Megan
Updated over 2 weeks ago

Available on

❌ Free

❌ Starter

❌ Pro

✅ Business

Webhooks let involve.me automatically send submission data (as JSON) to your server the moment a participant completes your funnel. Unlike polling an API, webhooks push data to you in real time — no code 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 (e.g., https://www.your-website.com/your-webhook).

⚠️ Your endpoint must use HTTPS (SSL). HTTP endpoints are not supported for live connections.

Step 4. Click "Test Webhook" to verify your endpoint works. 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 only. This response cannot be used inside your funnels.

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

Testing Your Webhook

Before going live, we recommend testing your webhook to make sure 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. 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.

Custom Header (Optional)

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

To enable this, tick "Add Custom Header (optional)" during setup, then enter your Header Name and Header Value. 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 It Fires

The finished_participant webhook fires when a participant reaches the last page of your funnel (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 has a webhook configured, the webhook settings are duplicated as well. The duplicate funnel will send data to the same endpoint. Update the endpoint on the duplicate if needed.

Troubleshooting

Webhook is not firing:

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

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

  • The webhook only fires when a participant reaches the last page (thank you or outcome page). Partial submissions do not trigger it.

Data is not matching expectations:

  • 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.

Getting an error in the Response section:

  • A 4xx error usually means your server is rejecting the request. Check if you need to add a custom header 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 don't cover your use case, check out the Zapier integration for a no-code alternative that connects to 5,000+ apps.

Did this answer your question?