Thanks for your idea.
However this seems to me too complicated as we would need to run a full node for each cryptocurrency which is impossible for us.
I was looking for some API which can provide this functionality but wasn't able to find any reasonable supporting multiple currencies.
I think the easiest way is to scrape this information from multiple web-based blockchain explorers for each cryptocurrency?
You can have a server that runs a full node and maintains a list of addresses to monitor, when a new block is received, the server looks at transactions of that block and checks if any transactions feature addresses from the server's list. When transaction is found, the server can react accordingly, it can add it to queue and later execute some action for each item in queue, like for example sending an email.
You can use someone else's API for getting blocks, but running your own node is more robust, and you don't need to store the whole blockchain for this service if you don't plan to provide some block explorer functionality.