diff --git a/lib/androidbuild.py b/lib/androidbuild.py
index b012b91..9d6b1d5 100644
--- a/lib/androidbuild.py
+++ b/lib/androidbuild.py
@@ -10,6 +10,7 @@
 import httplib2
 import oauth2client.client
 import os
+import pwd
 import urllib
 
 
@@ -68,6 +69,20 @@
     if os.path.exists(json_path):
       return json_path
 
+  # If not found, check at ~$PORTAGE_USERNAME. That might be the case if the
+  # tool is being used from within an ebuild script.
+  portage_username = os.environ.get('PORTAGE_USERNAME')
+  if portage_username:
+    try:
+      portage_homedir = pwd.getpwnam(portage_username).pw_dir
+    except KeyError:
+      # User $PORTAGE_USERNAME does not exist.
+      pass
+    else:
+      json_path = os.path.join(portage_homedir, homedir_json_credentials_path)
+      if os.path.exists(json_path):
+        return json_path
+
   raise CredentialsNotFoundError(
       'Could not find the JSON credentials at [%s] and no JSON file was '
       'specified in command line arguments.' % homedir_json_credentials_path)
diff --git a/lib/androidbuild_unittest.py b/lib/androidbuild_unittest.py
index 18b79e0..1641deb 100644
--- a/lib/androidbuild_unittest.py
+++ b/lib/androidbuild_unittest.py
@@ -11,6 +11,7 @@
 import mock
 import oauth2client
 import os
+import pwd
 
 from chromite.lib import androidbuild
 from chromite.lib import cros_test_lib
@@ -53,6 +54,31 @@
     self.assertEqual(os.path.abspath(json_path),
                      os.path.abspath(service_account_path))
 
+  def testFindCredentialsFile_PortageUsername(self):
+    """Checks that we can locate the JSON files under $PORTAGE_USERNAME."""
+    copy_environ = os.environ.copy()
+    copy_environ['HOME'] = '/nonexistent'
+    copy_environ['PORTAGE_USERNAME'] = 'fakeuser'
+
+    fakeuser_homedir = os.path.join(TESTDATA_PATH, 'androidbuild')
+    fakeuser_pwent = pwd.struct_passwd(('fakeuser', 'x', 1234, 1234,
+                                        'Fake User', fakeuser_homedir,
+                                        '/bin/sh'))
+
+    service_account_name = 'test_creds_authorized_user.json'
+
+    with mock.patch.dict(os.environ, copy_environ), \
+        mock.patch.object(pwd, 'getpwnam') as mock_getpwnam:
+      mock_getpwnam.return_value = fakeuser_pwent
+
+      json_path = androidbuild.FindCredentialsFile(
+          homedir_json_credentials_path=service_account_name)
+
+      mock_getpwnam.assert_called_once_with('fakeuser')
+
+      self.assertEqual(json_path,
+                       os.path.join(fakeuser_homedir, service_account_name))
+
   def testLoadCredentials_ServiceAccount(self):
     """Checks that loading a service account from JSON works."""
     creds = androidbuild.LoadCredentials(os.path.join(
