Listening to failed transactions on a contract

I am using the Python web3 library to connect to Infura. Is it possible to listen for failed transactions as they happen on a given contract and set of addresses and also obtain the failure reason? I am aware that it is possible to get the transaction receipt for a given transaction, but I would have to know that that transaction failed in the first place. I am not the originator of the failed transactions I am interested in.

I am specifically interested in require failures as in In this case, an Error(string) function is called. Is this exposed in any way by Infura?

Hello @jpcooper Welcome to the Infura community.
You could also try npm eth-revert-reason