[ Upcoming ] Reporting Export

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:

  1. 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.

  2. 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.

  3. (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.

  4. Check job status
    Poll GET /jobs/{job_gid} until the status is succeeded and a new_reporting_export.download_url is present.

  5. 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 :white_check_mark: Object with the request parameters
parent string no :white_check_mark: 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

2 Likes