diff --git a/erpnext/hr/doctype/upload_attendance/upload_attendance.js b/erpnext/hr/doctype/upload_attendance/upload_attendance.js
index 277c060..e9c2031 100644
--- a/erpnext/hr/doctype/upload_attendance/upload_attendance.js
+++ b/erpnext/hr/doctype/upload_attendance/upload_attendance.js
@@ -14,6 +14,7 @@
 	refresh: function() {
 		this.frm.disable_save();
 		this.show_upload();
+		this.setup_import_progress();
 	},
 
 	get_template:function() {
@@ -33,46 +34,37 @@
 		var $wrapper = $(cur_frm.fields_dict.upload_html.wrapper).empty();
 		new frappe.ui.FileUploader({
 			wrapper: $wrapper,
-			method: 'erpnext.hr.doctype.upload_attendance.upload_attendance.upload',
-			on_success(file_doc, r) {
-				var $log_wrapper = $(cur_frm.fields_dict.import_log.wrapper).empty();
-
-				if(!r.messages) r.messages = [];
-				// replace links if error has occured
-				if(r.exc || r.error) {
-					r.messages = $.map(r.message.messages, function(v) {
-						var msg = v.replace("Inserted", "Valid")
-							.replace("Updated", "Valid").split("<");
-						if (msg.length > 1) {
-							v = msg[0] + (msg[1].split(">").slice(-1)[0]);
-						} else {
-							v = msg[0];
-						}
-						return v;
-					});
-
-					r.messages = ["<h4 style='color:red'>"+__("Import Failed!")+"</h4>"]
-						.concat(r.messages);
-				} else {
-					r.messages = ["<h4 style='color:green'>"+__("Import Successful!")+"</h4>"]
-						.concat(r.message.messages);
-				}
-
-				$.each(r.messages, function(i, v) {
-					var $p = $('<p>').html(v).appendTo($log_wrapper);
-					if(v.substr(0,5)=='Error') {
-						$p.css('color', 'red');
-					} else if(v.substr(0,8)=='Inserted') {
-						$p.css('color', 'green');
-					} else if(v.substr(0,7)=='Updated') {
-						$p.css('color', 'green');
-					} else if(v.substr(0,5)=='Valid') {
-						$p.css('color', '#777');
-					}
-				});
-			}
+			method: 'erpnext.hr.doctype.upload_attendance.upload_attendance.upload'
 		});
 	},
+
+	setup_import_progress() {
+		var $log_wrapper = $(this.frm.fields_dict.import_log.wrapper).empty();
+
+		frappe.realtime.on('import_attendance', (data) => {
+			console.log(data)
+			if (data.progress) {
+				this.frm.dashboard.show_progress('Import Attendance', data.progress / data.total * 100,
+					__('Importing {0} of {1}', [data.progress, data.total]));
+				if (data.progress === data.total) {
+					this.frm.dashboard.hide_progress('Import Attendance');
+				}
+			} else if (data.error) {
+				this.frm.dashboard.hide();
+				let messages = [`<th>${__('Error in some rows')}</th>`].concat(data.messages
+					.filter(message => message.includes('Error'))
+					.map(message => `<tr><td>${message}</td></tr>`))
+					.join('');
+				$log_wrapper.append('<table class="table table-bordered">' + messages);
+			} else if (data.messages) {
+				this.frm.dashboard.hide();
+				let messages = [`<th>${__('Import Successful')}</th>`].concat(data.messages
+					.map(message => `<tr><td>${message}</td></tr>`))
+					.join('');
+				$log_wrapper.append('<table class="table table-bordered">' + messages);
+			}
+		});
+	}
 })
 
 cur_frm.cscript = new erpnext.hr.AttendanceControlPanel({frm: cur_frm});
diff --git a/erpnext/hr/doctype/upload_attendance/upload_attendance.py b/erpnext/hr/doctype/upload_attendance/upload_attendance.py
index 6a4ea6a..f452155 100644
--- a/erpnext/hr/doctype/upload_attendance/upload_attendance.py
+++ b/erpnext/hr/doctype/upload_attendance/upload_attendance.py
@@ -117,22 +117,25 @@
 		raise frappe.PermissionError
 
 	from frappe.utils.csvutils import read_csv_content
+	rows = read_csv_content(frappe.local.uploaded_file)
+	if not rows:
+		frappe.throw(_("Please select a csv file"))
+	frappe.enqueue(import_attendances, rows=rows, now=True if len(rows) < 200 else False)
+
+def import_attendances(rows):
 	from frappe.modules import scrub
 
-	rows = read_csv_content(frappe.local.uploaded_file)
 	rows = list(filter(lambda x: x and any(x), rows))
-	if not rows:
-		msg = [_("Please select a csv file")]
-		return {"messages": msg, "error": msg}
 	columns = [scrub(f) for f in rows[4]]
 	columns[0] = "name"
 	columns[3] = "attendance_date"
+	rows = rows[5:]
 	ret = []
 	error = False
 
 	from frappe.utils.csvutils import check_record, import_doc
 
-	for i, row in enumerate(rows[5:]):
+	for i, row in enumerate(rows):
 		if not row: continue
 		row_idx = i + 5
 		d = frappe._dict(zip(columns, row))
@@ -144,6 +147,10 @@
 		try:
 			check_record(d)
 			ret.append(import_doc(d, "Attendance", 1, row_idx, submit=True))
+			frappe.publish_realtime('import_attendance', dict(
+				progress=i,
+				total=len(rows)
+			))
 		except AttributeError:
 			pass
 		except Exception as e:
@@ -156,4 +163,8 @@
 		frappe.db.rollback()
 	else:
 		frappe.db.commit()
-	return {"messages": ret, "error": error}
+
+	frappe.publish_realtime('import_attendance', dict(
+		messages=ret,
+		error=error
+	))
