It *is* actually possible to do this via Firebase in the browser console, though I'm not sure I'd recommend it. The data are unrecoverable, and it's not exactly user-friendly. I'm in two minds about whether this is advisable, since I don't want anyone to wipe their entire chat log, but: const chatMessageRemover = async ( searchString , messagesBack = 10 ) => { if ( typeof searchString !== 'string' ) return ; let counter = 0 ; await window . Campaign . parentRef . child ( 'chat' ). orderByKey (). limitToLast ( messagesBack ). once ( 'value' , snap => { snap . forEach ( doc => { if ( doc . val (). content . indexOf ( searchString ) > - 1 ) { doc . ref . remove (); counter ++; } }); }). then (() => { if ( counter > 0 ) window . alert ( ` ${ counter } document(s) removed. Please refresh your browser to reflect changes.` ); }); } If you paste that into your browser console, you can run it with: chatMessageRemover('Red Dragon') to look through the last 10 messages and remove anything with "Red Dragon" (case sensitive) in the content. It defaults to only 10 messages due to the aforementioned 'wiping your whole chatlog' thing. If you need to search further back, supply a second parameter: chatMessageRemover('Boulder trap', 50); Would search the previous 50 messages and delete those containing "Boulder trap".