diff --git a/cmd/vulnreport/create.go b/cmd/vulnreport/create.go
index 9b30192..60ff3d2 100644
--- a/cmd/vulnreport/create.go
+++ b/cmd/vulnreport/create.go
@@ -168,7 +168,15 @@
 }
 
 func createReport(ctx context.Context, iss *issues.Issue, pc *proxy.Client, gc *ghsa.Client, ac *genai.GeminiClient, allowClosed bool) (r *report.Report, err error) {
-	parsed, err := parseGithubIssue(iss, pc, allowClosed)
+	if iss.HasLabel(labelDuplicate) {
+		return nil, fmt.Errorf("duplicate issue")
+	}
+
+	if !allowClosed && iss.State == "closed" {
+		return nil, errors.New("issue is closed")
+	}
+
+	parsed, err := parseGithubIssue(iss, pc)
 	if err != nil {
 		return nil, err
 	}
@@ -270,16 +278,17 @@
 	return r
 }
 
-func parseGithubIssue(iss *issues.Issue, pc *proxy.Client, allowClosed bool) (*parsedIssue, error) {
+const (
+	labelDuplicate = "duplicate"
+	labelDirect    = "Direct External Report"
+)
+
+func parseGithubIssue(iss *issues.Issue, pc *proxy.Client) (*parsedIssue, error) {
 	parsed := &parsedIssue{
 		id: iss.NewGoID(),
 	}
 
-	if !allowClosed && iss.State == "closed" {
-		return nil, errors.New("issue is closed")
-	}
-
-	// Parse labels for excluded and duplicate issues.
+	// Find any excluded labels.
 	for _, label := range iss.Labels {
 		if reason, ok := report.FromLabel(label); ok {
 			if parsed.excluded == "" {
@@ -288,9 +297,6 @@
 				return nil, fmt.Errorf("issue has multiple excluded reasons")
 			}
 		}
-		if label == "duplicate" {
-			return nil, fmt.Errorf("duplicate issue")
-		}
 	}
 
 	// Parse elements from GitHub issue title.
diff --git a/cmd/vulnreport/duplicates.go b/cmd/vulnreport/duplicates.go
index a312f3e..90704b7 100644
--- a/cmd/vulnreport/duplicates.go
+++ b/cmd/vulnreport/duplicates.go
@@ -108,7 +108,12 @@
 		}
 	}
 
-	parsed, err := parseGithubIssue(iss, d.pc, false)
+	if iss.HasLabel(labelDuplicate) {
+		log.Infof("issue #%d is already marked duplicate, skipping", iss.Number)
+		return
+	}
+
+	parsed, err := parseGithubIssue(iss, d.pc)
 	if err != nil {
 		return err
 	}
@@ -130,6 +135,12 @@
 				if err != nil {
 					fname = r.ID
 				}
+				// Skip the report if it corresponds to the issue number.
+				// (This happens when there is an unsubmitted report for the issue).
+				_, _, in, _ := report.ParseFilepath(fname)
+				if in == iss.Number {
+					continue
+				}
 				xrefs = append(xrefs, fname)
 			}
 		}
diff --git a/internal/issues/issues.go b/internal/issues/issues.go
index b7a88b4..df4c1c0 100644
--- a/internal/issues/issues.go
+++ b/internal/issues/issues.go
@@ -10,6 +10,7 @@
 	"context"
 	"fmt"
 	"net/url"
+	"slices"
 	"time"
 
 	"github.com/google/go-github/v41/github"
@@ -212,3 +213,7 @@
 	}
 	return fmt.Sprintf("GO-%04d-%04d", year, iss.Number)
 }
+
+func (iss *Issue) HasLabel(label string) bool {
+	return slices.Contains(iss.Labels, label)
+}
