diff --git a/save_jenkins_console/save_jenkins_console/jenkins_api.py b/save_jenkins_console/save_jenkins_console/jenkins_api.py
index c20c5a0..d2f21c5 100644
--- a/save_jenkins_console/save_jenkins_console/jenkins_api.py
+++ b/save_jenkins_console/save_jenkins_console/jenkins_api.py
@@ -1,4 +1,5 @@
 import config
+import os
 import requests
 import time
 import utils
@@ -38,7 +39,6 @@
         self.job = self.server.get_job(pipeline_job_name)
         self.pipeline_job_name = pipeline_job_name
 
-
     def get_all_jobs_ids(self):
         """
         Gets all the builds ID's for the particular job name.
@@ -60,6 +60,33 @@
         except requests.exceptions.HTTPError:
             logger.warning('404 Client Error: Not Found for url')
 
+    def manage_build_artifacts(self, job_build, build, build_date):
+        build_artifacts = job_build.get_artifacts()
+
+        for build_artfact in build_artifacts:
+            if build_artfact:
+                patch_to_artifact_file = utils.generate_patch_to_artifact_file(
+                    logs_directory=LOGS_DIRECTORY,
+                    job_name=self.pipeline_job_name)
+                saved_artifact_file_patch = build_artfact.save_to_dir(
+                    patch_to_artifact_file)
+                # rename saved file
+
+                new_artifact_file_patch = utils.generate_artifact_file_patch(
+                    saved_artifact_file_patch=saved_artifact_file_patch,
+                    patch_to_artifact_file=patch_to_artifact_file,
+                    pipeline_job_name=self.pipeline_job_name,
+                    build_id=build,
+                    build_date=build_date)
+                if not utils.check_if_file_exists(patch_to_file=new_artifact_file_patch):
+                    new_artifact_filename = utils.rename_artifact_file(
+                        old_artifact_file_patch=saved_artifact_file_patch,
+                        new_artifact_file_patch=new_artifact_file_patch)
+                    logger.info(
+                        f'new_artifact_filename: {new_artifact_filename}')
+
+                if utils.check_if_file_exists(patch_to_file=saved_artifact_file_patch):
+                    os.remove(saved_artifact_file_patch)
 
     def get_build_artifacts(self, jobs_ids_list):
         """
@@ -93,10 +120,15 @@
                             len(jobs_ids_list)))
                         build_counter += 1
 
-                        # When job finished
+                        # When job is finished
                         job_timestamp = job_build.get_timestamp().timestamp()
                         build_date = utils.get_date_from_timestamp(job_timestamp)
 
+                        # save build artifacts
+                        self.manage_build_artifacts(job_build=job_build,
+                                                    build=build,
+                                                    build_date=build_date)
+
                         # Save data th the file
                         utils.save_job_console_to_file(
                             logs_directory=LOGS_DIRECTORY,
diff --git a/save_jenkins_console/save_jenkins_console/utils.py b/save_jenkins_console/save_jenkins_console/utils.py
index 163a46c..1f3ac90 100644
--- a/save_jenkins_console/save_jenkins_console/utils.py
+++ b/save_jenkins_console/save_jenkins_console/utils.py
@@ -174,16 +174,21 @@
     save_to_file(filename=filename, data_to_write=data_to_write)
 
 
-def archive_files(files_to_archive, patch_to_archive):
-    """
-    Archives files
-
-    :param files_to_archive: list
-    :param patch_to_archive: string
-
-    :return: full patch + name to archive
-    """
-
-    pass
+def generate_patch_to_artifact_file(logs_directory, job_name):
+    return '{0}{1}/'.format(logs_directory, job_name)
 
 
+def generate_artifact_file_patch(saved_artifact_file_patch,
+                                 patch_to_artifact_file,
+                                 pipeline_job_name,
+                                 build_id,
+                                 build_date):
+    artifact_extention = saved_artifact_file_patch.split('.')[-1]
+    filename = f'{str(build_id)}_{build_date}_{pipeline_job_name}.{artifact_extention}'
+    full_patch = patch_to_artifact_file + filename
+    return full_patch
+
+
+def rename_artifact_file(old_artifact_file_patch, new_artifact_file_patch):
+    os.rename(old_artifact_file_patch, new_artifact_file_patch)
+    return new_artifact_file_patch
