diff --git a/erpnext/utilities/doctype/video/video.js b/erpnext/utilities/doctype/video/video.js
index c2994ec..9cb5a15 100644
--- a/erpnext/utilities/doctype/video/video.js
+++ b/erpnext/utilities/doctype/video/video.js
@@ -3,29 +3,15 @@
 
 frappe.ui.form.on('Video', {
 	refresh: function (frm) {
-		if (frm.doc.provider === "YouTube") {
-			frappe.db.get_single_value("Video Settings", "enable_youtube_tracking").then(value => {
-				if (value) {
-					frm.events.get_video_stats(frm);
-				} else {
-					frm.set_df_property('youtube_tracking_section', 'hidden', true);
-				}
-			});
-		}
-
+		frm.events.toggle_youtube_statistics_section(frm);
 		frm.add_custom_button("Watch Video", () => frappe.help.show_video(frm.doc.url, frm.doc.title));
 	},
 
-	get_video_stats: (frm) => {
-		const expression = '(?:youtube.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu.be/)([^"&?\\s]{11})';
-		var youtube_id = frm.doc.url.match(expression)[1];
-
-		frappe.call({
-			method: "erpnext.utilities.doctype.video.video.get_video_stats",
-			args: {
-				docname: frm.doc.name,
-				youtube_id: youtube_id
-			}
-		});
+	toggle_youtube_statistics_section: (frm) => {
+		if (frm.doc.provider === "YouTube") {
+			frappe.db.get_single_value("Video Settings", "enable_youtube_tracking").then( val => {
+				frm.toggle_display("youtube_tracking_section", val);
+			});
+		}
 	}
 });
diff --git a/erpnext/utilities/doctype/video/video.json b/erpnext/utilities/doctype/video/video.json
index a6c0f3f..11df56c 100644
--- a/erpnext/utilities/doctype/video/video.json
+++ b/erpnext/utilities/doctype/video/video.json
@@ -14,15 +14,15 @@
   "column_break_4",
   "publish_date",
   "duration",
-  "section_break_7",
-  "description",
-  "image",
   "youtube_tracking_section",
   "like_count",
   "view_count",
   "col_break",
   "dislike_count",
-  "comment_count"
+  "comment_count",
+  "section_break_7",
+  "description",
+  "image"
  ],
  "fields": [
   {
@@ -122,7 +122,7 @@
  ],
  "image_field": "image",
  "links": [],
- "modified": "2020-08-02 04:26:16.345569",
+ "modified": "2020-09-04 12:59:28.283622",
  "modified_by": "Administrator",
  "module": "Utilities",
  "name": "Video",
diff --git a/erpnext/utilities/doctype/video/video.py b/erpnext/utilities/doctype/video/video.py
index a2a4a7b..2299f95 100644
--- a/erpnext/utilities/doctype/video/video.py
+++ b/erpnext/utilities/doctype/video/video.py
@@ -5,49 +5,48 @@
 from __future__ import unicode_literals
 import frappe
 import json
+import re
 from frappe.model.document import Document
+from frappe import _
 from six import string_types
 from pyyoutube import Api
 
 class Video(Document):
-	pass
+	def validate(self):
+		self.set_youtube_statistics()
+
+	def set_youtube_statistics(self):
+		tracking_enabled = frappe.db.get_single_value("Video Settings", "enable_youtube_tracking")
+		if self.provider == "YouTube" and not tracking_enabled:
+			return
+
+		api_key = frappe.db.get_single_value("Video Settings", "api_key")
+		youtube_id = get_id_from_url(self.url)
+		api = Api(api_key=api_key)
+
+		try:
+			video = api.get_video_by_id(video_id=youtube_id)
+			video_stats = video.items[0].to_dict().get('statistics')
+
+			self.like_count = video_stats.get('likeCount')
+			self.view_count = video_stats.get('viewCount')
+			self.dislike_count = video_stats.get('dislikeCount')
+			self.comment_count = video_stats.get('commentCount')
+
+		except Exception:
+			title = "Failed to Update YouTube Statistics for Video: {0}".format(self.name)
+			frappe.log_error(title + "\n\n" +  frappe.get_traceback(), title=title)
 
 @frappe.whitelist()
-def get_video_stats(docname, youtube_id, update=True):
-	'''Returns/Sets video statistics
-
-	:param docname: Name of Video
-	:param youtube_id: Unique ID from URL
-	:param update: Updates db stats value if True, else returns statistics
+def get_id_from_url(url):
 	'''
-	if isinstance(update, string_types):
-		update = json.loads(update)
+		Returns video id from url
 
-	api_key = frappe.db.get_single_value("Video Settings", "api_key")
-	api = Api(api_key=api_key)
+		:param youtube url: String URL
+	'''
+	if not isinstance(url, string_types):
+		frappe.throw(_("URL can only be a string"), title=_("Invalid URL"))
 
-	try:
-		video = api.get_video_by_id(video_id=youtube_id)
-		video_stats = video.items[0].to_dict().get('statistics')
-		stats = {
-			'like_count' : video_stats.get('likeCount'),
-			'view_count' : video_stats.get('viewCount'),
-			'dislike_count' : video_stats.get('dislikeCount'),
-			'comment_count' : video_stats.get('commentCount')
-		}
-
-		if not update:
-			return stats
-
-		frappe.db.sql("""
-			UPDATE `tabVideo`
-			SET
-				like_count  = %(like_count)s,
-				view_count = %(view_count)s,
-				dislike_count = %(dislike_count)s,
-				comment_count = %(comment_count)s
-			WHERE name = {0}""".format(frappe.db.escape(docname)), stats) #nosec
-		frappe.db.commit()
-	except:
-		message = "Please make sure you are connected to the Internet"
-		frappe.log_error(message + "\n\n" + frappe.get_traceback(), "Failed to Update YouTube Statistics for Video: {0}".format(docname))
\ No newline at end of file
+	pattern = re.compile(r'[a-z\:\//\.]+(youtube|youtu)\.(com|be)/(watch\?v=|embed/|.+\?v=)?([^"&?\s]{11})?')
+	id = pattern.match(url)
+	return id.groups()[-1]
\ No newline at end of file
diff --git a/erpnext/utilities/doctype/video_settings/video_settings.py b/erpnext/utilities/doctype/video_settings/video_settings.py
index 7008066..36fb54f 100644
--- a/erpnext/utilities/doctype/video_settings/video_settings.py
+++ b/erpnext/utilities/doctype/video_settings/video_settings.py
@@ -3,8 +3,20 @@
 # For license information, please see license.txt
 
 from __future__ import unicode_literals
-# import frappe
+import frappe
+from frappe import _
 from frappe.model.document import Document
+from apiclient.discovery import build
 
 class VideoSettings(Document):
-	pass
+	def validate(self):
+		self.validate_youtube_api_key()
+
+	def validate_youtube_api_key(self):
+		if self.enable_youtube_tracking and self.api_key:
+			try:
+				build("youtube", "v3", developerKey=self.api_key)
+			except Exception:
+				title = _("Failed to Authenticate the API key.")
+				frappe.log_error(title + "\n\n" +  frappe.get_traceback(), title=title)
+				frappe.throw(title + " Please check the error logs.", title=_("Invalid Credentials"))
\ No newline at end of file
