Skip to main content

How to set up Webhooks with Spur

Spur supports adding webhook triggers, any app/tool from the world can trigger messages to Spur and send data to your workspace

Updated this week

What Are Webhooks?

Webhooks let external apps send data to Spur to trigger automations. Think of them as a doorbell: when someone rings (sends data), your flow answers (executes actions).

Important distinction:

  • Inbound webhooks (triggers): External services send data TO Spur to start a flow

  • Outbound webhooks (actions): Spur sends data OUT to external services using the "Send HTTP Request" action

This guide focuses on inbound webhooks as triggers.

If you are interested in sending data OUT from Spur to external services, please read this guide instead.

How Webhook Triggers Work

When you create a webhook triggered flow:

  1. Spur generates a unique URL

  2. You paste this URL into your external app (Klaviyo, Webflow, Zapier, custom backend, etc.)

  3. When that app sends a POST request to the URL, your flow starts

  4. The data sent in that request becomes available in your flow as variables

Setting Up Your First Webhook Flow

  1. Go to Automations → Automation Flows → Create New Flow

    Then choose WhatsApp as the channel


    Only WhatsApp messages can be sent via Webhooks, since you can't initiate a business conversation from Instagram or Facebook channels.

  2. Choose Webhook as the trigger from the drop down

  3. Copy the generated webhook URL

  4. Paste it into your external app's webhook settings

    As soon you create the trigger, a URL is generated. You can either add this url to the app /tool of you choice. Or just send a POST request to this URL and mention the phone and name of the contact. So that we know which number to send the message to.

    This is the URL you will copy from Spur and paste in the other app.

    Example of other App:
    - Past URL in the URL box.
    - Sending Phone Number & Name is required for the flow to Trigger.
    - This is how you will send phone number, name and any other info in the Body of the Post request through the other app.
    - Sometimes you need to select an event before you're able to add the body.

  5. Send a test request from that app

    Here is an example post request (data you'd send to the webhook endpoint on Spur):

    curl --location 'https://api.spurnow.com/profiles/2/workflows/60/webhooks' --header 'Content-Type: application/json' --data '{
    "phone": "919871739359",
    "name": "Raju Mohan"
    }'


    For a framework like axios, it should be like:

    const axios = require('axios');
    let data = JSON.stringify({
    "phone": "919871739359",
    "name": "Raju Mohan"
    });

    let config = {
    method: 'post',
    maxBodyLength: Infinity,
    url: 'https://api.spurnow.com/profiles/2/workflows/60/webhooks',
    headers: {
    'Content-Type': 'application/json'
    },
    data : data
    };

    axios.request(config)
    .then((response) => {
    console.log(JSON.stringify(response.data));
    })
    .catch((error) => {
    console.log(error);
    });

    You can also send any other data available on the other app in the body of the Post Request like this.

    This is how you can use it in Spur in a condition block - just enter {{trigger.key}} key here is whatever value you're sending from the other app. In this case the key is choice, but it can be any key named anything that you're sending to the endpoint in the request body -

  6. In Spur, click on ''Test Webhook'' → "Check for Received Requests"

  7. View the JSON payload and click fields to map data to phone number and name

  8. Use the mapped variables in your flow

    You can use them in templates, in conditions, in free form messages, in actions. Wherever there's a field where you can type anything into and it allows variable insertion, you can use a mapped variable there.

  9. Test end to end. Always test the connection before making it live for everyone. Make sure it is working as expected.

Common Webhook Use Cases

Klaviyo to Spur

Klaviyo sends customer actions (viewed product, abandoned cart) to Spur via webhook. Spur starts a WhatsApp follow up.

Webflow to Spur

A form submission on Webflow triggers a Spur flow that sends a confirmation message and adds the contact to a segment.

Zapier to Spur

Zapier receives data from hundreds of apps and forwards it to Spur to start messaging flows.

Custom Backend to Spur

Your own application sends events (payment received, booking confirmed) to Spur webhooks to notify customers.

The Debugging Interface

Spur has a very easy way to test and map webhook data.

Testing Your Webhook

  1. Create a flow with a webhook trigger

  2. Copy the generated webhook URL

  3. In the flow builder, look for the "Test Webhook" section

  4. Send a test POST request from your external app

  5. Click "Check for Received Requests" in Spur

  6. You'll see the exact JSON payload that arrived

Full detailed guide on that is here.

One Click Data Mapping

The new interface shows your webhook payload in a live JSON viewer. Instead of manually typing paths like {{trigger.customer.phone}}, you can:

  1. View the full payload structure

  2. Click on any field in the JSON

  3. Spur automatically generates the correct variable path and copies it to your clipboard

This replaces the old method of checking "Spur Tables" or guessing the data structure.

Troubleshooting

"My webhook flow isn't starting"

  • Check the webhook URL is pasted correctly in the external app

  • Verify the app is actually sending requests (check their logs)

  • Use the "Check for Received Requests" button to see if Spur is receiving anything

"My variables are blank"

  • Confirm youre using the correct variable paths from the JSON viewer

  • Make sure the external app is actually sending those fields in the payload

  • Verify the flow is being triggered by the webhook, not linked from another flow

"I want to manually trigger this webhook flow" You can;t without the data. Webhook flows need their payload. If you need manual triggering, consider:

  • Creating a separate flow with a keyword trigger

  • Duplicating the logic instead of linking flows

  • Using Spur's "Send HTTP Request" action within a dummy flow to hit your own webhook URL in the main flow with test data

Did this answer your question?