Skip to content

Systems and records

Jira export 1000 limit: exporting a full project past the row cap

By SourceX Editorial · Updated

Short answer

The Jira export 1000 limit is a Server and Data Center default; Jira Cloud's asynchronous CSV export supports up to 10,000 work items. To export a full project past either cap, split it into non-overlapping JQL slices by created date, or page the REST API, fetch changelogs, comments and attachments separately, and reconcile every slice count against the project total in a manifest.

Key takeaways

  • The 1,000-row cap is the Server and Data Center default for search exports; Jira Cloud's asynchronous CSV export supports up to 10,000 work items and Atlassian documents no setting to raise it.
  • Slice by created date with half-open windows; use issue key ranges only when no issues were moved into the project.
  • On Cloud, use /rest/api/3/search/jql with nextPageToken; it returns no total, so pair it with the approximate-count endpoint.
  • Pull changelogs and comments with their own endpoints, because expand=changelog on search is capped.
  • A site backup is a restore copy, not a working export; keep both.
  • Prove completeness with a manifest: total, slice counts, distinct keys, child record counts, exceptions and checksums.

Why does a Jira export stop at 1,000 issues?#

On Jira Server and Data Center, 1,000 is the default size of a search view export: two advanced settings, jira.search.views.default.max and jira.search.views.max.limit, both default to 1,000, and Atlassian describes the cap as intentional, to avoid performance problems such as running out of memory. An export of a 4,000-issue filter returns only the first 1,000 rows.

Jira Cloud works differently. Atlassian's current Cloud guidance says the asynchronous Export CSV feature in the issue navigator supports up to 10,000 work items, runs in the background and sends an in-product notification with a download link. Atlassian's Cloud guidance gives no setting to raise that ceiling and recommends splitting the search with JQL instead.

Either way the failure mode is the same: the file looks complete, opens cleanly and simply ends. A truncated CSV gives no sign in the file itself that rows are missing, which is why the rest of this guide is about slicing, paging and reconciling counts rather than about one bigger export.

Why does a Jira export stop at 1,000 issues?
DeploymentUI export ceiling (Atlassian docs)Can an admin raise it?What Atlassian recommends instead
Jira Server or Data Center1,000 by default (jira.search.views.default.max and jira.search.views.max.limit)Yes, in Advanced Settings; Atlassian advises caution because large results are held in memoryExport in batches, or change both settings together
Jira Cloud, asynchronous CSV exportUp to 10,000 work items per exportNo setting is documented; split the search insteadSplit the search with JQL into batches under 10,000 and merge the files
Jira Cloud, URL pager/start methodBatch size set in the export URLNot applicableMarked deprecated as of March 2026; do not build a new process on it
Either deployment, REST APINo single-file ceiling; results come in pagesNot applicablePage through results and fetch history, comments and attachments per issue

How do you get past the Jira export 1000 limit without changing settings?#

Split the project into JQL slices that each fall under the ceiling, export each slice, and reconcile the slice counts against the total before you merge anything. That works on Cloud and on Server without touching admin settings, and it is the approach Atlassian's own Cloud article recommends.

On Server and Data Center an admin can raise both settings to the same value instead. Atlassian's knowledge base says that is safe on Jira 8.2 and later but also advises against raising the limit without a very good reason, so for a one-time full export, batching is usually the lower-risk choice. Atlassian also publishes a batching script for Server that sets tempMax for the batch size and pager/start for the offset, and names each file after its first and last issue key.

Keep the CSV field choice deliberate. A separate Atlassian article says a large export from the issue search page can come back as an empty file, and recommends exporting only the fields you need. If you need every field and every comment, the API route in the next sections is usually the better tool.

  1. 01Your work records
  2. 02Personal details removed
  3. 03You approve the release
  4. 04Licensed to AI developers
How it works with SourceX: Your work records → Personal details removed → You approve the release → Licensed to AI developers.Illustrative

How should you slice a project with JQL?#

Slice by created date first, because an issue's created date does not normally change, so date windows do not overlap and do not shift while you export. Atlassian recommends date ranges as the most flexible way to split a search, since you can shrink a window until its count fits.

