How to export your data from GitLab
GitLab lets you export a project (repository, issues, merge requests, wiki, and most other project data) as a portable NDJSON-based archive from Settings > General > Advanced, on any plan (Free, Premium, or Ultimate). This project export is meant for migrating between GitLab instances, not as a backup, and group-level export via file upload is deprecated in favor of direct transfer.
✓ Verified against GitLab's official documentation, September 2026
Step by step
- 1In the top bar, select 'Search or go to' and find your project.
- 2In the left sidebar, select Settings > General.
- 3Expand the 'Advanced' section.
- 4Select 'Export project'.
- 5Wait for the export to generate — GitLab emails you when it's ready.
- 6Either follow the link in that email, or refresh the project settings page and, in the 'Export project' area, select 'Download export'.
- 7Save the resulting .tar.gz file; GitLab automatically deletes export files from its servers every 24 hours.
What the export includes
- ✓Project and wiki repositories
- ✓Project uploads and project configuration (excluding integrations)
- ✓Issues, with comments, iterations, and resource state/milestone/iteration events
- ✓Merge requests, with diffs, comments, reviewers, approvers, and multiple assignees
- ✓Commit comments, labels, milestones, snippets, releases
- ✓Time tracking data, design management files, LFS objects, issue boards
- ✓CI/CD pipelines (archived) and pipeline schedules (imported inactive)
- ✓Protected branches/tags, push rules, emoji reactions
- ✓Direct (and, if you have Owner access, inherited) project members
- ✓Some merge request approval rules and the vulnerability report
What it doesn't include
- ✗Child pipeline history, pipeline triggers, pipeline schedule variables
- ✗CI/CD job traces and artifacts, CI/CD variables, CI/CD job token allowlist
- ✗Package and container registry images
- ✗Webhooks and any encrypted tokens
- ✗Number of required MR approvals, repository size limits
- ✗Deploy keys allowed to push to protected branches, secure files
- ✗Activity logs for Git-related events (pushes, tag creation)
- ✗Security policies, links between issues/related items, links to related merge requests
Before you start
- ⚠GitLab explicitly says not to use project export files as a backup — 'not all items are exported' and it doesn't always work reliably.
- ⚠Export files are deleted from GitLab's servers every 24 hours, so download promptly.
- ⚠Rate limits apply: 6 project exports per minute, 1 download per project per minute, and 6 project imports per minute.
- ⚠Project exports are compatible only up to two minor GitLab versions behind the destination version.
- ⚠On GitLab.com, the maximum import file size is 5 GB; self-managed admins can change this.
- ⚠Group export via file upload is deprecated — GitLab now recommends 'direct transfer' for migrating groups/projects between instances.
- ⚠User contributions (comment authors, etc.) only map correctly to the right people if public emails match between source and destination — otherwise everything gets attributed to whoever runs the import.
- ⚠Deploy keys are not imported, and imported Owners are downgraded to Maintainer on the destination.
Where to take your data
Free and cheaper tools that can take a GitLab export. See all GitLab alternatives →
GitLab (self-managed, free Community Edition)
On the destination instance, select 'Create new' > 'New project/repository' > 'Import project' > 'GitLab export', then upload the .tar.gz file you exported.
GitHub Free
GitHub does not read GitLab's NDJSON export format directly. Push the Git repository itself with 'git clone --mirror' + 'git push --mirror' to a new GitHub repo; issues, merge requests, and wikis must be recreated manually or with a third-party migration script since GitHub's built-in importer only pulls the Git history/branches.
Gitea
Gitea's 'New Migration' feature can clone a repository (and, depending on version, issues/labels/releases) directly from a live GitLab instance URL and token, which is generally easier than reusing the NDJSON export file.
Exporting from GitLab: common questions
Can I export an entire GitLab group at once, not just one project?+
Group export via a downloadable file is deprecated. GitLab now points users to 'direct transfer' for moving groups (and their projects) between instances instead of a file-based group export.
What file format does GitLab's project export use?+
The export is an NDJSON-based archive packaged as a .tar.gz file, which you can also edit manually (e.g., to fix member emails) by extracting it, editing the .ndjson files, and re-compressing.
Will CI/CD variables, secrets, or job artifacts be included in the export?+
No. CI/CD variables, job traces/artifacts, webhooks, encrypted tokens, and container/package registry images are all excluded from the project export and must be reconfigured manually on the destination.
Is project export available on the free plan?+
Yes. File-based project export is available on Free, Premium, and Ultimate tiers, and on GitLab.com, GitLab Self-Managed, and GitLab Dedicated — you just need the Maintainer or Owner role on the project.
Is a project export the same as a backup?+
No. GitLab explicitly advises against using project export files as a backup, since not all items are exported and the process doesn't guarantee complete data fidelity.
How long is my export file available for download?+
Export files are stored temporarily and a worker deletes them roughly every 24 hours, so you should download the file soon after generating it.
Sources
This guide was written from GitLab's own documentation and checked against it in September 2026. If a step has changed, the official page wins.
GitLab head-to-head
More Dev Tools tools people are leaving
All Dev Tools alternatives →What would you save without GitLab?
Pick your team size and see the yearly number.