Key Takeaways
- Our six-week Connected TV (CTV) attribution campaign for a new finance app hit a 2.8x ROAS, which was 15% better than we’d even projected.
- We cut our data discrepancies by 22% just by implementing server-to-server postbacks between the CTV platform and AppsFlyer instead of using traditional impression tracking.
- The winning creative by a long shot was a 15-second spot that put a QR code front and center. It was responsible for 60% of our tracked installs.
- Getting precise with geo-targeting in specific Nielsen DMA regions and adding household income filters made the campaign more efficient, dropping our cost per install (CPI) by 18% in those areas.
- We constantly A/B tested things like where the QR code was placed and the app store deep links, which bumped our conversion rates by about 7% week-over-week.
Figuring out Connected TV (CTV) attribution for apps is a huge challenge for marketers trying to prove their video campaigns actually lead to mobile installs and engagement. We just wrapped a six-week, $75,000 CTV push for a new personal finance app, where the goal was straightforward: get users and prove a solid return on ad spend (ROAS). This teardown breaks down our strategy, the nitty-gritty of the AppsFlyer integration, and the lessons we paid for. So how do we actually measure CTV’s influence on app growth without just falling back on last-click?
Campaign Overview: Launching “FinFlow”
Our client, FinFlow, was launching a new app for budgeting and investment tracking in early 2026. They needed fast user growth, specifically targeting affluent millennials and Gen Z professionals. We sold them on a concentrated CTV campaign to build the brand and drive installs directly from the big screen. The whole thing ran from February 1 to March 15, 2026.
Initial Strategy and Objectives
The strategy was all about creating 15- and 30-second video ads that showed off FinFlow’s best features, like its AI budget recommendations and fractional stock investing. Our KPIs were:
- Cost Per Install (CPI): Target under $5.00
- Return On Ad Spend (ROAS): Target 2.0x within 30 days post-install
- Install Volume: Aim for 10,000 new users
- Click-Through Rate (CTR) on companion banners: Target 0.15%
We knew right away that normal mobile attribution wouldn’t work for CTV since you can’t click the ads. A strong CTV attribution setup that used impression data and probabilistic matching was absolutely key.
AppsFlyer Integration: The Attribution Backbone
To get anything close to accurate measurement, we had to fully integrate our CTV ad platform (one of the major programmatic DSPs for CTV) with AppsFlyer. This required careful server-to-server (S2S) setup, not just a simple SDK implementation.
Setting Up Impression Tracking
First, we had to make sure every single CTV ad impression was being fired correctly to AppsFlyer. We configured our DSP to fire an impression tracking pixel, basically just an AppsFlyer URL packed with device identifiers, every time one of our ads ran. The pixel included:
- Device ID (if available): Usually the IFA (Identifier for Advertisers) or IFV (Identifier for Vendors) from the CTV device itself.
- IP Address: This is the workhorse for probabilistic matching.
- Timestamp: Critical for establishing recency.
- Campaign, Ad Group, and Creative IDs: Needed for any kind of granular reporting.
This direct S2S postback of impressions was the most important part of the setup. Client-side tracking or other third-party measurement integrations often introduce latency and data loss, which gets even worse in the fragmented CTV world. In fact, we saw a 22% drop in impression discrepancy by using direct S2S compared to older campaigns where we used less direct methods.
Probabilistic Matching and Lookback Windows
With all these impressions flowing into AppsFlyer, the platform could then start trying to match the ad exposures to people installing the app later. AppsFlyer’s probabilistic model uses a few data points to make the connection:
- IP Address: The most common link between a CTV and a mobile device in the same household.
- Device Type: Connecting a Samsung Smart TV impression to an iPhone install, for example.
- Geo-location: Matching the general area of the CTV and the mobile device.
- Timestamp: A strict lookback window gets applied here.
We set a 7-day impression lookback window. An install was attributed to a CTV impression if it happened within seven days of the person seeing the ad. For view-through conversions, this window is generally appropriate. Anything longer and you start risking attribution for ancient ad exposures that probably had zero influence. We also had a 3-hour click-through lookback window for the companion banner ads, but they were a very minor part of the campaign.
Campaign Execution: Strategy, Creative, and Targeting
Our execution was a mix of broad reach and very specific audience cuts.
Creative Strategy: QR Codes and Clear CTAs
We ran three main creative concepts:
- 15-second “Problem/Solution”: Showed how FinFlow solves common money frustrations.
- 30-second “Deep Dive”: Explained features like automated savings and investment portfolios in more detail.
- 15-second “QR Code Focus”: A fast, direct ad that plastered a big QR code on the screen for a full 8 seconds, linking right to the app store.
The QR Code Focus creative was the runaway winner. While the 30-second spots were fine for brand building, the immediate, scannable call to action drove real, measurable installs. We made sure the QR code was big, had high contrast, and stayed on screen long enough for someone to actually grab their phone. That one creative was responsible for 60% of all tracked installs from CTV. To make sure the QR codes worked perfectly, we used SKAdNetwork compliant app store links, which gave iOS users a smooth experience and helped with post-install tracking.
Targeting Parameters
We zeroed in on specific Nielsen DMA regions (Designated Market Areas) where we knew our target demo lived, places like Atlanta, Austin, Denver, and Seattle. Inside those DMAs, we added layers for household income (HHI $100K+) and behavioral segments showing interest in finance, investing, and tech. This precision targeting was important. Broad CTV buys can burn through a budget fast with almost nothing to show for it. We found that targeting these specific regions with income filters dropped our CPI by 18% compared to wider demographic targeting.
Bid Strategy and Budget Allocation
We used a performance-based bidding strategy that optimized for installs, with our $75,000 budget spread over the six weeks.
- Week 1-2: $20,000 – Heavy testing of creatives and audiences.
- Week 3-4: $25,000 – Scale up what was working.
- Week 5-6: $30,000 – Maximize reach in our proven segments.
We aimed for a steady daily spend, letting the DSP’s algorithms do the hard work of finding the best placements.
Results and Optimization: Data-Driven Decisions
The campaign produced strong results, which came from constant tweaking.
Performance Metrics Snapshot (Six Weeks)
| Metric | Value | Target |
|---|---|---|
| Total Budget | $75,000 | $75,000 |
| Total Impressions | 15,000,000 | 12,000,000 |
| Tracked Installs | 13,500 | 10,000 |
| Cost Per Install (CPI) | $5.56 | <$5.00 |
| ROAS (30-day) | 2.8x | 2.0x |
| CTR (Companion Banners) | 0.12% | 0.15% |
Our CPI did come in a little over target, but the 2.8x ROAS more than made up for it. The acquisition cost was higher, but the quality of users we got from CTV was much better, leading to more in-app revenue from subscriptions and premium features. A recent IAB NewFronts 2025 report mentioned that CTV ad spending is shifting toward performance outcomes, so for many of us, ROAS is becoming a much more important metric than raw CPI anyway.
What Worked Well
- QR Code Dominance: The 15-second QR code creative was a monster. We could literally see daily install numbers spike right after its impression volume went up.
- Geo-Targeting Accuracy: Sticking to specific DMAs with HHI filters really improved efficiency. The install rate in our targeted regions was 1.5x higher than what we saw in broader national test runs.
- AppsFlyer’s Probabilistic Matching: The platform managed to attribute a lot of installs that would’ve been lost in the “organic” or “direct” bucket, giving us a clear picture of CTV’s real impact. Its ability to de-duplicate against other channels was also a lifesaver.
Challenges and What Didn’t Work as Expected
- Companion Banner CTR: At 0.12%, the CTR for companion banners was lower than we’d hoped. It seems users are just not inclined to interact with secondary ad elements when they’re leaning back watching TV. We pulled budget from these units after week 3.
- 30-second Creative Performance: It was good for branding, but the 30-second “Deep Dive” creative had a 20% higher CPI than the QR code version. It just wasn’t delivering direct installs at the same rate for the same spend.
- Cross-Device Identifier Limitations: Even with all the new tech, the lack of a universal device ID across CTV and mobile is still a huge pain. AppsFlyer’s probabilistic models are good, but they’re not 100% deterministic, which leaves some uncertainty. This is the reality of the ecosystem.
Optimization Steps Taken
- Creative Rotation Shift: By the third week, we had shifted 70% of our creative spend to the 15-second QR code spot and completely paused the 30-second version.
- Bid Adjustments: We pushed bids up by 15% in our best DMAs (Atlanta and Austin) and pulled them back by 10% in the ones that were lagging.
- Frequency Capping: We started with a frequency cap of 3 impressions per user per day but saw diminishing returns pretty quickly. We adjusted it down to 2 per day, which helped cut down on wasted spend.
- A/B Testing QR Code Placement: We even A/B tested where the QR code appeared on the screen (bottom right vs. center bottom). The center bottom placement gave us a 7% higher scan rate, so we stuck with that.
Conclusion
Our FinFlow campaign showed that if you get the integration right and follow the data, CTV can be a great channel for app user acquisition. The key is understanding the details of CTV attribution, especially the reliability of server-to-server impression postbacks to a platform like AppsFlyer, and designing creative that works for a lean-back TV experience. Seriously, a clear, scannable QR code can bridge the gap between the big screen and a mobile install better than anything else we tried.
What is CTV attribution in app marketing?
CTV attribution links app installs and in-app events to ad campaigns on Connected TV devices (like smart TVs or streaming sticks). Since you can’t click on most CTV ads, attribution works by using probabilistic matching, it uses data points like IP address, device type, and timestamps to connect a CTV ad view to a later app download on a phone in the same household, all within a set lookback window.
How does AppsFlyer integrate with CTV platforms for attribution?
AppsFlyer integrates with CTV platforms mainly through server-to-server (S2S) postbacks. When a CTV ad runs, the ad platform’s server pings AppsFlyer’s API with an impression payload. That data includes the IP address, device IDs, and campaign info. AppsFlyer then uses that impression data to probabilistically match it to app installs that its own SDK reports, giving credit to the CTV campaign.
What are the biggest challenges in CTV app attribution?
The main challenges are the lack of a universal, persistent ID that works across both CTV and mobile devices, the fact that most CTV ads aren’t clickable, and the data discrepancies that pop up between platforms. Probabilistic matching works well, but it isn’t 100% deterministic, and proving CTV’s impact separate from all your other marketing requires a very tight setup and a good measurement partner.
Why are QR codes effective in CTV app ads?
QR codes work so well in CTV ads because they create a direct, simple bridge from the TV screen to a person’s phone. Instead of having to remember an app’s name and search for it, a viewer can just point their phone’s camera at the screen and be taken directly to the app store page. This reduces friction and gives the conversion rate from view-to-install a huge boost.
What is a typical ROAS for successful CTV app campaigns?
A typical ROAS for a CTV app campaign really varies based on the industry and goals. For user acquisition campaigns, though, hitting a ROAS of 1.5x to 2.5x within 30 to 60 days is generally considered a strong result. Our FinFlow campaign hit 2.8x, which shows that with the right targeting and creative, CTV can drive a really solid return.