diff --git a/tko/db.py b/tko/db.py
index 3a7f087..8fa4976 100644
--- a/tko/db.py
+++ b/tko/db.py
@@ -440,20 +440,11 @@
         @param job: The job object.
         @param commit: If commit the transaction .
         """
-        data = {'tag':tag,
-                'label': job.label,
-                'username': job.user,
-                'machine_idx': job.machine_idx,
-                'queued_time': job.queued_time,
-                'started_time': job.started_time,
-                'finished_time': job.finished_time,
+        data = self._get_common_job_data(tag, job)
+        data.update({
                 'afe_job_id': job.afe_job_id,
                 'afe_parent_job_id': job.afe_parent_job_id,
-                'build': job.build,
-                'build_version': job.build_version,
-                'board': job.board,
-                'suite': job.suite}
-
+        })
         if job.index is not None:
             self.update('tko_jobs', data, {'job_idx': job.index}, commit=commit)
         else:
@@ -461,19 +452,46 @@
             job.index = self.get_last_autonumber_value()
 
 
-    def insert_or_update_task_reference(self, job, commit=None):
+    def _get_common_job_data(self, tag, job):
+        """Construct a dictionary with the common data to insert in job/task."""
+        return {
+                'tag':tag,
+                'label': job.label,
+                'username': job.user,
+                'machine_idx': job.machine_idx,
+                'queued_time': job.queued_time,
+                'started_time': job.started_time,
+                'finished_time': job.finished_time,
+                'build': job.build,
+                'build_version': job.build_version,
+                'board': job.board,
+                'suite': job.suite,
+        }
+
+
+    def insert_or_update_task_reference(self, job, reference_type, commit=None):
         """Insert an entry in the tko_task_references table.
 
         The job should already have been inserted in tko_jobs.
         @param job: tko.models.job object.
+        @param reference_type: The type of reference to insert.
+                One of: {'afe', 'skylab'}
         @param commit: Whether to commit this transaction.
         """
+        assert reference_type in {'afe', 'skylab'}
+        if reference_type == 'afe':
+            task_id = job.afe_job_id
+            parent_task_id = job.afe_parent_job_id
+        else:
+            task_id = job.skylab_task_id
+            parent_task_id = job.skylab_parent_task_id
         data = {
-                'reference_type': 'afe',
+                'reference_type': reference_type,
                 'tko_job_idx': job.index,
-                'task_id': job.afe_job_id,
-                'parent_task_id': job.afe_parent_job_id,
+                'task_id': task_id,
+                'parent_task_id': parent_task_id,
         }
+
         task_reference_id = self._lookup_task_reference(job)
         if task_reference_id is not None:
             self.update('tko_task_references',
@@ -486,7 +504,6 @@
             job.task_reference_id = self.get_last_autonumber_value()
 
 
-
     def update_job_keyvals(self, job, commit=None):
         """Updates the job key values.
 
diff --git a/tko/parse.py b/tko/parse.py
index 66db548..9b61dc6 100755
--- a/tko/parse.py
+++ b/tko/parse.py
@@ -346,7 +346,9 @@
             _delete_tests_from_db(db, unmatched_tests)
 
     job.afe_job_id = tko_utils.get_afe_job_id(jobname)
+    job.skylab_task_id = tko_utils.get_skylab_task_id(jobname)
     job.afe_parent_job_id = str(job_keyval.get(constants.PARENT_JOB_ID))
+    job.skylab_parent_task_id = str(job_keyval.get(constants.PARENT_JOB_ID))
     job.build = None
     job.board = None
     job.build_version = None
@@ -520,7 +522,10 @@
     """
     db.insert_or_update_machine(job)
     db.insert_job(jobname, job)
-    db.insert_or_update_task_reference(job)
+    db.insert_or_update_task_reference(
+            job,
+            'skylab' if tko_utils.is_skylab_task(jobname) else 'afe',
+    )
     db.update_job_keyvals(job)
     for test in job.tests:
         db.insert_test(job, test)
diff --git a/tko/utils.py b/tko/utils.py
index 169f58e..40ecf7b 100644
--- a/tko/utils.py
+++ b/tko/utils.py
@@ -61,9 +61,7 @@
 def get_afe_job_id(tag):
     """ Given a tag return the afe_job_id (if any).
 
-    Extract job id and hostname if tag is in the format of
-    JOB_ID-OWNER/HOSTNAME. JOB_ID and HOSTNAME must both be present
-    to be considered as a match.
+    Tag is in the format of JOB_ID-OWNER/HOSTNAME
 
     @param tag: afe_job_id and hostname are extracted from this tag.
                 e.g. "1234-chromeos-test/chromeos1-row1-host1"
@@ -71,3 +69,20 @@
     """
     match = re.search('^([0-9]+)-.+/(.+)$', tag)
     return match.group(1) if match else None
+
+
+def get_skylab_task_id(tag):
+    """ Given a tag return the skylab_task's id (if any).
+
+    Tag is in the format of swarming-TASK_ID/HOSTNAME
+
+    @param tag: afe_job_id and hostname are extracted from this tag.
+                e.g. "1234-chromeos-test/chromeos1-row1-host1"
+    @return: the afe_job_id as a string if regex matches, else return ''
+    """
+    match = re.search('^swarming-([A-Fa-f0-9]+)/(.+)$', tag)
+    return match.group(1) if match else None
+
+
+def is_skylab_task(tag):
+    return get_skylab_task_id(tag) is not None
