Build a Small First Workflow
Your first webhook should do one useful job from start to finish.
A solid starter example is: when a form system sends a new-lead event, create a record in a CRM and add a source label. That gives you one incoming event, one destination, and an easy way to see whether the automation worked.
Set it up in this order:
- Choose one event. Start with a clear event such as
lead.created,order.paid, orticket.closed. - Create an inbound webhook trigger. Your integration tool will generate a unique HTTPS URL for incoming requests.
- Send a test event from the source app. Use safe test data from the real source whenever possible. A real event shows the field names and structure the workflow will receive.
- Inspect the captured payload. Find the event type, timestamp, stable record ID, and the two or three fields needed by the destination.
- Map one downstream action. Create a CRM contact, add a spreadsheet row, post a notification, or update a task.
- Run two controlled tests. Send one complete event, then send one with an optional field left blank or omitted. The second test catches fragile mappings before the workflow goes live.
Keep the first version plain. Skip branches, loops, filters, enrichment calls, and multiple destinations until the basic event-to-action flow is reliable. When a simple workflow fails, it is much easier to tell whether the problem came from the sender, the webhook trigger, or the destination app.
A webhook URL is only the receiving address. You still need a predictable payload, a secure way to accept requests, and a plan for retries and duplicate deliveries.
Choose Webhook, Native Integration, or Polling
A native integration is usually the easiest route when it already supports the event and action you need. Use a webhook when the source can send HTTP events but does not have the right direct connector. Use polling when the source has an API but cannot send events on its own.
| Approach | Best fit | Setup burden | Ongoing burden | Main trade-off |
|---|---|---|---|---|
| Native integration | A supported app-to-app workflow | Low | Low | Less control over event data and timing |
| Inbound webhook | A source app that sends HTTP events | Medium | Medium | More flexibility and more responsibility for data handling |
| Polling | A source with an API but no event delivery | Medium | Medium | Delayed updates and repeated API requests |
| Custom endpoint or queue | High-volume, sensitive, or business-critical events | High | High | Greater control, with technical ownership required |
Use a native integration when it handles the workflow cleanly. It removes the need to work with raw request payloads, webhook secrets, and delivery retries.
A webhook is useful when the source event includes fields a native connector does not expose, when the action should happen shortly after the event, or when no direct integration exists.
Polling is better for low-urgency jobs, such as collecting a daily report or syncing a small list. It is poorly suited to lead routing, alerts, inventory updates, and other work where a delay creates manual cleanup.
Build for Retries and Duplicates
A 2xx response means the receiver accepted the request. It does not automatically mean that every downstream action succeeded.
For example, a form system may receive a successful response from your webhook trigger, while the CRM action later fails because a required field is missing. Treat delivery and processing as separate parts of the workflow.
A reliable webhook flow has two jobs:
- Accept and acknowledge the event quickly
- Process the event accurately and record the result
The first job needs to be fast. The second needs validation, field mapping, error handling, and duplicate protection. If a workflow waits for a slow downstream action before responding, the sender may time out and send the same event again.
Use the source system’s event ID or record ID as a duplicate key from the beginning. Before creating a contact, order, ticket, or message, look for a record showing that the same event was already processed. That prevents a retry from creating a second copy.
Some events arrive before related data is fully available in the source system. A webhook may include a record ID but not every field your destination needs. When that happens, capture the ID, wait briefly if necessary, and retrieve the full record through the source API before continuing.
When a Basic Setup Is Enough
A simple webhook workflow is appropriate when the task is easy to repair and a missed event does not create a serious business problem.
Examples include an internal notification, a personal task reminder, or a low-stakes spreadsheet update. In these cases, a native connector or scheduled polling flow may be easier to maintain than a custom webhook design.
Move beyond a basic workflow when any of these conditions apply:
- A missed event affects billing, fulfillment, compliance, or customer support.
- The workflow handles more than 100 events per day.
- Multiple people need access to run history and error logs.
- The source sends signed webhooks that require custom validation.
- The workflow needs branching, retries, duplicate protection, or API lookups.
Useful upgrades include run history, failure alerts, higher execution limits, longer retention, and stronger access controls. Extra app connections are less important than knowing when an event failed and who owns the fix.
The important question is not simply how many events arrive. It is what happens when one is missed, duplicated, or sent to the wrong place.
Keep the Workflow Healthy
Document the fields your workflow depends on before the automation becomes routine. A short schema note can save hours when someone changes a form field, renames a property, or replaces the source app.
Keep these details together:
- Webhook source and event name
- Receiving workflow name
- Required fields and optional fields
- Record ID used for duplicate protection
- Authentication method
- Destination action
- Person responsible for failures
- Expected event frequency
Set alerts around normal delivery timing. If the source usually sends hourly events, investigate after two or three hours of silence. If it sends a daily export, investigate after one missed day.
Keep redacted run history long enough to troubleshoot recurring issues. Thirty days is a practical starting point for low-risk workflows. Sensitive workflows need shorter retention and tighter access rules. Do not retain full payloads longer than the business purpose requires.
Review webhook secrets and workflow access every 90 days. Remove former team members, replace exposed secrets immediately, and update the documentation after changing the source system or destination app.
Before You Create the Trigger
First, ensure that the integration tool accepts incoming webhooks. Some tools can send webhook requests to another service but cannot receive external requests as a trigger.
The sender and receiver also need to agree on the basics:
- URL: Use a public HTTPS endpoint, not an address on a local computer.
- Method:
POSTis common, although some services usePUT. - Content type: JSON is the clearest format for structured field mapping.
- Authentication: Use a shared secret, bearer token, signed header, or another method supported by the sending service.
- Response: Return a
2xxstatus when the event is accepted. - Payload size and timeout: The sender and receiver must work within the limits of the integration tool.
CORS does not control server-to-server webhook delivery. CORS applies to browser requests, so permissive CORS headers do not secure or unblock a webhook.
Signed requests need special handling. Validate the signature against the raw request body before parsing or transforming the payload. Changing whitespace, field order, or encoding before validation can break signatures used by many providers.
A hosted integration tool is not a suitable receiver when the sender requires mutual TLS, a fixed receiving IP address, or a private network endpoint that the tool cannot support.
When Webhooks Are Not the Right Tool
Use a queue, event bus, or custom integration service when event order, exact-once processing, or high-stakes record changes are mandatory. Standard webhooks use an at-least-once delivery model, so repeated requests are a normal possibility.
Use API polling when the source app cannot send webhooks. Set the schedule around the business need rather than choosing the shortest available interval. Polling every five minutes for a weekly report creates unnecessary API traffic without improving the outcome.
Route sensitive customer, health, financial, or employee data through an approved system with the required access controls, audit logging, and retention policies. A basic automation workflow should not become the first receiver for sensitive data before those controls are in place.
Launch Checklist
Turn on the workflow only after each item has a clear answer.
- The source app sends the specific event needed.
- The receiving URL uses HTTPS.
- The workflow accepts the request method and content type.
- A test payload includes a stable event ID or record ID.
- Required fields are handled when optional values are blank.
- The workflow returns a
2xxresponse quickly. - Duplicate deliveries do not create duplicate records.
- Failed runs alert a responsible person.
- Sensitive fields are minimized, protected, and retained appropriately.
- The source event, mappings, and owner are documented.
Common Setup Mistakes
Do not build the workflow from a sample payload alone. A sample usually represents one ideal event, while real traffic can include blank values, missing optional fields, renamed fields, and repeated deliveries.
Avoid matching records by display name when an ID exists. A contact named “Jordan Lee” is not a reliable identifier. A source record ID or email address is a more stable match rule.
Do not put secrets in URL query strings. Query strings can appear in logs and browser history more easily than request headers. Use the authentication method supported by the sending service.
Watch for trigger loops. A loop starts when an incoming event updates the same source record, which sends another webhook, which repeats the update. Use a source label, event filter, or dedicated integration field so the workflow ignores changes it created.
Do not rely on the automation dashboard as the only monitoring plan. A workflow that fails quietly eventually turns into manual reconciliation. Send failure alerts somewhere a responsible person will see them.
Bottom Line
Start with one inbound event, a small JSON payload, one downstream action, and a duplicate-prevention rule. That is enough to learn the mechanics without creating a workflow that is difficult to troubleshoot.
Use a native connector or polling flow for simple work where delays are acceptable. Use a more controlled webhook setup when missed events, duplicate events, sensitive data, or high event volume create consequences that a basic automation cannot safely handle.
FAQ
Do I need to know how to code to set up a webhook?
No. Most integration tools provide a webhook trigger URL and visual field mapping. Coding becomes useful when the source requires signature verification, custom transformations, complex branching, or a specialized authentication method.
How do I know whether a webhook worked?
A webhook worked at the delivery level when the sender receives a 2xx HTTP response. The full workflow worked only when the integration tool records a successful run and the destination record, message, or update appears as intended.
How do I stop duplicate webhook events?
Use the event ID or source record ID as a duplicate key. Before creating a new record, search for a prior processed event with the same identifier and stop the workflow when a match exists.
Why is my webhook not firing?
Start with the URL, request method, authentication method, and event subscription in the source app. Then inspect the sender’s delivery log and the integration tool’s webhook history to see whether the request never arrived or arrived with an invalid payload.
Should I use webhooks for sensitive information?
Only when the workflow has approved access controls, encrypted HTTPS delivery, limited data retention, and an authentication method that prevents unauthorized requests. Send only the fields needed for the destination action.