diff --git a/persistence/genre_repository.go b/persistence/genre_repository.go
index 3b4eb61dc..4ea6f67cf 100644
--- a/persistence/genre_repository.go
+++ b/persistence/genre_repository.go
@@ -3,6 +3,8 @@ package persistence
 import (
 	"context"
 
+	"github.com/navidrome/navidrome/log"
+
 	"github.com/deluan/rest"
 
 	. "github.com/Masterminds/squirrel"
@@ -68,5 +70,24 @@ func (r *genreRepository) NewInstance() interface{} {
 	return &model.Genre{}
 }
 
+func (r *genreRepository) purgeEmpty() error {
+	del := Delete(r.tableName).Where(`id in (
+select genre.id from genre
+left join album_genres ag on genre.id = ag.genre_id
+left join artist_genres a on genre.id = a.genre_id
+left join media_file_genres mfg on genre.id = mfg.genre_id
+where ag.genre_id is null
+and a.genre_id is null
+and mfg.genre_id is null
+)`)
+	c, err := r.executeSQL(del)
+	if err == nil {
+		if c > 0 {
+			log.Debug(r.ctx, "Purged unused genres", "totalDeleted", c)
+		}
+	}
+	return err
+}
+
 var _ model.GenreRepository = (*genreRepository)(nil)
 var _ model.ResourceRepository = (*genreRepository)(nil)
diff --git a/persistence/persistence.go b/persistence/persistence.go
index 8ad96896a..953fbd878 100644
--- a/persistence/persistence.go
+++ b/persistence/persistence.go
@@ -165,6 +165,11 @@ func (s *SQLStore) GC(ctx context.Context, rootFolder string) error {
 	if err != nil {
 		log.Error(ctx, "Error tidying up playlists", err)
 	}
+	err = s.Genre(ctx).(*genreRepository).purgeEmpty()
+	if err != nil {
+		log.Error(ctx, "Error removing unused genres", err)
+		return err
+	}
 	return err
 }