GitHub Backup Repo
Pricing
Pay per usage
GitHub Backup Repo
Back up public GitHub repositories in bulk. Paste repo URLs and get a ZIP of each main branch, stamped with the exact commit SHA, plus one ZIP of the whole batch.
Pricing
Pay per usage
Rating
5.0
(2)
Developer
One Scales
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
15 hours ago
Last modified
Categories
Share
Introduction
Back up any public GitHub repository to a ZIP file in one click. Paste one repository URL or a hundred, and get a downloadable ZIP of each repository's main branch, plus a single ZIP of the whole batch at the end. Download links are private and expire after 24 hours by default, or any time you choose up to about a month.
Each backup is stamped with the exact commit SHA it captured, along with the file count, size and a UTC timestamp. That gives you a dated record of exactly what the code looked like when you took the backup. If a repository has no main branch (older projects often use master), its default branch is backed up instead, so nothing is skipped.
The files are the archives GitHub itself produces, stored byte for byte. Nothing is modified or repackaged.
Back up only repositories you own or are authorized to copy. Being public on GitHub does not make code free to copy. Each repository's license and GitHub's Terms of Service still apply, and you are responsible for how you use what you download.
Features
- Bulk backups — back up one repository or hundreds in a single run, each with its own download link.
- Commit-stamped — every backup records the exact commit SHA, file count, size and time it was taken.
- Main branch, with a fallback — backs up
main, and falls back to the default branch when a repository has nomain. - Expiring download links — links last 24 hours by default; set anywhere from 1 hour to 730 hours (about one month). The final row downloads every backup in one ZIP.
- Accepts any GitHub link — paste repository pages,
.gitclone URLs, SSH addresses or deep links into a folder.
Use Cases
- Off-site copy of your code — keep a backup of your own public repositories outside GitHub, in case of account lockout, accidental deletion or a bad force-push.
- Scheduled snapshots — run it on a schedule to keep a dated history of your project's main branch.
- Organization-wide backups — back up every public repository your company or team owns in one run.
- Release records — capture the exact code you shipped, tied to a commit SHA.
- Compliance and records — keep a time-stamped archive of your own code for legal, licensing or audit needs.
- Migration prep — pull down your repositories before moving them to another host.
- Client handover — give a client a dated ZIP of the code you built for them.
- Portfolio archiving — keep a permanent copy of your personal projects.
Input
Configure the actor in the UI, or pass the same fields via the API.
| Field | Type | Required | Description |
|---|---|---|---|
Repository URLs (repoUrls) | Array of strings | Yes | Public GitHub repository URLs, one per line — e.g. https://github.com/owner/repo. Also accepts github.com/owner/repo, .git clone URLs, git@github.com:owner/repo.git, and links to any page inside the repository. |
Download Link Expiry (hours) (linkExpiryHours) | Integer | No — defaults to 24 | How long the download links keep working. Minimum 1 hour, maximum 730 hours (about one month). |
Proxy Configuration (proxyConfiguration) | Object | No — defaults to residential | Proxy used to download the repositories, which reduces rate-limiting and blocking. The backups themselves are unaffected. |
{"repoUrls": ["https://github.com/onescales/token-proof-of-work"],"linkExpiryHours": 24,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Output
One row per repository, in the order you entered them, each with a download link. The final row is the bulk download: one link to a ZIP of every repository that was backed up successfully. Its fileCount is the number of repositories it holds, and sizeBytes is their combined size. Export the table as CSV, JSON, or Excel.
| Field | Type | Description |
|---|---|---|
repoUrl | string | The repository URL, normalized to https://github.com/owner/repo |
owner | string | Repository owner (user or organization) |
repo | string | Repository name |
branch | string | main, or default when the repository has no main branch |
commitSha | string | The exact commit captured in the backup |
fileName | string | Name of the backup ZIP file |
fileCount | integer | Number of files in the backup (repositories on the final row) |
sizeBytes | integer | Size of the backup ZIP in bytes |
downloadUrl | string | Download link for the backup, valid for linkExpiryHours (24 hours by default) |
backedUpAt | string | When the backup was taken (ISO 8601, UTC) |
status | string | success, or error: <reason> |
[{"repoUrl": "https://github.com/onescales/token-proof-of-work","owner": "onescales","repo": "token-proof-of-work","branch": "main","commitSha": "808667a07d3988decfb81ac8a6260e30e55917ea","fileName": "onescales-token-proof-of-work-main.zip","fileCount": 5,"sizeBytes": 10421,"downloadUrl": "https://api.apify.com/v2/key-value-stores/.../records?signature=...&prefix=repo-00000-onescales-token-proof-of-work-main.zip","backedUpAt": "2026-10-01T02:23:03.832Z","status": "success"},{"repoUrl": "ALL REPOSITORIES (ZIP)","owner": "N/A","repo": "N/A","branch": "N/A","commitSha": "N/A","fileName": "all-repos.zip","fileCount": 1,"sizeBytes": 10421,"downloadUrl": "https://api.apify.com/v2/key-value-stores/.../records?signature=...&prefix=repo-","backedUpAt": "2026-10-01T02:23:04.202Z","status": "success"}]
Good to know
- Your own repositories only. Use it for repositories you own or have permission to copy, and respect each repository's license.
- Public repositories only. A private, deleted or misspelled repository returns
error: repository not found or not public. - What is in a backup: the files on the branch at that moment, exactly as GitHub's "Download ZIP" gives them. It does not include git history, issues, pull requests, wikis, releases, or Git LFS file contents (LFS files appear as small pointer files).
- Download links expire. Each link works for
linkExpiryHourshours from when it was created (24 by default, 1 to 730 allowed), then returns an access error. To download after that, open the run's storage in the Apify Console, for as long as your plan keeps run data. Your plan's data retention also limits links: a link set to 730 hours stops working early if the run's storage is deleted first. - Each link downloads a ZIP that contains the backup ZIP. That is how Apify serves expiring links. Unzip once to get the repository archive (e.g.
onescales-token-proof-of-work-main.zip), and the bulk link gives you every repository archive in one ZIP. - Links are scoped to the run, not the file. Anyone who has a link and knows how to edit it can reach the other backups from the same run until it expires. Share links only with people you would share the whole run with.
- Size limit: repositories whose archive is over 2 GB are skipped with an error status. Archives are streamed to disk, never held in memory.
- Retries: every download and file write is retried up to 3 times (2s, 8s, 20s), including when GitHub rate-limits the run, with a fresh proxy IP on each attempt. Permanent failures such as a 404 fail fast.
- Speed and memory: repositories are backed up one at a time with a 2-second pause between them, to stay gentle on GitHub. In tests that works out to about 2–2.5 seconds per small repository: roughly 25–30 repositories a minute, so 100 take about 4 minutes and 500 about 20 minutes. Large repositories add their own download time. Memory stays flat at about 200 MB however large the repositories are, even for a 500 MB repository, so 512 MB is plenty, and more memory does not make it faster.
- Proxy traffic: downloads go through a residential proxy by default, and residential traffic is billed per GB on your Apify account. For very large repositories, switch to datacenter proxies or turn the proxy off in the input.
- Pricing: pay-per-event. You only pay for rows actually produced. Before it starts, the actor reads your spending limit and remaining account balance, backs up exactly as many repositories as the budget covers, and never goes over it.
Support
Need help or want a feature added?
Contact Support at https://docs.google.com/forms/d/e/1FAIpQLSfsKyzZ3nRED7mML47I4LAfNh_mBwkuFMp1FgYYJ4AkDRgaRw/viewform?usp=dialog — Fill out this quick form.
We respond quickly and are happy to add new fields or custom integrations.
Tags
github backup, backup github repository, github repo backup, download github repo, github zip download, download repository as zip, github archive, archive github repository, bulk github download, github repo downloader, github source code download, clone github repo, github mirror, repository snapshot, code snapshot, main branch backup, master branch download, default branch download, commit sha, open source backup, open source archiving, dependency backup, vendor code audit, software escrow, code preservation, git backup, git repository archive, source code archive, code backup tool, public repository backup, scheduled github backup, automated repo backup, disaster recovery, compliance archive, code audit trail, research dataset source code, offline code access, repository migration, github organization backup, developer tools, devops backup, zip archive, bulk download, expiring download links, temporary download link, apify actor