A small, fast, instantly-demoable tool that splits a fixed marketing budget across channels using a Reach / Depth / Duration (RDD) scoring model — built specifically for small B2B implementation companies (software/ERP/CRM implementation partners, boutique technical consultancies) working with tight budgets, typically under €10K.
Used as a per-client deliverable in B2B marketing and growth consulting engagements: hand a prospect or client the spreadsheet, or walk them through the live web demo, and let the model show why a budget should be split the way it's split — not just hand down a fixed percentage.
Each channel is scored 1–5 on three dimensions:
| Dimension | What it captures |
|---|---|
| Reach | How much of the client's ICP this channel can realistically expose them to |
| Depth | How well this channel converts, or how strong the engagement quality is |
| Duration | How long the value of the spend compounds (a referral relationship or a case study keeps working for years; a single webinar's lift fades in weeks) |
A channel's weighted RDD score determines its proportional share of the total budget. Optional min/max spend guardrails per channel let a client say "always fund partner referrals" or "cap directory listings at €1,000," and the model redistributes the rest of the budget to compensate.
The default six channels are built around how small implementation companies actually win work — not broad-reach paid media, which rarely justifies its cost at this budget size:
- Partner & Vendor Referral Network — the software vendors a client implements for are usually the single highest-leverage channel: warm, pre-qualified referrals.
- LinkedIn Organic + Direct Outreach — near-zero cash cost, and the format decision-makers in this space actually pay attention to.
- Case Studies & Client Proof — one strong case study gets reused for years across the sales cycle.
- Vendor Marketplace / Directory Listings — being listed where buyers already search for a certified implementation partner.
- Small-Scale Webinars / Micro-Events — cheap to run, strong for depth of engagement with a narrow, already-interested audience.
- Google Search (Niche Keywords) — low spend, high intent, for the handful of searches a genuinely ready buyer would type.
These are a starting point, not a fixed list — re-score or replace them per client. All scores in this repo are directional estimates to recalibrate, not benchmarked data.
campaign-budget-allocator/
├── spreadsheet/
│ └── Campaign_Budget_Allocator_Implementation_Companies.xlsx # the client-facing deliverable
├── allocator/
│ ├── core.py # allocation engine (pure Python, no dependencies)
│ └── cli.py # command-line interface
├── web/
│ └── index.html # self-contained interactive demo (no build step, no backend)
├── examples/
│ ├── implementation_company_channels.csv # default: small implementation-company set
│ └── saas_50k_channels.csv # alternate: generic SaaS/demand-gen set
├── tests/
│ └── test_core.py
└── README.md
spreadsheet/Campaign_Budget_Allocator_Implementation_Companies.xlsx is the client-ready version — no code, no installs, just Excel.
- "How to Use" tab — explains the framework, why these six channels, and a step-by-step for adapting it to a specific client.
- "Budget Allocator" tab — the working tool. Yellow cells are the only ones to edit: total budget, weights, channel scores, and optional min/max guardrails. A check row under the total flags immediately if a manual override no longer adds up to the total budget.
Workflow: duplicate this file per client engagement, rename it, and re-score the channels for that client's actual situation before sharing.
Requires Python 3.8+, no external dependencies.
git clone <your-repo-url>
cd campaign-budget-allocator
python -m allocator.cli --budget 8000 --channels examples/implementation_company_channels.csvTilt the model toward what matters most for a client using weights, e.g. to favor Duration (compounding value) over raw Reach:
python -m allocator.cli --budget 8000 --channels examples/implementation_company_channels.csv \
--weight-reach 1 --weight-depth 1 --weight-duration 2Open web/index.html in any browser, or host it via GitHub Pages for a shareable link you can drop into a proposal or discovery-call invite. It runs the identical allocation logic client-side in JavaScript — edit channels, weights, or the total budget and the bars update live.
To publish via GitHub Pages: Settings → Pages → Deploy from branch → main → /web. Your live link will be https://<username>.github.io/<repo-name>/.
pip install pytest
pytest tests/- Discovery calls: pull up
web/index.htmlor the spreadsheet, plug in the client's actual channel mix and last budget split, and let the RDD scores make visible where the current allocation doesn't match the underlying logic. - Proposals: attach the customized spreadsheet as a "here's the model, here's what it recommends" exhibit.
- Positioning: this is intentionally a transparent, editable model — not a black box. Clients can see exactly why a channel got the share it did, and can push back on the scores themselves, which builds trust faster than a fixed percentage handed down from a template.
MIT — see LICENSE.