diff --git a/buildkite/README.md b/buildkite/README.md
index a6a8418..b08a3ec 100644
--- a/buildkite/README.md
+++ b/buildkite/README.md
@@ -382,3 +382,26 @@
     build_targets:
     - "..."
 ```
+
+### Exporting JSON profiles of builds and tests
+
+[Bazel's JSON Profile](https://docs.bazel.build/versions/master/skylark/performance.html#json-profile) is a useful tool to investigate the performance of Bazel. You can configure your pipeline to export these JSON profiles on builds and tests using the `include_json_profile` option.
+
+Example usage:
+
+```yaml
+---
+platforms:
+  ubuntu1604:
+    include_json_profile:
+    - build
+    - test
+    build_targets:
+    - "..."
+    test_targets:
+    - "..."
+```
+
+When `include_json_profile` is specified with `build`, the builds will be carried out with the extra JSON profile flags. Similarly for `test`. Other values will be ignored.
+
+The exported JSON profiles are available as artifacts after each run.
diff --git a/buildkite/bazelci.py b/buildkite/bazelci.py
index f7d3ace..2383011 100755
--- a/buildkite/bazelci.py
+++ b/buildkite/bazelci.py
@@ -764,21 +764,41 @@
         if not build_targets and not test_targets:
             raise BuildkiteException("There are neither build nor test targets")
 
+        include_json_profile = task_config.get("include_json_profile", [])
+
         if build_targets:
-            execute_bazel_build(
-                bazel_version,
-                bazel_binary,
-                platform,
-                task_config.get("build_flags", []),
-                build_targets,
-                None,
-                incompatible_flags,
-            )
-            if save_but:
-                upload_bazel_binary(platform)
+            json_profile_flags = []
+            include_json_profile_build = 'build' in include_json_profile
+            if include_json_profile_build:
+                json_profile_out_build = os.path.join(tmpdir, "build.profile")
+                json_profile_flags = get_json_profile_flags(
+                    json_profile_out_build)
+
+            try:
+                execute_bazel_build(
+                    bazel_version,
+                    bazel_binary,
+                    platform,
+                    task_config.get("build_flags", []) + json_profile_flags,
+                    build_targets,
+                    None,
+                    incompatible_flags,
+                )
+                if save_but:
+                    upload_bazel_binary(platform)
+            finally:
+                if include_json_profile_build:
+                  upload_json_profile(json_profile_out_build, tmpdir)
 
         if test_targets:
-            test_flags = task_config.get("test_flags", [])
+            json_profile_flags = []
+            include_json_profile_test = 'test' in include_json_profile
+            if include_json_profile_test:
+                json_profile_out_test = os.path.join(tmpdir, "test.profile")
+                json_profile_flags = get_json_profile_flags(
+                    json_profile_out_test)
+
+            test_flags = task_config.get("test_flags", []) + json_profile_path
             if test_env_vars:
                 test_flags += ["--test_env={}".format(v) for v in test_env_vars]
 
@@ -823,6 +843,8 @@
                         )
             finally:
                 upload_test_logs(test_bep_file, tmpdir)
+                if include_json_profile_test:
+                  upload_json_profile(json_profile_out_test, tmpdir)
     finally:
         if sc_process:
             sc_process.terminate()
@@ -1379,6 +1401,15 @@
         handle_bazel_failure(e, "test")
 
 
+def get_json_profile_flags(out_file):
+    return [
+        "--experimental_generate_json_trace_profile",
+        "--experimental_profile_cpu_usage",
+        "--experimental_json_trace_compression",
+        "--profile={}".format(out_file)
+    ]
+
+
 def upload_test_logs(bep_file, tmpdir):
     if not os.path.exists(bep_file):
         return
@@ -1395,6 +1426,15 @@
             os.chdir(cwd)
 
 
+def upload_json_profile(json_profile_path, tmpdir):
+    if not os.path.exists(json_profile_path):
+        return
+    print_collapsed_group(":gcloud: Uploading JSON Profile")
+    execute_command(
+        ["buildkite-agent", "artifact", "upload", json_profile_path],
+        cwd=tmpdir)
+
+
 def test_logs_to_upload(bep_file, tmpdir):
     failed = test_logs_for_status(bep_file, status="FAILED")
     timed_out = test_logs_for_status(bep_file, status="TIMEOUT")
@@ -1474,9 +1514,9 @@
     return process.stdout
 
 
-def execute_command(args, shell=False, fail_if_nonzero=True):
+def execute_command(args, shell=False, fail_if_nonzero=True, cwd=None):
     eprint(" ".join(args))
-    return subprocess.run(args, shell=shell, check=fail_if_nonzero, env=os.environ).returncode
+    return subprocess.run(args, shell=shell, check=fail_if_nonzero, env=os.environ, cwd=cwd).returncode
 
 
 def execute_command_background(args):
