# Engagement-per-subscriber recipe

A time-aligned normalization recipe for comparing captured post metrics across differently sized Telegram sources.

## Calculation

- Mode: normalized_engagement_ranking
- Formula: selected post metric / latest positive source audience snapshot observed at or before the fixed-horizon metric snapshot.

## Query

For [candidate posts], rank [reactions, views, or forwards] relative to source audience at one shared post-age horizon. Show numerator, historical audience denominator, rate, horizon, metric time, coverage, missing reasons, and citations. Do not substitute today's audience for missing historical data.

## Inputs

- **Candidate posts:** A fixed selected-source/date set or references inherited from a prior result.
- **Metric:** Exactly one of reactions_total, views, or forwards.
- **Post horizon:** One scheduled age reached by every candidate publication.
- **Audience timing:** Latest valid source snapshot no later than the metric observation.

## Expected output

- Metric and audience values
- Normalized rate and rank
- Shared horizon and timestamps
- Coverage and missing-denominator reasons
- Post-level evidence links

## Coverage checks

- [ ] Never use a future audience snapshot
- [ ] Never replace missing audience with zero
- [ ] Keep one metric across all candidates
- [ ] Withhold a global winner for partial coverage
- [ ] Do not equate subscribers with actual viewers
