diff --git a/src/main/java/com/googlesource/gerrit/plugins/its/phabricator/PhabricatorItsFacade.java b/src/main/java/com/googlesource/gerrit/plugins/its/phabricator/PhabricatorItsFacade.java
index 82264bc..f2bd4ff 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/its/phabricator/PhabricatorItsFacade.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/its/phabricator/PhabricatorItsFacade.java
@@ -27,7 +27,7 @@
 import com.googlesource.gerrit.plugins.its.phabricator.conduit.ConduitException;
 import com.googlesource.gerrit.plugins.its.phabricator.conduit.results.ManiphestSearch;
 import com.googlesource.gerrit.plugins.its.phabricator.conduit.results.ManiphestResults;
-import com.googlesource.gerrit.plugins.its.phabricator.conduit.results.ProjectInfo;
+import com.googlesource.gerrit.plugins.its.phabricator.conduit.results.ProjectSearch;
 import java.io.IOException;
 import java.net.URL;
 import java.util.Set;
@@ -131,8 +131,8 @@
 
   private void maniphestEdit(String projectName, int taskId, String actions) throws IOException {
     try {
-      ProjectInfo projectInfo = conduit.projectQuery(projectName);
-      String projectPhid = projectInfo.getPhid();
+      ProjectSearch projectSearch = conduit.projectSearch(projectName);
+      String projectPhid = projectSearch.getPhid();
 
       Set<String> projectPhids = Sets.newHashSet(projectPhid);
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/its/phabricator/conduit/Conduit.java b/src/main/java/com/googlesource/gerrit/plugins/its/phabricator/conduit/Conduit.java
index 15e227d..0ff669a 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/its/phabricator/conduit/Conduit.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/its/phabricator/conduit/Conduit.java
@@ -15,14 +15,15 @@
 package com.googlesource.gerrit.plugins.its.phabricator.conduit;
 
 import com.google.gson.Gson;
+import com.google.gson.JsonArray;
 import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
 import com.googlesource.gerrit.plugins.its.phabricator.conduit.results.ConduitPing;
 import com.googlesource.gerrit.plugins.its.phabricator.conduit.results.ManiphestEdit;
-import com.googlesource.gerrit.plugins.its.phabricator.conduit.results.ManiphestSearch;
 import com.googlesource.gerrit.plugins.its.phabricator.conduit.results.ManiphestResults;
-import com.googlesource.gerrit.plugins.its.phabricator.conduit.results.ProjectInfo;
-import com.googlesource.gerrit.plugins.its.phabricator.conduit.results.QueryResult;
+import com.googlesource.gerrit.plugins.its.phabricator.conduit.results.ManiphestSearch;
+import com.googlesource.gerrit.plugins.its.phabricator.conduit.results.ProjectResults;
+import com.googlesource.gerrit.plugins.its.phabricator.conduit.results.ProjectSearch;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
@@ -148,21 +149,24 @@
     return result;
   }
 
-  /** Runs the API's 'projectQuery' method to match exactly one project name */
-  public ProjectInfo projectQuery(String name) throws ConduitException {
-    Map<String, Object> params = new HashMap<>();
-    params.put("names", Arrays.asList(name));
+  /** Runs the API's 'projectSearch' method to match exactly one project name */
+  public ProjectSearch projectSearch(String name) throws ConduitException {
+    HashMap<String, Object> params = new HashMap<>();
+    HashMap<String, Object> params2 = new HashMap<>();
 
-    JsonElement callResult = conduitConnection.call("project.query", params, token);
-    QueryResult queryResult = gson.fromJson(callResult, QueryResult.class);
-    JsonObject queryResultData = queryResult.getData().getAsJsonObject();
+    params2.put("query", name);
 
-    ProjectInfo result = null;
-    for (Entry<String, JsonElement> queryResultEntry : queryResultData.entrySet()) {
-      JsonElement queryResultEntryValue = queryResultEntry.getValue();
-      ProjectInfo queryResultProjectInfo = gson.fromJson(queryResultEntryValue, ProjectInfo.class);
-      if (queryResultProjectInfo.getName().equals(name)) {
-        result = queryResultProjectInfo;
+    params.put("constraints", params2);
+
+    JsonElement callResult = conduitConnection.call("project.search", params, token);
+    ProjectResults projectResult = gson.fromJson(callResult, ProjectResults.class);
+    JsonArray projectResultData = projectResult.getData().getAsJsonArray();
+
+    ProjectSearch result = null;
+    for (JsonElement jsonElement : projectResultData) {
+      ProjectSearch projectResultSearch = gson.fromJson(jsonElement, ProjectSearch.class);
+      if (projectResultSearch.getFields().getName().equals(name)) {
+        result = projectResultSearch;
       }
     }
     return result;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/its/phabricator/conduit/results/ProjectInfo.java b/src/main/java/com/googlesource/gerrit/plugins/its/phabricator/conduit/results/ProjectInfo.java
deleted file mode 100644
index c0d2706..0000000
--- a/src/main/java/com/googlesource/gerrit/plugins/its/phabricator/conduit/results/ProjectInfo.java
+++ /dev/null
@@ -1,89 +0,0 @@
-// Copyright (C) 2015 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// 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.
-package com.googlesource.gerrit.plugins.its.phabricator.conduit.results;
-
-import com.google.gson.JsonElement;
-
-/**
- * Models the result for API methods returning Project information
- *
- * <p>JSON looks like:
- *
- * <pre>
- * {
- *   "id":"23",
- *   "phid":"PHID-PROJ-lxmsio4ggx63mhakxhnn",
- *   "name":"QChris-Test-Project",
- *   "profileImagePHID":null,
- *   "icon":"briefcase",
- *   "color":"blue",
- *   "members":["PHID-USER-kem5g5ua7s75ffvlzwgk","PHID-USER-h4n62fq2kt2v3a2qjyqh"],
- *   "slugs":["qchris-test-project"],
- *   "dateCreated":"1413551900",
- *   "dateModified":"1424557030"
- * }
- * </pre>
- */
-public class ProjectInfo {
-  private int id;
-  private String phid;
-  private String name;
-  private String profileImagePHID;
-  private String icon;
-  private String color;
-  private JsonElement members;
-  private JsonElement slugs;
-  private String dateCreated;
-  private String dateModified;
-
-  public int getId() {
-    return id;
-  }
-
-  public String getPhid() {
-    return phid;
-  }
-
-  public String getName() {
-    return name;
-  }
-
-  public String getProfileImagePHID() {
-    return profileImagePHID;
-  }
-
-  public String getIcon() {
-    return icon;
-  }
-
-  public String getColor() {
-    return color;
-  }
-
-  public JsonElement getMembers() {
-    return members;
-  }
-
-  public JsonElement getSlugs() {
-    return slugs;
-  }
-
-  public String getDateCreated() {
-    return dateCreated;
-  }
-
-  public String getDateModified() {
-    return dateModified;
-  }
-}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/its/phabricator/conduit/results/QueryResult.java b/src/main/java/com/googlesource/gerrit/plugins/its/phabricator/conduit/results/ProjectResults.java
similarity index 68%
rename from src/main/java/com/googlesource/gerrit/plugins/its/phabricator/conduit/results/QueryResult.java
rename to src/main/java/com/googlesource/gerrit/plugins/its/phabricator/conduit/results/ProjectResults.java
index 5f45f15..fcd9b44 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/its/phabricator/conduit/results/QueryResult.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/its/phabricator/conduit/results/ProjectResults.java
@@ -1,4 +1,4 @@
-// Copyright (C) 2015 The Android Open Source Project
+// Copyright (C) 2018 The Android Open Source Project
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -11,41 +11,38 @@
 // 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.
+
 package com.googlesource.gerrit.plugins.its.phabricator.conduit.results;
 
 import com.google.gson.JsonElement;
 
 /**
- * Models the result for API methods returning a (possible paged) QueryResult
+ * Models the result for API methods
  *
  * <p>JSON looks like:
  *
  * <pre>
  * {
- *   "data": { ... },
- *   "slugMap": [],
+ *   "data": [
+ *     { ... }
+ *   ],
+ *   "maps": {},
+ *   "query": {
+ *     "queryKey": null
+ *   },
  *   "cursor": {
  *     "limit": 100,
  *     "after": null,
- *     "before": null
+ *     "before": null,
+ *     "order": null
  *   }
  * }
  * </pre>
  */
-public class QueryResult {
+public class ProjectResults {
   private JsonElement data;
-  private JsonElement slugMap;
-  private JsonElement cursor;
 
   public JsonElement getData() {
     return data;
   }
-
-  public JsonElement getSlugMap() {
-    return slugMap;
-  }
-
-  public JsonElement getCursor() {
-    return cursor;
-  }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/its/phabricator/conduit/results/ProjectSearch.java b/src/main/java/com/googlesource/gerrit/plugins/its/phabricator/conduit/results/ProjectSearch.java
new file mode 100644
index 0000000..7410c68
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/its/phabricator/conduit/results/ProjectSearch.java
@@ -0,0 +1,90 @@
+// Copyright (C) 2018 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// 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.
+
+package com.googlesource.gerrit.plugins.its.phabricator.conduit.results;
+
+import com.google.gson.JsonElement;
+
+/**
+ * Models the result for API methods returning Project searches.
+ *
+ * <p>JSON looks like:</p>
+ *
+ * <pre>
+ * {
+ * "id": 8,
+ * "type": "PROJ",
+ * "phid": "PHID-PROJ-ro6wrekgi7u3fwzz5p6a",
+ * "fields": {
+ *   "name": "Patch-For-Review",
+ *   "slug": "patch-for-review",
+ *   "milestone": null,
+ *   "depth": 0,
+ *   "parent": null,
+ *   "icon": {
+ *     "key": "project",
+ *     "name": "Project",
+ *     "icon": "fa-briefcase"
+ *   },
+ *   "color": {
+ *     "key": "pink",
+ *     "name": "Pink"
+ *   },
+ *   "spacePHID": null,
+ *   "dateCreated": 1538054863,
+ *   "dateModified": 1538090166,
+ *   "policy": {
+ *     "view": "public",
+ *     "edit": "users",
+ *     "join": "users"
+ *   },
+ *   "description": null,
+ *   "startdate": null,
+ *   "enddate": null,
+ *   "issprint": false
+ * },
+ * "attachments": {}
+ * }
+ * </pre>
+ */
+public class ProjectSearch {
+  private int id;
+  private String type;
+  private String phid;
+  private Fields fields;
+
+  public int getId() {
+    return id;
+  }
+
+  public String getType() {
+    return type;
+  }
+
+  public String getPhid() {
+    return phid;
+  }
+
+  public Fields getFields() {
+    return fields;
+  }
+
+  public class Fields {
+    private String name;
+
+    public String getName() {
+      return name;
+    }
+  }
+}
