diff --git a/bazel/exporter/bazel_util.go b/bazel/exporter/bazel_util.go
index 5d936fc..3090ba7 100644
--- a/bazel/exporter/bazel_util.go
+++ b/bazel/exporter/bazel_util.go
@@ -36,15 +36,15 @@
 }
 
 // Given a Bazel rule name find that rule from within the
-// query results.
-func findRule(qr *analysis_v2.CqueryResult, name string) (*build.Rule, error) {
+// query results. Returns nil if the given rule is not present.
+func findRule(qr *analysis_v2.CqueryResult, name string) *build.Rule {
 	for _, result := range qr.GetResults() {
 		r := result.GetTarget().GetRule()
 		if r.GetName() == name {
-			return r, nil
+			return r
 		}
 	}
-	return nil, skerr.Fmt(`cannot find rule %q`, name)
+	return nil
 }
 
 // Parse a rule into its constituent parts.
diff --git a/bazel/exporter/bazel_util_test.go b/bazel/exporter/bazel_util_test.go
index 26af56f..384a286 100644
--- a/bazel/exporter/bazel_util_test.go
+++ b/bazel/exporter/bazel_util_test.go
@@ -136,28 +136,23 @@
 	err := prototext.Unmarshal([]byte(textProto), &qr)
 	require.NoError(t, err)
 
-	r, err := findRule(&qr, "//src/apps:hello")
-	require.NoError(t, err)
+	r := findRule(&qr, "//src/apps:hello")
 	require.NotNil(t, r)
 	assert.Equal(t, "//src/apps:hello", r.GetName())
 }
 
-func TestFindRule_RuleDoesntExists_ReturnsError(t *testing.T) {
+func TestFindRule_RuleDoesntExists_ReturnsNil(t *testing.T) {
 	qr := analysis_v2.CqueryResult{}
 	err := prototext.Unmarshal([]byte(textProto), &qr)
 	require.NoError(t, err)
 
-	r, err := findRule(&qr, "//path/to:nonexistent_rule")
-	assert.Error(t, err)
-	assert.Nil(t, r)
+	assert.Nil(t, findRule(&qr, "//path/to:nonexistent_rule"))
 }
 
-func TestFindRule_InvalidRule_ReturnsError(t *testing.T) {
+func TestFindRule_InvalidRule_ReturnsNil(t *testing.T) {
 	qr := analysis_v2.CqueryResult{}
 	err := prototext.Unmarshal([]byte(textProto), &qr)
 	require.NoError(t, err)
 
-	r, err := findRule(&qr, "")
-	assert.Error(t, err)
-	assert.Nil(t, r)
+	assert.Nil(t, findRule(&qr, ""))
 }
diff --git a/bazel/exporter/cmake_exporter.go b/bazel/exporter/cmake_exporter.go
index 2c3cf84..dd24212 100644
--- a/bazel/exporter/cmake_exporter.go
+++ b/bazel/exporter/cmake_exporter.go
@@ -108,9 +108,9 @@
 		}
 	}
 	for _, d := range deps {
-		dr, err := findRule(qr, d)
-		if err != nil {
-			return nil, skerr.Wrap(err)
+		dr := findRule(qr, d)
+		if dr == nil {
+			return nil, skerr.Fmt("cannot find rule %s", d)
 		}
 		if isExternalRule(dr.GetName()) {
 			continue
@@ -136,9 +136,9 @@
 		return nil, skerr.Wrap(err)
 	}
 	for _, d := range deps {
-		dr, err := findRule(qr, d)
-		if err != nil {
-			return nil, skerr.Wrap(err)
+		dr := findRule(qr, d)
+		if dr == nil {
+			return nil, skerr.Fmt("cannot find rule %s", d)
 		}
 		defs, err := getRuleDefines(dr, qr)
 		if err != nil {
diff --git a/bazel/exporter/cmake_exporter_test.go b/bazel/exporter/cmake_exporter_test.go
index 4942bf3..9f375ca 100644
--- a/bazel/exporter/cmake_exporter_test.go
+++ b/bazel/exporter/cmake_exporter_test.go
@@ -254,8 +254,7 @@
 	err := prototext.Unmarshal([]byte(textProto), &qr)
 	require.NoError(t, err)
 
-	r, err := findRule(&qr, "//src/apps:hello")
-	require.NoError(t, err)
+	r := findRule(&qr, "//src/apps:hello")
 	require.NotNil(t, r)
 
 	copts, err := getRuleCopts(r)
diff --git a/bazel/exporter/cmake_rule_test.go b/bazel/exporter/cmake_rule_test.go
index c90d6931..085b89a 100644
--- a/bazel/exporter/cmake_rule_test.go
+++ b/bazel/exporter/cmake_rule_test.go
@@ -152,8 +152,7 @@
 	err := prototext.Unmarshal([]byte(ruleTestTextProto), &qr)
 	require.NoError(t, err)
 
-	r, err := findRule(&qr, "//src/apps:hello")
-	require.NoError(t, err)
+	r := findRule(&qr, "//src/apps:hello")
 	require.NotNil(t, r)
 	assert.Equal(t, "//src/apps:hello", r.GetName())
 
@@ -166,8 +165,7 @@
 	err := prototext.Unmarshal([]byte(ruleTestTextProto), &qr)
 	require.NoError(t, err)
 
-	r, err := findRule(&qr, "//src/libs:sum")
-	require.NoError(t, err)
+	r := findRule(&qr, "//src/libs:sum")
 	require.NotNil(t, r)
 	assert.Equal(t, "//src/libs:sum", r.GetName())
 
@@ -180,8 +178,7 @@
 	err := prototext.Unmarshal([]byte(ruleTestTextProto), &qr)
 	require.NoError(t, err)
 
-	r, err := findRule(&qr, "//src/apps:hello")
-	require.NoError(t, err)
+	r := findRule(&qr, "//src/apps:hello")
 	require.NotNil(t, r)
 	assert.Equal(t, "//src/apps:hello", r.GetName())
 
@@ -194,8 +191,7 @@
 	err := prototext.Unmarshal([]byte(ruleTestTextProto), &qr)
 	require.NoError(t, err)
 
-	r, err := findRule(&qr, "//src/apps:hello")
-	require.NoError(t, err)
+	r := findRule(&qr, "//src/apps:hello")
 	require.NotNil(t, r)
 	assert.Equal(t, "//src/apps:hello", r.GetName())
 
@@ -209,8 +205,7 @@
 	err := prototext.Unmarshal([]byte(ruleTestTextProto), &qr)
 	require.NoError(t, err)
 
-	r, err := findRule(&qr, "//src/apps:hello")
-	require.NoError(t, err)
+	r := findRule(&qr, "//src/apps:hello")
 	require.NotNil(t, r)
 	assert.Equal(t, "//src/apps:hello", r.GetName())
 
