GitHub Backup Repo avatar

GitHub Backup Repo

Pricing

Pay per usage

Go to Apify Store
GitHub Backup Repo

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

One Scales

Maintained by Community

Actor 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 no main.
  • 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, .git clone 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.

FieldTypeRequiredDescription
Repository URLs (repoUrls)Array of stringsYesPublic 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)IntegerNo — defaults to 24How long the download links keep working. Minimum 1 hour, maximum 730 hours (about one month).
Proxy Configuration (proxyConfiguration)ObjectNo — defaults to residentialProxy 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.

FieldTypeDescription
repoUrlstringThe repository URL, normalized to https://github.com/owner/repo
ownerstringRepository owner (user or organization)
repostringRepository name
branchstringmain, or default when the repository has no main branch
commitShastringThe exact commit captured in the backup
fileNamestringName of the backup ZIP file
fileCountintegerNumber of files in the backup (repositories on the final row)
sizeBytesintegerSize of the backup ZIP in bytes
downloadUrlstringDownload link for the backup, valid for linkExpiryHours (24 hours by default)
backedUpAtstringWhen the backup was taken (ISO 8601, UTC)
statusstringsuccess, 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 linkExpiryHours hours 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