[New] Resource exports endpoint

Summary

We’re introducing a new POST /exports/resource endpoint that allows bulk export of tasks, teams, and messages using an Asana service account. This endpoint provides a standardized way to extract large datasets from your Asana workspace without making thousands of individual API requests.

Resource Export API Reference

What’s new

The /exports/resource endpoint enables you to:

  • Export multiple resource types in a single request (tasks, teams, messages)
  • Apply filters to export only the data you need (for tasks and messages)
  • Select specific fields to minimize response size
  • Process exports asynchronously through our jobs system
  • Download compressed JSONL files for efficient data processing

Who benefits

This endpoint is available to:

  • Enterprise+ customers
  • Compliance Management Add-on subscribers

This is particularly valuable for developers building:

  • Data backup and archival systems
  • Compliance reporting tools
  • Business intelligence dashboards
  • Data migration utilities
  • Audit trail systems

Usage

Basic workflow

  1. Initiate export: POST /exports/resource with your parameters
  2. Poll job status: GET /jobs/{job_gid} until status is succeeded
  3. Download file: Retrieve the compressed JSON file from download_url
  4. Process data: Parse the file line by line

Example: Export filtered tasks and teams

POST /exports/resource
{
  "data": {
    "workspace": "12345",
    "export_request_parameters": [
      {
        "resource_type": "task",
        "filters": {
          "assigned_by.any": ["12345"],
          "assignee.any": ["12345"],
          "created_at.after": "2024-01-01T00:00:00.000Z"
        }
      },
      {
        "resource_type": "team",
        "fields": ["gid", "name", "description"]
      }
    ]
  }
}

Response:

{
  "data": {
    "gid": "12345",
    "resource_type": "job",
    "resource_subtype": "export_request",
    "status": "in_progress",
    "new_resource_export": {
      "gid": "56789",
      "created_at": "2012-02-22T02:06:58.147Z",
      "completed_at": null,
      "download_url": null
    }
  }
}

Checking export status

GET /jobs/12345
{
  "data": {
    "gid": "12345",
    "resource_type": "job", 
    "resource_subtype": "export_request",
    "status": "succeeded",
    "new_resource_export": {
      "gid": "56789",
      "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?..."
    }
  }
}

Available filters

Resource Type Supported Filters
Tasks or Messages created_at.after, created_at.before, modified_at.after, modified_at.before, created_by.any, followers.any, liked_by.any, commented_on_by.any
Tasks only assigned_by.any, assignee.any

Request parameters

Parameter Type Required Description
workspace string :white_check_mark: Workspace GID to export from
export_request_parameters array :white_check_mark: Array of resource types and their export configurations

ExportRequestParameters object:

Field Type Required Description
resource_type string :white_check_mark: Resource to export: "task", "team", or "message"
fields array :cross_mark: Specific fields to include (defaults to standard schema)
filters object :cross_mark: Filters to apply to the export

Special considerations

Message exports

Messages are not available through standard API endpoints but can be exported using this endpoint. The export includes fields like title, text, html_notes, attachments, and relationship data.

Rate limits

  • Concurrent exports: Limited to 1 active export per workspace (configurable)
  • Job polling: Subject to standard API rate limits
  • Download links: Temporary URLs with expiration times

File format

Exports are delivered as:

  • Format: JSON Lines (.jsonl)
  • Compression: Gzip (.gz)
  • Structure: One JSON object per line, each representing a resource

Choosing between resource exports and graph exports

Asana new offers two export endpoints for different use cases:

Use /exports/resource when you need:

  • Workspace-wide data: Export all tasks, teams, or messages across an entire workspace
  • Flexible filtering: Apply user-based, date-based, or custom filters across resources
  • Custom field selection: Choose exactly which fields to include in your export
  • Cross-project analysis: Aggregate data that spans multiple projects or teams
  • Compliance reporting: Generate comprehensive datasets for audit or regulatory purposes

Use /exports/graph when you need:

  • Project-centric exports: Start from a specific project, portfolio, or team and export its hierarchy
  • Relational data: Capture the relationships between objects (project → tasks → subtasks)
  • Structured workflows: Export data that follows Asana’s organizational structure
  • Smaller, focused datasets: Get everything related to a specific project or portfolio

Key differences:

Feature Resource Export Graph Export
Access Service account User token (personal access token or OAuth access token)
Scope Workspace-wide Project/portfolio/team-centric
Filtering Advanced user/date filters Hierarchy-based filtering
Structure Flat list of resources Hierarchical relationships
Use case Compliance, reporting, analytics Project migration, structured data

Example: To export all tasks assigned to a specific user across your workspace, use /exports/resource. To export a complete project with all its tasks, subtasks, and relationships, use /exports/graph.

Timeline

Available now to customers with the Compliance Management Add-on or on the Enterprise+ tier.

Resources

4 Likes