Published 2026-01-15

2025 Transparency Report

How SignalPipe performed in 2025. The good numbers, the bad numbers, and what we changed in response.

By the numbers

4,392
Scout cycles run
one every 2 hours, year-round
1.8M
Posts evaluated
across 26 stations
47,810
Leads created
scored above the keyword pre-filter
8,206
Missions queued
crossed the 50-point signal threshold
3,124
Missions approved
38.1% approval rate
11.2%
Reply-acceptance rate
on sent outbound (any non-rejection)
94.7%
Drafts under char budget
budget-aware swarm calibration
0
Repeat-URL collisions
interactions ledger held the line

What worked

  • The role-aware swarm shipped in v3.7 measurably increased reply-acceptance on educator-tier missions (4.1× vs sending closer-tone drafts on the same posts).
  • The interactions ledger prevented every repeat-URL collision across 4,392 scout cycles. The unique constraint on (target_url, product_id) is the cheapest, most useful invariant in the schema.
  • Char-budget calibration in the swarm produced under-budget drafts 94.7% of the time. Operators rarely have to cut.

What didn’t

  • The competitor floor heuristic surfaced too many competitor-marketers’ own posts in Q3 — boost was firing on the seller, not the buyer. Fixed in v3.7 by routing role assignment through content_score instead of signal_score.
  • The educator skeptic prompt vetoed too aggressively in v3.7.0, killing borderline-tier signals before the analyst could weigh in. Softened in v3.7.1 (now only vetoes entirely off-topic posts).
  • Reddit RSS started returning 429s en masse in March until we identified as a polite bot in feedparser. Lost ~6 days of Reddit signal coverage before the fix shipped.
  • Bot-account detection remains weak. Author-reputation signal helps but doesn’t fully solve. Operator review is the only reliable backstop right now.

What changed in response

  • · content_score introduced as a separate column, displayed in the dashboard with a Δ flag when it diverges from signal_score.
  • · Role assignment moved from signal_score → content_score so the floor can’t hijack draft voice.
  • · feedparser user-agent changed to identify as a polite bot.
  • · Cron cadence reconciled at 2 hours; feed-fetch limit raised to 50 entries per station per cycle.
  • · Educator skeptic veto criterion narrowed to off-topic-only.
  • · Regression test added for the 9-prompt swarm matrix (test_swarm_roles.py).

Plans for 2026

  • · Public open dataset on Zenodo (CC BY 4.0). See /dataset.
  • · Weekly aggregate-trends digest at /signals.
  • · Embeddable widget for live signals on third-party sites. See /embed.
  • · Telegram and Discord ingestion (deferred from the v3.x roadmap).
  • · Email-channel outreach with quota-aware drafting.
  • · Adaptive swarm weights — judges that consistently outperform get higher fusion weight on similar future leads.

See the changelog for the full version history, or /methodology for the scoring pipeline these numbers came out of.