UX Strategy

Campaigns App

Design and integrate a brand new marketing product with an already well established CRM platform

Summary

After 10 years focused on sales CRM, Pipedrive began a multi-product shift to better support high-value customers whose workflows were spread across multiple tools.
Following the acquisition of Mailigen, the Campaigns App was created to bring email marketing into Pipedrive.

In this case study, I focus on the contact management problem: aligning a legacy sales contact model with marketing requirements, compliance constraints, and subscriber-based billing.

Campaigns by Pipedrive

My role

I was hired back in Pipedrive specifically for leading the design of this concept area. I worked closely with our Group Product Manager and Engineering Manager on the long term strategy and roadmap while delivering 2 or 3 missions in parallel. At the same time, I was providing guidance and mentorship to 8 other designers working on a variety of problem spaces. My role


Problem

While sales and marketing personas overlap across the customer lifecycle, their contact requirements differ significantly in validation, consent, and usage patterns.

Beyond the contact model itself, the project also required foundational work to support email delivery infrastructure, with strong support from the Mailigen team.

Email campaign list view
Our brand new email campaign list section

In parallel, we also had to integrate a drag-and-drop email editor to enable campaign creation. To reduce engineering scope, we chose to integrate the BEE Free template editor. While it provided a strong out-of-the-box solution, it imposed significant UX constraints, as we were limited to modifying the UI while the core interaction model remained defined by their product team.

Email template editor
BEE Free email template editor

The most complex challenge, however, was aligning the existing Sales contact model with the new Marketing contact model. This required reconciling differences in validation rules, consent requirements (GDPR and other regulations), and usage patterns. Additionally, contact visibility settings in Pipedrive introduced edge cases that directly impacted marketing workflows.

As this was a nine-month product initiative, this case study focuses specifically on the contact management mission delivered within the broader Campaigns development phase.


Approach

We started by first looking at what was the current contact requirement in Pipedrive. We started by researching our two personas what is a contact for them. For salespeople, contacts are people with whom they create personal, in-depth one-on-one relationships. On the other hand, marketing contacts are people with whom they create automated, broad large-scale relationships.

The sales contact model in Pipedrive was as follows:

  • Name (required in Pipedrive)
  • Email (not validated, not required, multiple)
  • Phone (not validated, not required, multiple)
  • Demographics for salespitch
  • Past behaviour for salespitch

The marketing contact model would usually be as follows:

  • Email or phone (valid, required and unique)
  • Marketing consent (as requried by GDPR, CAN-SPAM Act, and other legislations)
  • Name (not required)
  • Demographics for segmenting
  • Past behaviour for segmenting
Contact details view with new marketing panel
Due to existing constraints, we had to duplicate the email field used for marketing communication

Finally, a major difference was our new marketing billing model. Traditionally Pipedrive had always been charging for its product on a per-user basis, the more salespeople you have, the more you pay. That doesn’t scale really well especially when automation allows the creation of highly efficient processes. To allow Pipedrive to grow with their user base, it was decided to bill for Campaigns App based on a per-subscriber basis.


Key design decisions

Modelling Marketing Status

The first question that we should have asked ourselves was: what is this marketing status and how will users use it? At the time we were pressed by really tight deadlines and we didn’t have the luxury of spending much time on the question. All information regarding contacts is called custom fields in Pipedrive.

At the time it seemed obvious to me that our new status was behaving differently from other custom fields:

Based on these differences, I advocated for treating Marketing Status as a dedicated field type rather than a regular custom field. Due to ownership gaps and timeline pressure, we shipped it as a standard field with additional logic.

Marketing statusCustom field
Some values disabled the field (e.g. unsubscribed)Can always be updated by users
Some values are system-generated (e.g. bounced)Values are always user-generated
Tied to email fieldNot tied to any other custom fields
Tied to our billing modelNot tied to a billing model
Updated by users’ customers’ actionsUpdated by users’ actions
Marketing status became just another custom field

Bulk Actions vs Bulk Edit

We went through a lot of ideation and test phases with the Product Manager (PM) and the Engineering Lead (EL).

The first solution we wanted to explore was to design a new pattern for updating multiple items in list views: bulk actions. We already had the bulk-edit functionality in Pipedrive which allowed users to change multiple field values at once. Bulk actions would be similar but would always act on the whole contact rather than on a particular field (e.g. deleting, sending group email or subscribing to marketing communications).

The initial proposed solution was to introduce Bulk Actions in list views

This solution seemed promising but there was a lot of pushbacks from both engineering and design alignment teams. At the time, stakeholders couldn’t see value in branching from current patterns. For them, marketing status should be treated as a normal field and therefore use the available bulk-edit function.

In the end, the PM and EL decided to follow the alignment teams advice because it was saving us a lot of engineering effort. If we would have gone with the bulk-actions pattern, which had some supporters too, we would have had to get all list views refactored and a lot of stakeholders to agree on this change.

Bulk edit solution proved to be clumsy at best since it wasn’t tailored for our new status behaviour

Constraints & tradeoffs

It was really complicated to produce something functional with so much legacy and stakeholders. Contacts are one of the oldest entities in Pipedrive and with it came a lot of baggage. The biggest challenge for me was to keep on getting setbacks because of engineering constraints.

A recurring challenge was technical dependencies across legacy services. Several flows had to be redesigned when underlying services were not exposed as expected. This required continuous adaptation while maintaining delivery timelines.

Due to evolving technical constraints and service dependencies, several flows had to be redesigned during implementation. The final solution was a pragmatic compromise aligned with system limitations, which later informed a follow-up recipient management initiative.


Results & learnings

We released a beta version of the Campaigns App to a small group of selected customers and conducted ~20 user feedback interviews to understand early usage patterns around contact management.

What worked:

  • Users were generally able to update marketing statuses successfully.
  • Filtering felt intuitive to part of the user base.

What did not:

  • Users didn’t fully understand why certain statuses (e.g. unsubscribed) were locked.
  • Bulk updates lacked a clear confirmation summary.
  • Some users expected segmentation instead of filtering.

Before I left Pipedrive, more usability testing was planned to scope for the next mission planned on this topic: Recipients Management.

Next case study