diff --git a/lib/tasks/migrations/migrations.rake b/lib/tasks/migrations/migrations.rake
index f54c37f48cc09606d841953e6df0aa2df608229a..17ba57872af53b53f5139878d7765fa3673d21a0 100644
--- a/lib/tasks/migrations/migrations.rake
+++ b/lib/tasks/migrations/migrations.rake
@@ -16,10 +16,12 @@ namespace :migrations do
       case response
       when Net::HTTPCreated
         puts green "Succesfully migrated Role:"
+        puts cyan "  ID: #{r.id}"
         puts cyan "  Name: #{r.name}"
       else
         puts red "Unable to migrate Role:"
-        puts red "  Name: #{r.name}"
+        puts yellow "  ID: #{r.id}"
+        puts yellow "  Name: #{r.name}"
         has_encountred_issue = 1 # At least one of the migrations failed.
       end
     end
@@ -30,6 +32,38 @@ namespace :migrations do
     exit has_encountred_issue
   end
 
+  task :users, [] => :environment do |_task, _args|
+    has_encountred_issue = 0
+
+    # TODO: Optimize this by running in batches.
+    User.select(:id, :uid, :name, :email, :social_uid, :language, :role_id).each do |u|
+      params = { user: { name: u.name, email: u.email, external_id: u.social_uid, language: u.language, role: u.role.name } }
+      response = Net::HTTP.post(uri('users'), payload(params), COMMON[:headers])
+
+      case response
+      when Net::HTTPCreated
+        puts green "Succesfully migrated User:"
+        puts cyan "  UID: #{u.uid}"
+        puts cyan "  Name: #{params[:user][:name]}"
+      else
+        puts red "Unable to migrate User:"
+        puts yellow "  UID: #{u.uid}"
+        puts yellow "  Name: #{params[:user][:name]}"
+        has_encountred_issue = 1 # At least one of the migrations failed.
+      end
+    end
+
+    puts
+    puts green "Users migration completed."
+
+    unless has_encountred_issue.zero?
+      puts yellow "In case of an error please retry the process to resolve."
+      puts yellow "If you have not migrated your roles, kindly run 'rake migrations:roles' first and then retry."
+    end
+
+    exit has_encountred_issue
+  end
+
   private
 
   def encrypt_params(params)
@@ -57,8 +91,7 @@ namespace :migrations do
   end
 
   def payload(params)
-    encrypted_params = { "encrypted_params" => encrypt_params(params) }
-    res = { "v2" => encrypted_params }
+    res = { "v2" => { "encrypted_params" => encrypt_params(params) } }
     res.to_json
   end
 end