diff --git a/lib/bitbucket/representation/pull_request.rb b/lib/bitbucket/representation/pull_request.rb
index 978e34e9183b51f1e645335fae1c0d4a09b00979..2fdfab7f9c62799f57ffa36ad83b3e77eef634ca 100644
--- a/lib/bitbucket/representation/pull_request.rb
+++ b/lib/bitbucket/representation/pull_request.rb
@@ -82,7 +82,8 @@ def to_hash
           target_branch_name: target_branch_name,
           target_branch_sha: target_branch_sha,
           source_and_target_project_different: source_and_target_project_different,
-          reviewers: reviewers
+          reviewers: reviewers,
+          closed_by: closed_by
         }
       end
 
@@ -107,6 +108,10 @@ def target_repo_uuid
       def source_and_target_project_different
         source_repo_uuid != target_repo_uuid
       end
+
+      def closed_by
+        raw['closed_by']&.dig('uuid')
+      end
     end
   end
 end
diff --git a/lib/gitlab/bitbucket_import/importers/pull_request_importer.rb b/lib/gitlab/bitbucket_import/importers/pull_request_importer.rb
index 1d9d2a031e5eae81ae44638690b42dc7daf2f141..3651c1080d3902926217ba5de3681273d3e79c93 100644
--- a/lib/gitlab/bitbucket_import/importers/pull_request_importer.rb
+++ b/lib/gitlab/bitbucket_import/importers/pull_request_importer.rb
@@ -45,6 +45,8 @@ def execute
             merge_request.reviewer_ids = reviewers
             merge_request.save!
 
+            create_merge_request_metrics(merge_request)
+
             metrics.merge_requests_counter.increment
           end
 
@@ -85,7 +87,26 @@ def find_user_id
         end
 
         def author_id
-          user_finder.gitlab_user_id(project, object[:author])
+          @author_id ||= user_finder.gitlab_user_id(project, object[:author])
+        end
+
+        def create_merge_request_metrics(merge_request)
+          return if object[:closed_by].nil?
+
+          case object[:state]
+          when 'merged'
+            merge_request.metrics.merged_by_id = closed_by_id
+          when 'closed'
+            merge_request.metrics.latest_closed_by_id = closed_by_id
+          else
+            return
+          end
+
+          merge_request.metrics.save!
+        end
+
+        def closed_by_id
+          user_finder.gitlab_user_id(project, object[:closed_by])
         end
 
         def reviewers
diff --git a/spec/lib/bitbucket/representation/pull_request_spec.rb b/spec/lib/bitbucket/representation/pull_request_spec.rb
index 7050d1858dd21bb1027f8e4dca9f6730eda71fad..a3a675dec5123e8ccc6176880a506adc907fe765 100644
--- a/spec/lib/bitbucket/representation/pull_request_spec.rb
+++ b/spec/lib/bitbucket/representation/pull_request_spec.rb
@@ -108,6 +108,7 @@
         source_branch_sha: 'source-commit-hash',
         merge_commit_sha: 'merge-commit-hash',
         state: 'merged',
+        closed_by: nil,
         target_branch_name: 'destination-branch-name',
         target_branch_sha: 'destination-commit-hash',
         title: 'title',
diff --git a/spec/lib/gitlab/bitbucket_import/importers/pull_request_importer_spec.rb b/spec/lib/gitlab/bitbucket_import/importers/pull_request_importer_spec.rb
index f888f8dba8aaf7bb084b81f0f4e80bb23819609a..ca0a310f20367a143d45ad9eb853ace072f4b8b7 100644
--- a/spec/lib/gitlab/bitbucket_import/importers/pull_request_importer_spec.rb
+++ b/spec/lib/gitlab/bitbucket_import/importers/pull_request_importer_spec.rb
@@ -9,8 +9,10 @@
   let_it_be(:bitbucket_user) { create(:user) }
   let_it_be(:user_2) { create(:user) }
   let_it_be(:user_3) { create(:user) }
+  let_it_be(:closed_by_user) { create(:user) }
   let_it_be(:identity) { create(:identity, user: bitbucket_user, extern_uid: '{123}', provider: :bitbucket) }
   let_it_be(:identity_2) { create(:identity, user: user_2, extern_uid: 'user_2', provider: :bitbucket) }
+  let_it_be(:closed_by_identity) { create(:identity, user: closed_by_user, extern_uid: '{345}', provider: :bitbucket) }
   let(:mentions_converter) { Gitlab::Import::MentionsConverter.new('bitbucket', project) }
   let(:source_branch_sha) { project.repository.commit.sha }
   let(:target_branch_sha) { project.repository.commit('refs/heads/master').sha }
@@ -29,7 +31,8 @@
       target_branch_sha: target_branch_sha,
       title: 'title',
       updated_at: Date.today,
-      reviewers: %w[user_2 user_3]
+      reviewers: %w[user_2 user_3],
+      closed_by: '{345}'
     }
   end
 
@@ -65,6 +68,8 @@
       expect(merge_request.reviewer_ids).to eq([user_2.id])
       expect(merge_request.merge_request_diffs.first.base_commit_sha).to eq(source_branch_sha)
       expect(merge_request.merge_request_diffs.first.head_commit_sha).to eq(target_branch_sha)
+      expect(merge_request.metrics.merged_by_id).to eq(closed_by_user.id)
+      expect(merge_request.metrics.latest_closed_by_id).to be_nil
     end
 
     it 'converts mentions in the description' do
@@ -78,6 +83,8 @@
         described_class.new(project, hash.merge(state: 'closed')).execute
 
         expect(project.merge_requests.first.closed?).to be_truthy
+        expect(project.merge_requests.first.metrics.latest_closed_by_id).to eq(closed_by_user.id)
+        expect(project.merge_requests.first.metrics.merged_by_id).to be_nil
       end
     end
 
@@ -86,6 +93,8 @@
         described_class.new(project, hash.merge(state: 'opened')).execute
 
         expect(project.merge_requests.first.opened?).to be_truthy
+        expect(project.merge_requests.first.metrics.latest_closed_by_id).to be_nil
+        expect(project.merge_requests.first.metrics.merged_by_id).to be_nil
       end
     end
 
@@ -131,6 +140,30 @@
       end
     end
 
+    context 'when closed by user cannot be found' do
+      before do
+        User.find(closed_by_user.id).destroy!
+      end
+
+      it 'sets the merged by user to the project creator' do
+        importer.execute
+
+        expect(project.merge_requests.first.metrics.merged_by_id).to eq(project.creator_id)
+        expect(project.merge_requests.first.metrics.latest_closed_by_id).to be_nil
+      end
+
+      context 'when merge state is closed' do
+        let(:hash) { super().merge(state: 'closed') }
+
+        it 'sets the closed by user to the project creator' do
+          importer.execute
+
+          expect(project.merge_requests.first.metrics.latest_closed_by_id).to eq(project.creator_id)
+          expect(project.merge_requests.first.metrics.merged_by_id).to be_nil
+        end
+      end
+    end
+
     describe 'head_commit_sha for merge request diff' do
       let(:diff) { project.merge_requests.first.merge_request_diffs.first }
       let(:min_length) { Commit::MIN_SHA_LENGTH }