diff --git a/changelog.d/9583.bugfix b/changelog.d/9583.bugfix
new file mode 100644
index 0000000000000000000000000000000000000000..51b1876f3b61ccc6d38fa4c37e9ca2dd67024723
--- /dev/null
+++ b/changelog.d/9583.bugfix
@@ -0,0 +1 @@
+Purge chain cover indexes for events that were purged prior to Synapse v1.29.0.
diff --git a/synapse/storage/databases/main/events_bg_updates.py b/synapse/storage/databases/main/events_bg_updates.py
index 73e69d4cb152b702acb31680ea540ae642d59e92..78367ea58ded9c61ff3e5ac1afae874624e6dbbb 100644
--- a/synapse/storage/databases/main/events_bg_updates.py
+++ b/synapse/storage/databases/main/events_bg_updates.py
@@ -969,7 +969,7 @@ class EventsBackgroundUpdatesStore(SQLBaseStore):
             event_id = ""
             for event_id, chain_id, sequence_number, has_event in rows:
                 if not has_event:
-                    unreferenced_event_ids.append(event_id)
+                    unreferenced_event_ids.append((event_id,))
                     unreferenced_chain_id_tuples.append((chain_id, sequence_number))
 
             # Delete the unreferenced auth chains from event_auth_chain_links and