diff --git a/bridge/gitlab/iterator/issue.go b/bridge/gitlab/iterator/issue.go
index a6bcebf189bc73c7b8bc42d6e006d72726d36b4f..9361b49666a6356693e359dccfd6b8922b33801f 100644
--- a/bridge/gitlab/iterator/issue.go
+++ b/bridge/gitlab/iterator/issue.go
@@ -7,9 +7,10 @@ import (
 )
 
 type issueIterator struct {
-	page  int
-	index int
-	cache []*gitlab.Issue
+	page     int
+	lastPage bool
+	index    int
+	cache    []*gitlab.Issue
 }
 
 func newIssueIterator() *issueIterator {
@@ -38,10 +39,14 @@ func (ii *issueIterator) Value() *gitlab.Issue {
 }
 
 func (ii *issueIterator) getNext(ctx context.Context, conf config) (bool, error) {
+	if ii.lastPage {
+		return false, nil
+	}
+
 	ctx, cancel := context.WithTimeout(ctx, conf.timeout)
 	defer cancel()
 
-	issues, _, err := conf.gc.Issues.ListProjectIssues(
+	issues, resp, err := conf.gc.Issues.ListProjectIssues(
 		conf.project,
 		&gitlab.ListProjectIssuesOptions{
 			ListOptions: gitlab.ListOptions{
@@ -60,6 +65,10 @@ func (ii *issueIterator) getNext(ctx context.Context, conf config) (bool, error)
 		return false, err
 	}
 
+	if resp.TotalPages == ii.page {
+		ii.lastPage = true
+	}
+
 	// if repository doesn't have any issues
 	if len(issues) == 0 {
 		return false, nil
@@ -74,6 +83,7 @@ func (ii *issueIterator) getNext(ctx context.Context, conf config) (bool, error)
 
 func (ii *issueIterator) Reset() {
 	ii.index = -1
-	ii.page = -1
+	ii.page = 1
+	ii.lastPage = false
 	ii.cache = nil
 }
diff --git a/bridge/gitlab/iterator/labelEvent.go b/bridge/gitlab/iterator/labelEvent.go
index 7ee2604b4a93930765ffabe7d0e8aa466daf0cf7..812e6646d5d9b65ecc15ba1b690882b689d90e9b 100644
--- a/bridge/gitlab/iterator/labelEvent.go
+++ b/bridge/gitlab/iterator/labelEvent.go
@@ -49,7 +49,7 @@ func (lei *labelEventIterator) getNext(ctx context.Context, conf config) (bool,
 	// and sort them by ID
 	page := 1
 	for {
-		labelEvents, _, err := conf.gc.ResourceLabelEvents.ListIssueLabelEvents(
+		labelEvents, resp, err := conf.gc.ResourceLabelEvents.ListIssueLabelEvents(
 			conf.project,
 			lei.issue,
 			&gitlab.ListLabelEventsOptions{
@@ -68,7 +68,13 @@ func (lei *labelEventIterator) getNext(ctx context.Context, conf config) (bool,
 		if len(labelEvents) == 0 {
 			break
 		}
+
 		lei.cache = append(lei.cache, labelEvents...)
+
+		if resp.TotalPages == page {
+			break
+		}
+
 		page++
 	}
 
diff --git a/bridge/gitlab/iterator/note.go b/bridge/gitlab/iterator/note.go
index 486ca94e878fe58592c1e86310d9707b7fbcba29..a1e0544c69b804d1c1320d27594fe6158e9f9965 100644
--- a/bridge/gitlab/iterator/note.go
+++ b/bridge/gitlab/iterator/note.go
@@ -7,10 +7,11 @@ import (
 )
 
 type noteIterator struct {
-	issue int
-	page  int
-	index int
-	cache []*gitlab.Note
+	issue    int
+	page     int
+	lastPage bool
+	index    int
+	cache    []*gitlab.Note
 }
 
 func newNoteIterator() *noteIterator {
@@ -39,10 +40,14 @@ func (in *noteIterator) Value() *gitlab.Note {
 }
 
 func (in *noteIterator) getNext(ctx context.Context, conf config) (bool, error) {
+	if in.lastPage {
+		return false, nil
+	}
+
 	ctx, cancel := context.WithTimeout(ctx, conf.timeout)
 	defer cancel()
 
-	notes, _, err := conf.gc.Notes.ListIssueNotes(
+	notes, resp, err := conf.gc.Notes.ListIssueNotes(
 		conf.project,
 		in.issue,
 		&gitlab.ListIssueNotesOptions{
@@ -61,6 +66,10 @@ func (in *noteIterator) getNext(ctx context.Context, conf config) (bool, error)
 		return false, err
 	}
 
+	if resp.TotalPages == in.page {
+		in.lastPage = true
+	}
+
 	if len(notes) == 0 {
 		return false, nil
 	}
@@ -75,6 +84,7 @@ func (in *noteIterator) getNext(ctx context.Context, conf config) (bool, error)
 func (in *noteIterator) Reset(issue int) {
 	in.issue = issue
 	in.index = -1
-	in.page = -1
+	in.page = 1
+	in.lastPage = false
 	in.cache = nil
 }