diff --git a/buildbucket.py b/buildbucket.py
new file mode 100755
index 0000000..7f8233b
--- /dev/null
+++ b/buildbucket.py
@@ -0,0 +1,103 @@
+#!/usr/bin/env python
+# Copyright (c) 2015 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Tool for interacting with Buildbucket.
+
+Usage:
+  $ depot-tools-auth login https://cr-buildbucket.appspot.com
+  $ buildbucket.py \
+    put \
+    --bucket master.tryserver.chromium.linux \
+    --builder my-builder \
+
+  Puts a build into buildbucket for my-builder on tryserver.chromium.linux.
+"""
+
+import argparse
+import json
+import urlparse
+import os
+import sys
+
+from third_party import httplib2
+
+import auth
+
+
+BUILDBUCKET_URL = 'https://cr-buildbucket.appspot.com'
+PUT_BUILD_URL = urlparse.urljoin(
+  BUILDBUCKET_URL,
+  '_ah/api/buildbucket/v1/builds',
+)
+
+
+def main(argv):
+  parser = argparse.ArgumentParser()
+  parser.add_argument(
+    '-v',
+    '--verbose',
+    action='store_true',
+  )
+  subparsers = parser.add_subparsers(dest='command')
+  put_parser = subparsers.add_parser('put')
+  put_parser.add_argument(
+    '--bucket',
+    help=(
+      'The bucket to schedule the build on. Typically the master name, e.g.'
+      ' master.tryserver.chromium.linux.'
+    ),
+    required=True,
+  )
+  put_parser.add_argument(
+    '-n',
+    '--builder-name',
+    help='The builder to schedule the build on.',
+    required=True,
+  )
+  put_parser.add_argument(
+    '-p',
+    '--properties',
+    help='A file to load a JSON dict of properties from.',
+  )
+  args = parser.parse_args()
+  # TODO(smut): When more commands are implemented, refactor this.
+  assert args.command == 'put'
+
+  properties = {}
+  if args.properties:
+    try:
+      with open(args.properties) as fp:
+        properties.update(json.load(fp))
+    except (TypeError, ValueError):
+      sys.stderr.write('%s contained invalid JSON dict.\n' % args.properties)
+      raise
+
+  authenticator = auth.get_authenticator_for_host(
+    BUILDBUCKET_URL,
+    auth.make_auth_config(use_oauth2=True),
+  )
+  http = authenticator.authorize(httplib2.Http())
+  http.force_exception_to_status_code = True
+  response, content = http.request(
+    PUT_BUILD_URL,
+    'PUT',
+    body=json.dumps({
+      'bucket': args.bucket,
+      'parameters_json': json.dumps({
+        'builder_name': args.builder_name,
+        'properties': properties,
+      }),
+    }),
+    headers={'Content-Type': 'application/json'},
+  )
+
+  if args.verbose:
+    print content
+
+  return response.status != 200
+
+
+if __name__ == '__main__':
+  sys.exit(main(sys.argv))
