diff --git a/app/models/user.rb b/app/models/user.rb
index 791eb1b574fe29c31a0f2e203e0c4fdf511dc54e..f251df85c9c41310bafeae16a4a2454c2dec5a42 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -2104,7 +2104,7 @@ def max_member_access_for_group(group_id)
   end
 
   def terms_accepted?
-    return true if project_bot?
+    return true if project_bot? || service_account?
 
     accepted_term_id.present?
   end
diff --git a/spec/features/users/terms_spec.rb b/spec/features/users/terms_spec.rb
index 5c61843e55870bc8c0da96113e61c74df28c7f0e..cf62ccaf999e20560ae7937d7c837af619b7fa3f 100644
--- a/spec/features/users/terms_spec.rb
+++ b/spec/features/users/terms_spec.rb
@@ -41,6 +41,21 @@
     end
   end
 
+  context 'when user is a service account' do
+    let(:service_account) { create(:user, :service_account) }
+
+    before do
+      enforce_terms
+    end
+
+    it 'auto accepts the terms' do
+      visit terms_path
+
+      expect(page).not_to have_content('Accept terms')
+      expect(service_account.terms_accepted?).to be(true)
+    end
+  end
+
   context 'when signed in' do
     let(:user) { create(:user) }