Marketo webhooks are a powerful tool that enable users to receive real-time updates from Marketo when specific events occur within the platform. With webhooks, Marketo can send data to an external application whenever a specific action takes place (aka a trigger event), such as when a person is created or updated.
In this post, we will dive deeper into the operations of Marketo webhooks, explore a common myth, and discuss best practices to avoid any MOOPS!
After a webhook call, a lot of people add Wait steps in the flow to give sufficient time for the webhook to “finish execution,” aka have the data updates committed to the database, so subsequent campaign flow steps dependent on those don’t run into unexpected errors due to missing data.
This may sound right at first, but using a wait step to ensure that the Change Data Value (CDV) activity completes isn’t technically 100% bulletproof!
There's no way to estimate the exact wait duration that would be sufficient for the CDV activities to get updated in the database, and even if you add a generous duration in the wait step, there's still a chance that the person record may not have been updated even after the wait step. This could be due to various factors, such as webhook errors, concurrency rate limits, etc.
Additionally, this could unnecessarily slow down processing too (in case the CDV activity completes well before the wait step ends.)
A better and more robust alternative is to use the "Data Value Changes" trigger instead. Using a trigger ensures the process is event-driven, i.e., it only runs a person through the flow after they get a Change Data Value (CDV) event logged in their activity log. You can also add a reason constraint to the trigger with the value "Webhook Updated Person : [webhook name]" if you want only people who were updated by the webhook call to pass through your trigger campaign's flow.
It’s also worth mentioning that the Webhook calls (i.e., the HTTP requests) are 100% synchronous; however, the data updates that happen based on the response received from the Webhook call are rather asynchronous.
Similarly, for the calls not involving any updates to the fields, you can use a “Webhook is Called” trigger to run the dependent flow steps. This is a fail-safe method to avoid the execution of dependent flows if the webhook call runs into unexpected errors.

Happy Webhook'ing!
Thanks Darshil! I learn something every time I read your posts!
Extremely informative with the usage of Webhooks! Brilliant Sire! 👏 Your posts are extremely insightful 😊