diff --git a/make_report.py b/make_report.py
index 8a8a0d0..96bb622 100644
--- a/make_report.py
+++ b/make_report.py
@@ -2,7 +2,9 @@
 import argparse
 import json
 
-from config import DEFAULT_FILE_PATH, PASSWORD, EMAIL, COL_COUNT, WORK_SHEET, DOCUMENT_ID
+from config import DEFAULT_FILE_PATH, PASSWORD, EMAIL, \
+    WORK_SHEET, DOCUMENT_ID, ROW_COUNT
+from gspread.exceptions import WorksheetNotFound
 
 
 def load_data(file_name):
@@ -11,21 +13,53 @@
         return json.loads(data)
 
 
+#getting worksheet from sheet or create it with specified column names.
+def get_work_sheet(sheet, name, column_names):
+    try:
+        work_sheet = sheet.worksheet(name)
+    except WorksheetNotFound:
+        work_sheet = sheet.add_worksheet(title=name, rows=ROW_COUNT,
+                                         cols=len(column_names))
+
+        for i in range(1, len(column_names) + 1):
+            work_sheet.update_cell(1, i, column_names[i - 1])
+
+    return work_sheet
+
+
+def get_row_number(work_sheet):
+    num = 2
+
+    while num < work_sheet.row_count and work_sheet.cell(num, 1).value != "":
+        num += 1
+
+    if num == work_sheet.row_count:
+        work_sheet.append_row(["" for x in range(work_sheet.col_count)])
+
+    return num
+
+
+def append_row(work_sheet, row):
+    row_number = get_row_number(work_sheet)
+
+    i = 1
+    for k in row.keys():
+        work_sheet.update_cell(row_number, i, row[k])
+        i += 1
+
+
 def make_report(data):
     gc = gspread.login(EMAIL, PASSWORD)
     sh = gc.open_by_key(DOCUMENT_ID)
-    worksheet = sh.add_worksheet(title=WORK_SHEET, rows=len(data.keys()), cols=COL_COUNT)
 
-    i = 1
-    for k in data.keys():
-        worksheet.update_cell(i, 1, k)
-        worksheet.update_cell(i, 2, data[k])
-        i += 1
+    work_sheet = get_work_sheet(sh, WORK_SHEET, data.keys())
+    append_row(work_sheet, data)
 
 
 if __name__ == '__main__':
     parser = argparse.ArgumentParser()
-    parser.add_argument('-n', '--name', help='data file path', default=DEFAULT_FILE_PATH)
+    parser.add_argument('-n', '--name', help='data file path',
+                        default=DEFAULT_FILE_PATH)
     results = parser.parse_args()
     data = load_data(results.name)
     make_report(data)
