By Gabe Kwakyi
What is Signal Engineering?
Signal engineering is a method of enriching the quality of data you post-back to your algorithmic ad campaigns from your product, so that your campaigns can perform at their best, in CAC/ROAS/ROI terms.
Think of it like fuel quality for a BMW M3. A regular BMW will run fine on 87-octane gas. But a high-performance M3 was engineered to run on premium 93-octane fuel. The higher quality fuel allows the engine to perform at its intended spec.
Your ad campaigns are the same. Meta and Google's algorithms are powerful, but they perform best with high-quality data. If you're feeding them poor quality signals (wrong events, wrong values, missing context), they can't optimize effectively. If you're feeding them premium-quality signals (right events, accurate values, rich context), they perform at their best.
Three Tiers of Signal Quality
Tier 1: Upper Funnel (Poor Quality)
Upper funnel signals like "app_install" or "app_open" are low-intent events. They happen early in the user journey, before the user has engaged with your product or shown purchase intent.
Ad platforms can optimize on these events, but they have limited signal quality. Millions of people install apps but never use them. Optimizing on app_open means you're attracting people who are curious but not necessarily valuable.
Use case: early stage growth when you're trying to maximize volume and learning what works.
Tier 2: Lower Funnel (Too Enriched)
Lower funnel signals like "completed_payment" or "subscription_confirmed" are high-intent events, but by the time they fire, it's too late. The user has already made their decision.
If you only send subscription_confirmed events to Meta, the algorithm has no data until the user has already converted. This creates a lag in learning and optimization. You're also only sending data on your winners, not on users who started the paywall but didn't convert (who might have been convertible with better targeting).
Additionally, these events often have high latency (server confirmation takes 2-3 seconds), which reduces match rate and makes the signal less valuable for optimization.
Tier 3: Lower-Middle Funnel (The Goldilocks Zone)
Lower-middle funnel signals like "paywall_viewed" or "trial_initiated" are in the sweet spot. They fire quickly (fast match rate), they indicate purchase intent (user saw paywall, engaged with offering), but they're not so late that they provide no learning signal.
These are the signals that ad platforms love. They have high match rate, fast delivery, and clear intent. The algorithm can optimize effectively on them.
Two Examples of Signal Engineering
Example 1: Financial App - Qualified Signup
A financial investment app wants to optimize their paid UA. The natural event to track is "subscription_purchased" (highest intent). But that event might not fire until days after the user signed up, and has high latency.
Instead, they engineer a "qualified_signup" event that fires immediately when:
- User completed email verification
- User passed AML/KYC checks
- User linked a bank account
This event fires within seconds of signup completion, it indicates strong purchase intent (the user has done all required steps), and has excellent match rate. By optimizing on "qualified_signup" instead of "subscription_purchased," the algorithm can learn 10x faster and optimize much more effectively.
Example 2: Wordscapes - Combo Signal
Wordscapes, a word game, wants to optimize their paid UA for players who are likely to pay for premium features. The paywall comes after the player has played a few levels.
Instead of sending "in_app_purchase" events, they engineer a "ready_to_monetize" event that includes:
- Levels completed: 5+
- Game sessions: 3+
- Time in app: 10+ minutes
- Combo bonus unlocked: yes
This combined signal fires earlier (after 10+ minutes of engagement rather than after purchase), it indicates purchase intent (the player is engaged and has unlocked premium features), and has high match rate. Ad platforms can optimize toward "engaged users likely to pay" rather than optimizing after payment.
Signal Engineering for Subscription Apps with Free Trials
If you're a subscription app with a free trial, here's the signal engineering pyramid:
- Signup: User created account (fast, lots of volume, but low intent)
- Trial started: User explicitly started a free trial (faster than purchase, clear intent)
- Key feature unlocked: User unlocked a premium feature or reached a milestone (indicates engagement)
- Paywall viewed: User saw the upgrade paywall (very clear intent, fast)
- Subscription purchased: User converted (highest intent, but late signal)
Signal engineering advice: send trial_started and paywall_viewed events to your ad platforms. These give fast, high-intent signals that your algorithms can optimize on. Send subscription_purchased as well, but don't rely on it as your only optimization signal—it's too late.
Three Nuances of Signal Quality
Nuance 1: Single Strong Signal is Better Than Multiple Weak Signals
Don't send everything to your ad platform. A single "paywall_viewed" event is more powerful than "app_open", "feature_viewed", "milestone_reached", and "paywall_viewed" all mixed together.
Why? Because the algorithm has to figure out which signal matters. Multiple weak signals create noise. A single strong signal creates clarity.
Nuance 2: Organic vs. Paid Signal Engineering
For paid users (from ads), optimize on lower-funnel signals (paywall_viewed, trial_started). For organic users (from search, referral, App Store), you can optimize on higher-funnel signals (app_open, feature_viewed) because they're already self-selected for intent.
Nuance 3: Too Narrow is a Trap
Don't make your signals so specific that they have low volume. For example, "premium_user_who_completed_15_levels_and_unlocked_combo_bonus_and_has_4star_reviews" has such high specificity that ad platforms can't learn on it. Aim for signals that have enough volume for the algorithm to learn (100+ daily events), but narrow enough to indicate intent.
References
Conclusion
Signal engineering is about feeding your ad platforms the highest-quality data possible. This means lower-middle funnel events (high intent + fast delivery + good match rate) rather than upper funnel (low intent, low quality) or lower funnel (too late, high latency).
Focus on: trial starts, paywall views, key milestone reaches, and similar high-intent events. Send these to Meta and Google, and let their algorithms optimize. Avoid sending app_open or feature_generic events as your optimization signal—they're too high up the funnel.
For subscription apps, this typically means optimizing on trial_started or paywall_viewed, not on subscription_purchased. It seems counterintuitive to optimize on "trial" rather than "purchase," but your algorithms will thank you with faster learning and better performance.



