diff --git a/monitor/bot-status.py b/monitor/bot-status.py
index b7d265d..e38bc59 100755
--- a/monitor/bot-status.py
+++ b/monitor/bot-status.py
@@ -20,6 +20,8 @@
 # to download multiple files.
 import requests
 
+from buildkite_status import get_buildkite_bots_status
+
 # The GIT revision length used on 'Commits' error display.
 GIT_SHORT_LEN=7
 
@@ -98,14 +100,18 @@
     if build['complete']:
       time_since = (int(datetime.now().timestamp()) - int(build['complete_at']))
       duration = int(build['complete_at']) - int(build['started_at'])
+      agent_url = "{}/#/{}/{}".format(base_url, builder_url, build['builderid'])
+
       status = {
-        'builderid': build['builderid'],
+        'builder_url': agent_url,
         'number': build['number'],
+        'build_url':  "{}/builds/{}".format(agent_url, build['number']),
         'state': build['state_string'],
         'time_since': timedelta(seconds=time_since),
         'duration': timedelta(seconds=duration),
         'fail': build['state_string'] != 'build successful',
       }
+
       if status['fail']:
         buildid = build['buildid']
         prev_buildid = next(reversed_builds, None)['buildid']
@@ -120,11 +126,14 @@
 
 # Get status for all bots named in the config
 # Return a dictionary of (base_url, bot name) -> status info
-def get_bots_status(config):
+def get_buildbot_bots_status(config):
   session = requests.Session()
   bot_cache = {}
 
   for server in filter(not_ignored, config):
+    if server['name'] == "Buildkite":
+        continue
+
     base_url = server['base_url']
     logging.debug('Parsing server {}...'.format(server['name']))
     for builder in server['builders']:
@@ -172,10 +181,15 @@
         except KeyError:
           temp.write("  <td>{} is offline!</td>\n</tr>\n".format(bot['name']))
           continue
+        else:
+            if not status.get('valid', True):
+                temp.write("  <td>Could not read status for {}!</td>\n</tr>\n".format(bot['name']))
+                continue
 
         found_failure |= status['fail']
-        url = "{}/#/{}/{}".format(base_url, builder_url, status['builderid'])
-        temp.write("  <td><a href='{}'>{}</a></td>\n".format(url, bot['name']))
+
+        temp.write("  <td><a href='{}'>{}</a></td>\n".format(
+            status['builder_url'], bot['name']))
         temp.write("  <td><font color='{}'>{}</font></td>\n"
                    .format('red' if status['fail'] else 'green',
                            'FAIL' if status['fail'] else 'PASS'))
@@ -189,8 +203,8 @@
         else:
           temp.write(empty_cell)
         if 'number' in status:
-          build_url = "{}/builds/{}".format(url, status['number'])
-          temp.write("  <td><a href='{}'>{}</a></td>\n".format(build_url, status['number']))
+          temp.write("  <td><a href='{}'>{}</a></td>\n".format(
+              status['build_url'], status['number']))
         else:
           temp.write(empty_cell)
         if 'changes' in status:
@@ -236,4 +250,6 @@
     print("error: failed to read {} config file: {}".format(args.config_file, e))
     sys.exit(os.EX_CONFIG)
 
-  write_bot_status(config, args.output_file, get_bots_status(config))
+  status = get_buildbot_bots_status(config)
+  status.update(get_buildkite_bots_status(config))
+  write_bot_status(config, args.output_file, status)
