diff --git a/lib/excelsior/import.rb b/lib/excelsior/import.rb
index c00202ad7f224aa0ea8637f1e8444f8448712e71..cd81e3e479b4847c68ef8fdbcbd9f1304af5b39e 100644
--- a/lib/excelsior/import.rb
+++ b/lib/excelsior/import.rb
@@ -30,19 +30,15 @@ module Excelsior
       @rows = @sheet.rows
 
       @result = Result.new(@rows.length)
-
-      validate!
     end
 
     def run(&block)
-      return unless valid?
+      check_columns!
 
-      if self.class.use_transaction
-        model_class.transaction do
-          insert_rows(&block)
+      return if result.failed?
 
-          raise ActiveRecord::Rollback if report.failed.positive?
-        end
+      if self.class.use_transaction
+        run_with_transaction(&block)
       else
         insert_rows(&block)
       end
@@ -50,20 +46,24 @@ module Excelsior
       result
     end
 
-    def validate!
+    private
+
+    def check_columns!
       fields.to_a.each do |f|
         errors[:missing_column] << { missing: f[:header] } unless @columns.include?(f[:header])
       end
     end
 
-    def valid?
-      result.status != Result::Statuses::FAILED
+    def model_class
+      self.class.name.gsub('Import', '').constantize
     end
 
-    private
+    def run_with_transaction(&block)
+      model_class.transaction do
+        insert_rows(&block)
 
-    def model_class
-      self.class.name.gsub('Import', '').constantize
+        raise ActiveRecord::Rollback if report.failed.positive?
+      end
     end
 
     def add_model_errors(record, index)
diff --git a/lib/excelsior/result.rb b/lib/excelsior/result.rb
index 441d2eba6d5affe1dd2e0156d9a324813673291f..c0ff721ec8f61c1189b2b463e6b6564566aa1407 100644
--- a/lib/excelsior/result.rb
+++ b/lib/excelsior/result.rb
@@ -27,5 +27,9 @@ module Excelsior
         Statuses::PENDING
       end
     end
+
+    def failed?
+      status == Result::Statuses::FAILED
+    end
   end
 end
diff --git a/test/excelsior_test.rb b/test/excelsior_test.rb
index 63bf210e49eaf8112a71614f790b5dc3767abe12..c9e3d6f62feba2de53be9069de69ca7377922df1 100644
--- a/test/excelsior_test.rb
+++ b/test/excelsior_test.rb
@@ -167,7 +167,7 @@ describe Excelsior do
 
   describe '#errors' do
     it 'returns an error when a column is missing in the excel' do
-      import = UserImport.new('test/files/missing-column.xlsx')
+      import = UserImport.new('test/files/missing-column.xlsx').tap(&:run)
       assert import.errors[:missing_column].any?
     end