diff --git a/api/funkwhale_api/federation/serializers.py b/api/funkwhale_api/federation/serializers.py
index fc694c598d49668799a2af4fd81588f216195898..304253aa0716e1d14669a3829395f986ad8f93da 100644
--- a/api/funkwhale_api/federation/serializers.py
+++ b/api/funkwhale_api/federation/serializers.py
@@ -796,6 +796,8 @@ class LibraryTrackActionSerializer(common_serializers.ActionSerializer):
             jobs.append(job)
 
         music_models.ImportJob.objects.bulk_create(jobs)
-        music_tasks.import_batch_run.delay(import_batch_id=batch.pk)
+        funkwhale_utils.on_commit(
+            music_tasks.import_batch_run.delay, import_batch_id=batch.pk
+        )
 
         return {"batch": {"id": batch.pk}}
diff --git a/api/tests/federation/test_views.py b/api/tests/federation/test_views.py
index 3a67a9f2a5e781ffe38805ccb1475d4e8d52236b..4f1f471d85174a7f5fad7224c5471de6603b44e2 100644
--- a/api/tests/federation/test_views.py
+++ b/api/tests/federation/test_views.py
@@ -12,6 +12,7 @@ from funkwhale_api.federation import (
     views,
     webfinger,
 )
+from funkwhale_api.music import tasks as music_tasks
 
 
 @pytest.mark.parametrize(
@@ -398,7 +399,7 @@ def test_library_track_action_import(factories, superuser_api_client, mocker):
     lt2 = factories["federation.LibraryTrack"](library=lt1.library)
     lt3 = factories["federation.LibraryTrack"]()
     factories["federation.LibraryTrack"](library=lt3.library)
-    mocked_run = mocker.patch("funkwhale_api.music.tasks.import_batch_run.delay")
+    mocked_run = mocker.patch("funkwhale_api.common.utils.on_commit")
 
     payload = {
         "objects": "all",
@@ -416,7 +417,9 @@ def test_library_track_action_import(factories, superuser_api_client, mocker):
     assert batch.jobs.count() == 2
     for i, job in enumerate(batch.jobs.all()):
         assert job.library_track == imported_lts[i]
-    mocked_run.assert_called_once_with(import_batch_id=batch.pk)
+    mocked_run.assert_called_once_with(
+        music_tasks.import_batch_run.delay, import_batch_id=batch.pk
+    )
 
 
 def test_local_actor_detail(factories, api_client):
diff --git a/changes/changelog.d/397.bugfix b/changes/changelog.d/397.bugfix
new file mode 100644
index 0000000000000000000000000000000000000000..6eca3267427f6e8061872a449278525b0b2ec4c1
--- /dev/null
+++ b/changes/changelog.d/397.bugfix
@@ -0,0 +1 @@
+Fixed broken federation import on big imports due to missing transaction logic (#397)