Issue key ranges are the other common slice, and they make file names easy to audit. Atlassian's moved-key article uses an issuekey <= comparison, so key bounds are valid JQL, but they have one trap: an issue moved in from another project keeps a key history, and Atlassian documents that comparison operators can fail on moved issue keys, with a workaround of using a strict less-than bound. Use key ranges only after checking that the project has no moved issues, or run a created-date slice alongside as a cross-check.

Whatever the slicing field, every slice must use the same base filter, the same ORDER BY and non-overlapping, gap-free bounds. Write the bounds as half-open intervals (on or after the start, before the end) so a boundary issue lands in exactly one slice.

How should you slice a project with JQL?
SliceJQL (example project ACME)Count shown before exportRows in fileStatus
S01project = ACME AND created < "2019-01-01" ORDER BY created ASC8,4128,412Match
S02project = ACME AND created >= "2019-01-01" AND created < "2021-01-01" ORDER BY created ASC9,8709,870Match
S03project = ACME AND created >= "2021-01-01" AND created < "2022-07-01" ORDER BY created ASC9,9559,954Re-run: one row short
S04project = ACME AND created >= "2022-07-01" AND created < "2024-01-01" ORDER BY created ASC9,1019,101Match
S05project = ACME AND created >= "2024-01-01" ORDER BY created ASC7,3387,338Match
Key-range alternativeproject = ACME AND issuekey >= ACME-1 AND issuekey < ACME-10001 ORDER BY key ASCCheck against a created-date sliceCheckOnly if no moved issues
Total checkproject = ACME44,676Sum of S01 to S05Must equal the total

When should you page the REST API instead of exporting CSV files?#

Use the REST API when you need more than current field values: changelog history, every comment as its own record, attachments by ID, or a repeatable pull you can rerun. CSV slicing gets rows out; the API gets the record.

On Jira Cloud the older /rest/api/3/search endpoint is marked deprecated and is being removed. Its replacement, /rest/api/3/search/jql, pages with a nextPageToken instead of a startAt offset: you send the token from one response to get the next page and stop when no token comes back. Because the enhanced search does not return a total, pair it with POST /rest/api/3/search/approximate-count, which takes bounded JQL and returns an estimated count.

Two documented behaviors matter for completeness. Search is eventually consistent by default, so recent edits may not appear immediately; Atlassian's reconcile pattern accepts at most 50 issue IDs per request, which is useful for spot checks, not for a whole project. And the API is rate limited: a 429 response carries a Retry-After header in seconds and a RateLimit-Reason header, and Atlassian recommends using Retry-After as the minimum delay with exponential backoff and jitter.

A practical rule: freeze the export window (for example, everything created before a cutoff timestamp), run the slices, then rerun the counts a day later. If the counts for frozen windows still match, consistency lag is not hiding anything.

How do you capture changelog history and comments?#

Fetch changelogs and comments with their dedicated endpoints rather than relying on what an issue search can embed. Atlassian's platform changelog says expand=changelog on search is capped at 40 items and points to the bulk changelog endpoint to avoid that cap, so an issue with a long history comes back incomplete through expand alone.

