diff --git a/app/controllers/external_controller.rb b/app/controllers/external_controller.rb
index a00b4c689a4f839b071d962b565a679f0b241837..fd36ad4ac98a0d2be9d5e1a9d8a2c5222702df30 100644
--- a/app/controllers/external_controller.rb
+++ b/app/controllers/external_controller.rb
@@ -99,10 +99,14 @@ class ExternalController < ApplicationController
   # Increments a rooms recordings_processing if the meeting was recorded
   def meeting_ended
     # TODO: - ahmad: Add some sort of validation
-    return render json: {} unless params[:recordingmarks] == 'true'
-
     @room = Room.find_by(meeting_id: extract_meeting_id)
-    @room.update(recordings_processing: @room.recordings_processing + 1, online: false)
+    return render json: {}, status: :ok unless @room
+
+    recordings_processing = params[:recordingmarks] == 'true' ? @room.recordings_processing + 1 : @room.recordings_processing
+
+    unless @room.update(recordings_processing:, online: false)
+      Rails.logger.error "Failed to update room(id): #{@room.id}, model errors: #{@room.errors}"
+    end
 
     render json: {}, status: :ok
   end
diff --git a/lib/tasks/server_recordings_sync.rake b/lib/tasks/server_recordings_sync.rake
deleted file mode 100644
index bcee11b88bfe0f6ce4ea953e2fd09f3dfac7f535..0000000000000000000000000000000000000000
--- a/lib/tasks/server_recordings_sync.rake
+++ /dev/null
@@ -1,32 +0,0 @@
-# BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
-#
-# Copyright (c) 2022 BigBlueButton Inc. and by respective authors (see below).
-#
-# This program is free software; you can redistribute it and/or modify it under the
-# terms of the GNU Lesser General Public License as published by the Free Software
-# Foundation; either version 3.0 of the License, or (at your option) any later
-# version.
-#
-# Greenlight is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public License along
-# with Greenlight; if not, see <http://www.gnu.org/licenses/>.
-
-# frozen_string_literal: true
-
-desc 'Server Recordings sync with BBB server'
-
-task server_recordings_sync: :environment do
-  Recording.destroy_all
-
-  Room.select(:id, :meeting_id).in_batches(of: 25) do |rooms|
-    meeting_ids = rooms.pluck(:meeting_id)
-
-    recordings = BigBlueButtonApi.new(provider: 'greenlight').get_recordings(meeting_ids:)
-    recordings[:recordings].each do |recording|
-      RecordingCreator.new(recording:).call
-    end
-  end
-end
diff --git a/spec/controllers/external_controller_spec.rb b/spec/controllers/external_controller_spec.rb
index 8e7123e59feece0b29926e37d8bd9a8471358dd3..04ae4cc73d06ddbd5cb5ef494acd2f188fe5c1bc 100644
--- a/spec/controllers/external_controller_spec.rb
+++ b/spec/controllers/external_controller_spec.rb
@@ -349,18 +349,45 @@ RSpec.describe ExternalController, type: :controller do
   end
 
   describe '#meeting_ended' do
-    let(:room) { create(:room) }
+    let(:room) { create(:room, online: true) }
 
-    it 'increments a rooms recordings processing value if the meeting was recorded' do
-      get :meeting_ended, params: { meetingID: room.meeting_id, recordingmarks: 'true' }
-      expect(room.reload.recordings_processing).to eq(1)
-      get :meeting_ended, params: { meetingID: room.meeting_id, recordingmarks: 'true' }
-      expect(room.reload.recordings_processing).to eq(2)
+    context 'Recorded session' do
+      it 'sets online to false' do
+        get :meeting_ended, params: { meetingID: room.meeting_id, recordingmarks: 'true' }
+
+        expect(room.reload.online).to be(false)
+        expect(response).to have_http_status(:ok)
+        expect(JSON.parse(response.body)).to eq({})
+      end
+
+      it 'increments a rooms recordings processing value if the meeting was recorded' do
+        get :meeting_ended, params: { meetingID: room.meeting_id, recordingmarks: 'true' }
+        expect(room.reload.recordings_processing).to eq(1)
+
+        get :meeting_ended, params: { meetingID: room.meeting_id, recordingmarks: 'true' }
+        expect(room.reload.recordings_processing).to eq(2)
+      end
     end
 
-    it 'does not increment a rooms recordings processing value if the meeting was not recorded' do
-      get :meeting_ended, params: { meetingID: room.meeting_id, recordingmarks: 'false' }
-      expect(room.reload.recordings_processing).to eq(0)
+    context 'Unrecorded session' do
+      it 'sets online to false without incrementing a rooms recordings processing' do
+        expect do
+          get :meeting_ended, params: { meetingID: room.meeting_id, recordingmarks: 'false' }
+        end.not_to(change { room.reload.recordings_processing })
+
+        expect(room.online).to be(false)
+        expect(response).to have_http_status(:ok)
+        expect(JSON.parse(response.body)).to eq({})
+      end
+    end
+
+    context 'Inexistent room' do
+      it 'silently fail' do
+        get :meeting_ended, params: { meetingID: '404', recordingmarks: 'false' }
+
+        expect(response).to have_http_status(:ok)
+        expect(JSON.parse(response.body)).to eq({})
+      end
     end
   end