Contents


Before Setting Up

Subscribe to Zapier

If you are subscribed to our integrations, request an invite to our Zap.

Zapier's Silver Package should be sufficient to get going (about $25 month-to-month and they also have a free trial to get started).


How to Connect to GUIDEcx

If you have our GUIDEcx Integrations package, you should automatically connect with our Open API. Enter the GUIDEcx API key into Zapier to begin using the integration.

FAQs

  • Can you POST data TO Project Info Fields? Not today

  • Can you GET data FROM Project Info Fields? Yes!

  • Are you required to use Zapier to do so? Absolutely not

  • Is this the only way to do it in Zapier? Probably not

  • Is this one of the ways to do it with Zapier? Sure is!


What Does the Zapier Integration Do?

Basics:

Integrate with Custom Fields (Project Info Fields)

If you use Custom Fields in projects, and want that data to sync with another software in your tech stack, this is for you!

This is what we're going to do:

  1. Add a webhook URL to GUIDEcx (provided by the webhook trigger for this Zap).

  2. Map the field names with field values.

  3. Remove unwanted words and characters.

  4. List fields with corresponding values.

  5. Isolate input values (in this example we will be integrating three project info fields, but you can do more or less).

  6. Filter the data.

  7. Send isolated values wherever you'd like.

To do this,

  1. Trigger

    1. APP = Webhooks by Zapier

    2. Trigger Event = Catch Hook

    3. Custom Webhook URL

      1. Copy this link,

      2. Go to “Company Details” in GUIDEcx,

      3. Then “Integrations”,

      4. Add the URL to your webhooks,

      5. Trigger the integration using a known project OR test project that currently contains data in all the project info fields you plan to use)

    4. Test the trigger until data is pulled over (may take a couple minutes)

  2. Map project information fields to values

    1. APP = Code by Zapier

    2. Action Event = Run Javascript

    3. CODE:

Test action should look like this:

