diff --git a/java/com/android/dialer/app/calllog/VisualVoicemailUpdateTask.java b/java/com/android/dialer/app/calllog/VisualVoicemailUpdateTask.java
index 2e12cec..6d2581f 100644
--- a/java/com/android/dialer/app/calllog/VisualVoicemailUpdateTask.java
+++ b/java/com/android/dialer/app/calllog/VisualVoicemailUpdateTask.java
@@ -32,8 +32,12 @@
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.concurrent.DialerExecutor.Worker;
 import com.android.dialer.common.concurrent.DialerExecutorComponent;
+import com.android.dialer.logging.DialerImpression;
+import com.android.dialer.logging.Logger;
 import com.android.dialer.notification.DialerNotificationManager;
 import com.android.dialer.phonenumbercache.ContactInfo;
+import com.android.dialer.spam.Spam;
+import com.android.dialer.spam.SpamComponent;
 import com.android.dialer.telecom.TelecomUtil;
 import java.util.ArrayList;
 import java.util.List;
@@ -44,7 +48,7 @@
   @Nullable
   @Override
   public Void doInBackground(@NonNull Input input) throws Throwable {
-    updateNotification(input.context, input.queryHelper, input.queryHandler);
+    updateNotification(input.context, input.queryHelper, input.queryHandler, input.spam);
     return null;
   }
 
@@ -58,7 +62,8 @@
   private static void updateNotification(
       Context context,
       CallLogNotificationsQueryHelper queryHelper,
-      FilteredNumberAsyncQueryHandler queryHandler) {
+      FilteredNumberAsyncQueryHandler queryHandler,
+      Spam spam) {
     Assert.isWorkerThread();
     LogUtil.enterBlock("VisualVoicemailUpdateTask.updateNotification");
 
@@ -67,7 +72,15 @@
       // Query failed, just return
       return;
     }
-    voicemailsToNotify = filterBlockedNumbers(context, queryHandler, voicemailsToNotify);
+
+    if (FilteredNumbersUtil.hasRecentEmergencyCall(context)) {
+      LogUtil.i(
+          "VisualVoicemailUpdateTask.updateNotification",
+          "not filtering due to recent emergency call");
+    } else {
+      voicemailsToNotify = filterBlockedNumbers(context, queryHandler, voicemailsToNotify);
+      voicemailsToNotify = filterSpamNumbers(context, spam, voicemailsToNotify);
+    }
     boolean shouldAlert =
         !voicemailsToNotify.isEmpty()
             && voicemailsToNotify.size() > getExistingNotificationCount(context);
@@ -166,13 +179,6 @@
   private static List<NewCall> filterBlockedNumbers(
       Context context, FilteredNumberAsyncQueryHandler queryHandler, List<NewCall> newCalls) {
     Assert.isWorkerThread();
-    if (FilteredNumbersUtil.hasRecentEmergencyCall(context)) {
-      LogUtil.i(
-          "VisualVoicemailUpdateTask.filterBlockedNumbers",
-          "not filtering due to recent emergency call");
-      return newCalls;
-    }
-
     List<NewCall> result = new ArrayList<>();
     for (NewCall newCall : newCalls) {
       if (queryHandler.getBlockedIdSynchronous(newCall.number, newCall.countryIso) != null) {
@@ -190,6 +196,30 @@
     return result;
   }
 
+  @WorkerThread
+  private static List<NewCall> filterSpamNumbers(
+      Context context, Spam spam, List<NewCall> newCalls) {
+    Assert.isWorkerThread();
+    if (!spam.isSpamBlockingEnabled()) {
+      return newCalls;
+    }
+
+    List<NewCall> result = new ArrayList<>();
+    for (NewCall newCall : newCalls) {
+      Logger.get(context).logImpression(DialerImpression.Type.INCOMING_VOICEMAIL_SCREENED);
+      if (spam.checkSpamStatusSynchronous(newCall.number, newCall.countryIso)) {
+        LogUtil.i(
+            "VisualVoicemailUpdateTask.filterSpamNumbers",
+            "found voicemail from spam number, suppressing notification");
+        Logger.get(context)
+            .logImpression(DialerImpression.Type.INCOMING_VOICEMAIL_AUTO_BLOCKED_AS_SPAM);
+      } else {
+        result.add(newCall);
+      }
+    }
+    return result;
+  }
+
   /** Updates the voicemail notifications displayed. */
   static void scheduleTask(@NonNull Context context, @NonNull Runnable callback) {
     Assert.isNotNull(context);
@@ -204,7 +234,8 @@
         new Input(
             context,
             CallLogNotificationsQueryHelper.getInstance(context),
-            new FilteredNumberAsyncQueryHandler(context));
+            new FilteredNumberAsyncQueryHandler(context),
+            SpamComponent.get(context).spam());
     DialerExecutorComponent.get(context)
         .dialerExecutorFactory()
         .createNonUiTaskBuilder(new VisualVoicemailUpdateTask())
@@ -226,14 +257,17 @@
     @NonNull final Context context;
     @NonNull final CallLogNotificationsQueryHelper queryHelper;
     @NonNull final FilteredNumberAsyncQueryHandler queryHandler;
+    @NonNull final Spam spam;
 
     Input(
         Context context,
         CallLogNotificationsQueryHelper queryHelper,
-        FilteredNumberAsyncQueryHandler queryHandler) {
+        FilteredNumberAsyncQueryHandler queryHandler,
+        Spam spam) {
       this.context = context;
       this.queryHelper = queryHelper;
       this.queryHandler = queryHandler;
+      this.spam = spam;
     }
   }
 }
