Export Jira to Google Sheets: 6 Methods Compared (2026)
The quickest way to export Jira to Google Sheets is a CSV export from a Jira search, opened in Sheets with File > Import. If the sheet has to stay current, use Atlassian’s free Jira Cloud for Sheets add-on or a connector with scheduled refresh, and keep an Apps Script option in reserve for fields the add-on won’t deliver.
Below, each method is described with its real limits as of October 2026, including two platform changes that broke many older tutorials.
Which method should you use?
| Method | Refreshes on its own? | Cost | Size limit | Best for |
|---|---|---|---|---|
| 1. CSV export + File > Import | No | Free | 10,000 work items per export | One-off snapshots, audits |
| 2. “Google Sheets” from a Jira search | Through the add-on | Free | Add-on limits | Starting from a search you already have |
| 3. Jira Cloud for Sheets sidebar | Hourly or daily schedule | Free | 10,000 work items per query | Recurring team reports |
4. =JIRA() formula |
When recalculated or scheduled | Free | 30 seconds per formula | Small live tables inside an existing sheet |
| 5. Connector add-on | Daily or hourly, by plan | Free tiers; paid from about $20/month | Varies by plan | Dependable schedules, several data sources |
| 6. Apps Script + Jira REST API | Time-driven trigger | Free | 6 minutes per run | Full control over fields and format |
If you only need this once, use method 1. If a weekly report depends on it, start with method 3 and read the troubleshooting guide for Jira Cloud for Sheets before your first status meeting.
Method 1: CSV export and File > Import
This works for anyone who can search Jira, and nothing needs to be installed.
- In Jira, open Filters > Search work items from the sidebar and switch to JQL. Run your query, for example
project = ABC AND updated >= -30d ORDER BY updated DESC. Our JQL examples for reports has 40 more. - Open the Export menu and choose a CSV option. Atlassian advises against the “all fields” options for large exports, because they are slow and produce very large files.
- Wait for the export. Jira’s asynchronous CSV export handles up to 10,000 work items and shows a progress bar while it runs.
- In Google Sheets, choose File > Import > Upload, select the file, and pick an import location such as Insert new sheet(s) or Replace current sheet.
For more than 10,000 results, Atlassian’s own advice (support article updated July 2026) is to split the JQL into batches, for example by created date ranges, export each batch, merge the files, and check that the combined row count matches the original query.
Trade-offs. It’s free and predictable. It’s also a snapshot: the sheet is out of date the moment someone moves a ticket. Fields with several values, such as labels or sprints, can arrive as several columns with the same header, so plan a cleanup step.
Method 2: Send a Jira search to Google Sheets
Jira’s search view has an Apps menu with Google Sheets and Microsoft Excel options, according to Atlassian’s support article on large exports (updated July 2026). It hands your current JQL to the Jira Cloud for Sheets add-on, so the limits in method 3 apply.
The button has moved more than once over the years. If you don’t see it under Apps, check the Export menu, or go straight to method 3.
Method 3: Jira Cloud for Sheets (Atlassian’s free add-on)
This is the default choice, and for many teams it’s enough. As of October 2026 the Google Workspace Marketplace listing shows 3M+ installs, a 3.4-star average from 214 ratings, and a last update on December 16, 2024. It imports only: nothing you type in the sheet goes back to Jira.
Atlassian’s instructions still refer to an Add-ons menu. Google Sheets renamed it Extensions in 2021, so use these paths:
- Choose Extensions > Add-ons > Get add-ons, search for “Jira Cloud for Sheets”, and install it. If your company uses Google Workspace, an admin may need to allow add-ons first.
- Choose Extensions > Jira Cloud for Sheets > Open, select Connect, pick your Jira site and select Accept.
- Open Get data from Jira, type a JQL query and select Get data. Open in Jira lets you test the query first. An empty query imports every work item on the site, so don’t leave it blank by accident.
- To import a saved filter, use the Filters tab. Only starred filters appear there, so star the filter in Jira first.
- To refresh automatically, open the schedule tab in the sidebar and set an hourly or daily update.
Limits worth knowing before you build on it:
- Queries work up to 10,000 work items. For errors on large imports, Atlassian suggests retrying in batches of 1,000 to 2,000 rows.
- Columns follow your Jira column settings unless you pick fields in the import.
- Users with private profiles come through as blank assignee or reporter cells.
- In early 2020 Atlassian said scheduled refreshes can run for up to 12 months. Check the end date on long-lived reports.
- Atlassian’s public tracker has open bugs for scheduled updates that don’t run (API-563, open since September 2022) and for schedules that fail silently when a token expires (API-784).
Atlassian’s own documentation is at Use Jira Cloud for Sheets.
Method 4: The =JIRA() formula
The add-on also adds a custom function, so a query can live in a cell next to your own formulas.
- Only the document owner can turn it on: Extensions > Jira Cloud for Sheets > Open > Settings, then Enable =JIRA() function for users of this sheet.
- After that, anyone who can edit the sheet can run queries through the owner’s Jira account. Share the sheet as Viewer with anyone who shouldn’t have that access.
- Since December 16, 2024 the syntax is
JIRA(jql, columns, limit). Atlassian removed the old offset argument, although its support page still shows a four-argument example.
A typical formula:
=JIRA("project = ABC AND statusCategory != Done ORDER BY updated DESC", "summary,status,assignee,duedate", 500)
Put multi-word values in single quotes inside the query, as in status = 'In Review'. Subfields use dots, such as reporter.displayName.
Two limits catch people out. Google stops any custom function that runs longer than 30 seconds and shows #ERROR!, and users have reported that error on formulas returning more than about 1,000 rows. The add-on also refreshes at most 50 functions at a time. Keep formulas small, or use the sidebar import for big tables.
Method 5: Connector add-ons
If you need a schedule you can depend on, or Jira plus other sources in one sheet, a connector is the usual next step. These are import-only for Jira, based on their listings and Jira pages in October 2026:
| Connector | Free tier | Paid (October 2026) | Schedule on paid plans |
|---|---|---|---|
| Coupler.io | Manual refresh, 100 rows per run | Starter $32/month, or $24/month billed annually | Daily; hourly on Pro ($199/month billed annually) |
| Coefficient | Manual refresh | Starter $49/month | Daily; hourly on Pro ($99 per user/month) |
| Sheet Sync for Jira (Cody Labs) | 1 saved import, 500 rows, manual refresh | $20/month per Jira site | Hourly, daily or weekly |
| Jira Data Fetcher for Google Sheets | Free | Free | Daily, weekly or monthly |
We compare these and other options in detail, including what each does with custom fields and time in status, in Jira Cloud for Sheets alternatives.
Method 6: Apps Script and the Jira REST API
A short script gives you any field, your own format and your own schedule, at the cost of maintaining it. Two changes since 2024 break most scripts you’ll find in older blog posts:
- The old search endpoints are gone. Jira Cloud now answers
/rest/api/2/searchand/rest/api/3/searchwith HTTP 410. Use/rest/api/3/search/jql, which pages with anextPageTokeninstead ofstartAt. Ask for the fields you need explicitly. - API tokens expire. New Atlassian API tokens last at most 365 days, and tokens created before December 15, 2024 expired between March 14 and May 12, 2026 (Atlassian). A script that “suddenly stopped” this spring probably needs a new token.
Setup:
- Create a token at id.atlassian.com/manage-profile/security/api-tokens with Create API token. A token created with scopes has to call
https://api.atlassian.com/ex/jira/{cloudId}instead of your site URL, so the script below assumes a token without scopes. - In your sheet, open Extensions > Apps Script.
- In Project Settings, add three script properties:
JIRA_SITE(for exampleyour-site.atlassian.net),JIRA_EMAILandJIRA_TOKEN. Anyone who can edit the spreadsheet can open the script and read these, so keep the sheet’s editor list short. - Paste the script, change the JQL and fields, and run
importJiraonce to authorize it. - Open Triggers, select Add Trigger, choose
importJira, and set a time-driven hour or day timer.
function importJira() {
const props = PropertiesService.getScriptProperties();
const site = props.getProperty('JIRA_SITE');
const auth = Utilities.base64Encode(
props.getProperty('JIRA_EMAIL') + ':' + props.getProperty('JIRA_TOKEN'));
const jql = 'project = ABC AND updated >= -30d ORDER BY key';
const fields = ['summary', 'status', 'assignee', 'priority', 'updated'];
const rows = [['Key', 'Summary', 'Status', 'Assignee', 'Priority', 'Updated']];
let token = null;
let pages = 0;
do {
let url = 'https://' + site + '/rest/api/3/search/jql?maxResults=100' +
'&jql=' + encodeURIComponent(jql) + '&fields=' + fields.join(',');
if (token) url += '&nextPageToken=' + encodeURIComponent(token);
const res = UrlFetchApp.fetch(url, {
headers: { Authorization: 'Basic ' + auth, Accept: 'application/json' },
muteHttpExceptions: true,
});
if (res.getResponseCode() !== 200) {
throw new Error('Jira returned ' + res.getResponseCode() + ': ' +
res.getContentText().slice(0, 300));
}
const data = JSON.parse(res.getContentText());
data.issues.forEach(function (issue) {
const f = issue.fields;
rows.push([issue.key, f.summary,
f.status ? f.status.name : '',
f.assignee ? f.assignee.displayName : '',
f.priority ? f.priority.name : '',
f.updated]);
});
token = data.nextPageToken;
pages++;
} while (token && pages < 200);
const ss = SpreadsheetApp.getActive();
const sheet = ss.getSheetByName('Jira') || ss.insertSheet('Jira');
sheet.clearContents();
sheet.getRange(1, 1, rows.length, rows[0].length).setValues(rows);
}
Google’s quotas apply: each run stops after 6 minutes, and time-driven triggers get 90 minutes of total runtime a day on personal Google accounts and 6 hours on Google Workspace accounts (Apps Script quotas). Because the script throws an error when Jira refuses a request, a failed run shows up in Apps Script’s trigger failure emails. They arrive daily by default, and you can switch them to immediate in the trigger’s notification setting. The free add-on has no equivalent.
The same approach works for data the add-on handles poorly: see our scripts for exporting Jira worklogs and calculating time in status.
Keep your report formulas safe when data refreshes
Whichever method you choose, refreshes rewrite rows, and rows can change order. Three habits prevent most broken reports:
- Keep the imported data on its own tab and never type into it.
- Build summaries on a separate tab that reads the raw tab with
COUNTIFS,QUERYorXLOOKUPby issue key, never by row number. - Keep manual notes on a third tab keyed by issue key, and pull them in with
XLOOKUP.
Our weekly Jira status report guide walks through that layout with the JQL for each tab.
Where Rowduet fits
Rowduet (in development) is a Google Sheets add-on being built for the recurring-report case: JQL import with custom fields, descriptions and worklogs, hourly or daily refresh, and an email when a refresh fails. It isn’t available yet. If you’re maintaining scripts today to get that reliability, you can join Rowduet’s early access.
If you also need to send edits from the sheet back to Jira, see two-way Jira and Google Sheets sync options.
Frequently asked questions
How do I export Jira issues to Google Sheets for free?
Run a JQL search in Jira, export the results as CSV, and import the file with File > Import in Google Sheets. For data that refreshes, install Atlassian's free Jira Cloud for Sheets add-on and import with a JQL query.
Can Google Sheets update automatically from Jira?
Yes. Jira Cloud for Sheets can refresh an import hourly or daily, and paid connectors such as Coupler.io and Coefficient refresh on a schedule too. The free add-on has open bug reports about scheduled runs that skip silently, so check that the data is current before you rely on it.
How many Jira issues can I export to Google Sheets?
Jira's asynchronous CSV export handles up to 10,000 work items per export, and Jira Cloud for Sheets works with queries of up to 10,000 work items. For more, split the JQL into smaller ranges, for example by created date.
Does Jira Cloud for Sheets work with Jira Server or Data Center?
No. Atlassian's add-on supports Jira Cloud only. Server and Data Center teams need CSV exports, a REST API script, or a third-party app that supports their deployment.