diff --git a/lib/github.js b/lib/github.js
index 2a6de02..58c201e 100644
--- a/lib/github.js
+++ b/lib/github.js
@@ -31,7 +31,8 @@ class GitHubReleaser {
         return this.github.repos.createRelease(params);
     }
     allReleases(params) {
-        return this.github.paginate.iterator(this.github.repos.listReleases.endpoint.merge(params));
+        const updatedParams = Object.assign({ per_page: 100 }, params);
+        return this.github.paginate.iterator(this.github.repos.listReleases.endpoint.merge(updatedParams));
     }
 }
 exports.GitHubReleaser = GitHubReleaser;
diff --git a/lib/main.js b/lib/main.js
index ddc454b..23fb9f5 100644
--- a/lib/main.js
+++ b/lib/main.js
@@ -21,7 +21,21 @@ function run() {
             if (!util_1.isTag(config.github_ref)) {
                 throw new Error(`⚠️ GitHub Releases requires a tag`);
             }
-            const gh = new github_2.GitHub(config.github_token);
+            github_2.GitHub.plugin(require("@octokit/plugin-throttling"));
+            const gh = new github_2.GitHub(config.github_token, {
+                onRateLimit: (retryAfter, options) => {
+                    console.warn(`Request quota exhausted for request ${options.method} ${options.url}`);
+                    if (options.request.retryCount === 0) {
+                        // only retries once
+                        console.log(`Retrying after ${retryAfter} seconds!`);
+                        return true;
+                    }
+                },
+                onAbuseLimit: (retryAfter, options) => {
+                    // does not retry, only logs a warning
+                    console.warn(`Abuse detected for request ${options.method} ${options.url}`);
+                }
+            });
             let rel = yield github_1.release(config, new github_1.GitHubReleaser(gh));
             if (config.input_files) {
                 util_1.paths(config.input_files).forEach((path) => __awaiter(this, void 0, void 0, function* () {
diff --git a/package-lock.json b/package-lock.json
index 6124ae3..bc60c2f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
 {
   "name": "action-gh-release",
-  "version": "0.1.2",
+  "version": "0.1.3",
   "lockfileVersion": 1,
   "requires": true,
   "dependencies": {
@@ -440,6 +440,14 @@
         "universal-user-agent": "^2.0.3"
       }
     },
+    "@octokit/plugin-throttling": {
+      "version": "2.6.0",
+      "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-2.6.0.tgz",
+      "integrity": "sha512-E0xQrcD36sVEeBhut6j9nWX38vm/1LKMRSUqjvJ/mqGLXfHr4jYMsrR3I/nT2QC0eJL1/SKMt7zxOt7pZiFhDA==",
+      "requires": {
+        "bottleneck": "^2.15.3"
+      }
+    },
     "@octokit/request": {
       "version": "5.1.0",
       "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.1.0.tgz",
@@ -943,6 +951,11 @@
       "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.1.0.tgz",
       "integrity": "sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A=="
     },
+    "bottleneck": {
+      "version": "2.19.5",
+      "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz",
+      "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw=="
+    },
     "brace-expansion": {
       "version": "1.1.11",
       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
diff --git a/package.json b/package.json
index eb417d7..e80c5ed 100644
--- a/package.json
+++ b/package.json
@@ -21,6 +21,7 @@
   "dependencies": {
     "@actions/core": "^1.1.0",
     "@actions/github": "^1.1.0",
+    "@octokit/plugin-throttling": "^2.6.0",
     "glob": "^7.1.4",
     "mime": "^2.4.4"
   },
diff --git a/src/github.ts b/src/github.ts
index 92f52c5..582ab03 100644
--- a/src/github.ts
+++ b/src/github.ts
@@ -70,8 +70,9 @@ export class GitHubReleaser implements Releaser {
     owner: string;
     repo: string;
   }): AsyncIterableIterator<{ data: Release[] }> {
+    const updatedParams = { per_page: 100, ...params };
     return this.github.paginate.iterator(
-      this.github.repos.listReleases.endpoint.merge(params)
+      this.github.repos.listReleases.endpoint.merge(updatedParams)
     );
   }
 }
diff --git a/src/main.ts b/src/main.ts
index 42f9762..d492827 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -10,7 +10,25 @@ async function run() {
     if (!isTag(config.github_ref)) {
       throw new Error(`⚠️ GitHub Releases requires a tag`);
     }
-    const gh = new GitHub(config.github_token);
+    GitHub.plugin(require("@octokit/plugin-throttling"));
+    const gh = new GitHub(config.github_token, {
+      onRateLimit: (retryAfter, options) => {
+        console.warn(
+          `Request quota exhausted for request ${options.method} ${options.url}`
+        );
+        if (options.request.retryCount === 0) {
+          // only retries once
+          console.log(`Retrying after ${retryAfter} seconds!`);
+          return true;
+        }
+      },
+      onAbuseLimit: (retryAfter, options) => {
+        // does not retry, only logs a warning
+        console.warn(
+          `Abuse detected for request ${options.method} ${options.url}`
+        );
+      }
+    });
     let rel = await release(config, new GitHubReleaser(gh));
     if (config.input_files) {
       paths(config.input_files).forEach(async path => {