← All Work

Marketo Campaign Manager

A self-serve campaign operations platform for marketing teams.

Python Flask Marketo Asset API Snowflake Azure App Service Azure Key Vault Jinja2
Context Built at Ericsson / Cradlepoint
Role Developer + architect
Stack Python · Flask · Snowflake · Marketo API

The Problem

Marketing ops teams spend a disproportionate amount of time on campaign setup — not strategy or analysis, but mechanical work: cloning Marketo program templates, populating tokens, configuring UTM parameters, building out campaign hierarchies, and keeping Salesforce in sync.

At scale, this becomes a bottleneck. Every campaign requires a Marketo-certified operator to execute a 15+ step manual process. Errors creep in. UTM strings drift. Programs get built inconsistently. Reporting breaks because the data structure doesn't match expectations.

The Solution

MCM is a production web application that wraps the entire campaign launch workflow in a structured, self-serve UI. A marketer fills in campaign details — no Marketo expertise required — and the platform handles the rest.

One action in MCM replaces a 15-step manual process in Marketo: the program is cloned from the correct template, all tokens are populated, UTM links are generated and stored, and the full campaign hierarchy is written to Snowflake as the source of truth.

How It Works

  • A four-level campaign hierarchy (Product Category → Initiative → Campaign → Email/UTM Link Tracking) is maintained in Snowflake and managed through MCM's CRUD interface
  • When a campaign is created, MCM calls the Marketo Asset API to clone the appropriate program template into the correct folder structure
  • Program tokens are built from campaign metadata and pushed via API — no manual token entry
  • UTM parameters are auto-generated and stored alongside the Marketo program reference
  • Marketo list import and validation surfaces errors before they reach the database
  • An admin editor provides bulk data management for ops team oversight
  • Marketo OAuth tokens are cached thread-safely with expiry buffer; Snowflake connections are request-scoped and pooled

Architecture Highlights

  • Flask blueprint-based structure — each feature module is a self-contained blueprint
  • Repository pattern throughout — all Snowflake queries in repo_*.py files; blueprints never query directly
  • Secrets managed via Azure Key Vault with lazy-loading on first Marketo API request
  • Deployed to Azure App Service with a CI/CD pipeline via Azure DevOps
  • Fully configurable hierarchy labels — levels can be renamed for any org's naming convention
  • Generalized as an open-source-ready product (MCM) abstracted from any single company's stack

Outcomes

20%
Reduction in campaign build time
0
Marketo expertise required to launch a campaign
1
Single source of truth — Snowflake drives Marketo, not the reverse
Consistent UTM and program structure at any volume