diff --git a/erpnext/accounts/doctype/ledger_merge/ledger_merge.py b/erpnext/accounts/doctype/ledger_merge/ledger_merge.py
index bf12ff5..48ac1e7 100644
--- a/erpnext/accounts/doctype/ledger_merge/ledger_merge.py
+++ b/erpnext/accounts/doctype/ledger_merge/ledger_merge.py
@@ -4,5 +4,66 @@
 import frappe
 from frappe.model.document import Document
 
+from erpnext.accounts.doctype.account.account import merge_account
+
+
 class LedgerMerge(Document):
-	pass
+	def start_merge(self):
+		from frappe.core.page.background_jobs.background_jobs import get_info
+		from frappe.utils.background_jobs import enqueue
+		from frappe.utils.scheduler import is_scheduler_inactive
+
+		if is_scheduler_inactive() and not frappe.flags.in_test:
+			frappe.throw(
+				_("Scheduler is inactive. Cannot merge accounts."), title=_("Scheduler Inactive")
+			)
+
+		enqueued_jobs = [d.get("job_name") for d in get_info()]
+
+		if self.name not in enqueued_jobs:
+			enqueue(
+				start_merge,
+				queue="default",
+				timeout=6000,
+				event="ledger_merge",
+				job_name=self.name,
+				docname=self.name,
+				now=frappe.conf.developer_mode or frappe.flags.in_test,
+			)
+			return True
+
+		return False
+
+@frappe.whitelist()
+def form_start_merge(docname):
+	return frappe.get_doc("Ledger Merge", docname).start_merge()
+
+def start_merge(docname):
+	ledger_merge = frappe.get_doc("Ledger Merge", docname)
+	successful_merges = 0
+	total = len(ledger_merge.merge_accounts)
+	for row in ledger_merge.merge_accounts:
+		try:
+			merge_account(row.account, ledger_merge.account, 0, ledger_merge.root_type, ledger_merge.company)
+			row.db_set('merged', 1)
+			frappe.db.commit()
+			successful_merges += 1
+			frappe.publish_realtime("ledger_merge_progress", {
+					"ledger_merge": ledger_merge.name,
+					"current": successful_merges,
+					"total": total
+				}
+			)
+		except Exception:
+			frappe.db.rollback()
+			ledger_merge.db_set("status", "Error")
+			frappe.log_error(title=ledger_merge.name)
+		finally:
+			if successful_merges == total:
+				ledger_merge.db_set('status', 'Success')
+			elif successful_merges > 0:
+				ledger_merge.db_set('status', 'Partial Success')
+			else:
+				ledger_merge.db_set('status', 'Error')
+
+	frappe.publish_realtime("ledger_merge_refresh", {"ledger_merge": ledger_merge.name})
