Restore a Project Export into Jira Cloud

Last updated 10 November 2026 · restore script 1.0.0

Project Export saves one Jira project to a zip you keep. This page explains how to put it back: the restore script rebuilds it as a new project on the same Jira Cloud site or on a different one, from the file alone. It never reads the site the export came from.

Download the restore script (project-export-restore-1.0.0.zip)

What you need

1. Set your site and token

macOS or Linux:

export ATLASSIAN_SITE=https://yourcompany.atlassian.net
export ATLASSIAN_EMAIL=you@yourcompany.com
export ATLASSIAN_API_TOKEN=paste-your-token

Windows (PowerShell):

$env:ATLASSIAN_SITE="https://yourcompany.atlassian.net"
$env:ATLASSIAN_EMAIL="you@yourcompany.com"
$env:ATLASSIAN_API_TOKEN="paste-your-token"

ATLASSIAN_SITE is the site you restore into.

2. Dry run: see the plan, write nothing

Pick a key for the new project (2 to 10 capital letters, not used on the target), then:

python3 restore.py WEB-export-2026-11-10.zip --key WEBR --dry-run

Pass the merged zip, the part files, or the folder that holds them:

python3 restore.py ~/Downloads/web-export/ --key WEBR --dry-run

The dry run reads the target site and prints:

Nothing is written. Fix what it lists (invite missing people, add missing priorities) and run it again until you are happy.

3. Restore

python3 restore.py ~/Downloads/web-export/ --key WEBR --name "Website (restored)"

It asks once before writing, then works through ten steps with progress as it goes: project, work item types, statuses and workflows, custom fields, versions and components, work items, then each item's status, comments, worklogs, attachments, history and watchers, then parents and links, boards and sprints, and rank order.

Speed: Jira answers about one request every 1 to 2 seconds, so a 60-item project takes 10 to 20 minutes and a project with several thousand work items takes several hours. You can leave it running.

If it stops (network, laptop asleep, Ctrl-C, a refused request), run the same command again. The script keeps a log, restore-log-WEBR.json, and continues from where it stopped without creating anything twice.

What the restore keeps

Tested on a project with epics, sub-tasks, links, worklogs, a scrum board with a closed and an active sprint, six kinds of custom field and a custom status, restored into a different, empty Jira Cloud site:

What Jira can't take back, and how the restore keeps it instead

Jira's API doesn't let anyone write these, so no restore tool can:

Lost in Jira Kept instead
Created, updated and resolved dates They become the restore date. The originals are in the export's JSON.
Comment and worklog authors and comment dates They become you. Each restored comment and worklog starts with an italic line: "Originally by Ana Silva on 2026-03-14 09:12 UTC".
Attachment authors and upload dates They become you and the restore date; the files are the same.
Reporter Kept if you have the Modify Reporter permission in the new project. Jira Free sites can't grant it: there you become the reporter, and the original is in the export JSON and the history file.
History (who changed what, when) Each work item gets a history-<KEY>.csv attachment: when, who, field, from, to.
Board columns, swimlanes, quick filters No public API writes them: boards come back with the default columns for their workflow. Set them again by hand.
People not on the target site Their assignments and watches are left empty; their names stay in the comment lines and history files. Invite them before restoring to keep them.

Not part of a project export at all: automation rules, permission, notification and screen schemes, dashboards and filters other than the board's.

Common questions

Can I restore over the original project? No. The restore always creates a new project, so it can't damage the one you have. Restore under a new key, check it, then archive or rename as you like.

Same site or another site? Both. On the same site it reuses the statuses and fields that are already there by name. On another site it creates what's missing.

Team-managed projects? They are restored as company-managed projects: their fields and workflow become site-wide ones on the target.

Workflow rules. Conditions, validators and post functions are copied. If the target refuses one (for example, a rule naming a group that only exists on the old site), the workflows are created without rules and the log lists what was dropped.

Deleted work items. To keep key numbers, the restore creates and deletes a placeholder for each gap. That needs the Delete work items permission in the new project; without it, placeholders are left and listed at the end for you to delete.

Check the result. verify.py compares the original and the restored project field by field, when your account can read both: python3 verify.py --source-site https://old.atlassian.net --log restore-log-WEBR.json.

Something failed? Every problem is listed at the end and in the log, with Jira's own message. Send the log to support@opsfixes.com (it contains keys and field names, no passwords or tokens) and we'll help.

Part of Ops Fixes: free checks and fix guides for small teams. Paid tools · Terms · Privacy · Refunds · How it works · support@opsfixes.com