Skip to main content

Sync Mutual Action Plans to Project Management Tools

Webhooks

Keep your sales and customer success teams aligned by automatically syncing Mutual Action Plan (MAP) activities from Showpad to your project management tools. When actions are added, assigned, or completed in a MAP, your external systems stay up to date without manual data entry.

Classic Situation

Your sales team uses Showpad's Mutual Action Plans to collaborate with prospects or customers on deal and solution milestones. Meanwhile, your internal teams track all project tasks in a separate project management tool (such as Asana, Monday.com, Trello, or Jira).

Without integration, team members must manually update external tools, leading to:

  1. Duplicated effort and wasted time
  2. Actions falling out of sync between systems
  3. Missed deadlines due to delayed updates
  4. Lack of visibility into deal progress for internal stakeholders

Solution Example

Subscribe to Showpad MAP webhooks to automatically create and update tasks in your project management tool based on seller-buyer collaboration in the Shared Spaces Mutual Action Plan.

Prerequisites
  • Plan: Ultimate with Enterprise add-on | Advanced or Expert
  • Permissions: Administrator access to Showpad's Admin App
  • Config:
    • A webhook endpoint capable of receiving HTTP POST requests
    • Access to your project management tool's API
    • Familiarity with Showpad Webhooks

Webhook Events

Showpad provides four MAP-related webhook events:

EventDescription
mutual-action-plan-app-addedA MAP is added to a Shared Space
mutual-action-plan-action-addedAn action is added to a MAP
mutual-action-plan-action-status-changedAn action's status changes (completed/not completed)
mutual-action-plan-action-assignedAn action is assigned to a participant

Steps

1. Set Up Your Webhook Subscription

Create a webhook subscription in Showpad's Admin App to receive MAP events. See the Subscriptions guide for detailed instructions.

Subscribe to the events you need:

  • mutual-action-plan-action-added — to create new tasks
  • mutual-action-plan-action-status-changed — to update task status
  • mutual-action-plan-action-assigned — to assign tasks to team members

2. Create a Webhook Endpoint

Your endpoint should accept HTTP POST requests and return a 2xx response to acknowledge receipt. Here's a basic example:

// Example: Express.js webhook handler
app.post('/webhooks/showpad', (req, res) => {
const event = req.body;

console.log('Received event:', event.type);
console.log('Event data:', JSON.stringify(event.data, null, 2));

// Acknowledge receipt immediately
res.status(200).send('OK');

// Process the event asynchronously
processWebhookEvent(event);
});

3. Handle the Webhook Payload

Each webhook event follows the CloudEvents specification. Here's an example payload for an action being added:

{
"type": "mutual-action-plan-action-added",
"specversion": "1",
"id": "c40b30f2-fabf-4c89-aed0-f5f5aaac9a24",
"time": "2022-05-30T06:45:00.250Z",
"data": {
"initiator": {
"type": "PARTICIPANT",
"id": "e3dff281ad48421fb32de1cbab3a627f",
"email": "participant@example.com",
"firstName": "Adam",
"lastName": "Smith"
},
"addedAt": "2022-05-30T06:45:00.250Z",
"map": {
"id": "01HAM75SW9GA710HCBWE38B2HV",
"url": "https://domain.showpad.biz/webapp2/shares/shared-spaces/.../map",
"context": {
"id": "e3dff281ad48421fb32de1cbab3a627f",
"type": "SHARED-SPACE",
"title": "Acme Corp Deal Room",
"publicUrl": "https://domain.showpad.biz/s/wvlFqFze"
}
},
"action": {
"id": "01H8Y351W9XK7MTJBKYZ32PXK7",
"milestoneId": "9XK7MTJB01H8Y351WKYZ32PXK7",
"title": "Schedule kickoff meeting",
"status": "NOT_COMPLETED",
"dueAt": "2022-06-15T00:00:00.000Z"
}
}
}

4. Map to Your Project Management Tool

Process each event type and call your project management tool's API:

async function processWebhookEvent(event) {
const { type, data } = event;

switch (type) {
case 'mutual-action-plan-action-added':
await createTask({
externalId: data.action.id,
title: data.action.title,
dueDate: data.action.dueAt,
project: data.map.context.title,
description: `From Showpad MAP: ${data.map.url}`,
});
break;

case 'mutual-action-plan-action-status-changed':
await updateTaskStatus({
externalId: data.action.id,
completed: data.action.status === 'COMPLETED',
});
break;

case 'mutual-action-plan-action-assigned':
await assignTask({
externalId: data.action.id,
assigneeEmail: data.assignee.email,
});
break;
}
}
tip

Store the Showpad action.id as an external ID in your project management tool. This allows you to match incoming status updates to the correct task.

5. Handle Status Changes

The mutual-action-plan-action-status-changed event includes both the current and previous status:

{
"action": {
"id": "01H8Y351W9XK7MTJBKYZ32PXK7",
"title": "Schedule kickoff meeting",
"status": "COMPLETED",
"previousStatus": "NOT_COMPLETED",
"dueAt": "2022-06-15T00:00:00.000Z"
}
}

Use this to toggle task completion in your project management tool.

info

For webhook verification and security best practices, see the Verification guide.

Was this page helpful?