How We Build These Numbers.
shakalakaa builds its ad benchmarks with a different method per market: managed client accounts for Malaysia and Singapore, and published third-party sources for Australia.
Hong Kong uses managed accounts with a 3-account minimum cell. No cell publishes below its stated minimum sample, so clinic groups, developers and brands can cite each figure.
Sample sources, deduplication, and the publishing threshold behind the Digital Ad Cost Index and the Live Host Rate Index — written for people who want to check our work, not just read our numbers.
The Digital Ad Cost Index for Malaysia/Singapore is aggregated from a larger managed-client-account base; the same Index for Hong Kong is also first-party but from a materially smaller base, so it carries its own small-sample rules;
Multiple datasets, multiple methods
Multiple datasets, multiple methods — this page documents each honestly rather than describing one uniform process that doesn't exist.
1. Digital Ad Cost Index — Malaysia & Singapore (first-party)
Ranges are drawn from the client accounts we manage directly across Malaysia and Singapore, expressed as bands rather than single figures.
2. Digital Ad Cost Index — Australia (curated, not first-party)
AU figures are not from managed accounts
3. Digital Ad Cost Index — Hong Kong (first-party, small-N)
a minimum of 3 contributing accounts before any figure is published at all.
4. Live Host Rate Index — Malaysia (third-party sampled, not shakalakaa session data)
Individual job listings sampled from public postings on Malaysian job platforms
the Australia edition is curated from published third-party sources, not first-party at all. The Live Host Rate Index is sampled from public job listings. They are built differently because the underlying data is available differently, and this page says so rather than papering over it.
5. What verify_gate means
Licence and reuse
Both datasets are published under CC BY 4.0 (opens in a new tab) — free to reuse with attribution. Read-only JSON is available at /api/benchmarks.php and /api/live-host-rates.php — see the API documentation for parameters and response shapes.
- ← Back to the Digital Ad Cost Index · Live Host Rate Index
- Cite this
- shakalakaa (Plixitt Solutions). “Methodology — shakalakaa Digital Ad Cost Index & Live Host Rate Index.”
- https://shakalakaa.my/resources/ad-benchmarks-methodology · Updated 2026-10-18
- Licensed under CC BY 4.0.
Ad benchmarks methodology, in depth
The supporting detail behind each section of this page, by topic. 1 topics
Each dataset
1. Digital Ad Cost Index — Malaysia & Singapore (first-party)
Ranges are drawn from the client accounts we manage directly across Malaysia and Singapore, expressed as bands rather than single figures.
Reviewed quarterly (see the live Review history for the dated log of what changed each quarter): every range is checked against the most recent quarter's managed-account data, and bands that have genuinely moved are adjusted
- — bands that haven't are left alone rather than nudged for the sake of showing activity.
- What this is not: a fixed-sample-size statistical protocol with a published account count or a formal deduplication step
- — that rigor belongs to the Live Host Rate Index below, which is a different kind of dataset (public listings, not managed accounts) that needs it for a different reason (no natural "account" boundary to de-duplicate against).
- The Ad Cost Index's discipline is instead: real accounts, real spend, reviewed on a fixed quarterly cadence, and a visible dated changelog so a stale or wrong band can't hide.
2. Digital Ad Cost Index — Australia (curated, not first-party)
AU figures are not from managed accounts — we don't yet run a large enough Australian book of business to publish first-party AU figures honestly.
Instead, the cross-industry AU bands (Google Search CPC, Meta CPC/CPM, GST rate) are curated from published third-party sources (rockingweb.com.au, which cites WordStream data) and clearly labelled as such on the live page.
- Vertical-specific AU bands (aesthetic clinic, dental, interior design) are
verify_gate: true— see §4 below — because no defensibly-sourced band could be found for them; they render as a gap, not a guess.
3. Digital Ad Cost Index — Hong Kong (first-party, small-N)
HK figures, once published, will be a third method class — distinct from both Malaysia/Singapore (first-party, larger managed-account base) and Australia (curated from published third-party sources, not first-party at all).
Hong Kong figures are aggregated from shakalakaa-managed Hong Kong ad accounts, but the base is small: a minimum of 3 contributing accounts before any figure is published at all.
- That constraint shapes the whole dataset, not just its footnotes:
- Minimum cell size: 3 accounts. Any benchmark cell backed by fewer than 3 contributing accounts is not created — not gated with a placeholder, not created at all. A vertical with 0 or 1 or 2 HK accounts simply has no cell in this dataset.
- Ranges only, rounded outward. With as few as 3 accounts behind a figure, a precise mean or a monthly time series would risk making an individual account's performance identifiable to anyone who knows shakalakaa's HK client list. Only a coarse
[low, high]range, rounded outward to a sensible increment, is published — never a mean, a median, a per-account count, or a month-by-month series. - Narrow vertical coverage by design, not oversight. Hong Kong currently has one publishable cell (aesthetic clinic marketing). This isn't a gap to be filled with an estimate — it's what an honest 3-4-account first-party base actually supports, stated plainly instead of a broader "general SME" figure that would mix incompatible verticals.
As of this page's last update, the HK group exists in our benchmark dataset as verify_gate: true structure only — no live page reads it, and no HK figure appears anywhere on the site yet.
It clears the gate only once real, already-aggregated ranges are supplied and confirmed clear of any client confidentiality restriction.
4. Live Host Rate Index — Malaysia (third-party sampled, not shakalakaa session data)
Individual job listings sampled from public postings on Malaysian job platforms (Indeed Malaysia primary, cross-referenced against Jobstreet/Jora/Glassdoor listing-volume counts).
For each observation: employer, region, employment type, posted rate range and unit were recorded, then de-duplicated by employer+location+role to remove re-posted/duplicate listings appearing across multiple search queries.
- Minimum 20 observations required before a band is published as a number; below that, the band is marked insufficient sample and no number is printed on the live page.
- Employer names are recorded here for de-duplication and audit purposes only and are never published against individual rates on the live page — only aggregate bands are shown, per the collection method's own no-attribution rule.
- Context on market size (not used as the observation source for the published bands): Jobstreet 326 listed roles (as of 2026-06); Jora 697 (as of 2026-02); Glassdoor 490 (as of 2026-03).
Keep exploring
Frequently asked
Are all the shakalakaa benchmark datasets built the same way?
No, and that is deliberate. Malaysia and Singapore figures are aggregated from managed client accounts. Hong Kong figures are also first-party but come from a materially smaller base, so they carry their own small-sample rules.
Australia is curated from published third-party sources and is not first-party at all. The Live Host Rate Index is sampled from public job listings.
- They are built differently because the underlying data is available differently, and this page documents each method rather than describing one uniform process that does not exist.
What is the minimum sample before a figure is published?
It depends on the dataset, and no cell publishes below its stated minimum. Hong Kong requires a minimum of 3 contributing accounts — a cell backed by fewer is not created at all, not gated with a placeholder.
The Live Host Rate Index requires 20 observations. Curated Australian bands require a defensibly-sourced citation instead of a sample count.
Why are some benchmark cells empty instead of showing an estimate?
Because an empty cell is more honest than a guess. Vertical-specific Australian bands are flagged verify_gate: true precisely because no defensibly-sourced band could be found for them, so they render as a gap.
Hong Kong currently has one publishable cell (aesthetic clinic marketing), which is what a 3-4-account first-party base actually supports.
What does verify_gate: true mean?
It marks a figure that has not cleared the bar for publication — either no data exists yet, or what exists does not meet the dataset's minimum sample.
Every page and tool that reads benchmarks.json must check the flag at render time before showing a figure, and is not permitted to quietly print the underlying placeholder value.
- This is enforced structurally: the pre-deploy gate suite fails the build if any page reads a gated figure without checking the flag.
Why does Hong Kong publish only coarse ranges?
With as few as three accounts behind a figure, a precise mean or a monthly time series could make an individual account's performance identifiable to anyone who knows the client list.
Only a coarse low-high range, rounded outward, is published — never a mean, a median, a per-account count, or a month-by-month series.
How often are the figures reviewed, and can I see what changed?
The Digital Ad Cost Index is reviewed quarterly against the most recent quarter's managed-account data. Bands that have genuinely moved are adjusted and bands that have not are left alone rather than nudged to show activity.
A dated review-history log records what changed each quarter, so a stale or wrong band cannot hide.
More questions (1)
Can I reuse these datasets?
Yes. Both are published under CC BY 4.0, free to reuse with attribution. Read-only JSON is available at /api/benchmarks.php and /api/live-host-rates.php, with parameters and response shapes documented on the API documentation page.

