Skip to main content

Do you use Asana for Project and Task Management?

Do you have Custom Fields on your Asana Tasks?

If so - you might have noticed that Zapier doesn’t currently have the ability to update those Custom Fields in the Update Task action for Asana.

Whenever I see a case like this I immediately look for the answer to 2 questions.

  1. Does the Asana API use API Key for Authentication (rather than OAuth)?

  2. Does their Update Task endpoint provide the ability to update Custom Fields?

If the answer to both of those questions is “Yes” - we should be able to use Webhooks by Zapier to update the Custom Fields on the Task.

Question 1: Does the Asana API use API Key for Authentication?

It turns out they do. :)

You are able to generate a Personal Access Token (PAT) for use in API Calls.

Question 2: Does their Update Task endpoint provide the ability to update Custom Fields?

And we do have the ability to update the custom fields on a task using the Update Task endpoint.

https://developers.asana.com/docs/update-a-task

 

So both criteria for using Webhooks by Zapier to Update Custom fields on the Task are True.

Now it’s time to generate a Personal Access Token and test it out.

Generating an Asana Personal Access Token (PAT)

Asana has instructions for how to do this here:

https://developers.asana.com/docs/authentication-quick-start#app-or-pat

First we’ll navigate to this Permalink.

And once there - we’ll click the link to Generate a New Access Token.

 

We’ll Name our New Token and then click Create Token.

 

Then make sure to Copy the token and store it in a secure location.

Gathering the Required Information

In order to send the webhooks request - we’re going to need a couple of pieces of data.

First - we will need the Asana Task ID.

If you’re updating a Task - it should already exist so we would typically get the Task ID in one of 2 ways in the Zap.

  1. From the Trigger. In my example below - I’m going to use a Google Sheets Updated Row trigger to bring in the Task ID and the values I want for the Custom Field. But you may be storing it in another App which Triggers the Zap like Airtable or Pipedrive - or even using an Asana New Task in Project trigger.

  2. By searching for the Task in Zapier by using a Find Task in Project action.

The second thing we’ll need are the Custom Field IDs.

You’ll notice in Asana’s example above that the sample code looks like this.

"custom_fields": {
      "4578152156": "Not Started",
      "5678904321": "On Hold"
    }

Those Numbers on the left are the Custom Field IDs.

And we can get those in 3 steps.

  1. In Zapier - use one of the existing triggers or actions to find your Workspace ID.

  1. Put your Workspace ID into the URL structure below.

https://app.asana.com/api/1.0/workspaces/WORKSPACEID/custom_fields

  1. Make sure you’re logged into Asana and copy paste that URL with your workspace ID into your browser.

That will bring up all of your custom fields in a JSON format.

Use Ctl+F to Find or Search for the field name you’re looking for.

In my case - I have 5 Custom Fields for my test below.

The “gid” is the ID we will use to update this specific Custom Field in our Webhook Request.

Custom Text Field

{
    "gid": "1200210830546881",
    "name": "CustomText",
    "resource_subtype": "text",
    "resource_type": "custom_field",
    "type": "text"
  }

 

Custom Number Field

{
    "gid": "1200260667826518",
    "name": "CustomNumber",
    "precision": 0,
    "resource_subtype": "number",
    "resource_type": "custom_field",
    "type": "number"
  }

 

Custom Currency Field

{
    "gid": "1200260924395860",
    "name": "CustomCurrency",
    "precision": 0,
    "resource_subtype": "number",
    "resource_type": "custom_field",
    "type": "number"
  }

 

Custom Percent Field

{
    "gid": "1200260924537293",
    "name": "CustomPercent",
    "precision": 0,
    "resource_subtype": "number",
    "resource_type": "custom_field",
    "type": "number"
  }

 

Custom Drop-down Field with 3 Options

{
    "gid": "1200260725860904",
    "enum_options": >{
      "gid": "1200260725860977",
      "color": "green",
      "enabled": true,
      "name": "Test1",
      "resource_type": "enum_option"
    }, {
      "gid": "1200260725860991",
      "color": "red",
      "enabled": true,
      "name": "Test2",
      "resource_type": "enum_option"
    }, {
      "gid": "1200260819199057",
      "color": "orange",
      "enabled": true,
      "name": "Test3",
      "resource_type": "enum_option"
    }],
    "name": "CustomDropDown",
    "resource_subtype": "enum",
    "resource_type": "custom_field",
    "type": "enum"
  }

 

The Custom Drop Down options are a bit tricky - as rather than passing Asana the Name (“Test2” for example) - we’ll need to send them the GID for that option instead (1200260725860991)

Putting it All Together in a Zap

Now that we have all the pieces - we can build our test Zap.

As I mentioned above - I’m using a Google Sheets Updated Row trigger to start my Zap.

Basically - I’m adding the Task Name and ID from a separate Zap - then I want to update the Custom Fields on the Sheet to trigger my Zap and ultimately update the Asana task.

 

I have a Filter at Step 2 - so my Zap only continues once I add the word “Yes” to the Trigger Column on my Sheet above.

 

And then in Step 3 - I’m using a Webhooks by Zapier Custom Request.

Here are the important parameters on the request.

  1. The Method will be PUT

  2. The URL is https://app.asana.com/api/1.0/tasks/TASKID - where TASKID will be mapped in from another step of the Zap.

  3. The Data should follow the formatting below - you can see detailed examples including other fields that can be updated on Asana’s site here: https://developers.asana.com/docs/update-a-task

  4. There will be 2 Headers - the first is Content-type on the left - and application/json on the right

  5. The second Header is Authorization on the left - then Bearer (a space) and your Personal Access Token that you generated above.

