diff --git a/rss/bot.py b/rss/bot.py
index 04a6850c8711f2cafbdcf8872d5104dffd308fc1..256f3bb7bf1cc1626374885c5ac83d337ab92bea 100644
--- a/rss/bot.py
+++ b/rss/bot.py
@@ -26,6 +26,7 @@ import feedparser
 from mautrix.util.config import BaseProxyConfig, ConfigUpdateHelper
 from mautrix.types import (StateEvent, EventType, MessageType, RoomID, EventID,
                            PowerLevelStateEventContent)
+from mautrix.errors.request import MForbidden
 from maubot import Plugin, MessageEvent
 from maubot.handlers import command, event
 
@@ -118,12 +119,14 @@ class RSSBot(Plugin):
     async def _broadcast(self, feed: Feed, entry: Entry, subscriptions: List[Subscription]) -> None:
         spam_sleep = self.config["spam_sleep"]
         tasks = [self._send(feed, entry, sub) for sub in subscriptions]
-        if spam_sleep >= 0:
-            for task in tasks:
+        for task in tasks:
+            try:
                 await task
-                await asyncio.sleep(spam_sleep, loop=self.loop)
-        else:
-            await asyncio.gather(*tasks)
+                if spam_sleep >= 0:
+                    await asyncio.sleep(spam_sleep, loop=self.loop)
+            except MForbidden as e:
+                self.log.warning(f"Failed to broadcast: {e}")
+                continue
 
     async def _poll_once(self) -> None:
         subs = self.db.get_feeds()