diff --git a/benchmark/gitlab-extract.py b/benchmark/gitlab-extract.py
index 63a3a176ab5760028a80ea84933dabb59b26e6b0..93cb1c1c16823526f29ba5cca25b0584ad986ce8 100755
--- a/benchmark/gitlab-extract.py
+++ b/benchmark/gitlab-extract.py
@@ -4,7 +4,7 @@ import requests
 import parse_log
 
 def last(it):
-    r = first(it) # errors out if it is empty
+    r = None
     for i in it:
         r = i
     return r
@@ -12,7 +12,7 @@ def last(it):
 def first(it):
     for i in it:
         return i
-    raise Exception("The iterator is empty")
+    return None
 
 def req(path):
     url = '%s/api/v3/%s' % (args.server, path)
@@ -47,20 +47,29 @@ if args.commits is None:
 
 projects = req("projects")
 project = first(filter(lambda p: p['path_with_namespace'] == args.project, projects.json()))
+if project is None:
+    sys.stderr.write("Project not found.\n")
+    sys.exit(1)
 
 for commit in parse_log.parse_git_commits(args.commits):
     print("Fetching {}...".format(commit))
+    commit_data = req("/projects/{}/repository/commits/{}".format(project['id'], commit))
+    if commit_data.status_code != 200:
+        raise Exception("Commit not found?")
     builds = req("/projects/{}/repository/commits/{}/builds".format(project['id'], commit))
     if builds.status_code != 200:
-        continue
-    try:
-        build = first(sorted(builds.json(), key = lambda b: -int(b['id'])))
-    except Exception:
         # no build
         continue
+    build = first(sorted(builds.json(), key = lambda b: -int(b['id'])))
+    assert build is not None
+    if build['status'] == 'failed':
+        # build failed
+        continue
+    # now fetch the build times
     build_times = requests.get("{}/builds/{}/artifacts/file/build-time.txt".format(project['web_url'], build['id']))
     if build_times.status_code != 200:
-        continue
+        raise Exception("No artifact at build?")
     # Output in the log file format
     log_file.write("# {}\n".format(commit))
     log_file.write(build_times.text)
+    log_file.flush()
diff --git a/benchmark/parse_log.py b/benchmark/parse_log.py
index 82da2030ae242802c509b5cbc98150a92756b7fa..46a9ec82c3e31f7aa774f00c401c044561f159aa 100644
--- a/benchmark/parse_log.py
+++ b/benchmark/parse_log.py
@@ -35,7 +35,7 @@ def parse(file, parse_times = True):
         # nothing else we know about
         raise Exception("Unexpected line: {}".format(line))
     # end of file. previous commit, if any, is done now.
-    if times is not None:
+    if commit is not None:
         yield Result(commit, times)
 
 def parse_git_commits(commits):