top of page
< Back

Turning Campaign Metrics Into Budget Decisions

A Python to Excel workflow that turns campaign performance metrics into budget actions using ROAS, CPA, profit, and conversions.

[object Object]

Publish Date 

2 May 2026

Topic:

Marketing Analytics

Sub - Topic: 

Campaign Budget Reallocation and Performance Review

Question?

Which campaigns should receive more budget, less budget, or further review based on spend efficiency and conversion quality?

Why does it matter ?

Marketing spend is not automatically effective just because a campaign has traffic, conversions, or revenue. A business needs to know whether budget is going into campaigns that produce efficient returns, or whether spend is being wasted on campaigns with weak ROAS, high CPA, or poor profit outcomes. This analysis matters because it turns campaign performance data into a clearer budget review decision.

Scroll down to see the write up of the full case study  

Some campaigns were ready to scale, while others showed clear budget risk. This case study uses a public digital advertising campaign performance dataset to simulate a marketing budget review workflow across 10,000 campaigns. The dataset includes campaign platforms, objectives, placements, devices, spend, revenue, conversions, CPA, ROAS, and profit. Python was used to validate the data, apply budget action logic, and prepare Excel-ready outputs for stakeholder review. BUSINESS PROBLEM


A business may be spending across many campaigns, but campaign spend alone does not show which campaigns deserve more investment. The real problem is deciding which campaigns should be scaled, reduced, held, or reviewed based on performance quality. PROJECT GOAL


The goal was to create a repeatable budget review workflow that moves from raw campaign metrics to clear campaign-level recommendations. The final output was an Excel dashboard that allows the results to be reviewed by budget action, platform, and campaign-level performance. DATA AND METHOD

The analysis started by checking the dataset for missing values and duplicate campaign IDs before selecting the fields needed for campaign performance review. Median benchmarks were created for ROAS, CPA, conversion rate, and profit. Python then applied explainable decision rules to classify each campaign as Increase Budget, Reduce Budget, Review, or Hold. The processed outputs were exported into Excel to build a dashboard with KPI cards, budget action summaries, platform comparisons, and campaign-level recommendations.



The recommendation logic was rule based, not predictive. That matters because the project was designed as decision support: a clear way to review campaign performance, not an automated media buying system. Key findings

  • 3,297 Increase Budget campaigns generated $209.68M total profit with 17.77 average ROAS, making this the clearest scaling group.

  • 2,169 Reduce Budget campaigns produced -$3.75M total profit with only 0.43 average ROAS, showing clear budget risk.

  • 3,434 Review campaigns carried $16.73M total spend with 2.88 average ROAS, showing that many campaigns needed further inspection rather than automatic scaling or cutting.

  • Facebook had the strongest scaling mix, with 41.04% of campaigns classified as Increase Budget.

  • LinkedIn carried the clearest risk signal, with 39.31% of campaigns classified as Reduce Budget and 40.87% classified as Review.

BUSINESS INTERPRETATION The platform view showed why budget decisions should not be made from total profit alone. Google Ads produced the highest total platform profit, but its action mix still included 38.87% Review and 22.40% Reduce Budget campaigns. Facebook and TikTok showed stronger scaling profiles, while LinkedIn carried the clearest budget risk.


The main business value is the separation between campaigns that are ready to scale and campaigns that need control, review, or reduction.

KEY OUTCOME


Python turned campaign metrics into budget actions.

Excel turned those outputs into a stakeholder review dashboard.

The analysis showed why budget review should separate campaign volume from campaign efficiency.

bottom of page