← All work
Marketing Operations · Automation · Meta

Campaign Automation & QA Pipeline

Meta
Marketing OpsAutomationCampaign QAData HygieneAPIs

At Meta, campaigns went out fast and broke quietly. I built a release process for marketing: every campaign gets built in a test environment, checked automatically against a fixed list of rules, and only then pushed live, with every change logged. The idea is borrowed from how engineering ships software, but the work is marketing operations.

Errors caught before the send, not afterFar fewer broken links, wrong audiences and bad personalization reaching customers.
Audience building went from hours to minutesHand assembled list pulls became a repeatable automated process.
Data hygiene enforced at the point of entryImproved record validity and field completeness across the entire marketing database.
Sales trusted the MQL againLifted MQL to SQL conversion rates after rebuilding the lead scoring model on clean data.
Role
Marketing Operations Coordinator
Period
2020 to 2022
Stack
Marketo · Salesforce · Internal Tooling · REST APIs
Scope
B2B Product Solutions, SMB to Enterprise
The delivery pipeline
The delivery pipelineBuild, test, check, launch, monitor. The same campaign goes out the same way twice, and every launch is logged.

A note on these screens. They are a drafted simulation of the campaign operations work I managed, rebuilt from scratch so I can show how the system actually worked without putting any internal company data on a public site.

The problem

Campaign execution was fragmented across too many tools and stakeholders. Because audience lists were pulled and assembled by hand for every cycle, building the exact same campaign twice often produced two completely different results.

Poor database hygiene made the problem worse. Duplicate and incomplete records inflated our audience counts. Because our lead scoring model was running on unreliable data, it generated low quality MQLs that the sales team had largely started ignoring.

What I built

  1. One source of record for campaign logicI moved our templates, scoring rules and segment definitions out of the live instance and into one documented place. Every change was reviewed and approved before it went live, so a bad edit could be traced to whoever made it and undone straight away.
  2. A test environment that mirrored the live oneI set up a safe copy of our setup so new campaign logic could be built and tested against sample records first. A new workflow never ran on real customers the first time it fired.
  3. An automated pre send check on every campaignBefore any campaign could go live it had to pass an automatic check covering link and UTM accuracy, personalization fallbacks, suppression rules, expected audience size and required fields.
  4. Automated audience building and deliveryInstead of assembling audiences by hand in the interface, I automated list building and delivery through the platform APIs. Launches became repeatable and fully logged, and fixing a problem meant rerunning the process rather than rebuilding the campaign from scratch.
  5. Data cleaned as it arrived, not quarterlyRather than relying on quarterly database cleanups, I set up automated validation, normalization, and deduplication rules that fired the moment a record entered our system. Fixing data at the source is the only way a database actually stays clean.
  6. A lead scoring model sales believed againOnce the underlying data was reliable, I overhauled our scoring logic. I separated demographic fit from behavioral engagement, added time decay to older actions, and calibrated the weights against opportunities that sales actually closed. This step alone restored sales confidence in our MQLs.
  7. Alerts on broken Salesforce syncsI documented our core field mappings and set up automated alerts for sync failures. When a data transfer broke, my team caught and fixed it immediately instead of finding out about it during an executive pipeline review.

The Automated Validation Gate

Every campaign had to clear these checks before it could go live. A failure did not raise a warning that someone could wave through, it stopped the campaign and sent it back to its owner:

  • Link and UTM parameter accuracy across every destination URL
  • Personalization token resolution and fallback behavior on the live target list
  • Suppression and exclusion rules verified against a control pull
  • Total audience size falling within an acceptable margin of the forecasted count
  • Complete data across all required fields on the targeted records
  • Intact Salesforce field mappings and sync integrations
The validation step
The validation stepRun on every campaign before it can go live. A failed check stops the send rather than flagging it.
The campaign change log
The change logCampaign logic lives outside the live instance, so a bad change can be traced to whoever made it and reversed.

What made it hard

Marketers are measured on speed and engineers are measured on stability, and this work sat between them. Too much process and campaigns miss their window. Too little and the customer gets the broken send. What made it work was making the safe path the fast one: a marketer could launch the same day, as long as the campaign passed its checks, and nobody had to go asking permission to move.

Need one of these built?

I build the layer underneath campaigns, and the reporting that shows whether it worked.

← PreviousLean Data Lead Distribution Next →Multi-Channel B2B Campaign