How to differentiate webhooks for created, approved or updated

You can get that from the X-Discourse-Event header field. When a user is created that field’s value will be user_created.

It seems that the User user_updated webhook is being sent every time a user creates a Topic or a Post. This didn’t used to happen and seems like a bug.