POST /rest/api/3/changelog/bulkfetch (check its current status in Atlassian's API reference, since it was introduced as an experimental endpoint) returns changelogs for up to 1,000 issues per request, can filter to up to 10 field IDs, and pages with nextPageToken. For a single issue, GET /rest/api/3/issue/{issueIdOrKey}/changelog returns every changelog entry, oldest first, paged with startAt and maxResults. Either way, count changelog entries per issue and keep the count in the manifest.

Comments come from GET /rest/api/3/issue/{issueIdOrKey}/comment, paged with startAt and maxResults; the response reports a total and an isLast flag, so you can check that the comments you saved equal the total for each issue. The CSV export does carry comments, mapped into repeated Comment columns in chronological order, but the API keeps each comment's author, created and updated times as separate fields.

Permissions shape every response. Atlassian's docs say issues and comments are returned only where the calling account has Browse projects permission and passes any issue security or comment visibility restriction, so run the export with an account that can see everything in scope, and record which account that was.

Where do attachments and a full site backup fit?#

Attachments are separate files: list them from each issue, then download each one with GET /rest/api/3/attachment/content/{id}, using the attachment metadata endpoint for file name, size and MIME type. Store files under the issue key and attachment ID so a reviewer can trace every file back to its issue.

The Cloud site backup is the other route. In Settings, System, Backup manager, an admin can create a backup for cloud and optionally include attachments, avatars and logos; with attachments included, Atlassian requires 48 hours between backups. The backup archive is built for restoring into Jira.

A site backup is built for restoring Jira, not for reading or slicing one project. Atlassian notes that restoring it replaces all existing site data and cannot import a single project while keeping the rest of the site, and it is not laid out for review as a spreadsheet. Take it as the safety copy, and use the API or sliced CSV files as the working copy.

Where do attachments and a full site backup fit?
RouteGets youMisses or limitsUse it for
Sliced CSV exportCurrent field values and comments in repeated columnsHistory needs the changelog endpoints; large searches can return an empty fileQuick review copies and spreadsheets
REST search plus per-issue callsFields, full changelogs, comments as records, attachment IDsRate limits; eventual consistency for recent editsThe working dataset and the completeness proof
Cloud site backup with attachmentsThe whole site in restore format, including attachment files48 hours between backups with attachments; restore replaces the siteThe safety copy before cleanup or shutdown
Attachment download by IDOriginal files with metadataOne call per file; storage sizeKeeping files linked to issue keys

How do you prove the export is complete?#

Completeness is a set of reconciliations, not a feeling: the slice counts must sum to the project total, every issue key must appear exactly once, and every child record (changelog, comments, attachments) must match the count the source reported for that issue. Atlassian's Cloud article makes the first check explicit: confirm that the total across all batches matches the original query.

Run the checks in this order, and keep the output of each one with the export.

  • Total: count the full project JQL in the issue navigator (or the approximate-count endpoint) at the cutoff and record it with a timestamp.
  • Slices: record each slice's JQL and count before exporting, then the row count of its file; any mismatch means re-run that slice.
  • Uniqueness: load all files, count distinct issue keys, and confirm distinct keys equal total rows. A duplicate means overlapping bounds.
  • Gaps: for key-sliced exports, list missing key numbers and explain each one (deleted, moved out, or restricted).
  • Children: for each issue, compare saved comments to the comment total and saved attachments to the attachment list; sample changelogs against the issue history tab.
  • Hashes: compute a SHA-256 checksum for each file so later copies can be shown to be identical.
  • Rerun: repeat the total and slice counts later for the frozen window; matching numbers rule out late-arriving edits.

What goes in the export manifest?#

A manifest is one small file that lets someone who was not there verify the export: what was asked for, what came back, and how the two were reconciled. Keep it next to the data as JSON or CSV, and fill it as you go rather than afterward.

What goes in the export manifest?
Manifest fieldExample valueWhy it matters
Source and deploymentacme.atlassian.net, Jira CloudLimits and endpoints differ between Cloud and Data Center
Export account and permissionssvc-export, Browse projects on ACME, no issue security exclusionsResults only include what this account can see
Base JQL and cutoffproject = ACME AND created < "2026-10-01", run 2026-10-13 09:00 UTCDefines the frozen window everyone checks against
Total count at cutoff44,676 issuesThe number the slices must add up to
SlicesS01 to S05 with JQL, expected count, file name and row countShows each slice was reconciled before merging
Distinct keys and duplicates44,676 distinct keys, 0 duplicatesProves no overlap between slices
Child record countsComments 212,904; changelog entries 1,083,557; attachments 31,206Proves history and files were pulled, not just rows
Exceptions17 keys missing: 15 deleted, 2 moved to project OPSEvery gap has an explanation
File checksumsSHA-256 per fileLets later copies be checked as identical

What changes when the export is for a data license?#

An export that may later be licensed needs the same completeness proof plus a clear record of what was left out and why. Buyers and reviewers ask how many years and records a dataset covers, and a manifest answers that with numbers rather than estimates.

Exporting is an access question; a data license also needs privacy permission, ownership and contract rights, and de-identification alone does not create a right to license. The full four-permission framework is in the data privacy and right-to-license guide. Exclude sensitive areas such as security, HR and legal projects before anything is shared, and record the exclusions in the manifest.

SourceX is the enterprise data transaction layer for AI: it runs sourcing and qualification, rights review, contracting, data preparation, delivery and payment for businesses licensing operational data to AI developers. The company approves exactly what is released, once per deal, and the first step is a short company assessment with no data uploads needed. SourceX does not operate a Jira connector; the export steps here are run by your own team.

Frequently asked questions

Can I raise the 1,000-issue export limit in Jira Cloud?

No. The jira.search.views settings that control the 1,000 default are advanced settings on Server and Data Center. For Cloud, Atlassian documents no equivalent setting; it documents the asynchronous CSV export as supporting up to 10,000 work items and recommends splitting larger searches with JQL.

Why does my Jira CSV export have exactly 1,000 rows?

That is the default search view limit on Jira Server and Data Center, set by jira.search.views.default.max and jira.search.views.max.limit. The file is cut at the limit. Split the search into JQL slices under the cap, or ask an admin whether raising both settings is appropriate.

Does a Jira CSV export include issue history?

A CSV export is a snapshot of field values, with comments in repeated Comment columns. To keep who changed status, assignee or other fields and when, pull the changelog with the bulk changelog endpoint or the per-issue changelog endpoint.

What replaced /rest/api/3/search in Jira Cloud?

The enhanced search endpoint, /rest/api/3/search/jql. It pages with nextPageToken instead of startAt and does not return a total, so use POST /rest/api/3/search/approximate-count for an estimated count of a bounded JQL query.

How do I know my Jira export is complete?

Record the project total at a fixed cutoff, export slices whose counts add up to it, and confirm the number of distinct issue keys equals the number of rows. Then check comment, changelog and attachment counts per issue and write all of it into a manifest with file checksums.

Is a Jira Cloud backup enough on its own?

It is a good safety copy, but it is built for restoring a whole site, and a restore replaces all existing site data. Keep it alongside a readable export from the API or sliced CSV files that you can review and reconcile.

Sources

  • Jira Cloud's asynchronous Export CSV supports up to 10,000 work items; Atlassian recommends splitting larger searches with JQL (created date is most flexible), checking batch totals match the original query, and marks the pager/start URL method deprecated as of March 2026. Source
  • On Jira Server and Data Center, jira.search.views.default.max and jira.search.views.max.limit default to 1,000; the cap is intentional to avoid performance issues and can be raised in Advanced Settings. Source
  • Atlassian's batching script for Jira Server exports CSV in batches using tempMax and pager/start and names files after the first and last issue key, ordering by key. Source
  • A large CSV export from the issue search page, especially all fields, can produce an empty file; export only the needed fields. Source
  • Comparison operators on issue keys can fail for moved issues; Atlassian suggests a strict less-than bound as a workaround. Source
  • A Jira Cloud CSV export with all fields maps each comment into a separate Comment column in chronological order. Source
  • Jira Cloud backups are created in Settings, System, Backup manager; including attachments requires 48 hours between backups; the archive contains entities.xml, activeobjects.xml and a data folder; restoring replaces all site data and cannot import a single project. Source
  • /rest/api/3/search is deprecated and being removed; /rest/api/3/search/jql pages with nextPageToken; POST /rest/api/3/search/approximate-count returns an estimated count for bounded JQL; results respect Browse projects permission and issue security. Source
  • Jira Cloud search is not read-after-write consistent by default; reconcileIssues accepts at most 50 issue IDs. Source
  • POST /rest/api/3/changelog/bulkfetch returns paginated changelogs for up to 1,000 issues and up to 10 field IDs; GET /rest/api/3/issue/{issueIdOrKey}/changelog returns all changelogs for an issue, oldest first, paged with startAt and maxResults. Source
  • GET /rest/api/3/issue/{issueIdOrKey}/comment returns comments paged with startAt and maxResults, with total and isLast in the response; comments are returned only where the user has Browse projects permission and passes visibility restrictions. Source
  • GET /rest/api/3/attachment/content/{id} returns an attachment's contents; GET /rest/api/3/attachment/{id} returns its metadata. Source
  • Jira Cloud returns 429 with Retry-After (seconds) and RateLimit-Reason headers; Atlassian recommends Retry-After as the minimum delay with exponential backoff and jitter. Source
  • Atlassian's Jira Cloud platform changelog says expand=changelog is capped at 40 items and recommends the Bulk fetch changelogs endpoint to avoid the cap. Source

Related resources

See if your company qualifies

A short company assessment. No data uploads are needed.

See if your company qualifies