scripts/simulate-campaign.ts. The exposure model, the privacy gates and every calculation are the real ones. The vehicles, the advertiser and the price are not.Demo Brand launch, Nelson Mandela Bay
Where the contacts happened
Week by week
| 01 Oct | 327 752 | 20 cars | |
| 05 Oct | 596 782 | 20 cars | |
| 12 Oct | 595 749 | 20 cars | |
| 19 Oct | 594 129 | 20 cars | |
| 26 Oct | 608 388 | 20 cars |
Contacts by hour of day
| 00:00 | 702 | |
| 05:00 | 2 348 | |
| 06:00 | 76 830 | |
| 07:00 | 202 726 | |
| 08:00 | 199 710 | |
| 09:00 | 167 487 | |
| 10:00 | 150 879 | |
| 11:00 | 136 583 | |
| 12:00 | 54 256 | |
| 13:00 | 73 669 | |
| 14:00 | 141 395 | |
| 15:00 | 181 588 | |
| 16:00 | 347 658 | |
| 17:00 | 366 146 | |
| 18:00 | 197 106 | |
| 19:00 | 129 850 | |
| 20:00 | 110 284 | |
| 21:00 | 100 762 | |
| 22:00 | 39 769 | |
| 23:00 | 10 707 |
By vehicle
| Vehicle | days | km | hours | coverage | longest gap | contacts |
|---|---|---|---|---|---|---|
| NMB-03 (full-time) | 23 | 5 396 | 229,2 | 100% | 5 min | 183 181 |
| NMB-02 (full-time) | 23 | 5 079 | 226,4 | 100% | 4 min | 176 667 |
| NMB-05 (full-time) | 22 | 4 895 | 219,0 | 100% | 10 min | 172 307 |
| NMB-08 (full-time) | 23 | 4 816 | 221,1 | 100% | 10 min | 169 554 |
| NMB-07 (full-time) | 23 | 4 847 | 216,4 | 94% | 2 h 23 min | 168 465 |
| NMB-04 (full-time) | 23 | 4 916 | 204,3 | 91% | 15 h 48 min | 166 339 |
| NMB-06 (full-time) | 22 | 4 761 | 211,5 | 100% | 4 min | 164 776 |
| NMB-01 (full-time) | 22 | 4 655 | 212,8 | 100% | 16 min | 163 531 |
| NMB-16 (peak) | 22 | 4 145 | 179,5 | 100% | 11 min | 138 944 |
| NMB-15 (part-time) | 27 | 4 996 | 186,3 | 93% | 2 h 19 min | 136 954 |
| NMB-14 (part-time) | 27 | 5 059 | 188,5 | 100% | 9 min | 136 739 |
| NMB-18 (peak) | 22 | 4 046 | 170,3 | 100% | 10 min | 129 228 |
| NMB-09 (part-time) | 27 | 5 096 | 188,6 | 100% | 5 min | 129 053 |
| NMB-12 (part-time) | 27 | 4 687 | 185,4 | 100% | 9 min | 125 343 |
| NMB-17 (peak) | 22 | 3 716 | 161,2 | 98% | 56 min | 124 885 |
| NMB-11 (part-time) | 27 | 4 345 | 179,4 | 100% | 4 min | 123 442 |
| NMB-10 (part-time) | 27 | 4 369 | 172,5 | 95% | 1 h 1 min | 118 805 |
| NMB-13 (part-time) | 27 | 4 000 | 162,4 | 95% | 1 h 9 min | 114 591 |
| NMB-19 (weekend) | 11 | 1 804 | 63,4 | 100% | 4 min | 40 118 |
| NMB-20 (weekend) | 11 | 1 819 | 64,2 | 100% | 6 min | 39 878 |
Exposure efficiency by road type
| Road type | km | contacts | per km |
|---|---|---|---|
| primary | 22 866 | 992 611 | 43,4 |
| secondary | 30 447 | 1 060 859 | 34,8 |
| residential | 7 554 | 211 826 | 28,0 |
| trunk | 14 317 | 316 102 | 22,1 |
| motorway | 7 910 | 109 060 | 13,8 |
How these numbers are made, and what they are not
Each wrapped car carries a phone that reports its position at least every 30 seconds. Consecutive positions form short segments. For each segment the model estimates how many people were near enough, with a wrapped side facing them, to see it. Surrounding traffic comes from the car’s own speed against the road’s free-flow speed; people on foot come from open population data, shifted between homes and workplaces by hour.
Those opportunities are then weighted by how likely the wrap was to be noticed: viewing distance, angle, how long it stayed readable, and whether the viewer was driving. That gives Visibility Adjusted Contacts. The range is one standard deviation, about 2.5 times either side of the central figure. It is wide on purpose, because the inputs are uncertain and the report says so.
A parked car earns nothing. Areas around each driver’s home are excluded entirely, and no area is drawn until several different vehicles have passed through it.
What this is not: a count of people who saw the wrap, which cannot be observed from a vehicle. It is not unique reach either: the same commuter passing a car on Monday and on Tuesday counts twice, because removing that duplication would need mobile device data we do not use. “Visibility Adjusted Contacts” is the term the Outdoor Measurement Council’s ROAD study uses; these figures are not ROAD-accredited and are not comparable to a ROAD-planned buy.
Population source: worldpop_R2025A+ghs_built_v_nres_R2023A_c0.3.