diff --git a/src/main/java/com/googlesource/gerrit/plugins/automerger/ConfigLoader.java b/src/main/java/com/googlesource/gerrit/plugins/automerger/ConfigLoader.java
index e4e11da..97ce063 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/automerger/ConfigLoader.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/automerger/ConfigLoader.java
@@ -126,7 +126,7 @@
    */
   public String getAutomergeLabel() throws ConfigInvalidException {
     String automergeLabel = getConfig().getString("global", null, "automergeLabel");
-    return automergeLabel != null ? automergeLabel : "Verified";
+    return automergeLabel != null ? automergeLabel : "Code-Review";
   }
 
   /**
@@ -213,6 +213,14 @@
     return downstreamBranches;
   }
 
+  public short getMaxAutomergeVote() throws ConfigInvalidException {
+    return (short) getConfig().getInt("global", "maxAutomergeVote", 1);
+  }
+
+  public short getMinAutomergeVote() throws ConfigInvalidException {
+    return (short) getConfig().getInt("global", "minAutomergeVote", 1);
+  }
+
   // Returns overriden manifest config if specified, default if not
   private String getManifestFile() throws ConfigInvalidException {
     String manifestFile = getConfig().getString("global", null, "manifestFile");
diff --git a/src/main/java/com/googlesource/gerrit/plugins/automerger/DownstreamCreator.java b/src/main/java/com/googlesource/gerrit/plugins/automerger/DownstreamCreator.java
index f953898..634924f 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/automerger/DownstreamCreator.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/automerger/DownstreamCreator.java
@@ -167,7 +167,7 @@
           ChangeInfo downstreamChange =
               gApi.changes().id(changeNumber).get(EnumSet.of(ListChangesOption.CURRENT_REVISION));
           for (Map.Entry<String, ApprovalInfo> label : approvals.entrySet()) {
-            updateVote(downstreamChange, label.getKey(), label.getValue().value.shortValue());
+            propagateVote(downstreamChange, label.getKey(), label.getValue().value.shortValue());
           }
         }
       } catch (RestApiException | ConfigInvalidException e) {
@@ -222,7 +222,7 @@
   }
 
   /**
-   * Creates merges downstream, and votes -1 on the automerge label if we have a failed merge.
+   * Creates merges downstream, and votes on the automerge label if we have a failed merge.
    *
    * @param mdsMergeInput Input containing the downstream branch map and source change ID.
    * @throws RestApiException Throws if we fail a REST API call.
@@ -244,9 +244,9 @@
     } catch (FailedMergeException e) {
       reviewInput.message = e.getDisplayString();
       reviewInput.notify = NotifyHandling.ALL;
-      vote = -1;
+      // Vote minAutomergeVote if we hit a conflict.
+      vote = config.getMinAutomergeVote();
     }
-    // Zero out automerge label if success, -1 vote if fail.
     labels.put(config.getAutomergeLabel(), vote);
     reviewInput.labels = labels;
     gApi.changes()
@@ -367,9 +367,10 @@
    *
    * @param sdsMergeInput Input containing metadata for the merge.
    * @throws RestApiException
+   * @throws ConfigInvalidException
    */
   public void createSingleDownstreamMerge(SingleDownstreamMergeInput sdsMergeInput)
-      throws RestApiException {
+      throws RestApiException, ConfigInvalidException {
 
     String currentTopic = setTopic(sdsMergeInput.sourceId, sdsMergeInput.topic);
 
@@ -396,7 +397,10 @@
           sdsMergeInput.downstreamBranch);
     }
 
-    gApi.changes().create(downstreamChangeInput);
+    ChangeApi downstreamChange = gApi.changes().create(downstreamChangeInput);
+
+    // Vote maxAutomergeVote on the change so we know it was successful.
+    updateVote(downstreamChange.get(), config.getAutomergeLabel(), config.getMaxAutomergeVote());
   }
 
   private void automergeChanges(ChangeInfo change, RevisionInfo revisionInfo)
@@ -461,12 +465,16 @@
     }
   }
 
