Multiple datasets, multiple methods — this page documents each honestly rather than describing one uniform process that doesn't exist. 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; 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.
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, cross-referenced against wordstream.com) 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 rather than papered over with a broader "general SME" figure that would mix incompatible verticals.
As of this page's last update, the HK group exists in data/benchmarks.json 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.
Known bias, stated rather than hidden: Posted rates skew toward employer-side openings and roles that need advertising to fill. Experienced hosts with existing audiences are typically booked through direct relationships or agencies without a public job listing and are not represented in this sample. Ranges reflect what employers are willing to post publicly, not necessarily what the most in-demand hosts actually command.
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).
5. What verify_gate means
Every figure in data/benchmarks.json can carry a verify_gate: true flag. It means: a number for this metric hasn't cleared our own bar for publication — either no session/account data exists yet, or what exists doesn't meet the minimum sample the dataset requires (20 observations for the Live Host Rate Index; a defensibly-sourced citation for curated AU figures). Every page and tool that reads benchmarks.json is required to check this flag at render time before showing a figure — a page is not allowed to quietly ignore the gate and print the underlying placeholder value. When a metric is gated, the honest behaviour is to show the gap, not a number. This is a structural rule, not a one-off editorial choice: scripts/check-placeholders.sh Part 2 fails the build if any page reads a verify_gate: true figure without checking the flag first.
Licence and reuse
Both datasets 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 — see the API documentation for parameters and response shapes.
Frequently asked
← Back to the Digital Ad Cost Index · Live Host Rate Index →