Export Dashboards and Widgets
Exporting dashboards or individual widgets lets you quickly share insights, present polished visuals, or take raw numbers offline for deeper analysis. We support three families of export:
- Snapshots – a one-page PDF of an entire dashboard or a PNG image of a single widget.
- Slide decks – multi-page PDF or PPTX files, ideal for presentations.
- Tabular data – raw results in XLSX (full dashboards) or XLSX/CSV (single widgets).
All exports reflect the current layout, filters, and user permissions. Users need the Workspace.EXPORT permission to start an export.
Export Dashboard
Exporting the entire dashboard allows you to capture every visualization on the page in a single file. Depending on your needs, you can choose a simple PDF snapshot or generate a multi-slide presentation in PDF/PPTX. Both methods respect your current dashboard layout and filters, ensuring consistency with what you see on screen. You can also export the dashboard as raw XLSX data for further processing.
Snapshot
You can export a snapshot of the whole dashboard as a PDF file:
Steps:
Open the dashboard you want to export.
Click the … (ellipsis) menu button in the top right corner of the dashboard and select Export:
Select Snapshot (.pdf):
The export file will start being processed, do not leave the page before the file is finalized and downloaded to your machine:
Steps:
Call API endpoint
api/v1/actions/workspaces/<workspace_id>/export/visual
to create a PDF snapshot of the dashboard:curl $HOST_URL/api/v1/actions/workspaces/<workspace_id>/export/visual \ -X POST \ -H "Authorization: Bearer $API_TOKEN" \ -H 'Content-Type: application/json' \ -d '{ "fileName": "<filename>", "dashboardId": "<dashboard_id>", "metadata": { "filters": [ { "dateFilter": { "localIdentifier": "0_dateFilter", "from": "-1", "to": "-1", "granularity": "GDC.time.month", "type": "relative" } }, { "attributeFilter": { "displayForm": { "identifier": "<attribute_label_id>", "type": "displayForm" }, "negativeSelection": true, "attributeElements": { "uris": [] }, "localIdentifier": "<attribute_filter_id>", "filterElementsBy": [], "selectionMode": "multi" } }, { "attributeFilter": { "displayForm": { "identifier": "<attribute_label_id>", "type": "displayForm" }, "negativeSelection": true, "attributeElements": { "uris": [] }, "localIdentifier": "<attribute_filter_id>", "filterElementsBy": [], "selectionMode": "multi" } }, { "attributeFilter": { "displayForm": { "identifier": ""<attribute_label_id>", "type": "displayForm" }, "negativeSelection": true, "attributeElements": { "uris": [] }, "localIdentifier": "<attribute_filter_id>", "filterElementsBy": [], "selectionMode": "multi" } } ] } }'
Note that
metadata.filters
is an optional property used to set specific dashboard filter values for the dashboard snapshot. You can omit this property if you want to use the default dashboard filter values.The response returned to your API call will contain parameter
executionResult
with some value<result_id>
.Call API endpoint
api/v1/actions/workspaces/<workspace_id>/export/visual/<result_id>
to download the file:curl $HOST_URL/api/v1/actions/workspaces/<workspace_id>/export/visual/<result_id> \ -X GET \ -H "Authorization: Bearer $API_TOKEN" \ -H 'Content-Type: application/json'
It may take a few seconds for the file to be created. Consider polling this endpoint until the file is ready.
Slide Deck
If you want each dashboard section or widget on its own page, the slide deck export transforms your dashboard into slides. You can then export those slides as PDF or PPTX, making it easy to incorporate into presentations or share with stakeholders.
Steps:
Open the dashboard you want to export.
Click the … (ellipsis) menu button in the top right corner of the dashboard and select Export:
Select Slide Deck - (.pdf) or (.pptx):
The export file will start being processed, do not leave the page before the file is finalized and downloaded to your machine:
Steps:
Call API endpoint
api/v1/actions/workspaces/<workspace_id>/export/slides
to create a a PDF or PPTX file slide deck form the dashboard:curl $HOST_URL/api/v1/actions/workspaces/<workspace_id>/export/slides \ -X POST \ -H "Authorization: Bearer $API_TOKEN" \ -H 'Content-Type: application/vnd.gooddata.api+json' \ -d '{ "format": "<PDF_or_PPTX>", "dashboardId": "<dashboard_id>", "fileName": "<file_name>", "metadata": { "filters": [ { "dateFilter": { "localIdentifier": "0_dateFilter", "from": "-1", "to": "-1", "granularity": "GDC.time.month", "type": "relative" } }, { "attributeFilter": { "displayForm": { "identifier": "<attribute_label_id>", "type": "displayForm" }, "negativeSelection": true, "attributeElements": { "uris": [] }, "localIdentifier": "<attribute_filter_id>", "filterElementsBy": [], "selectionMode": "multi" } }, { "attributeFilter": { "displayForm": { "identifier": "<attribute_label_id>", "type": "displayForm" }, "negativeSelection": true, "attributeElements": { "uris": [] }, "localIdentifier": "<attribute_filter_id>", "filterElementsBy": [], "selectionMode": "multi" } } ] } }'
Note that
metadata.filters
is an optional property used to set specific dashboard filter values. You can omit it if you want to use the dashboard’s default filter values.You can also use export templates to change how the exported slide deck looks or behaves. See Apply Template.
The response returned to your API call will contain parameter
executionResult
with some value<result_id>
.Call API endpoint
api/v1/actions/workspaces/<workspace_id>/export/slides/<export_id>
to download the file:curl $HOST_URL/api/v1/actions/workspaces/<workspace_id>/export/slides/<export_id> \ -X GET \ -H "Authorization: Bearer $API_TOKEN" \ -H 'Content-Type: application/vnd.gooddata.api+json' \ -O "<output_file_name>.<pdf_or_pptx>"
It may take a few seconds for the file to be created. Consider polling this endpoint until the file is ready.
Tabular Data
You can export the dashboard data used to display all the visualizations on a dashboard as an XLSX file for more niche use cases where you might want to further process the data yourself.
Steps:
Open the dashboard you want to export.
Click the … (ellipsis) menu button in the top right corner of the dashboard and select Export:
Select Data (.xlsx):
Toggle export settings and Export:
Attribute cells mergeing lets you avoid repeating identical headers. For example the following table uses the cell merging:
Continent Country Europe France Germany If you disable the Keep attribute cells merged option, the XLSX table will look like this:
Continent Country Europe France Europe Germany Export info adds a worksheet to the exported Excel file showing date and time of the export as well as any active date or attribute filters.
The export file will start being processed, do not leave the page before the file is finalized and downloaded to your machine:
Steps:
To export data from a widget into a XLSX or CSV file, you need to define to use the AFM API.
Steps:
Compute the raw result using API endpoint
api/v1/actions/workspaces/<workspace_id>/execution/afm/execute
:curl $HOST_URL/api/v1/actions/workspaces/<workspace_id>/execution/afm/execute \ -X POST \ -H "Authorization: Bearer $API_TOKEN" \ -H 'Content-Type: application/json' \ -d '{ "resultSpec": { "dimensions": [ { "localIdentifier": "dim_0", "itemIdentifiers": [ "458f2a55e1ca457883ff36141c84dc48" ] }, { "localIdentifier": "dim_1", "itemIdentifiers": [ "measureGroup" ] } ], "totals": [] }, "execution": { "measures": [ { "localIdentifier": "0f489725fe26493fb5fdc3d2367c21ed", "definition": { "measure": { "item": { "identifier": { "id": "average_price_of_products", "type": "metric" } } } } }, { "localIdentifier": "a279058ddf724659b6b7cad14bd63404", "definition": { "measure": { "item": { "identifier": { "id": "gross_profit", "type": "metric" } } } } }, { "localIdentifier": "7e4fe02cd17d4da38ec6d464646bbbb1", "definition": { "measure": { "item": { "identifier": { "id": "order_amount", "type": "metric" } } } } } ], "attributes": [ { "label": { "identifier": { "id": "product_brand", "type": "label" } }, "localIdentifier": "458f2a55e1ca457883ff36141c84dc48" } ], "filters": [ { "relativeDateFilter": { "dataset": { "identifier": { "id": "customer_created_date", "type": "dataset" } }, "granularity": "MONTH", "from": -1, "to": -1 } } ] } }'
In the response you will get some
<execution_result_id>
in the parameterexecutionResult
.Use the
<execution_result_id>
to create a tabular export using API endpointapi/v1/actions/workspaces/<workspace_id>/export/tabular
:curl $HOST_URL/api/v1/actions/workspaces/<workspace_id>/export/tabular \ -X POST \ -H "Authorization: Bearer $API_TOKEN" \ -H 'Content-Type: application/json' \ -d '{ "fileName": "<filename>", "format": "XLSX", "settings": { "mergeHeaders": true, "exportInfo": true } }'
Note that for CSV exports, you can omit the
settings
parameter.In the response you will get some
<export_id>
in the parameterexportResult
.Use the
<export_id>
to get the CSV file by calling the API endpointapi/v1/actions/workspaces/<workspace_id>/export/tabular/<export_id>
:curl $HOST_URL/api/v1/actions/workspaces/<workspace_id>/export/tabular/<export_id> \ -X POST \ -H "Authorization: Bearer $API_TOKEN" \ -H 'Content-Type: application/json'
Export Widget
Sometimes you only need data or visuals from a single dashboard widget rather than the entire dashboard. GoodData allows you to export individual widgets either as an image (PNG), a single slide (PDF/PPTX) or as tabular data (XLSX/CSV). This helps you focus on exactly the insight you want to share or analyze further.
Snapshot
You can export snapshot of a visualization an a PNG image.
Steps:
Open the dashboard that contains the widget that you want to export.
Hover over the widget, click on the … (ellipsis) menu, and select Export:
Select Snapshot (.png):
The export file will start being processed, do not leave the page before the file is finalized and downloaded to your machine:
Steps:
Call API endpoint
api/v1/entities/workspaces/<workspace_id>/analyticalDashboards/<dashboard-id>
to fetch the dashboard layout which lets you identify the widget’s ID:curl $HOST_URL/api/v1/entities/workspaces/<workspace_id>/analyticalDashboards/<dashboard-id> \ -X GET \ -H "Authorization: Bearer $API_TOKEN" \ -H 'Content-Type: application/vnd.gooddata.api+json'
Look for
widget.localIdentifier
of the widget you want to export to get its<widget_id>
.Call API endpoint
api/v1/actions/workspaces/<workspace_id>/export/slides
to create a PDF or PPTX slide of the widget, specify your widget ID in thewidgetIds
array:curl $HOST_URL/api/v1/actions/workspaces/<workspace_id>/export/slides \ -X POST \ -H "Authorization: Bearer $API_TOKEN" \ -H 'Content-Type: application/vnd.gooddata.api+json' \ -d '{ "format": "PNG", "dashboardId": "<dashboard_id>", "fileName": "<file_name>", "widgetIds": [ "<widget_id>" ], "metadata": { "filters": [ { "dateFilter": { "localIdentifier": "0_dateFilter", "from": "-1", "to": "-1", "granularity": "GDC.time.month", "type": "relative" } }, { "attributeFilter": { "displayForm": { "identifier": "<attribute_label_id>", "type": "displayForm" }, "negativeSelection": true, "attributeElements": { "uris": [] }, "localIdentifier": "<attribute_filter_id>", "filterElementsBy": [], "selectionMode": "multi" } }, { "attributeFilter": { "displayForm": { "identifier": "<attribute_label_id>", "type": "displayForm" }, "negativeSelection": true, "attributeElements": { "uris": [] }, "localIdentifier": "<attribute_filter_id>", "filterElementsBy": [], "selectionMode": "multi" } } ] } }'
Note that
metadata.filters
is an optional property used to set specific dashboard filter values for the widget export. You can omit this property if you want to use the default dashboard filter values.You can also use export templates to change how the exported slide deck looks or behaves. See Apply Template.
The response returned to your API call will contain parameter
executionResult
with some value<result_id>
.Call API endpoint
api/v1/actions/workspaces/<workspace_id>/export/slides/<export_id>
to download the file:curl $HOST_URL/api/v1/actions/workspaces/<workspace_id>/export/slides/<export_id> \ -X GET \ -H "Authorization: Bearer $API_TOKEN" \ -H 'Content-Type: application/vnd.gooddata.api+json' \ -O "<output_file_name>.png"
Note that in Step 2 it may take a few seconds for the file to be created. Consider polling the endpoint in Step 3 until the file is ready.
Slide
You can export individual widgets on the dashboard as a single presentation slide in PDF or PPTX:
Steps:
Open the dashboard that contains the widget that you want to export.
Hover over the widget, click on the … (ellipsis) menu, and select Export:
Select Slide Deck - (.pdf) or (.pptx):
The export file will start being processed, do not leave the page before the file is finalized and downloaded to your machine:
Steps:
Call API endpoint
api/v1/entities/workspaces/<workspace_id>/analyticalDashboards/<dashboard-id>
to fetch the dashboard layout which lets you identify the widget’s ID:curl $HOST_URL/api/v1/entities/workspaces/<workspace_id>/analyticalDashboards/<dashboard-id> \ -X GET \ -H "Authorization: Bearer $API_TOKEN" \ -H 'Content-Type: application/vnd.gooddata.api+json'
Look for
widget.localIdentifier
of the widget you want to export to get its<widget_id>
.Call API endpoint
api/v1/actions/workspaces/<workspace_id>/export/slides
to create a PDF or PPTX slide of the widget, specify your widget ID in thewidgetIds
array:curl $HOST_URL/api/v1/actions/workspaces/<workspace_id>/export/slides \ -X POST \ -H "Authorization: Bearer $API_TOKEN" \ -H 'Content-Type: application/vnd.gooddata.api+json' \ -d '{ "format": "<PDF_or_PPTX>", "dashboardId": "<dashboard_id>", "fileName": "<file_name>", "widgetIds": [ "<widget_id>" ], "metadata": { "filters": [ { "dateFilter": { "localIdentifier": "0_dateFilter", "from": "-1", "to": "-1", "granularity": "GDC.time.month", "type": "relative" } }, { "attributeFilter": { "displayForm": { "identifier": "<attribute_label_id>", "type": "displayForm" }, "negativeSelection": true, "attributeElements": { "uris": [] }, "localIdentifier": "<attribute_filter_id>", "filterElementsBy": [], "selectionMode": "multi" } }, { "attributeFilter": { "displayForm": { "identifier": "<attribute_label_id>", "type": "displayForm" }, "negativeSelection": true, "attributeElements": { "uris": [] }, "localIdentifier": "<attribute_filter_id>", "filterElementsBy": [], "selectionMode": "multi" } } ] } }'
Note that
metadata.filters
is an optional property used to set specific dashboard filter values for the widget export. You can omit this property if you want to use the default dashboard filter values.You can also use export templates to change how the exported slide deck looks or behaves. See Apply Template.
The response returned to your API call will contain parameter
executionResult
with some value<result_id>
.Call API endpoint
api/v1/actions/workspaces/<workspace_id>/export/slides/<export_id>
to download the file:curl $HOST_URL/api/v1/actions/workspaces/<workspace_id>/export/slides/<export_id> \ -X GET \ -H "Authorization: Bearer $API_TOKEN" \ -H 'Content-Type: application/vnd.gooddata.api+json' \ -O "<output_file_name>.<pdf_or_pptx>"
Note that in Step 2 it may take a few seconds for the file to be created. Consider polling the endpoint in Step 3 until the file is ready.
Tabular Data
If you need raw data for further manipulation, you can export the table behind a widget to XLSX or CSV. This is ideal for deeper analysis in spreadsheets or other external tools.
Steps:
Open the dashboard that contains the widget that you want to export.
Hover over the widget and click on the … (ellipsis) menu, select Export and choose from one of the tabular data export options:
The export file will start being processed, do not leave the page before the file is finalized and downloaded to your machine:
To export data from a widget into a XLSX or CSV file, you need to define to use the AFM API.
Steps:
Compute the raw result using API endpoint
api/v1/actions/workspaces/<workspace_id>/execution/afm/execute
:curl $HOST_URL/api/v1/actions/workspaces/<workspace_id>/execution/afm/execute \ -X POST \ -H "Authorization: Bearer $API_TOKEN" \ -H 'Content-Type: application/json' \ -d '{ "resultSpec": { "dimensions": [ { "localIdentifier": "dim_0", "itemIdentifiers": [ "458f2a55e1ca457883ff36141c84dc48" ] }, { "localIdentifier": "dim_1", "itemIdentifiers": [ "measureGroup" ] } ], "totals": [] }, "execution": { "measures": [ { "localIdentifier": "0f489725fe26493fb5fdc3d2367c21ed", "definition": { "measure": { "item": { "identifier": { "id": "average_price_of_products", "type": "metric" } } } } }, { "localIdentifier": "a279058ddf724659b6b7cad14bd63404", "definition": { "measure": { "item": { "identifier": { "id": "gross_profit", "type": "metric" } } } } }, { "localIdentifier": "7e4fe02cd17d4da38ec6d464646bbbb1", "definition": { "measure": { "item": { "identifier": { "id": "order_amount", "type": "metric" } } } } } ], "attributes": [ { "label": { "identifier": { "id": "product_brand", "type": "label" } }, "localIdentifier": "458f2a55e1ca457883ff36141c84dc48" } ], "filters": [ { "relativeDateFilter": { "dataset": { "identifier": { "id": "customer_created_date", "type": "dataset" } }, "granularity": "MONTH", "from": -1, "to": -1 } } ] } }'
In the response you will get some
<execution_result_id>
in the parameterexecutionResult
.Use the
<execution_result_id>
to create a tabular export using API endpointapi/v1/actions/workspaces/<workspace_id>/export/tabular
:curl $HOST_URL/api/v1/actions/workspaces/<workspace_id>/export/tabular \ -X POST \ -H "Authorization: Bearer $API_TOKEN" \ -H 'Content-Type: application/json' \ -d '{ "format": "<XLSX_or_CSV>", "executionResult": "<execution_result_id>", "fileName": "<filename>", "settings": { "mergeHeaders": <false_or_true>, "showFilters": <false_or_true> } "customOverride": { "metrics": { "<metric_id_1>": { "title": "<metric_title_1>", "format": "$#,##0.00" }, "<metric_id_2>": { "title": "<metric_title_2>", "format": "[>=1000000000000]$#,,,,.0 T;\n[>=1000000000]$#,,,.0 B;\n[>=1000000]$#,,.0 M;\n[>=1000]$#,.0 K;\n[>=0]$#,##0;\n[<=-1000000000000]-$#,,,,.0 T;\n[<=-1000000000]-$#,,,.0 B;\n[<=-1000000]-$#,,.0 M;\n[<=-1000]-$#,.0 K;\n[<0]-$#,##0" }, "<metric_id_3>": { "title": "<metric_title_3>", "format": "[>=1000000000000]$#,,,,.0 T;\n[>=1000000000]$#,,,.0 B;\n[>=1000000]$#,,.0 M;\n[>=1000]$#,.0 K;\n[>=0]$#,##0;\n[<=-1000000000000]-$#,,,,.0 T;\n[<=-1000000000]-$#,,,.0 B;\n[<=-1000000]-$#,,.0 M;\n[<=-1000]-$#,.0 K;\n[<0]-$#,##0" } }, "labels": { "<attribute_label_id>": { "title": "<attribute_label_title>" } } } }'
Note that for CSV exports, you can omit the
settings
parameter.In the response you will get some
<export_id>
in the parameterexportResult
.Use the
<export_id>
to get the CSV file by calling the API endpointapi/v1/actions/workspaces/<workspace_id>/export/tabular/<export_id>
:curl $HOST_URL/api/v1/actions/workspaces/<workspace_id>/export/tabular/<export_id> \ -X POST \ -H "Authorization: Bearer $API_TOKEN" \ -H 'Content-Type: application/json'
Limitations
There are currently certain known limitations associated with slide deck exports:
- Images included in rich text widgets do not appear in PDF slide decks.
- When dashboard descriptions are exported into PDF slide decks, any rich text variables do not display their values.
- Chinese characters are not supported in PDF slide decks.