← Selected work

Case study | Campaign operations · Data governance · Reporting

Campaign governance

Campaigns were being created in Salesforce without the information that makes them reportable. I set one clear structure for creating them, audited what already existed and worked with campaign owners to close the gaps.

Tools
Salesforce, HubSpot, Notion
My role
Audit, design and cleanup
Worked with
Marketing campaign owners, Revenue Operations leadership
150+

campaigns audited

44%

of recent campaigns were missing required fields, and the gap was addressed

1

shared structure for every new campaign

01

The problem

Salesforce Campaigns are how marketing activity connects to pipeline and revenue. They only work for reporting when every campaign says what it is for, where it sits in the funnel and which team owns it.

Many campaigns did not say that. Reports built on them could not be fully trusted, and cleaning them up by hand would never have kept pace with new ones.

02

What I found

I audited the campaigns created over the previous two years, more than 150 of them. The headline number was alarming, but the detail was more useful.

Finding 1

A smaller problem than it looked

44% of campaigns were missing a required field, but almost all of them were missing just one: the responsible team. That made it a backfill job, and most of it could be done in batches by owner.

Finding 2

Leftovers from an older structure

A handful of campaigns were empty annual containers from before the current structure, never retired. They needed a decision, not a backfill.

Finding 3

A gap in intake, not in people

For one event type, a logistics field was empty on almost every record, whoever owned it. That pointed at the intake checklist, so the fix belonged there.

03

Getting everyone on board

I wrote the findings up so people could act on them without opening a dashboard, with each owner's campaigns listed next to what they needed.

Then I ran the corrective backfill with the campaign owners, batch by batch, so nobody had to make dozens of small decisions. The ground rules went to everyone who creates campaigns, with a clear owner for each part of the process.

04

What I built

Before
  • Required fields left empty on a large share of recent campaigns
  • Old annual containers left in place
  • No way to tell a field left blank on purpose from one that was missed
  • Intake that did not ask for a field teams needed later
After
  • Two levels: parent programs and the child campaigns under them
  • One naming format, fixed after launch so reporting stays stable
  • One primary goal per campaign, with the funnel stage filled in from it
  • A fixed set of campaign types, each with its member statuses applied automatically
  • "N/A" for fields that don't apply, so blank always means outstanding
  • A clear owner for each part: the structure, campaign creation, and automation and QA
  • A quarterly cleanup to keep it that way

The structure lives in Salesforce, where a flow sets up each campaign's statuses and a unique code keeps its identity stable. HubSpot workflows add people to the right campaign when they convert.

One rule keeps it simple: a campaign tracks the thing a person actually engages with, like an event or a form. Emails, ads and posts are tracked with UTMs instead. The whole process is documented in Notion.

05

Results

The audit covered more than 150 campaigns, and the 44% gap was addressed with the campaign owners.

New campaigns now start from the same structure and the same required information, so reporting rests on records that mean the same thing from one team to the next.

Want to talk about campaign governance?