# Offer testing matrix template

> A free offer testing matrix: one row per offer, same ad and audience, and a profit column so you pick the offer that earns most, not the one with the lowest CPA.
- **Author**: Marxx
- **Published**: 2026-11-03
- **Category**: Planning
- **URL**: https://marxx.ai/library-templates/offer-testing-matrix-template

---

An offer testing matrix template is a grid with one row per offer. You run each offer with the same ad, audience and budget, then compare profit after ad spend.

Copy the layout below and fill it before you launch.

## The template

```
OFFER TEST: [Product], [Dates]

SAME FOR EVERY ROW: ad creative [name], audience [name], budget/day INR [ ], days [ ]
PRICE: INR [ ]    COST TO YOU (product, delivery, payment fees): INR [ ]

OFFER                | PRICE PAID | MARGIN PER ORDER | SPEND | ORDERS | COST PER ORDER | PROFIT AFTER AD SPEND | DECISION
0 Control (no offer) | INR [ ]       | INR [ ]             | INR [ ]  | [ ]    | INR [ ]           | INR [ ]                  | [ ]
A [percentage off]   | INR [ ]       | INR [ ]             | INR [ ]  | [ ]    | INR [ ]           | INR [ ]                  | [ ]
B [free gift]        | INR [ ]       | INR [ ]             | INR [ ]  | [ ]    | INR [ ]           | INR [ ]                  | [ ]
C [bundle]           | INR [ ]       | INR [ ]             | INR [ ]  | [ ]    | INR [ ]           | INR [ ]                  | [ ]

MARGIN PER ORDER  = price paid - your cost for that order
PROFIT AFTER ADS  = orders x margin per order - spend
MIN ORDERS BEFORE JUDGING: [ ]
```

## A worked example

Say you sell a skincare set at INR 1,200. It costs you INR 480 to make, pack and ship, so the margin with no offer is INR 720. You run four offers with the same video, the same audience and INR 10,000 each.

| Offer | Price paid | Margin per order | Orders | Cost per order | Profit after ad spend |
|---|---|---|---|---|---|
| Control, no offer | INR 1,200 | INR 720 | 16 | INR 625 | INR 1,520 |
| A: 15% off | INR 1,020 | INR 540 | 24 | INR 417 | INR 2,960 |
| B: free gift (costs you INR 60) | INR 1,200 | INR 660 | 20 | INR 500 | INR 3,200 |
| C: buy 2, 10% off | INR 2,160 | INR 1,200 | 11 | INR 909 | INR 3,200 |

The math for row B: 20 orders x INR 660 = INR 13,200, minus INR 10,000 of spend = INR 3,200.

Offer A has the lowest [cost per order](/glossary/cpa) and is not the most profitable. B and C tie on profit, and C does it with fewer orders. Which one you pick depends on whether you want more customers (B) or more money per customer (C).

These numbers are made up. In a real test, wait for enough orders before you call it. Extend the test if two rows are close.

## Rules for the matrix

1. **Change only the offer.** Same ad, same audience, same budget, same days.
2. **Work out the margin first.** An offer that wins on cost per order can still lose on profit.
3. **Set the minimum orders before you start.** Write it in the sheet so you do not stop early.
4. **Start with three or four offers.** More than that spreads the budget too thin.
5. **Write the decision in a word.** Scale, kill, extend or retest.

## Tips

- Pick offers from a list, not from memory. See [offer examples for D2C brands](/templates/offer-examples-for-d2c-brands).
- Write the guess before you launch with the [ad testing hypothesis template](/templates/ad-testing-hypothesis-template).
- Log the result in the [creative testing tracker](/templates/creative-testing-tracker-template). For the idea behind it, read [creative testing](/glossary/creative-testing).

Marxx reads your connected Meta ad account in full, with creative tagged by hook, angle, format and offer. You can use the offer tag to see which offers you have already run.

## FAQ

### How many offers should I test at once?

Three or four, plus a control. Each one needs enough budget to reach your minimum orders.

### Should I pick the offer with the lowest cost per order?

Not always. Compare profit after ad spend, because a deep discount can win orders and lose money.

### How long should an offer test run?

Until each row reaches the minimum orders you set before launch. If the rows are close, extend it.

---
- [More Planning articles](https://marxx.ai/library-templates/category/planning)
- [All articles](https://marxx.ai/library-templates)