The Worklytics platform collects and analyzes workplace data at the instruction of Customer Organizations on their behalf, in accordance with our Privacy Policy, Terms of Service, and any customer agreement / laws / regulations which may supersede those terms. The Customer Organization remains the controller of this data and may instruct Worklytics to halt processing and destroy it at any time.
"Data Connectors" conceptualize the collection of workplace data, representing the connection via which Worklytics will collect data from a single data source.
Default. Worklytics uses the "default" OAuth scope from Asana's API, as the other scopes are related to information about user who connects the app. Using this scope, Worklytics will continually ingest new and historical data from a target Workspace, including Projects, Tasks, Comments - and events (Stories) related to all of those items. To match Asana users with other data sources, Worklytics will take regular snapshots of the Workspace's Users. Worklytics will also take regular snapshots of the Workspace's Teams, to be used as affiliations / analytics groups within Worklytics.
Log in as an administrator to your Worklytics account.
Go to the Asana connector: OAuth page.
Click 'Connect', then you'll then be redirected to Asana.
In Asana, confirm the OAuth grant.
Browse back to the Worklytics, and fill-in the remaining configuration settings.
Click on 'Connect' and verify that the connection was successfully made.
Log in to Asana and obtain a Service Account Token (or Personal Access Token: go to the Apps section: "Settings > Apps > Manage Developer Apps: Create new token").
Log in as an administrator to your Worklytics account.
Go to the Asana connector: Service Account Token page.
Click 'Connect', fill-in the configuration settings (use the access token you obtained in the first step), and click 'Save settings and continue'.
Verify that the connection was successfully made.
The following table(s) contains detailed examples of the metadata fields available from the Asana API endpoints Worklytics leverages. In order to pseudonymize and sanitize PII and other potentially sensitive data, Worklytics provides access to a Data Loss Prevention (DLP) Proxy, which allows customers to pre-filter metadata, within customer infrastructure, before it is sent to Worklytics for processing.
These are the fields Worklytics recommends but the Worklytics DLP Proxy provides full field-level control and therefore any field may be removed or sanitized.
Field descriptions are taken from third party API documentation, these are maintained on a best effort basis and Worklytics can not guarantee their indefinite accuracy. Please refer to the source API site for the most up-to-date documentation.
How to read the "DLP Proxy" column in the table(s):
🔴 This field is completely redacted by the DLP Proxy
⭕ This field is transformed, usually partially redacted
🟡 This field is "pseudonymized" by the DLP Proxy: only a SHA256 hash of its value is sent to Worklytics; never the value itself
To see only the fully sanitized version of this document, click here.
Worklytics requires access to the following API primary endpoints:
API docs: https://developers.asana.com/reference/tasks
DLP Proxy docs: Asana
API docs: https://developers.asana.com/docs/users
DLP Proxy docs: Asana
API docs: https://developers.asana.com/reference/projects
DLP Proxy docs: Asana
API docs: https://developers.asana.com/reference/stories
DLP Proxy docs: Asana
API docs: https://developers.asana.com/reference/workspaces
DLP Proxy docs: Asana
API docs: https://developers.asana.com/reference/getteamsforworkspace
DLP Proxy docs: Asana
Model | Description | API docs |
---|---|---|
DLP Proxy | Property Name | Type | Description |
---|---|---|---|
DLP Proxy | Property Name | Type | Description |
---|---|---|---|
DLP Proxy | Property Name | Type | Description |
---|---|---|---|
DLP Proxy | Property Name | Type | Description |
---|---|---|---|
DLP Proxy | Property Name | Type | Description |
---|---|---|---|
DLP Proxy | Property Name | Type | Description |
---|---|---|---|
Used to retrieve a list of tasks (or an individual one). Also used to search for tasks in a workspace, and retrieve subtasks of a given task.
Endpoints:
/api/1.0/tasks
/api/1.0/tasks/{taskId}
/api/1.0/tasks/{taskId}/subtasks
/api/1.0/workspaces/{workspaceId}/tasks/search
Used to retrieve a list of users (a user object represents an account in Asana that can be given access to various workspaces, projects, and tasks)
Endpoints:
/api/1.0/users
Used to retrieve a list of projects for a given team
Endpoints:
/api/1.0/teams/{teamId}/projects
Used to retrieve a list of stories associated with a task.
Endpoints:
/api/1.0/tasks/{taskId}/stories
Used to retrieve a list of workspaces (all projects and tasks have an associated workspace)
Endpoints:
/api/1.0/workspaces
Used to retrieve a list of teams for a given workspace
Endpoints:
/api/1.0/workspaces/{workspaceId}/teams
🟢 Allowed
actualTimeMinutes
Long
🟢 Allowed
approvalStatus
String
🟡 Pseudonymized
assignee
User
The user to whom the task is assigned. Any PII data is pseudonymized.
🟡 Pseudonymized
assigneeSection
Resource
🟡 Pseudonymized
assigneeSection.gid
String
Globally unique identifier of the resource
Raw example: 4831887
Sanitized example:
🔴 Redacted
assigneeSection.name
String
🟢 Allowed
assigneeSection.resourceType
String
🟢 Allowed
assigneeStatus
String
🟢 Allowed
completed
Boolean
🟢 Allowed
completedAt
Instant
🟡 Pseudonymized
completedBy
User
The user who completed the task. Any PII data is pseudonymized.
🟢 Allowed
createdAt
Instant
🟡 Pseudonymized
createdBy
User
The user who created the task. Any PII data is pseudonymized.
🟡 Pseudonymized
createdBy.email
String
The user's email address
Raw example: alice@acme.com
Sanitized example:
🟡 Pseudonymized
createdBy.gid
String
Globally unique identifier of the resource
Raw example: 4831887
Sanitized example:
🔴 Redacted
createdBy.name
String
🟢 Allowed
createdBy.resourceType
String
🟡 Pseudonymized
customFields[]
List of CustomField
🟢 Allowed
customFields[].asanaCreatedField
String
🟡 Pseudonymized
customFields[].createdBy
User
Any PII data is pseudonymized.
🟢 Allowed
customFields[].currencyCode
String
🟢 Allowed
customFields[].customLabel
String
🟢 Allowed
customFields[].customLabelPosition
String
🟢 Allowed
customFields[].dateValue
CustomFieldDate
🟢 Allowed
customFields[].dateValue.date
LocalDate
🟢 Allowed
customFields[].dateValue.dateTime
String
🔴 Redacted
customFields[].description
String
🟢 Allowed
customFields[].displayValue
String
🟢 Allowed
customFields[].enabled
Boolean
🟡 Pseudonymized
customFields[].enumOptions[]
List of EnumObject
🟢 Allowed
customFields[].enumOptions[].enabled
Boolean
🟡 Pseudonymized
customFields[].enumOptions[].gid
String
Globally unique identifier of the resource
Raw example: 4831887
Sanitized example:
🔴 Redacted
customFields[].enumOptions[].name
String
🟢 Allowed
customFields[].enumOptions[].resourceType
String
🟡 Pseudonymized
customFields[].enumValue
EnumObject
🟢 Allowed
customFields[].enumValue.enabled
Boolean
🟡 Pseudonymized
customFields[].enumValue.gid
String
Globally unique identifier of the resource
Raw example: 4831887
Sanitized example:
🔴 Redacted
customFields[].enumValue.name
String
🟢 Allowed
customFields[].enumValue.resourceType
String
🟢 Allowed
customFields[].format
String
🟡 Pseudonymized
customFields[].gid
String
Globally unique identifier of the resource
Raw example: 4831887
Sanitized example:
🟢 Allowed
customFields[].hasNotificationsEnabled
Boolean
🟢 Allowed
customFields[].isGlobalToWorkspace
Boolean
🟢 Allowed
customFields[].multiEnumValues[]
List of EnumObject
🔴 Redacted
customFields[].name
String
🟢 Allowed
customFields[].numberValue
String
🟢 Allowed
customFields[].peopleValue[]
List of Resource
🟢 Allowed
customFields[].precision
Integer
🟢 Allowed
customFields[].resourceSubtype
String
🟢 Allowed
customFields[].resourceType
String
🟢 Allowed
customFields[].textValue
String
🟢 Allowed
customFields[].type
String
🟡 Pseudonymized
dependencies[]
List of Resource
🟡 Pseudonymized
dependencies[].gid
String
Globally unique identifier of the resource
Raw example: 4831887
Sanitized example:
🔴 Redacted
dependencies[].name
String
🟢 Allowed
dependencies[].resourceType
String
🟢 Allowed
dependents[]
List of Resource
🟢 Allowed
dueAt
Instant
🟢 Allowed
dueOn
LocalDate
🔴 Redacted
external
External
🔴 Redacted
external.data
String
🔴 Redacted
external.gid
String
🟡 Pseudonymized
followers[]
List of User
List of users following the task. Any PII data is pseudonymized.
🟡 Pseudonymized
gid
String
Globally unique identifier of the resource
Raw example: 4831887
Sanitized example:
🔴 Redacted
htmlNotes
String
🟢 Allowed
is_rendered_as_separator
Boolean
🟢 Allowed
liked
Boolean
🟡 Pseudonymized
likes[]
List of UserInteraction
User interactions of the task. Any PII data is pseudonymized.
🟡 Pseudonymized
likes[].gid
String
Raw example: 4831887
Sanitized example:
🟡 Pseudonymized
likes[].user
User
Any PII data is pseudonymized.
🟡 Pseudonymized
memberships[]
List of Membership
🟡 Pseudonymized
memberships[].project
Resource
🟡 Pseudonymized
memberships[].project.gid
String
Globally unique identifier of the resource
Raw example: 4831887
Sanitized example:
🔴 Redacted
memberships[].project.name
String
🟢 Allowed
memberships[].project.resourceType
String
🟡 Pseudonymized
memberships[].section
Resource
🟡 Pseudonymized
memberships[].section.gid
String
Globally unique identifier of the resource
Raw example: 4831887
Sanitized example:
🔴 Redacted
memberships[].section.name
String
🟢 Allowed
memberships[].section.resourceType
String
🟢 Allowed
modifiedAt
Instant
🔴 Redacted
name
String
🔴 Redacted
notes
String
🟢 Allowed
numHearts
Integer
🟢 Allowed
numLikes
Integer
🟢 Allowed
numSubtasks
Integer
🟢 Allowed
parent
Task
🟢 Allowed
permalinkUrl
String
🟡 Pseudonymized
projects[]
List of ProjectCompact
🟡 Pseudonymized
projects[].gid
String
Globally unique identifier of the resource
Raw example: 4831887
Sanitized example:
🔴 Redacted
projects[].name
String
🟢 Allowed
projects[].resourceType
String
🟢 Allowed
resourceSubtype
String
🟢 Allowed
resourceType
String
🟢 Allowed
startAt
Instant
🟢 Allowed
startOn
LocalDate
🟡 Pseudonymized
tags[]
List of TagCompact
🟡 Pseudonymized
tags[].gid
String
Globally unique identifier of the resource
Raw example: 4831887
Sanitized example:
🔴 Redacted
tags[].name
String
🟢 Allowed
tags[].resourceType
String
🟡 Pseudonymized
workspace
WorkspaceCompact
🟡 Pseudonymized
workspace.gid
String
Globally unique identifier of the resource
Raw example: 4831887
Sanitized example:
🔴 Redacted
workspace.name
String
🟢 Allowed
workspace.resourceType
String
🟡 Pseudonymized
email
String
The user's email address
Raw example: alice@acme.com
Sanitized example:
🟡 Pseudonymized
gid
String
Globally unique identifier of the resource
Raw example: 4831887
Sanitized example:
🔴 Redacted
name
String
🟢 Allowed
resourceType
String
🟡 Pseudonymized
gid
String
Globally unique identifier of the resource
Raw example: 4831887
Sanitized example:
🔴 Redacted
name
String
🟢 Allowed
resourceType
String
🟡 Pseudonymized
assignee
User
Any PII data is pseudonymized.
🟡 Pseudonymized
assignee.email
String
The user's email address
Raw example: alice@acme.com
Sanitized example:
🟡 Pseudonymized
assignee.gid
String
Globally unique identifier of the resource
Raw example: 4831887
Sanitized example:
🔴 Redacted
assignee.name
String
🟢 Allowed
assignee.resourceType
String
🟢 Allowed
createdAt
Instant
🟡 Pseudonymized
createdBy
User
Any PII data is pseudonymized.
🟡 Pseudonymized
customField
CustomField
🟢 Allowed
customField.asanaCreatedField
String
🟡 Pseudonymized
customField.createdBy
User
Any PII data is pseudonymized.
🟢 Allowed
customField.currencyCode
String
🟢 Allowed
customField.customLabel
String
🟢 Allowed
customField.customLabelPosition
String
🟢 Allowed
customField.dateValue
CustomFieldDate
🟢 Allowed
customField.dateValue.date
LocalDate
🟢 Allowed
customField.dateValue.dateTime
String
🔴 Redacted
customField.description
String
🟢 Allowed
customField.displayValue
String
🟢 Allowed
customField.enabled
Boolean
🟡 Pseudonymized
customField.enumOptions[]
List of EnumObject
🟢 Allowed
customField.enumOptions[].enabled
Boolean
🟡 Pseudonymized
customField.enumOptions[].gid
String
Globally unique identifier of the resource
Raw example: 4831887
Sanitized example:
🔴 Redacted
customField.enumOptions[].name
String
🟢 Allowed
customField.enumOptions[].resourceType
String
🟡 Pseudonymized
customField.enumValue
EnumObject
🟢 Allowed
customField.enumValue.enabled
Boolean
🟡 Pseudonymized
customField.enumValue.gid
String
Globally unique identifier of the resource
Raw example: 4831887
Sanitized example:
🔴 Redacted
customField.enumValue.name
String
🟢 Allowed
customField.enumValue.resourceType
String
🟢 Allowed
customField.format
String
🟡 Pseudonymized
customField.gid
String
Globally unique identifier of the resource
Raw example: 4831887
Sanitized example:
🟢 Allowed
customField.hasNotificationsEnabled
Boolean
🟢 Allowed
customField.isGlobalToWorkspace
Boolean
🟢 Allowed
customField.multiEnumValues[]
List of EnumObject
🔴 Redacted
customField.name
String
🟢 Allowed
customField.numberValue
String
🟡 Pseudonymized
customField.peopleValue[]
List of Resource
🟡 Pseudonymized
customField.peopleValue[].gid
String
Globally unique identifier of the resource
Raw example: 4831887
Sanitized example:
🔴 Redacted
customField.peopleValue[].name
String
🟢 Allowed
customField.peopleValue[].resourceType
String
🟢 Allowed
customField.precision
Integer
🟢 Allowed
customField.resourceSubtype
String
🟢 Allowed
customField.resourceType
String
🟢 Allowed
customField.textValue
String
🟢 Allowed
customField.type
String
🟡 Pseudonymized
dependency
ResourceWithSubtype
🟡 Pseudonymized
dependency.gid
String
Globally unique identifier of the resource
Raw example: 4831887
Sanitized example:
🔴 Redacted
dependency.name
String
🟢 Allowed
dependency.resourceSubtype
String
🟢 Allowed
dependency.resourceType
String
🟡 Pseudonymized
duplicateOf
ResourceWithSubtype
🟡 Pseudonymized
duplicateOf.gid
String
Globally unique identifier of the resource
Raw example: 4831887
Sanitized example:
🔴 Redacted
duplicateOf.name
String
🟢 Allowed
duplicateOf.resourceSubtype
String
🟢 Allowed
duplicateOf.resourceType
String
🟡 Pseudonymized
duplicatedFrom
ResourceWithSubtype
🟡 Pseudonymized
duplicatedFrom.gid
String
Globally unique identifier of the resource
Raw example: 4831887
Sanitized example:
🔴 Redacted
duplicatedFrom.name
String
🟢 Allowed
duplicatedFrom.resourceSubtype
String
🟢 Allowed
duplicatedFrom.resourceType
String
🟡 Pseudonymized
follower
User
Any PII data is pseudonymized.
🟡 Pseudonymized
gid
String
Globally unique identifier of the resource
Raw example: 4831887
Sanitized example:
🔴 Redacted
hearted
N/A
🟢 Allowed
htmlText
String
🔴 Redacted
html_text
N/A
🟢 Allowed
isEditable
Boolean
🟢 Allowed
isEdited
Boolean
🟢 Allowed
isPinned
Boolean
🟢 Allowed
liked
Boolean
🟡 Pseudonymized
likes[]
List of UserInteraction
Any PII data is pseudonymized.
🟡 Pseudonymized
likes[].gid
String
Raw example: 4831887
Sanitized example:
🟡 Pseudonymized
likes[].user
User
Any PII data is pseudonymized.
🔴 Redacted
name
String
🟢 Allowed
newApprovalStatus
String
🟢 Allowed
newDates
StoryDate
🟢 Allowed
newDates.dueAt
Instant
🟢 Allowed
newDates.dueOn
LocalDate
🟢 Allowed
newDates.startOn
LocalDate
🟡 Pseudonymized
newEnumValue
EnumObject
🟢 Allowed
newEnumValue.enabled
Boolean
🟡 Pseudonymized
newEnumValue.gid
String
Globally unique identifier of the resource
Raw example: 4831887
Sanitized example:
🔴 Redacted
newEnumValue.name
String
🟢 Allowed
newEnumValue.resourceType
String
🟢 Allowed
newMultiEnumValues[]
List of EnumObject
🟢 Allowed
newName
String
🟢 Allowed
newNumberValue
String
🟡 Pseudonymized
newPeopleValue
Resource
🟡 Pseudonymized
newPeopleValue.gid
String
Globally unique identifier of the resource
Raw example: 4831887
Sanitized example:
🔴 Redacted
newPeopleValue.name
String
🟢 Allowed
newPeopleValue.resourceType
String
🟢 Allowed
newResourceSubtype
String
🟡 Pseudonymized
newSection
Resource
🟡 Pseudonymized
newSection.gid
String
Globally unique identifier of the resource
Raw example: 4831887
Sanitized example:
🔴 Redacted
newSection.name
String
🟢 Allowed
newSection.resourceType
String
🟢 Allowed
newTextValue
String
🔴 Redacted
new_name
N/A
🔴 Redacted
new_text_value
N/A
🟢 Allowed
numHearts
Integer
🟢 Allowed
numLikes
Integer
🟢 Allowed
oldApprovalStatus
String
🟢 Allowed
oldDates
StoryDate
🟢 Allowed
oldDates.dueAt
Instant
🟢 Allowed
oldDates.dueOn
LocalDate
🟢 Allowed
oldDates.startOn
LocalDate
🟡 Pseudonymized
oldEnumValue
EnumObject
🟢 Allowed
oldEnumValue.enabled
Boolean
🟡 Pseudonymized
oldEnumValue.gid
String
Globally unique identifier of the resource
Raw example: 4831887
Sanitized example:
🔴 Redacted
oldEnumValue.name
String
🟢 Allowed
oldEnumValue.resourceType
String
🟢 Allowed
oldMultiEnumValues[]
List of EnumObject
🟢 Allowed
oldName
String
🟢 Allowed
oldNumberValue
String
🟡 Pseudonymized
oldPeopleValue
Resource
🟡 Pseudonymized
oldPeopleValue.gid
String
Globally unique identifier of the resource
Raw example: 4831887
Sanitized example:
🔴 Redacted
oldPeopleValue.name
String
🟢 Allowed
oldPeopleValue.resourceType
String
🟢 Allowed
oldResourceSubtype
String
🟡 Pseudonymized
oldSection
Resource
🟡 Pseudonymized
oldSection.gid
String
Globally unique identifier of the resource
Raw example: 4831887
Sanitized example:
🔴 Redacted
oldSection.name
String
🟢 Allowed
oldSection.resourceType
String
🟢 Allowed
oldTextValue
String
🔴 Redacted
old_name
N/A
🔴 Redacted
old_text_value
N/A
🟡 Pseudonymized
previews[]
List of Preview
🟢 Allowed
previews[].fallBack
String
🟢 Allowed
previews[].footer
String
🟡 Pseudonymized
previews[].gid
String
Globally unique identifier of the resource
Raw example: 4831887
Sanitized example:
🟢 Allowed
previews[].header
String
🟢 Allowed
previews[].headerLink
String
🟢 Allowed
previews[].htmlText
String
🔴 Redacted
previews[].name
String
🟢 Allowed
previews[].resourceType
String
🟢 Allowed
previews[].text
String
🟢 Allowed
previews[].title
String
🟢 Allowed
previews[].titleLink
String
🟡 Pseudonymized
project
ProjectCompact
🟡 Pseudonymized
project.gid
String
Globally unique identifier of the resource
Raw example: 4831887
Sanitized example:
🔴 Redacted
project.name
String
🟢 Allowed
project.resourceType
String
🟢 Allowed
resourceSubtype
String
🟢 Allowed
resourceType
String
🟢 Allowed
source
String
🟢 Allowed
stickerName
String
🟡 Pseudonymized
story
StoryCompact
🟢 Allowed
story.createdAt
Instant
🟡 Pseudonymized
story.createdBy
User
Any PII data is pseudonymized.
🟡 Pseudonymized
story.gid
String
Globally unique identifier of the resource
Raw example: 4831887
Sanitized example:
🔴 Redacted
story.name
String
🟢 Allowed
story.resourceSubtype
String
🟢 Allowed
story.resourceType
String
🔴 Redacted
story.text
String
🟡 Pseudonymized
tag
TagCompact
🟡 Pseudonymized
tag.gid
String
Globally unique identifier of the resource
Raw example: 4831887
Sanitized example:
🔴 Redacted
tag.name
String
🟢 Allowed
tag.resourceType
String
🟡 Pseudonymized
target
Task
🟢 Allowed
target.actualTimeMinutes
Long
🟢 Allowed
target.approvalStatus
String
🟡 Pseudonymized
target.assignee
User
The user to whom the task is assigned. Any PII data is pseudonymized.
🟢 Allowed
target.assigneeSection
Resource
🟢 Allowed
target.assigneeStatus
String
🟢 Allowed
target.completed
Boolean
🟢 Allowed
target.completedAt
Instant
🟡 Pseudonymized
target.completedBy
User
The user who completed the task. Any PII data is pseudonymized.
🟢 Allowed
target.createdAt
Instant
🟡 Pseudonymized
target.createdBy
User
The user who created the task. Any PII data is pseudonymized.
🟢 Allowed
target.customFields[]
List of CustomField
🟢 Allowed
target.dependencies[]
List of Resource
🟢 Allowed
target.dependents[]
List of Resource
🟢 Allowed
target.dueAt
Instant
🟢 Allowed
target.dueOn
LocalDate
🔴 Redacted
target.external
External
🔴 Redacted
target.external.data
String
🔴 Redacted
target.external.gid
String
🟡 Pseudonymized
target.followers[]
List of User
List of users following the task. Any PII data is pseudonymized.
🟡 Pseudonymized
target.gid
String
Globally unique identifier of the resource
Raw example: 4831887
Sanitized example:
🔴 Redacted
target.htmlNotes
String
🟢 Allowed
target.is_rendered_as_separator
Boolean
🟢 Allowed
target.liked
Boolean
🟡 Pseudonymized
target.likes[]
List of UserInteraction
User interactions of the task. Any PII data is pseudonymized.
🟢 Allowed
target.memberships[]
List of Membership
🟢 Allowed
target.memberships[].project
Resource
🟢 Allowed
target.memberships[].section
Resource
🟢 Allowed
target.modifiedAt
Instant
🔴 Redacted
target.name
String
🔴 Redacted
target.notes
String
🟢 Allowed
target.numHearts
Integer
🟢 Allowed
target.numLikes
Integer
🟢 Allowed
target.numSubtasks
Integer
🟢 Allowed
target.parent
Task
🟢 Allowed
target.permalinkUrl
String
🟢 Allowed
target.projects[]
List of ProjectCompact
🟢 Allowed
target.resourceSubtype
String
🟢 Allowed
target.resourceType
String
🟢 Allowed
target.startAt
Instant
🟢 Allowed
target.startOn
LocalDate
🟢 Allowed
target.tags[]
List of TagCompact
🟡 Pseudonymized
target.workspace
WorkspaceCompact
🟡 Pseudonymized
target.workspace.gid
String
Globally unique identifier of the resource
Raw example: 4831887
Sanitized example:
🔴 Redacted
target.workspace.name
String
🟢 Allowed
target.workspace.resourceType
String
🟢 Allowed
task
Task
🔴 Redacted
text
String
🟢 Allowed
type
String
🟡 Pseudonymized
gid
String
Globally unique identifier of the resource
Raw example: 4831887
Sanitized example:
🔴 Redacted
name
String
🟢 Allowed
resourceType
String
🟡 Pseudonymized
gid
String
Globally unique identifier of the resource
Raw example: 4831887
Sanitized example:
🔴 Redacted
name
String
🟢 Allowed
resourceType
String