diff --git a/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java b/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java
index a5a0cff..a6489cd 100644
--- a/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java
+++ b/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java
@@ -683,7 +683,11 @@
           inviteVideoButtonView.setTag(IntentProvider.getDuoInviteIntentProvider(number));
           inviteVideoButtonView.setVisibility(View.VISIBLE);
         } else if (duo.isEnabled(mContext)) {
-          setUpVideoButtonView.setTag(IntentProvider.getSetUpDuoIntentProvider());
+          if (!duo.isInstalled(mContext)) {
+            setUpVideoButtonView.setTag(IntentProvider.getInstallDuoIntentProvider());
+          } else {
+            setUpVideoButtonView.setTag(IntentProvider.getSetUpDuoIntentProvider());
+          }
           setUpVideoButtonView.setVisibility(View.VISIBLE);
         }
         break;
diff --git a/java/com/android/dialer/app/calllog/IntentProvider.java b/java/com/android/dialer/app/calllog/IntentProvider.java
index 996bca0..c86a260 100644
--- a/java/com/android/dialer/app/calllog/IntentProvider.java
+++ b/java/com/android/dialer/app/calllog/IntentProvider.java
@@ -104,6 +104,26 @@
     };
   }
 
+  public static IntentProvider getInstallDuoIntentProvider() {
+    return new IntentProvider() {
+      @Override
+      public Intent getIntent(Context context) {
+        return new Intent(
+            Intent.ACTION_VIEW,
+            new Uri.Builder()
+                .scheme("https")
+                .authority("play.google.com")
+                .appendEncodedPath("store/apps/details")
+                .appendQueryParameter("id", "com.google.android.apps.tachyon")
+                .appendQueryParameter(
+                    "referrer",
+                    "utm_source=dialer&utm_medium=text&utm_campaign=product") // This string is from
+                // the Duo team
+                .build());
+      }
+    };
+  }
+
   public static IntentProvider getSetUpDuoIntentProvider() {
     return new IntentProvider() {
       @Override
diff --git a/java/com/android/dialer/duo/Duo.java b/java/com/android/dialer/duo/Duo.java
index 5f49e3e..d914784 100644
--- a/java/com/android/dialer/duo/Duo.java
+++ b/java/com/android/dialer/duo/Duo.java
@@ -33,6 +33,9 @@
   /** @return true if the Duo integration is enabled on this device. */
   boolean isEnabled(@NonNull Context context);
 
+  /** @return true if Duo is installed on this device. */
+  boolean isInstalled(@NonNull Context context);
+
   /**
    * @return true if Duo is installed and the user has gone through the set-up flow confirming their
    *     phone number.
diff --git a/java/com/android/dialer/duo/stub/DuoStub.java b/java/com/android/dialer/duo/stub/DuoStub.java
index 398e990..cfa400a 100644
--- a/java/com/android/dialer/duo/stub/DuoStub.java
+++ b/java/com/android/dialer/duo/stub/DuoStub.java
@@ -41,6 +41,11 @@
   }
 
   @Override
+  public boolean isInstalled(@NonNull Context context) {
+    return false;
+  }
+
+  @Override
   public boolean isActivated(@NonNull Context context) {
     return false;
   }
