22.14 Marketing and Digital Ads
Performance-marketing interviews ask cost per order and return on ad spend (ROAS), and they ask whether the order row actually has a campaign id (Module 21.7). Impressions and clicks are easy to celebrate and easy to waste. CTR (clicks divided by impressions) is a diagnostic, not the decision.
| KPI | What the number means | Who uses it | Action it drives |
|---|---|---|---|
| CPA (cost per order) | Spend divided by attributed orders. | Media buyer | A high CPA stops or rewrites that campaign. |
| ROAS | Attributed sales divided by spend. | Marketing lead | Under 1 means the campaign returned less sales than it cost. Pause it in the practice file. |
| CTR | Clicks divided by impressions. | Only as a diagnostic | A high CTR with no orders is a curious audience, not a result. |
Fictional sample rows. One month. Every order below is attributed. Campaign names are labels, not real ads. Type these rows into a new sheet from cell A1, press Ctrl + T, and name the table tblAds (Table Design › Table Name).
| Campaign | City | Impressions | Clicks | Spend | Orders | Sales |
|---|---|---|---|---|---|---|
| Diwali Pune | Pune | 1,00,000 | 2,000 | ₹20,000 | 100 | ₹80,000 |
| Monsoon Nashik | Nashik | 20,000 | 800 | ₹8,000 | 80 | ₹40,000 |
| Ganesh Kolhapur | Kolhapur | 80,000 | 400 | ₹10,000 | 20 | ₹15,000 |
| Weekend Nagpur | Nagpur | 10,000 | 500 | ₹5,000 | 50 | ₹30,000 |
| Clearance Solapur | Solapur | 5,000 | 250 | ₹2,500 | 40 | ₹12,000 |
| New user Sambhaji | Sambhaji Nagar | 60,000 | 300 | ₹9,000 | 15 | ₹6,000 |
Excel formulas for the whole file (type them in empty cells below or beside the table):
| KPI | Excel formula | Result | Number format |
|---|---|---|---|
| CTR | =SUM(tblAds[Clicks])/SUM(tblAds[Impressions]) |
1.5% | 0.0% |
| CPA | =SUM(tblAds[Spend])/SUM(tblAds[Orders]) |
₹179 | ₹#,##0 |
| ROAS | =SUM(tblAds[Sales])/SUM(tblAds[Spend]) |
3.36 | 0.00 |
Calculated columns (one result per row). Click the first empty column of the table, type the header, then the formula. The Table fills every row by itself.
| New column | Formula in the first row |
|---|---|
| CTR | =[@Clicks]/[@Impressions] |
| CPA | =[@Spend]/[@Orders] |
| ROAS | =[@Sales]/[@Spend] |
Expected result per row:
| Campaign | CTR | CPA | ROAS |
|---|---|---|---|
| Diwali Pune | 2.0% | ₹200 | 4.00 |
| Monsoon Nashik | 4.0% | ₹100 | 5.00 |
| Ganesh Kolhapur | 0.5% | ₹500 | 1.50 |
| Weekend Nagpur | 5.0% | ₹100 | 6.00 |
| Clearance Solapur | 5.0% | ₹62 | 4.80 |
| New user Sambhaji | 0.5% | ₹600 | 0.67 |
One city with SUMIFS. CTR for Pune only:
=SUMIFS(tblAds[Clicks],tblAds[City],"Pune")/SUMIFS(tblAds[Impressions],tblAds[City],"Pune")
Result for Pune: 2.0%. Change "Pune" to a cell reference (for example $K$1) and add a drop-down, and the same formula answers for any city.
| Good KPI | Vanity metric | |
|---|---|---|
| From the same rows | Monsoon Nashik CPA ₹100 and ROAS 5.00 | Diwali and Ganesh impressions (1,00,000 and 80,000) |
| Why | Nashik spent less and returned five rupees of sales per rupee. | Ganesh looks like a big campaign. It brought 20 orders at ₹500 each. Sambhaji returned 67 paise per rupee. |
What the manager does. The Nashik buyer keeps Monsoon and may test a small extra spend in the practice file, still labelled fictional. The Pune buyer keeps Diwali (ROAS 4) but does not judge it by the 1,00,000 impressions. The Kolhapur buyer pauses Ganesh. Clearance Solapur is the quiet winner: CPA 2,500 ÷ 40 = ₹62, ROAS 12,000 ÷ 2,500 = 4.80, on only 5,000 impressions. Small is allowed to win.
Ravindra Bagale's Tip
Calculate ROAS only on orders that carry a campaign tag. Put untagged orders in an "Others" row and do not divide them by any campaign's spend.
Ravindra Bagale's Tip – मराठी
ROAS फक्त campaign tag असलेल्या orders वर काढा. Tag नसलेल्या orders "Others" row मध्ये टाका आणि त्यांना कोणत्याही campaign च्या spend ने भागू नका.
Ravindra Bagale's Tip – हिंदी
ROAS सिर्फ़ campaign tag वाले orders पर निकालें. बिना tag वाले orders को "Others" row में रखें और उन्हें किसी campaign के spend से भाग न दें.