Running the test - should update all the custom fields on my Asana task - and it does. :)

Summary

While Updating Custom Fields on an Asana Task isn’t currently built into the Asana Update Task action in Zapier - it is possible to update these fields using a Webhooks by Zapier Custom Request.

In order to do so - we need to generate a Personal Access Token from Asana and look up the ID values for our Workspace and each Custom Field.

Dropdown Custom Fields are a bit trickier since we have to pass the ID for the dropdown option to Asana and not the Name.

If you do test this out - I’d love to hear your experience (or any tips you learn) in the comments below!

Hi guys, I have been trying to set a Zap using a webhook, I followed this tutorial and was doing very well but I realized Zapier changed the Data section and does not accept the Json code, instead, there are fields to enter data (screenshot beow), any idea of what to put there? I know this is a very old post, so the info might not be up to date with the current version of Zapier 

 


Please help. I’ve read this multiple times and I’m still getting an error code. Not sure what I’m doing wrong?

I get the 400 error code?

 


Anyone have any luck here?

 

I am getting an authorization error:

 

Failed to create a request in Webhooks by Zapier

Not Authorized (HTTP Status Code: 401)


Thanks for all the useful info - very helpful to those of us with a limited coding background!

I think I’ve followed the steps & matched up the formatting, but the Asana custom fields still aren’t populating when I run the test. My Zap is structured to trigger the creation of an Asana task (Action 1) when a Salesforce record is updated (Trigger), and I’ve tried to use the Webhooks custom request as Action 2 to update the custom fields of the task that was just created. I’m wondering if maybe I need to add some sort of delay to ensure the task ID has time to populate? Or if there’s something I’m missing in the JSON coding.

Zap steps:

 

Current custom request code:

{
"data": {
"custom fields": {
"1203775720782875": "1203791839081826",
"1203790146020630": "{{187322573__Contact_Email__c}}"
}
}
}

The test resolves with no errors but the custom field values remain null, rather than the values that should be input by the code. 

The first line attempts to populate a specific GID for a custom drop-down field choice into that field, and the second line attempts to populate a custom text field. In the JSON preview where I input the code, the “{{187322572__Contact_Email__c}}” displays as the record’s email address, and I populated it by selecting the output from earlier in the task.

Any guidance would be much appreciated, thank you! I will ultimately aim to populate additional custom drop-down fields based on inputs from the Salesforce record, but I suspect I’ll have to add an interim formatter lookup table step to match those inputs to the relevant drop-down GIDs for each custom field, so I was hoping to get the simpler piece set up first 🙂.

 

 

I’m also having the same issue!  Not sure what I’m doing wrong here…. 

 

Wanted to bump this thread. I am attempting to update custom fields in an Asana task. Everything seems to be formatted correctly, no errors returned, but nothing changes in the Asana task. Any recommendations to try and figure out where the issue lies @Jared ?


Thanks for all the useful info - very helpful to those of us with a limited coding background!

I think I’ve followed the steps & matched up the formatting, but the Asana custom fields still aren’t populating when I run the test. My Zap is structured to trigger the creation of an Asana task (Action 1) when a Salesforce record is updated (Trigger), and I’ve tried to use the Webhooks custom request as Action 2 to update the custom fields of the task that was just created. I’m wondering if maybe I need to add some sort of delay to ensure the task ID has time to populate? Or if there’s something I’m missing in the JSON coding.

Zap steps:

 

Current custom request code:

{
"data": {
"custom fields": {
"1203775720782875": "1203791839081826",
"1203790146020630": "{{187322573__Contact_Email__c}}"
}
}
}

The test resolves with no errors but the custom field values remain null, rather than the values that should be input by the code. 

The first line attempts to populate a specific GID for a custom drop-down field choice into that field, and the second line attempts to populate a custom text field. In the JSON preview where I input the code, the “{{187322572__Contact_Email__c}}” displays as the record’s email address, and I populated it by selecting the output from earlier in the task.

Any guidance would be much appreciated, thank you! I will ultimately aim to populate additional custom drop-down fields based on inputs from the Salesforce record, but I suspect I’ll have to add an interim formatter lookup table step to match those inputs to the relevant drop-down GIDs for each custom field, so I was hoping to get the simpler piece set up first 🙂.

 

 

I’m also having the same issue!  Not sure what I’m doing wrong here…. 

 

Wanted to bump this thread. I am attempting to update custom fields in an Asana task. Everything seems to be formatted correctly, no errors returned, but nothing changes in the Asana task. Any recommendations to try and figure out where the issue lies @Jared ?

Never mind I figured it out. My GID’s were incorrect, of course, off by one number which made it hard to see. I would also suggest using the Asana API (Beta) instead of the Zapier Webhooks. The full response was easier to see and I could see I WAS getting an error back, even though the test was “successful”.


FYI I created a dynamic lookup of a google sheet value that maps to an asana custom field and then a custom rule to use that custom field.

 

Created a lookup table

Manually entered the value from the google sheet and then the Asana ID for the associated single select value of the custom field

Added a Zapier step to do a table lookup prior to creating the Asana Task

Edited the Create Asana task to use a dynamic instead of static value, and selected the appropriate google sheet field.

 

Use Case:

For me, I was trying to create an Asana task and add the appropriate assignee based on the assignee on a google sheet. Besides doing the above, I had to create a custom rule that checks the custom field value then assigns the appropriate person.

 

Hope this helps someone, 


Thank you so much @BlueDolphin for sharing this with the Community. 🤗 Really appreciate you taking the time to share details of how you were able to get the correct assignee selected. I’m sure lots of folks here will find this helpful. 

Thanks again! 🧡


Reply