diff --git a/.flake8 b/.flake8
new file mode 100644
index 0000000..f61c53b
--- /dev/null
+++ b/.flake8
@@ -0,0 +1,3 @@
+[flake8]
+max-line-length=80
+ignore = E111 # indentation is not a multiple of four 2-space indentation is used here.
\ No newline at end of file
diff --git a/.python-version b/.python-version
new file mode 100644
index 0000000..9bbf492
--- /dev/null
+++ b/.python-version
@@ -0,0 +1 @@
+2.7.14
diff --git a/.style.yapf b/.style.yapf
new file mode 100644
index 0000000..4861caf
--- /dev/null
+++ b/.style.yapf
@@ -0,0 +1,3 @@
+[style]
+based_on_style = google
+indent_width = 2
diff --git a/client.py b/client.py
index e6662cd..2c90c87 100644
--- a/client.py
+++ b/client.py
@@ -11,7 +11,6 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-
 """The GCI API Client.  A thin wrapper around the GCI API.
 
 Exmple usage:
@@ -34,15 +33,16 @@
 class GCIAPIClient(object):
   """GCIAPIClient provides a thin wrapper around the GCI Task API.
 
-  A GCIAPIClient simplifies working with tasks by forming the HTTP requests on
-  behalf of the caller.
+    A GCIAPIClient simplifies working with tasks by forming the HTTP requests on
+    behalf of the caller.
 
-  Attributes:
-    url_prefix: A string prefix for the codin URL
-    headers: A dictionary of HTTP headers
-  """
+    Attributes:
+      url_prefix: A string prefix for the codin URL
+      headers: A dictionary of HTTP headers
+    """
 
