diff --git a/recommender/beta/cloud-client/README.md b/recommender/beta/cloud-client/README.md
new file mode 100644
index 00000000000..9e99492d441
--- /dev/null
+++ b/recommender/beta/cloud-client/README.md
@@ -0,0 +1,31 @@
+# Getting Started with Recommender and the Google Java API Client library
+
+
+
+
+[Cloud Recommender](https://cloud.google.com/recommender/) is a service on Google Cloud that provides
+usage recommendations for Cloud products and services. This sample Java
+application demonstrates how to access the Recommender API using the
+[Google Cloud Client Library for Java](https://github.com/GoogleCloudPlatform/google-cloud-java).
+
+## Quickstart
+
+### Setup
+- [Set up a Java Development Environment for Maven](https://cloud.google.com/java/docs/setup).
+- [Enable Recommender API](https://cloud.google.com/recommender/docs/enabling) for your project.
+- [Authenticate using a service account](https://cloud.google.com/docs/authentication/getting-started).
+Create a service account, download a JSON key file, and set the
+`GOOGLE_APPLICATION_CREDENTIALS` environment variable.
+- Set the `GOOGLE_CLOUD_PROJECT` environment variable to your project ID.
+
+### Build
+Build your project with:
+```
+mvn clean package -DskipTests
+```
+
+## Testing
+To run the unit tests:
+```
+mvn clean verify
+```
diff --git a/recommender/beta/cloud-client/pom.xml b/recommender/beta/cloud-client/pom.xml
new file mode 100644
index 00000000000..6eb3d38af17
--- /dev/null
+++ b/recommender/beta/cloud-client/pom.xml
@@ -0,0 +1,86 @@
+
+
+ 4.0.0
+ com.example.recommender
+ recommender-samples
+ jar
+
+
+
+ com.google.cloud.samples
+ shared-configuration
+ 1.0.11
+
+
+
+ 1.8
+ 1.8
+
+
+
+
+
+
+
+ com.google.cloud
+ libraries-bom
+ 3.0.0
+ pom
+ import
+
+
+
+
+
+
+ com.google.cloud
+ google-cloud-recommender
+ 0.1.2
+
+
+
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
+ com.google.truth
+ truth
+ 1.0
+ test
+
+
+
+
+
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+ 1.6.0
+
+ false
+
+
+
+
+
diff --git a/recommender/beta/cloud-client/src/main/java/com/example/recommender/ListRecommendations.java b/recommender/beta/cloud-client/src/main/java/com/example/recommender/ListRecommendations.java
new file mode 100644
index 00000000000..5f7d5f156e1
--- /dev/null
+++ b/recommender/beta/cloud-client/src/main/java/com/example/recommender/ListRecommendations.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2019 Google LLC
+ *
+ * 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.example.recommender;
+
+// [START recommender_list_recommendations]
+
+import com.google.api.gax.rpc.InvalidArgumentException;
+import com.google.api.gax.rpc.PermissionDeniedException;
+import com.google.cloud.recommender.v1beta1.ListRecommendationsRequest;
+import com.google.cloud.recommender.v1beta1.Recommendation;
+import com.google.cloud.recommender.v1beta1.RecommenderClient;
+import com.google.cloud.recommender.v1beta1.RecommenderClient.ListRecommendationsPagedResponse;
+import java.io.IOException;
+
+public class ListRecommendations {
+
+ // List IAM recommendations for GOOGLE_CLOUD_PROJECT environment variable
+ public static void listRecommendations() throws IOException {
+ // TODO(developer): Replace the projectId variable before running the sample.
+ String projectId = "my-project-id";
+
+ // Google Cloud location where resources associated with the recommendations are located (for
+ // example, "global" or "us-central1-a"). For a full list of supported regions, visit
+ // https://cloud.google.com/compute/docs/regions-zones/
+ String location = "global";
+
+ // Fully-qualified recommender ID (for example, "google.iam.policy.Recommender" or
+ // "google.compute.instance.MachineTypeRecommender"). For a full list of supported recommenders
+ // visit https://cloud.google.com/recommender/docs/recommenders#recommenders
+ String recommender = "google.iam.policy.Recommender";
+
+ listRecommendations(projectId, location, recommender);
+ }
+
+ // List recommendations for a specified project, location, and recommender
+ public static void listRecommendations(String projectId, String location, String recommender)
+ throws IOException {
+ // Initialize client that will be used to send requests. This client only needs to be created
+ // once, and can be reused for multiple requests. After completing all of your requests, call
+ // the "close" method on the client to safely clean up any remaining background resources.
+ try (RecommenderClient recommenderClient = RecommenderClient.create()) {
+ /// Build the request
+ String parent =
+ String.format(
+ "projects/%s/locations/%s/recommenders/%s", projectId, location, recommender);
+ ListRecommendationsRequest request =
+ ListRecommendationsRequest.newBuilder().setParent(parent).build();
+
+ try {
+ // Send the request
+ ListRecommendationsPagedResponse response = recommenderClient.listRecommendations(request);
+
+ // Print out each recommendation
+ for (Recommendation responseItem : response.iterateAll()) {
+ Recommendation recommendation = responseItem;
+ System.out.println("Recommendation name: " + recommendation.getName());
+ System.out.println("- description: " + recommendation.getDescription());
+ System.out.println(
+ "- primary_impact.category: " + recommendation.getPrimaryImpact().getCategory());
+ System.out.println("- state_info.state: " + recommendation.getStateInfo().getState());
+ System.out.println();
+ }
+
+ // Indicate the request was successful
+ System.out.println("List recommendations successful");
+ } catch (PermissionDeniedException e) {
+ System.out.println("Permission denied for project '" + projectId
+ + "'. Ensure you have the appropriate permissions to list recommendations: \n" + e
+ .toString());
+ } catch (InvalidArgumentException e) {
+ System.out.println(
+ ("Invalid argument for projectId. Ensure you have 'GOOGLE_CLOUD_PROJECT' set: \n"
+ + e.toString()));
+ }
+ }
+ }
+}
+// [END recommender_list_recommendations]
diff --git a/recommender/beta/cloud-client/src/test/java/com/example/recommender/ListRecommendationsTest.java b/recommender/beta/cloud-client/src/test/java/com/example/recommender/ListRecommendationsTest.java
new file mode 100644
index 00000000000..e6ef6fb0899
--- /dev/null
+++ b/recommender/beta/cloud-client/src/test/java/com/example/recommender/ListRecommendationsTest.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2019 Google LLC
+ *
+ * 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.example.recommender;
+
+import static com.google.common.truth.Truth.assertThat;
+import static junit.framework.TestCase.assertNotNull;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.PrintStream;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class ListRecommendationsTest {
+
+ private static final String PROJECT_ID = System.getenv("GOOGLE_CLOUD_PROJECT");
+ private static final String LOCATION = "global";
+ private static final String RECOMMENDER = "google.iam.policy.Recommender";
+
+ private ByteArrayOutputStream bout;
+ private PrintStream out;
+
+ private static void requireEnvVar(String varName) {
+ assertNotNull(
+ System.getenv(varName),
+ "Environment variable '%s' is required to perform these tests.".format(varName)
+ );
+ }
+
+ @BeforeClass
+ public static void checkRequirements() {
+ requireEnvVar("GOOGLE_APPLICATION_CREDENTIALS");
+ requireEnvVar("GOOGLE_CLOUD_PROJECT");
+ }
+
+ @Before
+ public void setUp() throws Exception {
+ bout = new ByteArrayOutputStream();
+ out = new PrintStream(bout);
+ System.setOut(out);
+ }
+
+ @After
+ public void tearDown() {
+ System.setOut(null);
+ }
+
+ @Test
+ public void listRecommendations() throws IOException {
+ ListRecommendations.listRecommendations(PROJECT_ID, LOCATION, RECOMMENDER);
+
+ assertThat(bout.toString()).contains("List recommendations successful");
+ }
+}