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.