-  def __init__(self, auth_token=None,
+  def __init__(self,
+               auth_token=None,
                url_prefix='https://codein.withgoogle.com/',
                debug=False):
     self.url_prefix = urlparse.urljoin(url_prefix, 'api/program/current/')
@@ -64,32 +64,36 @@
   def ListTasks(self, page=1):
     """Fetches a list of tasks.
 
-    Args:
-      page: Which page of results to return.
+        Args:
+          page: Which page of results to return.
 
-    Returns:
-      A JSON encoded list of tasks.
+        Returns:
+          A JSON encoded list of tasks.
 
-    Raises:
-      HTTPError: a 4XX client error or 5XX server error response was returned.
-    """
-    r = requests.get(self._Url('tasks'), headers=self.headers,
-                     params={'page': page})
+        Raises:
+          HTTPError: a 4XX client error or 5XX server error
+                     response was returned.
+        """
+    r = requests.get(
+        self._Url('tasks'), headers=self.headers, params={
+            'page': page
+        })
     r.raise_for_status()
     return r.json()
 
   def GetTask(self, task_id):
     """Fetches a single task.
 
-    Args:
-      task_id: An integer id for the task.
+        Args:
+          task_id: An integer id for the task.
 
-    Returns:
-        A JSON encoded task.
+        Returns:
+            A JSON encoded task.
 
-    Raises:
-      HTTPError: a 4XX client error or 5XX server error response was returned.
-    """
+        Raises:
+          HTTPError: a 4XX client error or 5XX server error
+                     response was returned.
+        """
     r = requests.get(self._Url('tasks/%d' % task_id), headers=self.headers)
     r.raise_for_status()
     return r.json()
@@ -97,57 +101,57 @@
   def NewTask(self, task):
     """Creates a single new task.
 
-    Args:
-      task: A task object.
+        Args:
+          task: A task object.
 
-    Returns:
-      A JSON encoded response.
+        Returns:
+          A JSON encoded response.
 
-    Raises:
-      HTTPError: a 4XX client error or 5XX server error response was returned.
-    """
-    r = requests.post(self._Url('tasks'), headers=self.headers,
-                      data=json.dumps(task))
+        Raises:
+          HTTPError: a 4XX client error or 5XX server error
+                     response was returned.
+        """
+    r = requests.post(
+        self._Url('tasks'), headers=self.headers, data=json.dumps(task))
     r.raise_for_status()
     return r.json()
 
   def UpdateTask(self, task_id, task):
     """Modifies a single task.
 
-    Args:
-      task_id: An integer id for the task.
-      task: A task object.
+        Args:
+          task_id: An integer id for the task.
+          task: A task object.
 
-    Returns:
-      A JSON encoded response.
+        Returns:
+          A JSON encoded response.
 
-    Raises:
-      HTTPError: a 4XX client error or 5XX server error response was returned.
-    """
-    r = (
-        requests.put(
-            self._Url('tasks/%d' % task_id), data=json.dumps(task),
-            headers=self.headers))
+        Raises:
+          HTTPError: a 4XX client error or 5XX server error
+                     response was returned.
+        """
+    r = (requests.put(
+        self._Url('tasks/%d' % task_id),
+        data=json.dumps(task),
+        headers=self.headers))
     r.raise_for_status()
     return r.json()
 
   def DeleteTask(self, task_id):
     """Deletes a single task.
 
-    Args:
-      task_id: An integer id for the task.
+        Args:
+          task_id: An integer id for the task.
 
-    Returns:
-      A JSON encoded response, if there is content in the response.
-      Otherwise None.
+        Returns:
+          A JSON encoded response, if there is content in the response.
+          Otherwise None.
 
-    Raises:
-      HTTPError: a 4XX client error or 5XX server error response was returned.
-    """
-    r = (
-        requests.delete(
-            self._Url('tasks/%d' % task_id),
-            headers=self.headers))
+        Raises:
+          HTTPError: a 4XX client error or 5XX server error
+                     response was returned.
+        """
+    r = (requests.delete(self._Url('tasks/%d' % task_id), headers=self.headers))
     r.raise_for_status()
     # DELETE returns nothing on success, don't try and parse it.
     if r.content:
@@ -157,33 +161,38 @@
   def ListTaskInstances(self, page=1):
     """Fetches a list of tasks.
 
-    Args:
-      page: Which page of results to return.
+        Args:
+          page: Which page of results to return.
 
-    Returns:
-      A JSON encoded list of task instances.
+        Returns:
+          A JSON encoded list of task instances.
 
-    Raises:
-      HTTPError: a 4XX client error or 5XX server error response was returned.
-    """
-    r = requests.get(self._Url('instances'), headers=self.headers,
-                     params={'page': page})
+        Raises:
+
+          HTTPError: a 4XX client error or 5XX server error
+                     response was returned.
+        """
+    r = requests.get(
+        self._Url('instances'), headers=self.headers, params={
+            'page': page
+        })
     r.raise_for_status()
     return r.json()
 
   def GetTaskInstance(self, task_instance_id):
     """Fetches a single task.
 
-    Args:
-      task_instance_id: An integer id for the task instance.
+        Args:
+          task_instance_id: An integer id for the task instance.
 
-    Returns:
-        A JSON encoded task instance.
+        Returns:
+            A JSON encoded task instance.
 
-    Raises:
-      HTTPError: a 4XX client error or 5XX server error response was returned.
-    """
-    r = requests.get(self._Url('instances/%d' % task_instance_id),
-                     headers=self.headers)
+        Raises:
+          HTTPError: a 4XX client error or 5XX server error
+                     response was returned.
+        """
+    r = requests.get(
+        self._Url('instances/%d' % task_instance_id), headers=self.headers)
     r.raise_for_status()
     return r.json()
diff --git a/csv_uploader.py b/csv_uploader.py
index 0d76d52..44680dc 100755
--- a/csv_uploader.py
+++ b/csv_uploader.py
@@ -12,7 +12,6 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-
 """A simple CSV uploader client for the GCI API.
 
 Usage:
@@ -28,23 +27,26 @@
 import csv
 
 import requests
+
 import client as gciclient
 
-
 argparser = argparse.ArgumentParser(description='GCI CSV Task Uploader.')
-argparser.add_argument('--apikey', type=str, nargs='?', required=True,
-                       help='api key')
-argparser.add_argument('--url', type=str, nargs='?',
-                       default='https://codein.withgoogle.com',
-                       help='server url')
-argparser.add_argument('--publish', action='store_true',
-                       help='publish uploaded tasks')
-argparser.add_argument('-v', '--verbose', action='store_true',
-                       help='enable verbose logging')
-argparser.add_argument('--debug', action='store_true',
-                       help='enable debug request logging')
-argparser.add_argument('files', nargs=argparse.REMAINDER,
-                       help='csv file to upload')
+argparser.add_argument(
+    '--apikey', type=str, nargs='?', required=True, help='api key')
+argparser.add_argument(
+    '--url',
+    type=str,
+    nargs='?',
+    default='https://codein.withgoogle.com',
+    help='server url')
+argparser.add_argument(
+    '--publish', action='store_true', help='publish uploaded tasks')
+argparser.add_argument(
+    '-v', '--verbose', action='store_true', help='enable verbose logging')
+argparser.add_argument(
+    '--debug', action='store_true', help='enable debug request logging')
+argparser.add_argument(
+    'files', nargs=argparse.REMAINDER, help='csv file to upload')
 
 FLAGS = argparser.parse_args()
 
@@ -52,13 +54,13 @@
 def upload(client, filename):
   """Creates new tasks for each line in the csv pointed to by filename.
 
-  Args:
-    client: A GCIAPIClient to form and make the requests.
-    filename: A string filename containing the csv encoded tasks.
+    Args:
+      client: A GCIAPIClient to form and make the requests.
+      filename: A string filename containing the csv encoded tasks.
 
-  Raises:
-    none
-  """
+    Raises:
+      none
+    """
   with open(filename, 'rb') as csvfile:
     taskreader = csv.DictReader(csvfile, skipinitialspace=True)
 
@@ -69,9 +71,9 @@
       t['categories'] = (task['categories'].split(',')
                          if len(task['categories']) else [])
       t['tags'] = task['tags'].split(',') if len(task['tags']) else []
-      t['is_beginner'] = (
-          True if task['is_beginner'].lower() in ['yes', 'true', '1']
-          else False)
+      t['is_beginner'] = (True if
+                          task['is_beginner'].lower() in ['yes', 'true', '1']
+                          else False)  # yapf disable
       t['time_to_complete_in_days'] = int(task['time_to_complete_in_days'])
       t['max_instances'] = int(task['max_instances'])
 
@@ -86,9 +88,7 @@
 
 def main():
   client = gciclient.GCIAPIClient(
-      auth_token=FLAGS.apikey,
-      url_prefix=FLAGS.url,
-      debug=FLAGS.debug)
+      auth_token=FLAGS.apikey, url_prefix=FLAGS.url, debug=FLAGS.debug)
 
   for filename in FLAGS.files:
     upload(client, filename)
diff --git a/list_instances.py b/list_instances.py
index 044117b..bebf000 100755
--- a/list_instances.py
+++ b/list_instances.py
@@ -12,7 +12,6 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-
 """List all task instances for your Organization via the GCI API."""
 
 import argparse
@@ -20,31 +19,31 @@
 
 import client as gciclient
 
-
 argparser = argparse.ArgumentParser(description='GCI Task Instances')
-argparser.add_argument('--apikey', type=str, nargs='?', required=True,
-                       help='api key')
-argparser.add_argument('--url', type=str, nargs='?',
-                       default='https://codein.withgoogle.com',
-                       help='server url')
-argparser.add_argument('--debug', action='store_true',
-                       help='enable debug request logging')
+argparser.add_argument(
+    '--apikey', type=str, nargs='?', required=True, help='api key')
+argparser.add_argument(
+    '--url',
+    type=str,
+    nargs='?',
+    default='https://codein.withgoogle.com',
+    help='server url')
+argparser.add_argument(
+    '--debug', action='store_true', help='enable debug request logging')
 
 FLAGS = argparser.parse_args()
 
 
 def main():
   client = gciclient.GCIAPIClient(
-      auth_token=FLAGS.apikey,
-      url_prefix=FLAGS.url,
-      debug=FLAGS.debug)
+      auth_token=FLAGS.apikey, url_prefix=FLAGS.url, debug=FLAGS.debug)
 
   next_page = 1
   while next_page > 0:
     instances = client.ListTaskInstances(page=next_page)
     for ti in instances['results']:
       print '\t'.join([
-          str(ti['id']),
+          str(ti['id']),  # yapf: disable
           ti['status'].encode('utf-8'),
           ti['student_display_name'].encode('utf-8'),
           ti['task_definition_name'].encode('utf-8')
diff --git a/list_tasks.py b/list_tasks.py
index 098a495..ec067f3 100755
--- a/list_tasks.py
+++ b/list_tasks.py
@@ -12,7 +12,6 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-
 """List all tasks for your Organization via the GCI API."""
 
 import argparse
@@ -20,24 +19,24 @@
 
 import client as gciclient
 
-
 argparser = argparse.ArgumentParser(description='GCI Tasks')
-argparser.add_argument('--apikey', type=str, nargs='?', required=True,
-                       help='api key')
-argparser.add_argument('--url', type=str, nargs='?',
-                       default='https://codein.withgoogle.com',
-                       help='server url')
-argparser.add_argument('--debug', action='store_true',
-                       help='enable debug request logging')
+argparser.add_argument(
+    '--apikey', type=str, nargs='?', required=True, help='api key')
+argparser.add_argument(
+    '--url',
+    type=str,
+    nargs='?',
+    default='https://codein.withgoogle.com',
+    help='server url')
+argparser.add_argument(
+    '--debug', action='store_true', help='enable debug request logging')
 
 FLAGS = argparser.parse_args()
 
 
 def main():
   client = gciclient.GCIAPIClient(
-      auth_token=FLAGS.apikey,
-      url_prefix=FLAGS.url,
-      debug=FLAGS.debug)
+      auth_token=FLAGS.apikey, url_prefix=FLAGS.url, debug=FLAGS.debug)
 
   next_page = 1
   while next_page > 0:
