Summary
A new API endpoint will be available that allows Enterprise and Enterprise+ users to export and report on project and program progress data from Asana. Exports can be initiated for a team, portfolio, or project, and include data about related objects in the Asana graph:
-
Team export: includes all projects within the team, sections, tasks, and first-level subtasks.
-
Portfolio export: includes the portfolio, its child portfolios, child projects, sections, tasks, and first-level subtasks.
-
Project export: includes the project, its sections, tasks, and first-level subtasks.
Exported data can be used in external reporting tools such as Power BI and Tableau. The data is structured modularly to support flexible joins across resource types.
Notes on behavior:
-
Export results are provided as a single gzipped file in .jsonl format.
-
Each line in the file represents a single resource object.
-
A user can run only one export per parent ID at a time. If an export is already in progress for a given Team, Portfolio, or Project, a new request will return the same job ID.
-
Exports are cached for 4 hours if the export contains over 1,000 tasks. Repeated export requests during this window return the same file.
-
The returned file is hosted on S3 for 30 days. The download link is a presigned S3 URL that expires after 1 hour. If expired, users can regenerate the link using the GET /jobs/{job_gid} endpoint.
Note that users can only export data they have permission to view. However, service accounts can export all accessible data.
Usage
Below is an overview of the expected workflow:
-
Initiate export
Send a POST request to /exports/graph with the ID of a Team, Portfolio, or Project in the request body. Save the returned job_gid. -
Job creation
The export job retrieves all data associated with the specified parent. If the user lacks access to certain data, those objects will not be included in the result. -
(If applicable) Service account usage
For service accounts or broader data needs, you may first determine all accessible Project or Portfolio IDs, then initiate exports for each using separate requests. -
Check job status
Poll GET /jobs/{job_gid} until the status is succeeded and a new_reporting_export.download_url is present. -
Download the file
Use the provided presigned S3 URL (download_url) to download the export file.
The file is in .jsonl.gz format and the URL expires in 1 hour.
For example:
Trigger a new export by making a request to the new endpoint: POST /exports/graph. You can request an export for a team, portfolio, or project by providing its ID in the parent property.
Name | Type | Optional? | Public? | Description |
---|---|---|---|---|
data | object | no | ![]() |
Object with the request parameters |
parent | string | no | ![]() |
ID of object: project, portfolio or team |
Example request body:
{
"data": {
"parent": "181636"
}
}
Example response body:
{
"data": {
"gid": "572471",
"resource_type": "job",
"resource_subtype": "graph_export_request",
"status": "in_progress",
"new_graph_export": {
"gid": "572470",
"resource_type": "graph_export",
"created_at": "2025-05-19T08:20:52.325Z",
"download_url": null,
"completed_at": null
}
}
}
- Next, check export status and the retrieve file via the updated endpoint: GET /jobs/{job_gid}. Once complete, a download_url will be returned.
- Example response body with the new field:
{
"data": {
"gid": "12345",
"resource_type": "job",
"resource_subtype": "graph_export_request",
"status": "succeeded",
"new_graph_export": {
"gid": "56789",
"resource_type": "graph_export",
"created_at": "2012-02-22T02:06:58.147Z",
"completed_at": "2012-02-22T02:16:58.147Z",
"download_url": "https://asana-object-export-prod.s3.amazonaws.com/11111/22222/20120222-020658/export-11111-20120222-020658.jsonl.gz?..."
}
}
}
File format
The result of the export will provide a presigned S3 URL that expires in 1 hour. With this URL, a user can download the file. The file is gzipped and in JSONL format. Each line in the file represents a different object in JSON format. Each object has a resource_type. The resource types that can be presented in the file are:
resource_type | Description |
---|---|
portfolio | Portfolio data |
project | Project data |
task | Task data |
section | Section of project data |
portfolio_to_portfolio | Relation between portfolios |
project_to_portfolio | Relation between project and portfolio |
Below you can find information about each resource type
resource_type: portfolio
Property | Description |
---|---|
gid | Globally unique identifier of the resource, as a string. |
name | The name of the portfolio. |
archived | True if the portfolio is archived, false if not. |
created_at | The time at which this resource was created. |
created_by.gid | Globally unique identifier of the resource, as a string. |
created_by.name | The user’s name. |
created_by.resource_type | The base type of this resource. |
current_status_update.created_at | The time at which this resource was created. |
current_status_update.created_by.gid | Globally unique identifier of the resource, as a string. |
current_status_update.created_by.name | The user’s name. |
current_status_update.gid | Globally unique identifier of the resource, as a string. |
current_status_update.resource_type | The base type of this resource. |
current_status_update.status_type | Status of the status update. |
current_status_update.text | The text of the status update. |
current_status_update.title | The title of the status update. |
custom_fields.date_value | Only relevant for custom fields of type date. |
custom_fields.enum_value | Only relevant for custom fields of type enum |
custom_fields.multi_enum_values | Only relevant for custom fields of type multi_enum |
custom_fields.name | The name of the custom field. |
custom_fields.number_value | Only relevant for custom fields of type number |
custom_fields.people_value.email | Only relevant for custom fields of type people |
custom_fields.text_value | Only relevant for custom fields of type text |
custom_fields.type | The type of the custom field. Must be one of the given values: date, enum, multi_enum, number, people, text |
default_access_level | The default access level when inviting new members to the portfolio |
due_on | The localized day on which this portfolio is due. This takes a date with format-MM-DD. |
members.gid | Globally unique identifier of the resource, as a string. |
members.name | The user’s name. |
members.resource_type | The base type of this resource. |
owner.gid | Globally unique identifier of the resource, as a string |
owner.name | The user’s name |
owner.resource_type | The base type of this resource. |
permalink_url | A url that points directly to the object within Asana. |
privacy_setting | The privacy setting of the portfolio. |
public | True if the portfolio is public to its workspace members. |
resource_type | The base type of this resource. |
start_on | The day on which work for this portfolio begins, or null if the project has no start date |
workspace.gid | Globally unique identifier of the resource, as a string |
workspace.name | The name of the workspace. |
workspace.resource_type | The base type of this resource. |
resource_type: project
Property | Description |
---|---|
gid | Globally unique identifier of the resource, as a string. |
resource_type | The base type of this resource. |
name | The name of the project. |
archived | True if the project is archived, false if not. |
color | Color of the project. |
created_at | The time at which this resource was created. |
current_status_update.gid | Globally unique identifier of the resource, as a string. |
current_status_update.created_at | The time at which this resource was created. |
current_status_update.created_by.gid | Globally unique identifier of the resource, as a string. |
current_status_update.created_by.name | The user’s name. |
current_status_update.resource_type | The base type of this resource. |
current_status_update.status_type | Status of the status update. |
current_status_update.text | The text of the status update. |
current_status_update.title | The title of the status update. |
default_view | The default view (list, board, calendar, or timeline) of a project. |
due_on | The localized day on which this project is due. This takes a date with format YYYY-MM-DD. |
custom_fields.name | The name of the custom field. |
custom_fields.type | The type of the custom field. Must be one of the given values: date, enum, multi_enum, number, people, text |
custom_fields.date_value | Only relevant for custom fields of type date. |
custom_fields.enum_value | Only relevant for custom fields of type enum |
custom_fields.multi_enum_values | Only relevant for custom fields of type multi_enum |
custom_fields.number_value | Only relevant for custom fields of type number |
custom_fields.text_value | Only relevant for custom fields of type text |
custom_fields.people_value.email | Only relevant for custom fields of type people |
members.gid | Globally unique identifier of the resource, as a string. |
members.resource_type | The base type of this resource. |
members.name | The user’s name. |
modified_at | The time at which this project was last modified |
notes | Free-form textual information associated with the project |
owner.gid | Globally unique identifier of the resource, as a string |
owner.resource_type | The base type of this resource. |
owner.name | The user’s name |
start_on | The day on which work for this project begins, or null if the project has no start date |
minimum_access_level_for_customization | The minimum access level needed for project members to modify this project’s workflow and appearance. |
minimum_access_level_for_sharing | The minimum access level needed for project members to share the project and manage project memberships. |
completed_at | The time at which this project was completed, or null if the project is not completed. |
completed_by.gid | Globally unique identifier of the resource, as a string. |
completed_by.resource_type | The base type of this resource. |
completed_by.name | The user’s name |
workspace.gid | Globally unique identifier of the resource, as a string |
workspace.resource_type | The base type of this resource. |
workspace.name | The name of the workspace. |
team.gid | Globally unique identifier of the resource, as a string. |
team.resource_type | The base type of this resource. |
team.name | The name of the team. |
icon | The icon for a project. |
permalink_url | A url that points directly to the object within Asana. |
default_access_level | The default access level when inviting new members to the portfolio |
privacy_setting | The privacy setting of the project. |
resource_type: task
Property | Description |
---|---|
gid | Globally unique identifier of the resource, as a string. |
name | The name of the task. |
actual_time_minutes | This value represents the sum of all the Time Tracking entries in the Actual Time field on a given Task. |
approval_status | Reflects the approval status of this task |
assignee.gid | Globally unique identifier of the resource, as a string. |
assignee.name | The users name |
assignee.email | The users email |
assignee_status | Scheduling status of this task for the user it is assigned to |
completed | True if the task is currently marked complete, false if not. |
completed_at | The time at which this task was completed, or null if the task is incomplete. |
completed_by.gid | Globally unique identifier of the resource, as a string. |
completed_by.name | The users name |
completed_by.email | The users email |
created_by.gid | Globally unique identifier of the resource, as a string. |
created_by.name | The users name |
created_by.email | The users email |
created_at | The time at which this resource was created. |
custom_fields.gid | Globally unique identifier of the resource, as a string. |
custom_fields.name | The name of the custom field. |
custom_fields.type | The type of the custom field. |
custom_fields.value | Value of the custom field. |
dependencies.gid | Globally unique identifier of the resource, as a string. |
dependents.gid | Globally unique identifier of the resource, as a string. |
due_at | The UTC date and time on which this task is due, or null if the task has no due time. |
due_on | The localized date on which this task is due, or null if the task has no due date |
memberships.section.gid | Globally unique identifier of the resource, as a string. |
memberships.section.name | The name of the section |
modified_at | The time at which this task was last modified. |
num_likes | The number of users who have liked this task. |
num_subtasks | The number of subtasks on this task. |
parent.gid | Globally unique identifier of the resource, as a string. |
permalink_url | A url that points directly to the object within Asana. |
projects.gid | Globally unique identifier of the resource, as a string. |
projects.name | The name of the project |
resource_subtype | The subtype of this resource. Must be one of the given values: task, milestone, approval, custom |
resource_type | The type of resource |
start_at | Date and time on which work begins for the task, or null if the task has no start time. |
start_on | The day on which work begins for the task , or null if the task has no start date. |
tags.gid | Globally unique identifier of the resource, as a string. |
tags.name | The name of the tag |
workspace.gid | Globally unique identifier of the resource, as a string. |
workspace.name | The name of the workspace |
resource_type: section
Property | Description |
---|---|
gid | Globally unique identifier of the resource, as a string. |
resource_type | The type of resource |
name | The name of the section |
created_at | The time at which this resource was created. |
project.gid | Globally unique identifier of the resource, as a string. |
project.resource_type | The type of resource |
resource_type: portfolio_to_portfolio
Property | Description |
---|---|
resource_type | The type of resource |
portfolio.gid | Globally unique identifier of the resource, as a string. |
portfolio.name | The name of the portfolio |
portfolio.resource_type | The type of resource |
child_portfolio.gid | Globally unique identifier of the resource, as a string. |
child_portfolio.name | The name of the child portfolio |
child_portfolio.resource_type | The type of resource |
resource_type: project_to_portfolio
Property | Description |
---|---|
resource_type | The type of resource |
project.gid | Globally unique identifier of the resource, as a string. |
project.name | The name of the project |
project.resource_type | The type of resource |
portfolio.gid | Globally unique identifier of the resource, as a string. |
portfolio.name | The name of the portfolio |
portfolio.resource_type | The type of resource |
Timeline
API release: Jun 13, 2025