Next, we will clean out the unwanted words or characters that came over from the integration.

  1. Remove unwanted words and characters. Repeat the steps below for each of the following words/characters: “Info”, “{”, “}”,” ' ”

    1. APP = Formatter by Zapier

    2. Action Event = Text

    3. Transform = Replace

    4. Input = Output of previous Action (Runtime Meta Logs)

    5. Find = INFO

    6. Replace = LEAVE THIS BLANK!

    7. Test action should look like this:

  2. List fields and values

    1. APP = Formatter by Zapier

    2. Action Event = Text

    3. Transform = Split Text

    4. Input = Output of previous Action

    5. Separator = ,

    6. Segment Index = All (as Separate Fields)

    7. Test action should look something like this:

  3. Isolate Field & Value. Repeat the steps below for each of the following: “Field 1: Value”, “Field 2: Value”, “Field 3: Value”.

    1. APP = Formatter by Zapier

    2. Action Event = Text

    3. Transform = Split Text

    4. Input = Output of previous Action 6 (Field [#]: Value)

    5. Separator = :

    6. Segment Index = All (as separate Fields)

    7. Test action should look like this:

  4. Filter

    1. APP = Filter by Zapier

    2. Only continue if (Action 6, Output 3) - (Text) Contains - Action 7 Output 2

      OR

      Only Continue if (Action 6, Output 2) - (Text) Contains - Action 8 Output 2

      OR

      Only continue if (Action 6, Output 1) - (Text) Contains - Action 9 Output 2

  5. Send isolated project information field data as needed.

    You now have each of your custom field values isolated and shareable as needed! Here's an example of how you can map these fields to a Zap in Salesforce:

You'll notice that each custom field value is now isolated and shareable to unique or individual fields as needed.


Forms

All of your clients may be in one industry, but we know each client has a different style, support preferences, and urgency. This can be challenging to receive engagement in situations where your onboarding style doesn't align with their experience preferences. So why not let them choose their own adventure?

One way we’re tackling this is by using forms. Forms are a great way to gather information. They provide a way to store information and create a custom project plan for your team and customers. The uses are endless! We have seen great examples of this and want to share some of the ways you can start leveraging our Open API and Zapier to integrate with third-party forms.

Forms are great for...

  • Onboarding a new customer: Send your customer a form via a task in GUIDEcx. When they submit the form, you can see the project plan automatically change to be customized to what they need. In that form you might ask them for information or documents and GUIDEcx can dynamically take those answers and mark certain tasks in their project "Done" or "Not Applicable" or even drop notes for your team in the project from the form-fill.

  • Customer satisfaction: Use forms to ask your customer about their experience. Their responses in that form can modify your GUIDEcx project with them, create a new project in GUIDEcx for your internal team or create a new project for the customer.

Example

Here’s how you can use forms with Zapier and GUIDEcx's Open API.

The first task the client receives is called "Complete Onboarding Questionnaire". The onboarding questionnaire is hyperlinked in the task description.

When they follow the link, it takes them to a separate window to complete the form.

The project plan automatically updates, leaving the critical path based on the client's preferences.

Notice that the customer did not have to mark their task "Done" after completing the onboarding questionnaire. The integration here is set up to automatically move that task status to "Done" as soon as the form is submitted.

Simultaneously, the summary can be sent to the project notes, an excel document, and to a Slack channel as a notification (try adding these apps to your Zap!).

There are a few ways you can do this. Here’s how we did it.

Find a Form that Meets Your Requirements

Formstack worked for us because:

  • We needed to make sure that when a customer submits a form it updates their specific project. The key to doing this is by using the unique project ID that is assigned to each project. The project ID can be located in the URL when you're looking at the project overview. It's that long number between app.GuideCX.com/app/project/ AND /overview (blurred out below):

  • Formstack allows you to customize and provide a unique form URL that can automatically add the project ID to a hidden field within the form, and it's actually pretty simple. They have some really good help articles to show you how, but maybe this will help save you some time.

  1. Let's say this is the general shareable link to your form in Formstack.

    https://GuideCX.formstack.com/forms/choose_your_adventure

  2. And the form contains a hidden field we want the project ID to populate titled "Project ID". In that case, you add this to the end of the link: “?Project_ID=”

  3. Now, anything you add to the end of the URL will automatically populate that hidden "Project ID" field, so now your link looks like this:

    https://GuideCX.formstack.com/forms/choose_your_adventure?Project_ID=

  4. This is the link in the customer-facing task of a template where you will guide customers to follow the link and complete the form. So, in a live project, all the project manager needs to do is edit the hyperlink and add the project ID to the end of it before the customer is assigned the task.

The hyperlink should now look something like this:

https://GuideCX.formstack.com/forms/choose_your_adventure?Project_ID=1234567...

Here's how the tasks look in our example:

Now, all the customer needs to do is click on the link and complete the form!

Formstack’s form designs are pretty intuitive and custom. Their Zaps are also relatively mature, and they have a comprehensive two-week free trial period.

Building the Zap

  1. In Zapier, click "Make a Zap".

  2. For "When this happens...", select your application and trigger event. In our case, it's "Formstack" and "New Submission".

    At this point, it's a good idea to create a "Forms Test" project so you can use the project ID in your form submission for testing later.

  3. Next, it will ask you to verify your account and then customize your submission. In our case with Formstack, before you can sync up with a specific form, it requires that the form have at least one submission. If you're ready to go, then in the next step where you "Find Data",your message should successfully return the form submission summary:

  4. Now, we're going to "Do this..." with the form submission, and use a bit of code to update task statuses based on the customer's "chosen adventure." To do this, “Code by Zapier” should be the application, and the “Action Event” (in this example) is "Run Javascript":

  5. Next, you can determine which answers in the form submission you want to use to update task statuses in the project. The "Input Data" on the left (“projectId”, “templateHelp”, “templateReview”, etc.) acts as a label for whatever answer is selected on the form (depicted on the right.)

  6. Next, we're going to customize this code. Here's what you need to have handy:

  • Your GUIDEcx Token ID. To acquire this,

    • Go to “Company details” in GUIDEcx.

    • Click on the “Integrations” tab.

    • Go to “Open API”.

  • The exact spelling of the tasks you want to update based on the form submissions. Keep in mind that it’s case-sensitive.

  • A test form submitted from a test project with the project ID included (as previously discussed).

//****BECAUSE THIS CODE WILL BE CUSTOM TO YOU, WE DO NOT SUPPORT //ANYTHING OUTSIDE OF OUR API, THE GUIDEcx PRE-BUILD ZAP, OR OUR OTHER //INTEGRATION PACKAGES****


//replace "(your token here)" with your actual token:

const token = 'Bearer (your token here)';

const headers = { Authorization: token, 'Content-Type': 'application/json' };

const projectTasksUrl = `https://api.GuideCX.com/api/v1/projects/${inputData.projectId}/tasks?limit=50`;


//Next, replace "scenarioOne" with a label you want to affiliate with //task titles that you want to manipulate based on the form question //selection:


const scenarioOne = [


//Replace "Task Name One"-"Task Name Three" with the exact spelling //and punctuation and it is case sensitive. You can have one task name

//or several


'Task Name One','Task Name Two','Task Name Three',


];


//You can repeat the previous "scenarioOne" cycle as many times as you //need before moving on to the next part. just make sure the next one //starts after the previous ]; symbols


];


//This next part, the code is going to find the project based on the //Project ID provided from the form submission, test to make sure the //task titles in the code match the task titles in the project, and //check that against the form selections made by the customer. If the //form response matches what the Input Data is passing, then it will //update that task to the status that we establish in the last step.


const response = await fetch(projectTasksUrl, { headers: headers });

const body = await response.json();

const tasks = body.tasks;

const tasksToUpdate = tasks.filter((task) => {


//Based on whatever data is passed from the form submission that is //mapped to your Input Data, we want to make sure it's mapped here as //well. In this example, the form questions had "Yes" or "No" //questions.


//So, basically what we're telling the system here is "IF" the //customer's answer to the question is "Yes", and the label we gave //tasks earlier (scenarioOne label with task names of "Task Name One" //etc.) are found in the project, then we are saying yes, allow this //submission to be a part of the next step.


//I've kept the input Data the same as the example image we shared //earlier as a reference, and added the "scenarioOne" label as well as //scenarioTwo,scenarioThree, and scenarioFour as if we added multiple //different Input Data scenarios.


if (inputData.templateHelp === 'Yes' && scenarioOne.includes(task.name))

return true;

if (inputData.templateHelp === 'No' && scenarioTwo.includes(task.name))

return true;

if (inputData.templateReview === 'No' && scenarioThree.includes(task.name))

return true;

if (inputData.schedKickoffcall === 'No' && scenarioFour.includes(task.name))

return true;


});


//Now in this step, anything returned as "true" in the previous step, //we're taking those tasks and telling GUIDEcx to update those task //statuses as "Not Applicable" automatically.


//No need to change anything in this section:

const statusUpdateUrlBase = 'https://api.GuideCX.com/api/v1/tasks/';

const promises = tasksToUpdate.map((task) => {

console.log('Updating task', task.id, task.status)

return fetch(`https://api.GuideCX.com/api/v1/tasks/${task.id}`, {

method: 'POST',

headers: headers,


//Here's where you establish what status you want the tasks updated //to:

body: JSON.stringify({ status: 'not_applicable' }),

});

});

await Promise.all(promises);

output = [{ updatedTasks: tasksToUpdate }];


//Now test this code as you're looking at your test project to see if //you get the expected behavior. If you need to make any changes, move //the task statuses back to "not started" and try again!

Please let us know if you have any questions or need additional help.


How to Uninstall the Zapier Integration

Remove the Package from GUIDEcx

  1. Click on “Company Details”.

  2. Click on the “Integrations” section.

  3. Click on the "X" to disconnect and remove your Zapier integration from GUIDEcx.

Did this answer your question?