v1.0 is editorial expert-derived. Here’s why that’s honest.
The Wild Pest is a young company commercially. We do not yet have the n ≥ 1,000 BC service-record sample size needed to publish a pure quantitative activity report. Pretending otherwise would violate our methodology—and our brand pillars.
v1.0 of this report is therefore an editorial activity index: a deterministic score computed from the curated, publicly-available content we’ve already shipped on this site — 100 hand-written pest×neighbourhood records, 32 area pages with seasonal and housing-stock detail, and 28 species pages with risk and treatment specifics. Each cell’s score is a transparent weighted sum of five signals. Anyone can rebuild it with their own weights, using the open-source code in this repo.
v2.0 (projected Q1 2027 post-Cairo-launch consolidation) will substitute live service-record aggregations for the documented-presence + severity signals. The page URL, the Dataset JSON-LD schema, and the download endpoints will stay identical so external citations don’t break.
The five signals
Each signal is bounded [0, 1]. The cell’s raw score is the weighted sum, then normalised per pest across all 32 areas so the highest-activity area for each species reads exactly 100.
- Documented presence— binary 0/1. Does a pest×neighbourhood record exist in our curated dataset? These records are field-team-authored expert content; their presence is itself a meaningful activity signal.
- Severity signal— 0 to 1, derived from language-density inside the pest×neighbourhood record. A curated list of high-band tokens (
highest,most common,peak activity,every block,callout volume, ...) and mid-band tokens (frequent,active,year-round, ...) is checked against the record’s prose and FAQ answers. Hits accumulate capped at 1. - Housing match— 0 to 1, a curated affinity map between pest type and the area’s housing-stock prose. Carpenter ant activity, for instance, scores high when the area description contains pre-1960, cedar, or mature canopy; bed-bug activity scores high against multi-unit, rental, or mid-rise stock.
- Climate match— 0 to 1, hits of pest-keyword tokens against the area’s seasonal notes. If a neighbourhood’s seasonal activity summary already names the species, that’s a activity signal.
- Common-pest listing— binary 0/1. Does the area’s
commonPestslist include the service category for this pest? This is the field team’s explicit signal that the species is one of the area’s top-5 callout drivers.
Default weights
| Signal | Weight |
|---|---|
| documented_presence | 0.35 |
| severity_signal | 0.25 |
| housing_match | 0.15 |
| climate_match | 0.15 |
| common_pest_listing | 0.10 |
| Total | 1.00 |
Documented presence carries the heaviest weight (0.35) because it gates the most credible signal — field-team-authored content. Severity signal (0.25) and housing/climate matches (0.15 each) round out the score. Common-pest listing is a binary corroborator at 0.10.
Sample-size honesty rules
Every cell is tagged with one of three bands:
- documented— a curated pest×neighbourhood record exists. The score is grounded in field-team observation.
- inferred— no record exists, but housing-stock, climate, or common-pest signals are strong enough to publish a non-zero score.
- insufficient— no signal at all. These cells render as a dash on the heatmap and are excluded from per-pest top-5 lists.
What this report is not
- Nota quantitative incidence claim. v1.0 is editorial. We’ll switch to quantitative in v2.0 when the service-record sample clears n ≥ 1,000.
- Nota substitute for an on-site inspection. Activity scores are aggregate area signals; your specific property may differ wildly from your neighbourhood’s average.
- Not intended for legal, insurance, or regulatory use without independent verification.
Reproducing the report
The full pipeline is:
src/lib/pest-neighbourhood.ts— 100 pest×neighbourhood recordssrc/lib/location-content.ts— 32 areas with housing + seasonal datasrc/lib/pest-library.ts— 28 species with risk + seasonalitysrc/lib/pest-activity-report.ts— the scoring engine (5 signals, 5 weights)- Run the unit tests:
pnpm exec vitest run pest-activity-report - Inspect the JSON output: /api/pest-activity-report/2026.json
Citation format
The Wild Pest. (2026). 2026 Metro Vancouver Pest Activity Report (v1.0). Creative Commons Attribution 4.0. https://thewildpest.com/pest-activity-report/2026
