diff --git a/cmd/cli/app/upload.go b/cmd/cli/app/upload.go
index a86fde31667741c58e6fd3993fa344785fbef7df..cc0d1290801125ac3a0bc785ff47cbc59e3bc38a 100644
--- a/cmd/cli/app/upload.go
+++ b/cmd/cli/app/upload.go
@@ -16,6 +16,7 @@ limitations under the License.
 package app
 
 import (
+	"fmt"
 	"os"
 
 	"github.com/projectrekor/rekor/pkg/generated/client/entries"
@@ -57,10 +58,16 @@ var uploadCmd = &cobra.Command{
 
 		resp, err := rekorClient.Entries.CreateLogEntry(params)
 		if err != nil {
-			log.Fatal(err)
+			switch err.(type) {
+			case *entries.CreateLogEntryConflict:
+				fmt.Println("Entry already exists.")
+				return
+			default:
+				log.Fatal(err)
+			}
 		}
 
-		log.Infof("Created entry at: %v%v", viper.GetString("rekor_server"), resp.Location)
+		fmt.Printf("Created entry at: %v%v\n", viper.GetString("rekor_server"), resp.Location)
 	},
 }
 
diff --git a/tests/e2e-test.sh b/tests/e2e-test.sh
index c0889420e79a686bbffa616d763bac402f47bad0..ed5b9502311e60776c0b28a9396a83f97384ef46 100755
--- a/tests/e2e-test.sh
+++ b/tests/e2e-test.sh
@@ -6,6 +6,19 @@ docker-compose up -d
 
 # Node
 nodedir=${testdir}/node
-go run ./cmd/cli/ upload \
+
+# First time we should get "Created entry"
+out=$(go run ./cmd/cli/ upload \
+    --artifact $(< ${nodedir}/url) --sha $(< ${nodedir}/sha) \
+    --signature=${nodedir}/sig  --public-key=${nodedir}/key)
+if [[ $out != *"Created entry at"* ]]; then
+    echo "Expected 'Created entry at', got $out"
+fi
+
+# Second time we should get "Entry already exists"
+out=$(go run ./cmd/cli/ upload \
     --artifact $(< ${nodedir}/url) --sha $(< ${nodedir}/sha) \
-    --signature=${nodedir}/sig  --public-key=${nodedir}/key
\ No newline at end of file
+    --signature=${nodedir}/sig  --public-key=${nodedir}/key)
+if [[ $out != *"Entry already exists"* ]]; then
+    echo "Expected 'Created entry at', got $out"
+fi