GitHub Actions limits, in one place
GitHub Actions limits cap how long a job runs, how many jobs run at once, how long a job waits in the queue and how many API calls a workflow makes. Some limits change on your own runners, and some do not.
The limits that matter most
Most teams only ever hit a few of these. Here they are as of November 2026, from GitHub's Actions limits page. GitHub changes them, so check that page before you plan around a number.
| Limit | GitHub-hosted | Self-hosted |
|---|---|---|
| Time per job | 6 hours | 5 days |
| Time per workflow run | 35 days | 35 days |
| Time in the queue | Not listed | 24 hours, then cancelled |
| Jobs per matrix | 256 | 256 |
| Jobs at once | Set by your plan | As many runners as you have |
| GITHUB_TOKEN API calls | 1,000 an hour per repo | 1,000 an hour per repo |
Job and workflow time limits
A job on a GitHub-hosted runner can run for up to 6 hours. That is also the default when you don't set timeout-minutes. A job on your own runner can run for up to 5 days.
A whole workflow run can last 35 days. That includes time spent waiting for approval.
You should set your own, much shorter, timeout. A stuck job wastes time and money. Read GitHub Actions timeout-minutes to set one.
Concurrent job limits by plan
GitHub-hosted runners run only so many jobs at once. As of November 2026, standard runners allow:
- Free: 20 jobs at once
- Pro: 40
- Team: 60
- Enterprise: 500
macOS jobs have a smaller cap: 5 at once on Free, Pro and Team, and 50 on Enterprise. Extra jobs wait in the queue until a slot frees up.
Minutes are a separate limit. Each plan includes some free minutes, then you pay per minute. If you run out each month, read GitHub Actions minutes running out.
On your own runners, the matrix and plan limits matter less. What sets your pace is how many runners your machines can hold at once.
GitHub API rate limits and secondary limits
Workflows often call the GitHub API. They post comments, add labels or read releases. Those calls count against GitHub API rate limits.
- GITHUB_TOKEN: 1,000 requests an hour per repo. Enterprise Cloud repos get more.
- Other tokens: a personal token or a GitHub App has its own hourly budget. Check GitHub's REST API docs for today's numbers.
- Secondary rate limit: GitHub also limits bursts. Too many calls at once, or too fast, get a 403 or 429 error even when you have budget left.
To avoid the GitHub secondary rate limit, slow down. Make calls one at a time. When you get an error, wait for the time in the retry-after header before you try again.
Which limits change on self-hosted runners
On a self-hosted runner, some GitHub Actions limitations go away. Others stay.
- Changes: jobs at once. Your machines run as many jobs as you have runners. There is no per-minute bill from GitHub for the runner itself.
- Changes: time per job goes from 6 hours to 5 days.
- Stays: the matrix cap, the workflow run cap and API rate limits. GitHub still runs the queue.
- New: a job waits at most 24 hours for a runner, then GitHub cancels it.
With Codemany, each job gets a fresh, single-use runner that registers with GitHub just in time. Each runner budgets about 4 GB of memory, 2 CPU cores and 15 GB of disk. An 8 GB Mac runs 1 job at a time, and a 16 GB Mac runs 3. To run more, add machines. GitHub errors and rate limits never stop a job that is already running.
Your own runners still need care. A machine that is off or out of disk takes no jobs, and the queue grows. Watch the 24-hour queue limit: a job that waits that long is cancelled, not run.
How to stay under them
- Set timeouts. Use
timeout-minuteson every job. - Cancel old runs. Use
concurrencyso a new push stops the old run. - Cut the matrix. Use
excludeto drop combos you don't need. - Batch API calls. One call that does a lot beats many small ones.
- Move heavy jobs. Run macOS and long jobs on your own machines. See cut GitHub Actions costs.
concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true
More answers are in the Codemany FAQ.
Questions
How many jobs can run at once?
It depends on your plan for GitHub-hosted runners. Your own machines run as many jobs as you allow.
Do self-hosted runners hit API rate limits?
Runner registration uses the API. Codemany registers a just-in-time runner for each job, and GitHub errors and rate limits never stop a running job.
Is there a limit on self-hosted job time?
Yes. GitHub still ends a job after its maximum run time, which is 5 days on self-hosted runners as of November 2026.
Related
Read next: timeout-minutes, minutes running out, self-hosted runners, GitHub Actions costs and the FAQ.
Start a 14-day trial No card needed. $20 a month for 2 machines after that.