diff --git a/java/com/android/dialer/logging/dialer_impression.proto b/java/com/android/dialer/logging/dialer_impression.proto
index 8af807f..d16efb6 100644
--- a/java/com/android/dialer/logging/dialer_impression.proto
+++ b/java/com/android/dialer/logging/dialer_impression.proto
@@ -12,7 +12,7 @@
   // Event enums to be used for Impression Logging in Dialer.
   // It's perfectly acceptable for this enum to be large
   // Values should be from 1000 to 100000.
-  // Next Tag: 1352
+  // Next Tag: 1358
   enum Type {
     UNKNOWN_AOSP_EVENT_TYPE = 1000;
 
@@ -695,5 +695,18 @@
     MAIN_OPEN_WITH_TAB_CONTACTS = 1349;
     MAIN_OPEN_WITH_TAB_VOICEMAIL = 1350;
     MAIN_OPEN_WITH_DIALPAD = 1351;
+
+    // Incoming call screened for spam auto blocking
+    INCOMING_CALL_SCREENED = 1352;
+    // Incoming call auto blocked as spam
+    INCOMING_CALL_AUTO_BLOCKED_AS_SPAM = 1353;
+    // Incoming voicemail screened for spam auto blocking
+    INCOMING_VOICEMAIL_SCREENED = 1354;
+    // Incoming voicemail auto blocked as spam
+    INCOMING_VOICEMAIL_AUTO_BLOCKED_AS_SPAM = 1355;
+    // User reported auto blocked spam call as spam
+    AUTO_BLOCKED_SPAM_CALL_REPORTED_AS_SPAM = 1356;
+    // User reported auto blocked spam call as not spam
+    AUTO_BLOCKED_SPAM_CALL_REPORTED_AS_NOT_SPAM = 1357;
   }
 }
diff --git a/java/com/android/dialer/spam/Spam.java b/java/com/android/dialer/spam/Spam.java
index 5924d56..99deb13 100644
--- a/java/com/android/dialer/spam/Spam.java
+++ b/java/com/android/dialer/spam/Spam.java
@@ -33,6 +33,8 @@
 
   boolean isSpamNotificationEnabled();
 
+  boolean isSpamBlockingEnabled();
+
   boolean isDialogEnabledForSpamNotification();
 
   boolean isDialogReportSpamCheckedByDefault();
diff --git a/java/com/android/dialer/spam/SpamStub.java b/java/com/android/dialer/spam/SpamStub.java
index b171d0d..15d9d76 100644
--- a/java/com/android/dialer/spam/SpamStub.java
+++ b/java/com/android/dialer/spam/SpamStub.java
@@ -50,6 +50,11 @@
   }
 
   @Override
+  public boolean isSpamBlockingEnabled() {
+    return false;
+  }
+
+  @Override
   public boolean isDialogEnabledForSpamNotification() {
     return false;
   }
