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.
| Deployment | UI export ceiling (Atlassian docs) | Can an admin raise it? | What Atlassian recommends instead |
|---|---|---|---|
| Jira Server or Data Center | 1,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 memory | Export in batches, or change both settings together |
| Jira Cloud, asynchronous CSV export | Up to 10,000 work items per export | No setting is documented; split the search instead | Split the search with JQL into batches under 10,000 and merge the files |
| Jira Cloud, URL pager/start method | Batch size set in the export URL | Not applicable | Marked deprecated as of March 2026; do not build a new process on it |
| Either deployment, REST API | No single-file ceiling; results come in pages | Not applicable | Page 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.
- 01Your work records
- 02Personal details removed
- 03You approve the release
- 04Licensed to AI developers
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.
| Slice | JQL (example project ACME) | Count shown before export | Rows in file | Status |
|---|---|---|---|---|
| S01 | project = ACME AND created < "2019-01-01" ORDER BY created ASC | 8,412 | 8,412 | Match |
| S02 | project = ACME AND created >= "2019-01-01" AND created < "2021-01-01" ORDER BY created ASC | 9,870 | 9,870 | Match |
| S03 | project = ACME AND created >= "2021-01-01" AND created < "2022-07-01" ORDER BY created ASC | 9,955 | 9,954 | Re-run: one row short |
| S04 | project = ACME AND created >= "2022-07-01" AND created < "2024-01-01" ORDER BY created ASC | 9,101 | 9,101 | Match |
| S05 | project = ACME AND created >= "2024-01-01" ORDER BY created ASC | 7,338 | 7,338 | Match |
| Key-range alternative | project = ACME AND issuekey >= ACME-1 AND issuekey < ACME-10001 ORDER BY key ASC | Check against a created-date slice | Check | Only if no moved issues |
| Total check | project = ACME | 44,676 | Sum of S01 to S05 | Must 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.
| Route | Gets you | Misses or limits | Use it for |
|---|---|---|---|
| Sliced CSV export | Current field values and comments in repeated columns | History needs the changelog endpoints; large searches can return an empty file | Quick review copies and spreadsheets |
| REST search plus per-issue calls | Fields, full changelogs, comments as records, attachment IDs | Rate limits; eventual consistency for recent edits | The working dataset and the completeness proof |
| Cloud site backup with attachments | The whole site in restore format, including attachment files | 48 hours between backups with attachments; restore replaces the site | The safety copy before cleanup or shutdown |
| Attachment download by ID | Original files with metadata | One call per file; storage size | Keeping 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.
| Manifest field | Example value | Why it matters |
|---|---|---|
| Source and deployment | acme.atlassian.net, Jira Cloud | Limits and endpoints differ between Cloud and Data Center |
| Export account and permissions | svc-export, Browse projects on ACME, no issue security exclusions | Results only include what this account can see |
| Base JQL and cutoff | project = ACME AND created < "2026-10-01", run 2026-10-13 09:00 UTC | Defines the frozen window everyone checks against |
| Total count at cutoff | 44,676 issues | The number the slices must add up to |
| Slices | S01 to S05 with JQL, expected count, file name and row count | Shows each slice was reconciled before merging |
| Distinct keys and duplicates | 44,676 distinct keys, 0 duplicates | Proves no overlap between slices |
| Child record counts | Comments 212,904; changelog entries 1,083,557; attachments 31,206 | Proves history and files were pulled, not just rows |
| Exceptions | 17 keys missing: 15 deleted, 2 moved to project OPS | Every gap has an explanation |
| File checksums | SHA-256 per file | Lets 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
- InsightCan mechanical contractors license project and service data to AI?
- InsightConstruction software companies: what project data you can and cannot license
- InsightJira issues to exclude before a data license: security, HR and legal
- IndustryBPO & contact centers data
- IndustryConstruction data
- DataProject records
See if your company qualifies
A short company assessment. No data uploads are needed.