diff --git a/prow/tide/blockers/blockers.go b/prow/tide/blockers/blockers.go
index <HASH>..<HASH> 100644
--- a/prow/tide/blockers/blockers.go
+++ b/prow/tide/blockers/blockers.go
@@ -71,8 +71,10 @@ func (b Blockers) GetApplicable(org, repo, branch string) []Blocker {
 
 // FindAll finds issues with label in the specified orgs/repos that should block tide.
 func FindAll(ghc githubClient, log *logrus.Entry, label, orgRepoTokens string) (Blockers, error) {
+	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute)
+	defer cancel()
 	issues, err := search(
-		context.Background(),
+		ctx,
 		ghc,
 		log,
 		blockerQuery(label, orgRepoTokens),
diff --git a/prow/tide/search.go b/prow/tide/search.go
index <HASH>..<HASH> 100644
--- a/prow/tide/search.go
+++ b/prow/tide/search.go
@@ -58,7 +58,8 @@ func search(query querier, log *logrus.Entry, q string, start, end time.Time, or
 	var totalCost, remaining int
 	var ret []PullRequest
 	var sq searchQuery
-	ctx := context.Background()
+	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute)
+	defer cancel()
 	for {
 		log.Debug("Sending query")
 		if err := query(ctx, &sq, vars, org); err != nil {
Tide: Limit duration of searches to 5 mins

We see occurences were status udpate time takes more than <I>k seconds
(about <I> minutes). Not entirely sure why this happens, but normal sync
durations for everything is < <I> seconds: <URL>