Tag contact based off of email outcome

I’d like tags to be applied depending on if an email has been delivered, opened, clicked, bounced etc.

Is there any way to have this automated or must I do this manually by generating a report first for each action and email campaign?

Thanks in advance.