-  private void updateVote(ChangeInfo change, String label, short vote)
+  private void propagateVote(ChangeInfo change, String label, short vote)
       throws RestApiException, ConfigInvalidException {
     if (label.equals(config.getAutomergeLabel())) {
       log.debug("Not updating automerge label, as it blocks when there is a merge conflict.");
       return;
     }
+    updateVote(change, label, vote);
+  }
+
+  private void updateVote(ChangeInfo change, String label, short vote) throws RestApiException {
     log.debug("Giving {} for label {} to {}", vote, label, change.id);
     // Vote on all downstream branches unless merge conflict.
     ReviewInput reviewInput = new ReviewInput();
@@ -478,7 +486,7 @@
 
   private void updateDownstreamMerge(
       String newParentRevision, String upstreamSubject, Integer sourceNum, boolean doMerge)
-      throws RestApiException {
+      throws RestApiException, ConfigInvalidException {
     MergeInput mergeInput = new MergeInput();
     mergeInput.source = newParentRevision;
 
@@ -500,7 +508,8 @@
       originalChange.restore(restoreInput);
     }
 
-    originalChange.createMergePatchSet(mergePatchSetInput);
+    ChangeInfo downstreamChange = originalChange.createMergePatchSet(mergePatchSetInput);
+    updateVote(downstreamChange, config.getAutomergeLabel(), config.getMaxAutomergeVote());
   }
 
   private String getPreviousRevision(ChangeApi change, int currentPatchSetNumber)
diff --git a/src/main/resources/Documentation/config.md b/src/main/resources/Documentation/config.md
index 8f3dfe8..ada9bb5 100644
--- a/src/main/resources/Documentation/config.md
+++ b/src/main/resources/Documentation/config.md
@@ -25,10 +25,24 @@
 ```
 
 global.automergeLabel
-: Label to vote -1 on when there is a merge conflict.
+: Label to vote minAutomergeVote on when there is a merge conflict.
 
   When the automerger detects a merge conflict from one branch to another, it
-  will vote -1 on this label.
+  will vote minAutomergeVote on this label.
+
+global.maxAutomergeVote
+: Value to vote on a successful automerge.
+
+  When the automerger succeeds in merging downstream, it will vote
+  maxAutomergeVote on the downstream change. The original change uploaded by
+  the user will have a vote of 0, so that it can be easily programatically
+  distinguished from the otheres.
+
+global.minAutomergeVote
+: Value to vote on a failed automerge.
+
+  When the automerger detects a merge conflict from one branch to another, it
+  will vote minAutomergeVote for the configured automergeLabel.
 
 global.hostName
 : Hostname to use in a custom conflict message.
diff --git a/src/test/java/com/googlesource/gerrit/plugins/automerger/ConfigLoaderIT.java b/src/test/java/com/googlesource/gerrit/plugins/automerger/ConfigLoaderIT.java
index c2f9637..b5afb95 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/automerger/ConfigLoaderIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/automerger/ConfigLoaderIT.java
@@ -188,6 +188,18 @@
         .isEqualTo("line1\n" + "line2\n" + "line3 ${branch}\n" + "line4");
   }
 
+  @Test
+  public void getMaxAutomergeVoteTest() throws Exception {
+    defaultSetup("alternate.config");
+    assertThat(configLoader.getMaxAutomergeVote()).isEqualTo(5);
+  }
+
+  @Test
+  public void getMinAutomergeVoteTest() throws Exception {
+    defaultSetup("alternate.config");
+    assertThat(configLoader.getMinAutomergeVote()).isEqualTo(-3);
+  }
+
   private void setupTestRepo(
       String resourceName, Project.NameKey projectNameKey, String branchName, String filename)
       throws Exception {
diff --git a/src/test/java/com/googlesource/gerrit/plugins/automerger/DownstreamCreatorIT.java b/src/test/java/com/googlesource/gerrit/plugins/automerger/DownstreamCreatorIT.java
index 4a7fc24..a9863ca 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/automerger/DownstreamCreatorIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/automerger/DownstreamCreatorIT.java
@@ -23,13 +23,16 @@
 import com.google.gerrit.acceptance.PushOneCommit;
 import com.google.gerrit.acceptance.TestPlugin;
 import com.google.gerrit.extensions.api.changes.ChangeApi;
+import com.google.gerrit.extensions.client.ListChangesOption;
 import com.google.gerrit.extensions.common.ChangeInfo;
 import com.google.gerrit.extensions.restapi.BinaryResult;
+import com.google.gerrit.extensions.restapi.RestApiException;
 import com.google.gerrit.reviewdb.client.Branch;
 import com.google.gerrit.reviewdb.client.Project;
 import com.google.gerrit.reviewdb.client.RefNames;
 import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.util.EnumSet;
 import java.util.List;
 import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository;
 import org.eclipse.jgit.junit.TestRepository;
@@ -87,15 +90,18 @@
       ChangeApi downstreamChange = gApi.changes().id(c._number);
       // It should skip ds_one, since this is a DO NOT MERGE
       if (c.branch.equals("ds_one")) {
+        assertThat(getVote(downstreamChange, "Code-Review")).isEqualTo(1);
         assertThat(downstreamChange.get().subject).contains("skipped:");
         assertThat(downstreamChange.current().files().keySet()).contains("filename");
         assertThat(downstreamChange.current().files().get("filename").linesDeleted).isEqualTo(1);
       } else if (c.branch.equals("ds_two")) {
+        assertThat(getVote(downstreamChange, "Code-Review")).isEqualTo(1);
         // It should not skip ds_two, since it is marked with mergeAll: true
         assertThat(downstreamChange.get().subject).doesNotContain("skipped:");
         BinaryResult downstreamContent = downstreamChange.current().file("filename").content();
         assertThat(downstreamContent.asString()).isEqualTo(content.asString());
       } else {
+        assertThat(getVote(downstreamChange, "Code-Review")).isEqualTo(0);
         assertThat(c.branch).isEqualTo("master");
       }
     }
@@ -212,4 +218,14 @@
       push.to(RefNames.REFS_CONFIG).assertOkStatus();
     }
   }
+
+  private int getVote(ChangeApi change, String label) throws RestApiException {
+    return change
+        .get(EnumSet.of(ListChangesOption.DETAILED_LABELS))
+        .labels
+        .get(label)
+        .all
+        .get(0)
+        .value;
+  }
 }
diff --git a/src/test/resources/com/googlesource/gerrit/plugins/automerger/alternate.config b/src/test/resources/com/googlesource/gerrit/plugins/automerger/alternate.config
index 001a1cf..1016e89 100644
--- a/src/test/resources/com/googlesource/gerrit/plugins/automerger/alternate.config
+++ b/src/test/resources/com/googlesource/gerrit/plugins/automerger/alternate.config
@@ -12,6 +12,8 @@
   blankMerge = .*DO NOT MERGE.*
   manifestFile = default.xml
   manifestProject = platform/manifest
+  maxAutomergeVote = 5
+  minAutomergeVote = -3
   ignoreProjects = platform/ignore/me
   conflictMessage = line1\n\
 line2\n\
