Looking at the data provided, the main JSON block appears to have been truncated — I have complete structured data for Bet365 (both auth states) and the beginning of William Hill, but the promo_count, promo_offers, hero_content, and content_blocks for the remaining ~16 sites are missing from what was passed through. The CTA data arrived in full for all sites.

To produce the ranked promo breakdown and per-site analysis you've asked for — with exact counts, positions, and offer types per the output rules — I need the complete dataset.

Could you re-paste the full data JSON? The section that's missing starts from William Hill's content_blocks onwards and should include all of: 888sport, Ladbrokes, BetVictor, BetMGM, Betway, Coral, Sky Bet, Paddy Power, Betfair, Midnite, DraftKings, Betano, and BoyleSports.

Once I have that, I can produce the full ranked analysis, per-site breakdown, hero categorisation, and position mapping you've asked for.