{
 "profiles": {
  "applovin": {
   "ownership": "Public (ticker APP). One reportable segment since the sale of its game studios to Tripledot closed on 30 June 2025, for $430.6m in cash after adjustments plus about 20% of Tripledot's fully diluted equity, valued at $285.0m ($715.6m in total) [AB-S01; AB-S03; FX1-S01]. AppLovin also owns its ad platform (AppLovin Ads, formerly Axon Ads Manager), the MAX mediation auction, the Adjust attribution company (bought 2021) and Wurl (bought 2022) [AB-S01; G2-S01].",
   "financial_scale": "From filings: FY2025 revenue $5,481m, up 70%, booked net of publisher payouts because AppLovin acts as agent; adjusted EBITDA $4,512m, 82% of revenue [AB-S01; AB-S02]. These are continuing operations, after the Tripledot sale. Q2 2026: revenue $1,924m, up 53%; adjusted EBITDA margin 83.9% [G2-S01; G2-S02]. The filings do not break out e-commerce revenue [G2-S01].",
   "buyer_and_app_fit": "App advertisers and, since 2024, web e-commerce advertisers buying scaled, model-driven acquisition [G2-S01; OA4-S06]. AppLovin recommends a daily budget that buys at least 15 to 20 conversions a day; ad-revenue and blended ROAS goals also require the app to use MAX [V1-S07]. Reports show the source app and placement type, but no advertiser block or allow list is documented [V1-S05; RS-S06].",
   "data_requirements": "MMP or server-to-server postbacks for event and ROAS optimization. On iOS, the only advertiser-side SKAdNetwork step documented is an attribution-partner setting to share the SKAN transaction ID. AppLovin's SKAdNetwork page covers DSPs bidding into MAX, not advertiser reporting, and no SKAN 4 or AdAttributionKit handling is documented [RS-S02; V1-S02].",
   "measurable_controls": "Reporting API: aggregated JSON/CSV with cost, ROAS, retention and billing-method fields, source app and placement type, and a 45-day request window; no log-level export [V1-S05; RS-S05; RS-S06]. Campaign Management API for app and web campaigns: create and update campaigns, goals, budgets (global or by country), targeting and creative sets [V1-S06; RS-S01]. No advertiser block or allow list is documented.",
   "implementation_burden": "Low to moderate. Self-serve; AppLovin opened the platform to all advertisers, without a referral code, on 22 June 2026 under the name AppLovin Ads [OA4-S06]. Event and ROAS optimization need MMP or server-to-server events, and ad-revenue and blended ROAS goals need MAX [V1-S07].",
   "proof_quality": [
    "Safe Sleeve / Sweet Flexx: AppLovin training material (Ads Playbook); narrative walkthrough with no comparator [V1-S03]",
    "Kikoff (CTV): AdExchanger report quoting AppLovin and Kikoff; before-and-after results with no holdout described [V1-S09]",
    "Geo-holdout tests: AppLovin's own blog describes running geographic holdouts for clients (20% to 50% of the footprint held out, at least 90% statistical power, campaigns out of learning), for web and e-commerce brands; a method description with no published results [V1-S04]"
   ],
   "counterevidence_note": "The sources we read contain no independent, published incrementality study of AppLovin campaigns with a stated method. Short sellers published allegations in 2025, including a Muddy Waters estimate that only about 25% to 35% of AppLovin's e-commerce conversions were incremental; its data and method are not public, and AppLovin denied the claims (chapter 2) [G3-S05; G3-S07].",
   "switching_limits": "Not documented in the sources we read. AppLovin's disclosure on its Axon model says nothing about advertisers' rights over the use of their campaign data [KL-S12].",
   "risks": [
    "Ownership overlap: AppLovin sells media, runs the MAX mediation auction and owns the Adjust attribution company. It says Adjust data is not shared with it unless the customer directs; that assurance has not been independently checked. This is a potential conflict of interest, not evidence of misconduct [AB-S01].",
    "Model concentration: the FY2025 10-K attributes the 70% revenue rise mainly to improved Axon Ads Manager performance (installations up 3%, net revenue per installation up 72%) and cites no independent efficiency or incrementality measure [V1-S01].",
    "Unproven allegations: 2025 short-seller reports alleged improper data practices and retargeting-heavy e-commerce results, and AppLovin denied them. A securities class action had no ruling on the motion to dismiss by the cutoff, and AppLovin's filings name no specific investigation (chapter 2) [G3-S05; G3-S07; G3-S10]."
   ],
   "poor_fit_use_cases": "Buyers who need an advertiser block or allow list (source apps are reported, but no block control is documented), a split of media cost from fees, a self-serve lift test (geo holdouts are a managed service described for web brands), re-engagement campaigns, or documented SKAN 4 and AdAttributionKit handling [V1-S05; RS-S06; RS-S07; V1-S04; RS-S02]."
  },
  "moloco": {
   "economics": "oCPM is the only documented pricing model. Moloco asserts a 'non-variable DSP margin' without publishing the rate; log fields for media cost and fee percentage exist but are marked deprecated, so no current fee split is documented [RS-S18; RS-S19]. Minimum spend: not stated in the sources we read.",
   "supply_dependencies": "Programmatic exchange buying; reports break results out by app or site, sub-publisher and exchange [V1-S15; RS-S09]. The sources we read document no owned publisher supply. Performance CTV bids at household (IP) level for CTV app-install campaigns [V1-S13; RS-S24].",
   "proof_quality": [
    "Nexon (Performance CTV): Moloco case study describing a ghost-bid test with an even test/control split, designed and analysed with Moloco's data scientists; vendor-run, with no independent check [V1-S11; RS-S20]",
    "Wayfair, Bevmo, Costco, Benjamin, Musinsa, Experian, FreeNow, ManoMano: Moloco case studies; narrative walkthroughs with no comparator on the index page [V1-S11]",
    "Performance CTV launch: Moloco reports up to 1.5 times higher ROI on CTV than on mobile and about two-thirds of installs within six hours of exposure; no test design described [IJ-S08]"
   ],
   "switching_limits": "Not documented in the sources we read. Event-level logs can be exported on request, with 90-day access [V1-S16; RS-S21].",
   "risks": [
    "Incrementality evidence is self-reported. The Performance CTV page describes built-in ghost-bid tests designed and analysed with Moloco's data scientists; the re-engagement page says only that Moloco offers incrementality testing, without naming a method. We found no independent audit of results [V1-S13; V1-S14; RS-S20].",
    "Private company: financial scale, headcount and customer concentration are not disclosed [V1-S20]."
   ]
  },
  "liftoff": {
   "ownership": "Public (Nasdaq: LFTO). Priced its IPO at $23.00 on 3 June 2026 and began trading on 4 June; the offering closed on 5 June with the over-allotment exercised, raising about $472.4m net, of which $409.2m repaid debt [AB-S11; FX1-S05; FX1-S06]. A first attempt, filed in January 2026, was withdrawn on 17 February 2026 [FX1-S08]. The 10-Q refers to a 'primary private-equity sponsor' without naming it; an affiliate of the sponsor underwrote 2.7m shares [V1-S21; G2-S09]. General Atlantic was allocated about 1.3m shares in the offering [V1-S28].",
   "financial_scale": "From filings: FY2025 revenue $685.7m, up 32%, booked net as agent; adjusted EBITDA $374.4m, 55% of revenue; net loss $23.1m [AB-S10; FX1-S05; FX4-S06]. Q2 2026 revenue $219.5m, up 35%, and H1 2026 $425.1m; one customer made up about 10% of revenue [V1-S21; G2-S09]. Revenue is split by geography only, with no product-line split [V1-S21].",
   "what_is_sold": "A DSP powered by Liftoff's Cortex models for app user acquisition and re-engagement. Accelerate offers broader access; Direct offers curated publisher access with account-team optimization. Campaigns can be optimized toward CPC, CPI, CPA, ROAS or predicted-LTV goals [V1-S22; V1-S23; RS-S29].",
   "economics": "Priced per advertising unit, such as installs or impressions. Advertiser reporting shows only spend, with no media-cost versus fee split or published advertiser fee [V1-S21; RS-S31]. Minimums: not disclosed.",
   "data_requirements": "The Reporting API shows SKAdNetwork installs with and without conversion values, and Accelerate names SKAdNetwork as a supported use case; 'SKAdNetwork Cortex models' were announced for late 2024. No SKAN 4 postback handling or AdAttributionKit support is documented [RS-S31; V1-S22; V1-S27]. An audience-ingestion API lets partners send audiences for targeting [RS-S30].",
   "measurable_controls": "Reporting API and dashboard CSV export, with publisher app ID, publisher name and ad format; aggregated, with no log-level export [RS-S31; RS-S35]. A Campaign Management API, in closed beta for select customers, creates user-acquisition campaigns and sets daily spend, goals, country targeting and creatives; spend changes are limited to three a day, within 50% up or down [RS-S29]. No advertiser block or allow list is documented [RS-S35].",
   "implementation_burden": "Mostly managed. Direct relies on Liftoff's account, creative, product and engineering teams [V1-S23]; the campaign API is a closed beta for select customers [RS-S29].",
   "proof_quality": [
    "Delivery Hero: Liftoff case study citing a 20% install uplift in Latin America from incrementality testing; test design not disclosed [V1-S26; RS-S36]",
    "Binance: Liftoff case study ('beats D7 ROAS goals by 30% in key markets'); narrative, no comparator [V1-S26]",
    "PEPr: Liftoff's internal, managed experimentation programme; no holdout method documented [RS-S37]"
   ],
   "switching_limits": "Not documented in the sources we read.",
   "risks": [
    "Liftoff reports revenue net, as an agent. That is an accounting presentation, not an advertiser-facing cost-transparency feature [V1-S21].",
    "Customer concentration: one customer made up about 10% of Q2 2026 revenue and 17% of receivables at 30 June 2026 [G2-S09].",
    "Control after the listing: the 10-Q refers to an unnamed primary private-equity sponsor; its remaining stake is not stated in the sources we read [V1-S21]."
   ],
   "poor_fit_use_cases": "Buyers who need a generally available self-serve campaign API (Liftoff's is a closed beta), log-level export, an advertiser block list, a documented lift-test method or a CTV-to-app product. None is documented [RS-S29; RS-S31; RS-S35; RS-S37; RS-S38]."
  },
  "unity": {
   "ownership": "Public (ticker U). Unity reports one segment; Grow (advertising) and Create (engine software) are revenue categories [G2-S08]. Its Vector machine-learning platform rolled out in Q1 2025 [AB-S04]. Unity merged with ironSource in November 2022 [AB-S06].",
   "financial_scale": "From filings: FY2025 revenue $1,849.6m; adjusted EBITDA $408.8m (22%), a whole-company figure that includes the engine business; GAAP net loss $401.5m [AB-S05]. Grow revenue was $1,228.2m in FY2025 and Create $621.4m [AB-S04]. Q2 2026 Grow revenue was $388.9m, up 35%, credited to the Vector-driven Unity Ad Network and partly offset by the older ironSource network [G2-S06; G2-S07]. Grow revenue is mostly booked net, and gross where Unity is the publisher [G2-S08].",
   "economics": "CPI billing for install, event and ROAS goals; CPM for creative testing, for iOS and as a fallback when there are no installs. No media-cost versus fee split or published fee [RS-S46; RS-S44]. Minimums: not disclosed.",
   "data_requirements": "Event and ROAS goals need post-install data from an MMP or server to server [RS-S40; RS-S41]. SKAdNetwork postbacks are forwarded to MMPs with SKAN 4.0 fields (source identifier, coarse value, postback sequence), and SKAN installs appear in the dashboard and Statistics API. No AdAttributionKit support is documented [V1-S35; RS-S43; RS-S44].",
   "implementation_burden": "Self-serve: a UA dashboard, bulk-management spreadsheets and the Advertising Management API [RS-S51; RS-S52]. Event and ROAS goals need MMP or server-to-server post-install data [RS-S40].",
   "proof_quality": [
    "Lihuhu, Qcplay: Unity case references on the Unity Ads product page, both gaming studios; no method disclosed [V1-S32]"
   ],
   "switching_limits": "Not documented in the sources we read.",
   "risks": [
    "The older ironSource Ad Network is in decline (11% of Grow revenue in Q4 2025) and has been sunset, and Unity sold Supersonic on 4 August 2026. Headline Grow revenue still includes both; Unity reports 'strategic' Grow revenue of $329.0m for Q2 2026, up 63% [AB-S05; G2-S07].",
    "Unity's non-gaming language in its 10-K describes the engine business or states an aim for ads; we found no named non-gaming case study for Unity Ads [V1-S29; V1-S32]."
   ],
   "poor_fit_use_cases": "Buyers who need re-engagement campaigns, a lift test, a CTV product or named non-gaming results: none is documented for Unity Ads [RS-S42; V1-S31; V1-S29]. Source apps are reported and can be blocked or bid on, but only through abstracted IDs; Unity says it cannot give out source IDs for specific apps [RS-S47; RS-S48]."
  },
  "mintegral-mobvista": {
   "ownership": "Mintegral is Mobvista's programmatic ad platform and is not listed separately. Mobvista is listed in Hong Kong (HKEX: 1860) [V1-S37; AB-S08].",
   "financial_scale": "From filings: Mobvista FY2025 revenue $2,046.7m, up 35.7%, of which Mintegral $1,960.9m. Revenue is booked gross, as principal, with a 21.2% gross margin; adjusted EBITDA was $190.9m, about 9% of gross revenue [AB-S08; FX1-S11]. Mobvista's own ad-tech net revenue after payments to traffic publishers was about $519m for 2025 [FX1-S11; FX4-S07]. H1 2026: group revenue $1,155.5m, up 23.2%; Mintegral $1,115.2m, up 24.3% [V1-S37].",
   "economics": "Billing types CPI, CPM, CPE and oCPI are documented. Target ROAS and Target CPE smart-bidding products made up more than 90% of Mintegral revenue in H1 2026. No media-cost versus fee split for advertisers [RS-S53; V1-S37]. Minimums: not disclosed.",
   "data_requirements": "Postback-based data sharing for retargeting; IDFA and GAID audience lists can be uploaded by API and included or excluded [V1-S40; RS-S55; RS-S56]. No SKAdNetwork or AdAttributionKit documentation appears in about 60 English advertiser pages or the 2026 interim report [RS-S57; V1-S37].",
   "measurable_controls": "Self-serve dashboard for setting ROAS goals [V1-S37]. Mintegral's Open API documentation describes creating campaigns and offers and updating budget, bid and status; some bid types and API access are gated by the account manager [RS-S63; RS-S53; RS-S64]. The reporting API returns aggregated data by offer, creative, sub-publisher, package and geography, and publishers can be allow- or block-listed by ID [RS-S60; RS-S61; RS-S62].",
   "implementation_burden": "Hybrid: self-serve dashboard and Open API, with some features gated by the account manager [V1-S37; RS-S63].",
   "proof_quality": [
    "Winedrops (e-commerce): Mintegral testimonial ('10X increase in trials'); no comparator [V1-S41]"
   ],
   "switching_limits": "Not documented in the sources we read.",
   "risks": [
    "Mobvista books revenue gross, as principal, so its headline revenue is not comparable with net-reporting peers such as AppLovin or Liftoff. On Mobvista's own net measure, after payments to traffic publishers, H1 2026 group net revenue was $308.5m against $1,146.6m of gross ad-tech revenue [FX1-S11; G2-S14; V1-S37]."
   ],
   "poor_fit_use_cases": "Buyers who need documented SKAdNetwork or AdAttributionKit handling, a lift test, log-level export or a CTV product: none is documented [RS-S57; RS-S60; V1-S39]."
  },
  "digital-turbine": {
   "financial_scale": "From filings: FY2026 (year to 31 March 2026) revenue $565.3m, up 15%: On Device Solutions $382.4m and App Growth Platform $185.7m, before a $2.9m intersegment elimination. Adjusted EBITDA $122m, about 22% of revenue [AB-S07; V1-S44]. Revenue mixes bases: the exchange marketplace is booked net, as agent, while brand, performance and on-device media are booked gross [G2-S12; FX1-S09].",
   "what_is_sold": "For advertisers: unified DT campaigns, including preloads and dynamic installs on phones, the DT DSP and the Offer Wall, whose self-serve 'Micro Bidding' sets bids by country and source app [AB-S07; V1-S46; RS-S67]. DT Exchange is the supply-side exchange where outside DSPs buy DT inventory [V1-S46]. On Device Solutions distributes apps through phone makers and carriers [AB-S07].",
   "buyer_and_app_fit": "Advertisers who want on-device reach (preloads) or offerwall acquisition billed on CPI, CPE or CPA; bid control by country and source app is self-serve on the Offer Wall only [V1-S46; RS-S77]. Publishers use DT for SDK monetization [AB-S07]. Not a fit for CTV or documented re-engagement campaigns [V1-S43; RS-S68].",
   "measurable_controls": "Offer Wall campaigns: self-serve Micro Bidding by country and source app, a Blocked Apps Tool, suppression of existing installers, and a GraphQL Advertiser Management API for bids, daily budgets and activation [V1-S46; RS-S73; RS-S77]. Unified campaigns: an aggregated Reporting API with supply source and placement type, but no self-serve or API control documented [RS-S71; RS-S72; RS-S75]. Impression-level price data reaches publishers through SDK callbacks, not buyers [V1-S46].",
   "implementation_burden": "Managed for on-device and unified campaigns; self-serve console and API for Offer Wall campaigns. MMP integration is needed for attribution and cost data [V1-S46; RS-S77].",
   "proof_quality": [
    "Magazine Luiza, Kenvue (Stayfree), Co-operative Group: DT case studies; narrative walkthroughs with no comparator [V1-S45]",
    "Playrix: DT case reporting that 97% of dynamic installs were incremental; no design, control or method described [RS-S74]",
    "Experimenting with Placements: DT documentation of a control-versus-variant comparison for placement changes; not a lift product for re-engagement [V1-S46]"
   ],
   "switching_limits": "Not documented in the sources we read.",
   "risks": [
    "The FY2026 10-K lists significant indebtedness as a risk factor; covenant terms are not covered in the sources we read [V1-S43].",
    "App Growth Platform is the smaller segment ($185.7m against $382.4m for On Device Solutions in FY2026). Most of the company's revenue comes from phone-maker and carrier distribution, a different role from its advertising products [V1-S44]."
   ],
   "poor_fit_use_cases": "Buyers who need documented re-engagement campaigns, a creative-testing method, log-level buyer reporting or a CTV product: none is documented [RS-S68; V1-S43; RS-S75]."
  },
  "kayzen": {
   "financial_scale": "Not disclosed. Kayzen files no accounts, and third-party aggregator estimates are not used.",
   "what_is_sold": "A mobile-first, self-serve programmatic DSP for user acquisition, retargeting and 'brand performance' campaigns, sold to apps, agencies, media buyers and e-commerce advertisers, with a managed option [V2-S02]. Documented bidding models: CPM, CPC, CPI, CPA on post-install events and CPA for retargeting; no ROAS or LTV bidding is documented [RS-S79; RS-S80].",
   "buyer_and_app_fit": "In-house UA teams and agencies that want direct, self-serve programmatic control with API access [V2-S02; V2-S04]. Named non-gaming cases include Greggs (published by an investor in Kayzen's parent) and Albertsons, Co-op and Maniko Nails [V2-S03; RS-S89].",
   "economics": "Published SaaS pricing: a fixed platform fee plus a 2.5% billing fee and overage, billed separately from media cost with no bid markup; the platform reports media costs and CPMs [RS-S87; V2-S02]. Kayzen is the only product in the panel that publishes a fee schedule. Minimums: not stated in the sources we read.",
   "data_requirements": "MMP postback integration, documented for AppsFlyer [V2-S05]. Retargeting audiences are streamed from the MMP or sent through the Audience API, and can be used as allow or suppression lists [RS-S81; RS-S82; V2-S04]. On iOS, 'SKAN campaigns' and the AppsFlyer 'Share SKAN transaction id' setting are referenced; no SKAN 4 or AdAttributionKit handling is documented [V2-S05; RS-S83].",
   "supply_dependencies": "In-app and mobile-web inventory across 'hundreds of thousands' of publisher apps and sites [V2-S02]. CTV campaigns are also documented, with installs attributed through AppsFlyer's probabilistic cross-platform view-through matching (guide dated September 2026) [RS-S88].",
   "proof_quality": "Named cases (Greggs, published by an investor in Kayzen's parent, plus Albertsons, Co-op and Maniko Nails) are vendor or investor case studies with no comparator or design disclosed; no independent measurement [V2-S03; RS-S89].",
   "switching_limits": "Not documented in the sources we read.",
   "risks": "The ownership chain (Ioniq Group, with Shackleton's Victoria Fund as investor since 2024) rests on one investor page, not a filing or Kayzen's own statement [V2-S03]. No conflicts of interest identified.",
   "poor_fit_use_cases": "Buyers who need a documented lift or holdout test (Kayzen mentions measuring retargeting incrementality with non-attributed events, but documents no design) or ROAS and LTV bidding (not documented) [V2-S04; RS-S79]. Kayzen's CTV campaigns rely on probabilistic cross-device matching with no causal test [RS-S88]."
  },
  "smadex": {
   "ownership": "Owned by Entravision Communications (NYSE: EVC) and reported in its Advertising Technology & Services segment [V2-S08]. The acquisition date is not confirmed in the sources we read.",
   "what_is_sold": "A managed-service DSP. Entravision says Smadex teams 'act as an extension of our client's marketing team', configuring bidding parameters and fraud-prevention protocols, for mobile user acquisition, retargeting and Connected TV performance campaigns; it processes about 500 billion bid requests a day [V2-S08].",
   "economics": "Clients pay for outcomes such as installs or in-app purchases, and Smadex teams share media clearing prices and budget allocation; one customer story cites a 'transparent dCPM' model. No published fee schedule or minimum spend [V2-S08; RS-S95].",
   "data_requirements": "Models use advertisers' post-install events, and retargeting uses advertisers' first-party data with match-rate analysis [V2-S08; RS-S91]. No SKAdNetwork, AdAttributionKit or MMP setup documentation was found, and there is no public help center [V2-S08; RS-S92].",
   "measurable_controls": "Smadex teams run the campaigns. Clients receive data on where ads ran and on media clearing prices, and the brand-safety policy provides client allow lists and publisher block lists [V2-S08; RS-S94]. No reporting API, scheduled export or log specification is documented [V2-S08].",
   "proof_quality": "Named customer stories (for example Foodpanda, Talabat, Cabify, Babbel and Exness) are published by Smadex, with no design or comparator disclosed; no third-party study was found [RS-S97; RS-S98].",
   "switching_limits": "Not documented in the sources we read."
  },
  "remerge": {
   "ownership": "Private. Ownership is not disclosed in the sources we read, and no filing, funding round or acquisition was found. AppsFlyer named Remerge a Premier Partner on 13 May 2025, a partner tier, not an ownership fact [V2-S06].",
   "economics": "CPM only: 'Remerge exclusively offers a CPM pricing model'. Reported cost is the campaign fee paid by the client, with no media-cost versus margin split [RS-S100; RS-S99].",
   "data_requirements": "Retargeting is built on MMP event forwarding and MMP audience segments; user lists can exclude users or hold them out as a control [RS-S101; RS-S102; RS-S103]. Remerge states compatibility with SKAdNetwork 2.0 to 4.0 and forwards install-validation postbacks to the MMP; SKAdNetwork is not used for retargeting, and no AdAttributionKit support is documented [RS-S104].",
   "supply_dependencies": "Not documented in the sources we read; no exchange or SDK detail is given.",
   "measurable_controls": "Managed: Remerge's team builds campaigns after an insertion order, and clients get a reports dashboard and a Reporting API (aggregated JSON by hour or day, six-month retention) [RS-S101; RS-S111; RS-S108]. Its incrementality page presents Ghost Bids (always-on, for retargeting) and Causal Impact (without device IDs, using sub-market econometrics, for installs and re-engagement); intent-to-treat and PSA designs appear only in linked explainers [G1-S05]. The Reporting API has no publisher dimension; publisher breakdowns come through the MMP [RS-S107; RS-S108].",
   "proof_quality": "Four case summaries on Remerge's incrementality page give no quantified lift: Miniclip retargeting, checked by Miniclip's own distribution matching, and Socialpoint, PhotoSi and HungerStation user acquisition [G1-S05]. AppsFlyer's Performance Marketing Index ranks Remerge highly for retargeting; that is a vendor-cited panel ranking, not a causal result [V2-S06].",
   "switching_limits": "Not documented in the sources we read.",
   "risks": "Managed model: buyers rely on Remerge's team for setup and on its own uplift reporting; we found no independent audit of results [RS-S101; G1-S05].",
   "poor_fit_use_cases": "Buyers who want self-serve control (Remerge is managed) or whose main job is large-scale user acquisition: Remerge positions itself on retargeting, though its incrementality page includes user-acquisition cases [RS-S101; V2-S06; G1-S05]. No CTV product was found [RS-S112]."
  },
  "jampp": {
   "ownership": "Wholly owned by Affle. The 100% acquisition was announced on 9 June 2021 and completed on 1 July 2021; the price was not disclosed [V2-S23]. Affle owns at least four app-marketing brands: Jampp, YouAppi, RevX and mediasmart [FX1-S20; FX1-S19; V2-S31; V2-S30].",
   "financial_scale": "Not disclosed. Jampp is not broken out separately in the Affle sources we read.",
   "buyer_and_app_fit": "Performance app marketers who want a self-serve dashboard alongside managed creative production. Jampp advertises always-on lift measurement with 'Ghost Bids' for acquisition and retargeting, free from day one, but does not document the method [V2-S22].",
   "proof_quality": "Jampp's blog reports an 86% rise in new riders, 122% more rides and a 30% campaign lift for FREENOW, and a 92% conversion lift for Wallapop, under its always-on Ghost Bids measurement; it gives no period, baseline or uncertainty [G1-S06]. The lift product itself is advertised without a documented method [V2-S22]. Other named non-gaming cases (Wallapop, Instacart, Centauro, CashNow, Fetch) are Jampp's own case studies [RS-S121; RS-S122].",
   "switching_limits": "Not documented in the sources we read.",
   "risks": "Jampp is one of at least four Affle app-marketing brands, with YouAppi, RevX and mediasmart; Jampp CTV runs on mediasmart. None of the materials we read says whether data or products are shared across the portfolio [FX1-S19; V2-S31; V2-S30; V2-S21]."
  },
  "verve-dataseat": {
   "ownership": "Public: Verve Group Media SE, formerly Verve Group SE and, before June 2024, MGI – Media and Games Invest SE (ticker VER; listed in Stockholm and Frankfurt) [V2-S10; FX1-S13]. Its 5 June 2026 AGM approved moving the registered office from Stockholm to Dublin; the move had not taken effect at the cutoff and was expected on 2 October 2026 [FX1-S13; FX1-S14]. The author was an executive at Verve Group from 2022 to 2024; Dataseat was scored under exactly the same rules as every other product.",
   "financial_scale": "Group figures only: FY2025 revenue €550.9m and adjusted EBITDA €134.4m, about 24% of reported revenue and 22% of like-for-like revenue; some revenue moved from net to gross recognition in Q3 2025 [FX1-S12; AB-S09]. No Dataseat revenue is disclosed in the sources we read.",
   "buyer_and_app_fit": "Buyers who want SKAN-based iOS optimization and CTV-to-app campaigns [V2-S13]. Dataseat can be run in self-service mode or as a managed service [RS-S127]. It is the mobile DSP of an omnichannel group whose other businesses include supply-side units such as Smaato and Hybid [V2-S13].",
   "economics": "Dataseat says it charges 'a flat rate on your media spend, with no hidden costs', so the fee is separate from media; the rate is not published, and no minimum is stated [RS-S125].",
   "supply_dependencies": "Buyers can choose SSPs and publishers through inventory discovery [RS-S127]. Whether Dataseat buys the group's own Smaato and Hybid SDK supply is not confirmed in the sources we read.",
   "measurable_controls": "Self-service mode or managed service covering setup and optimization [RS-S127]. No campaign-management API, reporting API or log specification is published; the site promises data 'at any level' without a documented report schema or block-list control [RS-S125; RS-S126; RS-S127].",
   "implementation_burden": "Self-service or managed [RS-S127]. Sales run through a contact form, and we found no public help center or API documentation [V2-S13; RS-S125].",
   "proof_quality": "Two named non-gaming cases, both published by Verve: LinkedIn (app activations) and OTTO (a ROAS-focused SKAN campaign with a rebuilt conversion schema). Neither states a comparator, sample or independent check [RS-S126; RS-S123].",
   "switching_limits": "Not documented in the sources we read.",
   "risks": "Structural: Verve sells supply through its exchange and SDKs and also buys media through Dataseat, a potential conflict of interest. No allegation of misconduct was found [V2-S13]."
  },
  "V3-Meta-AAC": {
   "what_is_sold": "Advantage+ app campaigns: automated app-install and app-event campaigns, now created on the APP_INSTALLS objective, with Advantage+ placements applied automatically across Meta's apps and Audience Network. Setup targeting is limited to operating system, country and language; Meta automates the rest, along with placement and budget, and a campaign can use up to 50 creative combinations [FX1-S23; RS-S128; RS-S129]. People who installed or opened the app in the past 90 days are excluded [V3-S05].",
   "economics": "CPM-based auction: the advertiser sets a budget and an optimization event, with bid strategies including a minimum-ROAS option; no separate platform fee is disclosed [RS-S128; RS-S129]. Minimums: not stated in the sources we read.",
   "data_requirements": "Meta SDK or MMP-forwarded app events. On iOS, SKAdNetwork campaigns and Aggregated Event Measurement are documented; SKAdNetwork 4 and AdAttributionKit specifics were not found in the documents we read [RS-S128; RS-S130; V3-S05].",
   "supply_dependencies": "Meta's own apps plus Audience Network, with placements applied automatically. Reports break results down by placement surface, such as Feed or Audience Network, but not by publisher app [FX1-S23].",
   "implementation_burden": "Low to moderate: SDK or MMP event setup, plus SKAdNetwork campaign setup for iOS; the rest is largely automated [RS-S128].",
   "proof_quality": "Not assessed: we reviewed platform documentation only, not case studies. Meta's Conversion Lift offers a randomized test through a Meta representative [V3-S06].",
   "switching_limits": "Not assessed in this research.",
   "risks": "No breakdown by publisher app is described, so Audience Network delivery cannot be checked app by app. Placement and budget allocation are left to Meta's automation [FX1-S23]. The lift test runs through a Meta representative, not self-service [V3-S06].",
   "poor_fit_use_cases": "Advertisers who need publisher-app-level review of where ads ran, or who want to re-engage existing users: Advantage+ app campaigns exclude people who installed or opened the app in the past 90 days [FX1-S23; V3-S05]."
  },
  "V3-Google-AppCampaigns": {
   "economics": "Auction-based. Bid strategies: target CPI, target CPA, target cost per pre-registration, Maximize conversions, Maximize conversion value and target ROAS [V3-S03; RS-S133]. Target ROAS needs at least 10 conversions a day, or 300 in 30 days, and the events bid on should come from the Firebase SDK [MAIN-S03]. Google warns that edits before the first 100 conversions may disrupt learning [EF-S03]. No spend minimum is stated.",
   "data_requirements": "Firebase/GA4 SDK or a certified App Attribution Partner; target ROAS bidding expects Firebase-sourced events [MAIN-S03]. On iOS, a SKAdNetwork report and API fields (installs, fine conversion value) are documented; AdAttributionKit is not mentioned in the pages we read [RS-S136; FX1-S24].",
   "supply_dependencies": "Google's own properties and partner inventory across Search, YouTube, Google Play, Discover, the Display Network and AdMob apps [RS-S140]. A placement report names the apps and publishers, websites and videos that showed ads, with impressions only; Google-owned inventory is grouped and low-volume placements fold into 'Total: other' [OA1-S01].",
   "measurable_controls": "Goal type, budget, bid strategy, asset groups (text, image, video, HTML5), languages and locations. No placement selection, and blocking app inventory for App campaigns is not documented. The placement report gives impressions only, not results by placement [OA1-S01; V3-S11].",
   "proof_quality": "Not assessed: we reviewed platform documentation only. Google's Conversion Lift offers user- or geo-based randomized tests through an account representative; since August 2026 the Ads API can read lift results [V3-S07; G3-S20].",
   "switching_limits": "Not assessed in this research.",
   "risks": "Placement visibility is partial: the placement report gives impressions only, not results by placement, and groups Google-owned and low-volume inventory, which limits brand-safety and channel-mix analysis [OA1-S01]."
  },
  "V3-TikTok-SmartPlus": {
   "what_is_sold": "AI-automated app-install and app-event campaigns, with automated creative rotation and budget shifting toward the best-performing creative. Smart+ supports install (MAI), in-app event (AEO) and value (VBO) goals, with VBO Android-only in Smart+; TikTok's standard app campaigns offer VBO on Android and iOS [V3-S01; OA1-S13].",
   "buyer_and_app_fit": "iOS and Android app advertisers who can send app events. Value bidding needs a purchase event with value in the last 365 days, or a real-time ad-revenue postback through an MMP [OA1-S14]. In Smart+, iOS bidding is Maximize Results only [V3-S01].",
   "economics": "Auction-based; the advertiser supplies KPIs, creative, geography and language. Minimums are not stated in the sources we read; the Conversion Lift Study needs a minimum spend whose amount is not disclosed [V3-S09].",
   "supply_dependencies": "Automatic placements across TikTok, Lemon8 and, on Android, Pangle; on iOS, TikTok and Lemon8 only. Smart+ does not support manual placement selection [V3-S01; RS-S141].",
   "proof_quality": "Not assessed: we opened no case studies. TikTok's Conversion Lift Study offers a randomized test as an exclusive managed service [V3-S09].",
   "switching_limits": "Not assessed in this research.",
   "risks": "No placement or Pangle publisher reporting is documented for Smart+, and manual placement choice is not supported [V3-S01; RS-S141]. Value bidding is Android-only inside Smart+; iOS advertisers need standard app campaigns for it, and TikTok's pages are not fully consistent on this [OA1-S13; OA1-S14].",
   "poor_fit_use_cases": "iOS advertisers who want value bidding inside Smart+ (Android-only there; standard app campaigns support iOS), and advertisers who need placement control or publisher-level reporting [V3-S01; OA1-S13]."
  },
  "V3-Apple-Ads": {
   "roles": [
    "owned-inventory ad platform (App Store: Today tab, Search tab, search results, product pages) [RS-S149]"
   ],
   "what_is_sold": "Ads on Apple's own App Store inventory in four placements (Today tab, Search tab, search results and product pages), targeted by keyword and audience [RS-S149; RS-S147]. Apple Ads has its own attribution interface, AdServices: the app's token must be exchanged with Apple's server within 24 hours, and Apple credits a tap up to 30 days or a view up to 24 hours before the download [D-S20; D-S21; C-S10]. It also registered with AdAttributionKit in April 2025, through SKAdNetwork versions 1 to 3 for click-throughs only [V3-S02; RS-S151].",
   "economics": "Auction: maximum cost-per-tap bids, or Maximize Conversions toward a target cost per tap-through install, with optional CPA caps; actual CPA can exceed the cap [RS-S146; EF-S12]. Minimums: not stated in the sources we read.",
   "measurable_controls": "Keyword bids and negative keywords; audience settings for new or returning users, based on Apple's own download history; four named placements reported per campaign and ad, with keyword and search-term reports; and a Campaign Management API for campaigns, ad groups, keywords and bids [RS-S146; RS-S147; RS-S149; RS-S150; V3-S12; RS-S153].",
   "proof_quality": "Not assessed: we reviewed platform documentation only. No incrementality or lift-test offering appears in the Apple Ads help pages we read [RS-S151; RS-S152].",
   "switching_limits": "Not assessed in this research.",
   "risks": "Apple Ads has a direct attribution interface that other networks lack, so its results are not measured on the same basis as other iOS channels; that difference says nothing about which channel works better [RS-S151; OA5-S01]. From September 2026, campaigns using age or gender targeting get no attribution through AdServices [C-S10]. No post-install event or value optimization, and no lift-test product, is documented [RS-S146; RS-S151]."
  },
  "V3-Amazon-DSP-App": {
   "buyer_and_app_fit": "Android and Fire TV/tablet app advertisers in the US, Canada, Mexico and Brazil, per Amazon's February 2024 announcement, which promised expansion [V3-S10]. By September 2026 AppsFlyer described a closed Amazon DSP iOS test using SKAdNetwork; we found no Amazon page stating current iOS availability [OA1-S17].",
   "proof_quality": "Not assessed: we reviewed Amazon's announcement and product pages only. Amazon DSP materials mention brand-lift and offline sales-lift studies; no app-install lift option is documented [V3-S04].",
   "switching_limits": "Not assessed in this research.",
   "risks": "iOS status is unclear: Amazon's own pages describe app-event tooling for Android and Fire devices, and only a third party, AppsFlyer, describes a closed iOS test [V3-S10; OA1-S17]. Amazon Marketing Cloud returns aggregated, anonymous outputs only, and DSP advertisers must request access [V3-S13].",
   "poor_fit_use_cases": "iOS-only app advertisers, until Amazon documents iOS support for events manager; only a closed test is described, by a third party [V3-S10; OA1-S17]. Advertisers below the $50,000 managed-service minimum who need full service [V3-S04]."
  }
 },
 "benchmark": {
  "Google App Campaigns (incl. AI Max)": {
   "os_measurement": "iOS measurement combines modelled conversions, data from App Attribution Partners and a SKAdNetwork report; the Ads API exposes SKAdNetwork installs, fine conversion value and user type. AdAttributionKit is not mentioned in the pages we read [RS-S136; FX1-S24].",
   "reporting_export": "The Google Ads API returns aggregated App-campaign reporting at campaign, ad-group and asset level, including SKAdNetwork segments, but has no placement view. The placement report (impressions only) is built in Google Ads' Report editor. No impression-level export [V3-S11; FX1-S24; OA1-S01]."
  },
  "Apple Ads (Apple Search Ads)": {
   "os_measurement": "AdServices: the app's attribution token must be exchanged with Apple's server within 24 hours, and Apple credits a tap up to 30 days or a view up to 24 hours before the download (view-through since March 2025). From September 2026, campaigns using age or gender targeting get no attribution [D-S20; D-S21; C-S10]. Apple Ads registered with AdAttributionKit on 10 April 2025, through SKAdNetwork versions 1 to 3 for click-throughs only [V3-S02; RS-S151].",
   "reporting_export": "The Apple Ads Platform API pulls reports programmatically; reports cover the four placements per campaign and ad, plus keywords and search terms, as aggregated metrics. No impression-level export [V3-S12; RS-S153; RS-S150].",
   "experiments": "No incrementality or lift-test offering appears in the Apple Ads help pages we read, unlike Meta, Google and TikTok [RS-S151; RS-S152]."
  },
  "Amazon DSP (app promotion)": {
   "os_measurement": "Amazon's February 2024 announcement scopes events manager to Android and Fire TV/tablet devices, and no Amazon page documents SKAdNetwork or AdAttributionKit support. AppsFlyer (September 2026) describes a closed Amazon DSP iOS test using SKAdNetwork [V3-S10; OA1-S17].",
   "transparency": "Amazon's DSP page cites 'transparent reporting', an inventory hub and deals, but no site- or app-level reporting or block and allow lists are documented in the pages we read [V3-S04].",
   "reporting_export": "Amazon Marketing Cloud lets advertisers query hundreds of event-level fields (ad-attributed impressions, clicks, conversions) in a clean room, but outputs are aggregated and anonymous only. DSP advertisers request access through their Ad Tech Account Executive [V3-S13].",
   "experiments": "Amazon DSP materials mention brand-lift studies, offline sales-lift insights and marketing mix modelling for eligible advertisers; no app-install lift option is documented in the pages we read [V3-S04]."
  }
 },
 "changes": [
  {
   "vendor_id": "applovin",
   "field": "ownership",
   "reason": "conflict",
   "evidence": "COR-38; AB-F03 (FX1: $430.6m cash + shares valued $285.0m); OA2 item 20; OA4 ref-24; AB-F04; AB-F24; ch.2 'market keeps reshaping'"
  },
  {
   "vendor_id": "applovin",
   "field": "financial_scale",
   "reason": "conflict",
   "evidence": "AB-F01, AB-F02 (FX1: 10-K $5,480,717k; adj. EBITDA $4,512,452k); MS-09; G2-F01, G2-F02, G2-F03; IJ-F23; ch.2 table"
  },
  {
   "vendor_id": "applovin",
   "field": "buyer_and_app_fit",
   "reason": "process-language",
   "evidence": "COR-87; OA1 item 11 (V1-S07); G2-F04; final D5 rationale (V1-S05, RS-S06); ch.5"
  },
  {
   "vendor_id": "applovin",
   "field": "data_requirements",
   "reason": "process-language",
   "evidence": "final D3 rationale (RS-S02, V1-S02)"
  },
  {
   "vendor_id": "applovin",
   "field": "measurable_controls",
   "reason": "conflict",
   "evidence": "V1-F04 (FX4: Campaign Management API also exists for app promotion, not web only); final D5, D8, D9 (RS-S01, RS-S06)"
  },
  {
   "vendor_id": "applovin",
   "field": "implementation_burden",
   "reason": "conflict",
   "evidence": "IJ-F23 (OA4); COR-94; OA4 item 77; OA4-S06; ch.8 commerce section"
  },
  {
   "vendor_id": "applovin",
   "field": "proof_quality",
   "reason": "formatting",
   "evidence": "R2-01 (raw dict entries); V1-S03, V1-S09, V1-S04; second-scorer D7 rationale (web/e-commerce only)"
  },
  {
   "vendor_id": "applovin",
   "field": "counterevidence_note",
   "reason": "unsupported",
   "evidence": "R2-01 (Haus/BlueAlpha/'Cann' write-ups never opened, not in source register); G3-F08, G3-F10 (FX5); ch.2 allegations paragraph"
  },
  {
   "vendor_id": "applovin",
   "field": "switching_limits",
   "reason": "process-language",
   "evidence": "KL-F11; ch.11 'What a buyer can take away'"
  },
  {
   "vendor_id": "applovin",
   "field": "risks",
   "reason": "unsupported",
   "evidence": "R2-01 (third-party geo-holdout 'minimal lift' assertion removed: no identifiable independent study); V1-F01 (FX4, replaces '~70% unverified'); COR-19/AB-F24 (Adjust assurance); G3-F08, G3-F13, G3-F14 (FX5)"
  },
  {
   "vendor_id": "applovin",
   "field": "poor_fit_use_cases",
   "reason": "conflict",
   "evidence": "final scores D5=2, D6=1, D7=2 (managed), D2 n/e, D3=1; text said 'all scored n/e'"
  },
  {
   "vendor_id": "moloco",
   "field": "economics",
   "reason": "unsupported",
   "evidence": "final D6 rationale (RS-S18, RS-S19); '$1K/day CTV minimum' came from an unopened search result with no source id"
  },
  {
   "vendor_id": "moloco",
   "field": "supply_dependencies",
   "reason": "unsupported",
   "evidence": "'Owned/integrated Moloco SDK supply' has no source; final D5/D10 second-scorer rationale (RS-S09, RS-S24); REDTEAM RT-02"
  },
  {
   "vendor_id": "moloco",
   "field": "proof_quality",
   "reason": "formatting",
   "evidence": "R2-01 (raw dict entries); V1-S11; final D7 rationale (RS-S20: ghost-bid RCT); IJ-F19 (FX3)"
  },
  {
   "vendor_id": "moloco",
   "field": "switching_limits",
   "reason": "process-language",
   "evidence": "final D8 second-scorer rationale (V1-S16, RS-S21)"
  },
  {
   "vendor_id": "moloco",
   "field": "risks",
   "reason": "unsupported",
   "evidence": "V1-F03 (FX4: re-engagement page names no method); COR-103; final D7 (RS-S20); '253%-1609%' range came from unopened search results; ch.4"
  },
  {
   "vendor_id": "liftoff",
   "field": "ownership",
   "reason": "process-language",
   "evidence": "AB-F15 (FX1: ~$437m was the base offering only); G2-F08 (FX4); COR-98; OA2 item 20; unverified Blackstone-control lead dropped"
  },
  {
   "vendor_id": "liftoff",
   "field": "financial_scale",
   "reason": "conflict",
   "evidence": "X-LIFTOFF-EBITDA (FX4: adj. EBITDA $374.4m, 55%); AB-F14; COR-99; G2-F09, G2-F10; ch.2 table"
  },
  {
   "vendor_id": "liftoff",
   "field": "what_is_sold",
   "reason": "conflict",
   "evidence": "final D6 rationale (priced per advertising unit, not 'billed to' KPIs); final D1 (V1-S22, RS-S29); EF-F08"
  },
  {
   "vendor_id": "liftoff",
   "field": "economics",
   "reason": "process-language",
   "evidence": "final D6 rationale (V1-S21, RS-S31)"
  },
  {
   "vendor_id": "liftoff",
   "field": "data_requirements",
   "reason": "process-language",
   "evidence": "final D3 and second-scorer D2 rationale (RS-S31, RS-S30); V1-F04 (FX4)"
  },
  {
   "vendor_id": "liftoff",
   "field": "measurable_controls",
   "reason": "conflict",
   "evidence": "final D5=2, D8=2, D9=3 beta (RS-S29, RS-S31, RS-S35); text said nothing could be opened"
  },
  {
   "vendor_id": "liftoff",
   "field": "implementation_burden",
   "reason": "process-language",
   "evidence": "V1-S23; final D9 (RS-S29); RESCORE service-model note"
  },
  {
   "vendor_id": "liftoff",
   "field": "proof_quality",
   "reason": "formatting",
   "evidence": "R2-01 (raw dict entries); final D7 rationale (RS-S36, RS-S37)"
  },
  {
   "vendor_id": "liftoff",
   "field": "switching_limits",
   "reason": "process-language",
   "evidence": "R2-01 (c)"
  },
  {
   "vendor_id": "liftoff",
   "field": "risks",
   "reason": "process-language",
   "evidence": "G2-F10, G2-F11 (FX4); V1-S21 reliability note; unverified Blackstone lead replaced"
  },
  {
   "vendor_id": "liftoff",
   "field": "poor_fit_use_cases",
   "reason": "conflict",
   "evidence": "final D5=2, D8=2, D9=3 beta, D7=1, D10 n/e; text said 'all scored n/e'"
  },
  {
   "vendor_id": "unity",
   "field": "ownership",
   "reason": "conflict",
   "evidence": "X-UNITY-GROW-MARGIN (FX4: one reportable segment); OA4 S2-Unity-FY2025 and S2-Unity-Q2-2026; COR-98; AB-F17"
  },
  {
   "vendor_id": "unity",
   "field": "financial_scale",
   "reason": "conflict",
   "evidence": "AB-F05 (FX1: 10-K gives full-year Grow/Create split); AB-F07; X-UNITY-GROW-MARGIN; G2-F06, G2-F14; COR-54; ch.2"
  },
  {
   "vendor_id": "unity",
   "field": "economics",
   "reason": "conflict",
   "evidence": "final D6 rationale (billing model is documented: RS-S46, RS-S44)"
  },
  {
   "vendor_id": "unity",
   "field": "data_requirements",
   "reason": "process-language",
   "evidence": "second-scorer D1 and D3 rationale in scores_final (RS-S40, RS-S41, RS-S43, RS-S44)"
  },
  {
   "vendor_id": "unity",
   "field": "implementation_burden",
   "reason": "process-language",
   "evidence": "second-scorer D9 and D1 rationale (RS-S51, RS-S52, RS-S40)"
  },
  {
   "vendor_id": "unity",
   "field": "proof_quality",
   "reason": "formatting",
   "evidence": "R2-01 (raw dict entry); V1-S32"
  },
  {
   "vendor_id": "unity",
   "field": "switching_limits",
   "reason": "process-language",
   "evidence": "R2-01 (c)"
  },
  {
   "vendor_id": "unity",
   "field": "risks",
   "reason": "conflict",
   "evidence": "AB-F06; G2-F06 (FX4: sunset ironSource Ads Network, Supersonic sold 4 Aug 2026); unconfirmed 'April 2026' seed date dropped; final D11 rationale"
  },
  {
   "vendor_id": "unity",
   "field": "poor_fit_use_cases",
   "reason": "conflict",
   "evidence": "final D5=2 and D11=1 (not n/e); final D2, D7, D10 n/e"
  },
  {
   "vendor_id": "mintegral-mobvista",
   "field": "ownership",
   "reason": "unsupported",
   "evidence": "Bain Capital sale-interest lead never sourced (seed-file only); V1-S37"
  },
  {
   "vendor_id": "mintegral-mobvista",
   "field": "financial_scale",
   "reason": "conflict",
   "evidence": "COR-34; AB-F09 (FX1: gross, principal); G2-F15 (FX4); V1-F02 (FX4); OA4 S2-Mobvista; ch.2 table"
  },
  {
   "vendor_id": "mintegral-mobvista",
   "field": "economics",
   "reason": "conflict",
   "evidence": "final D6 rationale (billing types documented, not 'implied'); V1-F02"
  },
  {
   "vendor_id": "mintegral-mobvista",
   "field": "data_requirements",
   "reason": "process-language",
   "evidence": "second-scorer D2 and D3 rationale (RS-S55, RS-S56, RS-S57)"
  },
  {
   "vendor_id": "mintegral-mobvista",
   "field": "measurable_controls",
   "reason": "conflict",
   "evidence": "final D5=3 and D8=2 (RS-S60..S62); second-scorer D9 (RS-S63, RS-S64); text said no reporting API or block list"
  },
  {
   "vendor_id": "mintegral-mobvista",
   "field": "implementation_burden",
   "reason": "process-language",
   "evidence": "RESCORE service-model note; RS-S63"
  },
  {
   "vendor_id": "mintegral-mobvista",
   "field": "proof_quality",
   "reason": "formatting",
   "evidence": "R2-01 (raw dict entry); V1-S41"
  },
  {
   "vendor_id": "mintegral-mobvista",
   "field": "switching_limits",
   "reason": "process-language",
   "evidence": "R2-01 (c)"
  },
  {
   "vendor_id": "mintegral-mobvista",
   "field": "risks",
   "reason": "conflict",
   "evidence": "COR-34; G2-F15; OA4 S2-Mobvista (net revenue is company-defined); Bain Capital lead removed as unsupported"
  },
  {
   "vendor_id": "mintegral-mobvista",
   "field": "poor_fit_use_cases",
   "reason": "conflict",
   "evidence": "final D5=3 and D8=2 contradict 'no reporting API or block lists (all n/e)'"
  },
  {
   "vendor_id": "digital-turbine",
   "field": "financial_scale",
   "reason": "conflict",
   "evidence": "AB-F08, G2-F12, G2-F13 (FX1/FX4: mixed gross/net); COR-98 ($122m); OA4 S2-DigitalTurbine; ch.2 table"
  },
  {
   "vendor_id": "digital-turbine",
   "field": "what_is_sold",
   "reason": "conflict",
   "evidence": "AB-F26 (FX1: AGP = DT DSP, Offer Wall, brand campaigns + SDK monetization); RESCORE note (DT Exchange is supply-side); second-scorer D9 (Micro Bidding Offer Wall only)"
  },
  {
   "vendor_id": "digital-turbine",
   "field": "buyer_and_app_fit",
   "reason": "conflict",
   "evidence": "second-scorer D5/D9 (self-serve controls Offer Wall only); D1 second (no ROAS goal setup documented for unified campaigns); final D2=1, D10 n/e"
  },
  {
   "vendor_id": "digital-turbine",
   "field": "measurable_controls",
   "reason": "conflict",
   "evidence": "second-scorer D5, D8, D9 rationale in scores_final (RS-S71..S77): controls apply to Offer Wall only"
  },
  {
   "vendor_id": "digital-turbine",
   "field": "implementation_burden",
   "reason": "conflict",
   "evidence": "RESCORE service-model note; RS-S77"
  },
  {
   "vendor_id": "digital-turbine",
   "field": "proof_quality",
   "reason": "formatting",
   "evidence": "R2-01 (raw dict entries); V1-S45, V1-S46; second-scorer D7 (RS-S74)"
  },
  {
   "vendor_id": "digital-turbine",
   "field": "switching_limits",
   "reason": "process-language",
   "evidence": "R2-01 (c)"
  },
  {
   "vendor_id": "digital-turbine",
   "field": "risks",
   "reason": "process-language",
   "evidence": "R2-01 (c); V1-S43, V1-S44"
  },
  {
   "vendor_id": "digital-turbine",
   "field": "poor_fit_use_cases",
   "reason": "conflict",
   "evidence": "final D2=1 and D8=2 (not n/e); text said 'all scored n/e'"
  },
  {
   "vendor_id": "kayzen",
   "field": "financial_scale",
   "reason": "process-language",
   "evidence": "R2-01 (c)"
  },
  {
   "vendor_id": "kayzen",
   "field": "what_is_sold",
   "reason": "unsupported",
   "evidence": "'kAI Suite' bid-shading claim was seed-only; final/second D1 rationale (RS-S79, RS-S80)"
  },
  {
   "vendor_id": "kayzen",
   "field": "buyer_and_app_fit",
   "reason": "process-language",
   "evidence": "second-scorer D11 rationale (RS-S89); V2-S03"
  },
  {
   "vendor_id": "kayzen",
   "field": "economics",
   "reason": "conflict",
   "evidence": "final D6=3 (RS-S87); ch.9 'only one product publishes a fee schedule'"
  },
  {
   "vendor_id": "kayzen",
   "field": "data_requirements",
   "reason": "conflict",
   "evidence": "final D2=2 (suppression lists documented: RS-S81, RS-S82); final D3 (RS-S83)"
  },
  {
   "vendor_id": "kayzen",
   "field": "supply_dependencies",
   "reason": "conflict",
   "evidence": "final D10=2 (RS-S88) contradicts 'no CTV inventory found or claimed'"
  },
  {
   "vendor_id": "kayzen",
   "field": "proof_quality",
   "reason": "conflict",
   "evidence": "second-scorer D11 (RS-S89) contradicts 'single named case'"
  },
  {
   "vendor_id": "kayzen",
   "field": "switching_limits",
   "reason": "process-language",
   "evidence": "R2-01 (c)"
  },
  {
   "vendor_id": "kayzen",
   "field": "risks",
   "reason": "process-language",
   "evidence": "R2-01 (c); V2-S03"
  },
  {
   "vendor_id": "kayzen",
   "field": "poor_fit_use_cases",
   "reason": "conflict",
   "evidence": "final D10=2 (CTV exists); final D7=1 (V2-S04)"
  },
  {
   "vendor_id": "smadex",
   "field": "ownership",
   "reason": "process-language",
   "evidence": "V2-F02 (FX1); seed-carried 2018/2024-25 history not verified"
  },
  {
   "vendor_id": "smadex",
   "field": "what_is_sold",
   "reason": "conflict",
   "evidence": "V2-F02 (FX1: 'Fully' is the researcher's word, not the filing's)"
  },
  {
   "vendor_id": "smadex",
   "field": "economics",
   "reason": "conflict",
   "evidence": "final D6=2 (V2-S08, RS-S95); V2-F02 (FX1: shares placement, clearing-price and budget data)"
  },
  {
   "vendor_id": "smadex",
   "field": "data_requirements",
   "reason": "process-language",
   "evidence": "second-scorer D1, D2, D3 rationale (RS-S91, RS-S92)"
  },
  {
   "vendor_id": "smadex",
   "field": "measurable_controls",
   "reason": "conflict",
   "evidence": "final D5=2 (V2-S08, RS-S94); final D8 n/e; V2-F02"
  },
  {
   "vendor_id": "smadex",
   "field": "proof_quality",
   "reason": "process-language",
   "evidence": "second-scorer D11 (RS-S97, RS-S98); WebFetch/JS-rendering note removed"
  },
  {
   "vendor_id": "smadex",
   "field": "switching_limits",
   "reason": "process-language",
   "evidence": "R2-01 (c)"
  },
  {
   "vendor_id": "remerge",
   "field": "ownership",
   "reason": "process-language",
   "evidence": "R2-01 (c); 'founder-led per prior public record' unverified"
  },
  {
   "vendor_id": "remerge",
   "field": "economics",
   "reason": "conflict",
   "evidence": "final D6=1 (RS-S100, RS-S99) contradicts 'pricing model not documented'"
  },
  {
   "vendor_id": "remerge",
   "field": "data_requirements",
   "reason": "process-language",
   "evidence": "final D2=3 and D3=2 (RS-S101..S104)"
  },
  {
   "vendor_id": "remerge",
   "field": "supply_dependencies",
   "reason": "process-language",
   "evidence": "R2-01 (c)"
  },
  {
   "vendor_id": "remerge",
   "field": "measurable_controls",
   "reason": "conflict",
   "evidence": "G1-F11 (FX4: Ghost Bids + Causal Impact); COR-103; final D5, D8, D9 (RS-S101, RS-S107, RS-S108, RS-S111); ch.4"
  },
  {
   "vendor_id": "remerge",
   "field": "proof_quality",
   "reason": "conflict",
   "evidence": "G1-F11 (FX4) contradicts 'only proof points found were AppsFlyer rankings'"
  },
  {
   "vendor_id": "remerge",
   "field": "switching_limits",
   "reason": "process-language",
   "evidence": "R2-01 (c)"
  },
  {
   "vendor_id": "remerge",
   "field": "risks",
   "reason": "unsupported",
   "evidence": "Remerge-Verve on-device bidding partnership was seed-only, never sourced; ch.4 'no independent audit'"
  },
  {
   "vendor_id": "remerge",
   "field": "poor_fit_use_cases",
   "reason": "conflict",
   "evidence": "G1-F11 (UA cases exist, contradicting 'UA breadth not documented'); final D9=1, D10 n/e"
  },
  {
   "vendor_id": "jampp",
   "field": "ownership",
   "reason": "process-language",
   "evidence": "V2-F07 (FX1: at least four brands); COR-35; Affle 3i rename carried from seed, not verified"
  },
  {
   "vendor_id": "jampp",
   "field": "financial_scale",
   "reason": "process-language",
   "evidence": "R2-01 (c)"
  },
  {
   "vendor_id": "jampp",
   "field": "buyer_and_app_fit",
   "reason": "conflict",
   "evidence": "V2-F05 (FX1); COR-37; COR-70 (D7 set to 2: method not documented); ch.4, ch.10"
  },
  {
   "vendor_id": "jampp",
   "field": "proof_quality",
   "reason": "conflict",
   "evidence": "V2-F05 (FX1: not a 'specific, named methodology'); G1-F10 (FX4); COR-103; final D11 (RS-S121, RS-S122); ch.5 Q8 test"
  },
  {
   "vendor_id": "jampp",
   "field": "switching_limits",
   "reason": "process-language",
   "evidence": "R2-01 (c)"
  },
  {
   "vendor_id": "jampp",
   "field": "risks",
   "reason": "process-language",
   "evidence": "V2-F07 (FX1); second-scorer D10 (Jampp CTV powered by mediasmart)"
  },
  {
   "vendor_id": "verve-dataseat",
   "field": "ownership",
   "reason": "conflict",
   "evidence": "V2-F01 (FX1: relocation not effective at cutoff); COR-69 ('exactly the same rules', not stricter); REDTEAM RT-20"
  },
  {
   "vendor_id": "verve-dataseat",
   "field": "financial_scale",
   "reason": "process-language",
   "evidence": "AB-F12 (FX1/EDITOR); COR-04; ch.2 table"
  },
  {
   "vendor_id": "verve-dataseat",
   "field": "buyer_and_app_fit",
   "reason": "unsupported",
   "evidence": "30%/70% demand/supply split was seed-only; final D9 (RS-S127); ch.9 'mobile DSP of an omnichannel group'"
  },
  {
   "vendor_id": "verve-dataseat",
   "field": "economics",
   "reason": "conflict",
   "evidence": "final D6=2 (RS-S125) contradicts 'no fee breakdown found'"
  },
  {
   "vendor_id": "verve-dataseat",
   "field": "supply_dependencies",
   "reason": "process-language",
   "evidence": "final D5 rationale (RS-S127); R2-01 (c)"
  },
  {
   "vendor_id": "verve-dataseat",
   "field": "measurable_controls",
   "reason": "conflict",
   "evidence": "final D9=2 (self-service mode documented), D5=2, D8 n/e"
  },
  {
   "vendor_id": "verve-dataseat",
   "field": "implementation_burden",
   "reason": "process-language",
   "evidence": "final D9 (RS-S127); RESCORE verve note"
  },
  {
   "vendor_id": "verve-dataseat",
   "field": "proof_quality",
   "reason": "conflict",
   "evidence": "COR-69 ('same or stricter scrutiny' wording withdrawn); second-scorer D11 and D1 (RS-S126, RS-S123); LinkedIn figures came from an unopened headline (final D11 rationale)"
  },
  {
   "vendor_id": "verve-dataseat",
   "field": "switching_limits",
   "reason": "process-language",
   "evidence": "R2-01 (c)"
  },
  {
   "vendor_id": "verve-dataseat",
   "field": "risks",
   "reason": "unsupported",
   "evidence": "'minority line within a majority supply-side business' rested on seed-only 30/70 split; R2-01 (c)"
  },
  {
   "vendor_id": "V3-Meta-AAC",
   "field": "what_is_sold",
   "reason": "unsupported",
   "evidence": "'Andromeda' and 'Feb 2026 creative enhancements' have no source; V3-F01/MAIN-F09 (FX1-S23); final D1, D2, D4 (RS-S128, RS-S129)"
  },
  {
   "vendor_id": "V3-Meta-AAC",
   "field": "economics",
   "reason": "process-language",
   "evidence": "final D1 (LOWEST_COST_WITH_MIN_ROAS); register_overrides benchmark objectives"
  },
  {
   "vendor_id": "V3-Meta-AAC",
   "field": "data_requirements",
   "reason": "conflict",
   "evidence": "final D3=1 (RS-S128, RS-S130); register_overrides benchmark os_measurement"
  },
  {
   "vendor_id": "V3-Meta-AAC",
   "field": "supply_dependencies",
   "reason": "conflict",
   "evidence": "V3-F01 (contradicted); COR-31; COR-59; MAIN-F09; R2-01 Meta row"
  },
  {
   "vendor_id": "V3-Meta-AAC",
   "field": "implementation_burden",
   "reason": "conflict",
   "evidence": "AdAttributionKit configuration not documented (final D3)"
  },
  {
   "vendor_id": "V3-Meta-AAC",
   "field": "proof_quality",
   "reason": "process-language",
   "evidence": "V3-F05 (FX1)"
  },
  {
   "vendor_id": "V3-Meta-AAC",
   "field": "switching_limits",
   "reason": "process-language",
   "evidence": "R2-01 (c)"
  },
  {
   "vendor_id": "V3-Meta-AAC",
   "field": "risks",
   "reason": "conflict",
   "evidence": "V3-F01 (contradicted: placement is a reporting breakdown); COR-31; R2-01 Meta row"
  },
  {
   "vendor_id": "V3-Meta-AAC",
   "field": "poor_fit_use_cases",
   "reason": "conflict",
   "evidence": "V3-F01; final D2=0 (90-day exclusion)"
  },
  {
   "vendor_id": "V3-Google-AppCampaigns",
   "field": "economics",
   "reason": "conflict",
   "evidence": "R2-01 Google minimum-signal row; MAIN-F05 (FX4); EF-F01; COR-50; ch.5 (secondary-source '100 / 30+ conversions' removed)"
  },
  {
   "vendor_id": "V3-Google-AppCampaigns",
   "field": "data_requirements",
   "reason": "conflict",
   "evidence": "MAIN-F05; second-scorer D3 (RS-S136, FX1-S24): AdAttributionKit import not documented"
  },
  {
   "vendor_id": "V3-Google-AppCampaigns",
   "field": "supply_dependencies",
   "reason": "conflict",
   "evidence": "V3-F02 (contradicted); COR-73; OA1 item 1; R2-01 Google row"
  },
  {
   "vendor_id": "V3-Google-AppCampaigns",
   "field": "measurable_controls",
   "reason": "conflict",
   "evidence": "R2-01 Google row ('no placement selection or reporting'); V3-F02; COR-73; final D5=2"
  },
  {
   "vendor_id": "V3-Google-AppCampaigns",
   "field": "proof_quality",
   "reason": "process-language",
   "evidence": "V3-F05; G3-F24 (FX5); ch.4"
  },
  {
   "vendor_id": "V3-Google-AppCampaigns",
   "field": "switching_limits",
   "reason": "process-language",
   "evidence": "R2-01 (c)"
  },
  {
   "vendor_id": "V3-Google-AppCampaigns",
   "field": "risks",
   "reason": "conflict",
   "evidence": "V3-F02 (contradicted); COR-73; R2-01 Google row"
  },
  {
   "vendor_id": "V3-TikTok-SmartPlus",
   "field": "what_is_sold",
   "reason": "conflict",
   "evidence": "V3-F13 (OA1: Android-only is Smart+-specific); COR-88; OA1 item 42; ch.5, ch.9"
  },
  {
   "vendor_id": "V3-TikTok-SmartPlus",
   "field": "buyer_and_app_fit",
   "reason": "conflict",
   "evidence": "V3-F13 (VBO not Android-only outside Smart+); OA1-S14 eligibility"
  },
  {
   "vendor_id": "V3-TikTok-SmartPlus",
   "field": "economics",
   "reason": "process-language",
   "evidence": "R2-01 (c); V3-S09"
  },
  {
   "vendor_id": "V3-TikTok-SmartPlus",
   "field": "supply_dependencies",
   "reason": "conflict",
   "evidence": "V3-F03 (FX1: iOS placements TikTok and Lemon8); second-scorer D5 (Pangle on Android) - not 'TikTok app inventory' only"
  },
  {
   "vendor_id": "V3-TikTok-SmartPlus",
   "field": "proof_quality",
   "reason": "unsupported",
   "evidence": "Bolt UK claim came from search-tool summaries, never opened; V3-F05"
  },
  {
   "vendor_id": "V3-TikTok-SmartPlus",
   "field": "switching_limits",
   "reason": "process-language",
   "evidence": "R2-01 (c)"
  },
  {
   "vendor_id": "V3-TikTok-SmartPlus",
   "field": "risks",
   "reason": "conflict",
   "evidence": "V3-F13 (OA1); COR-88"
  },
  {
   "vendor_id": "V3-TikTok-SmartPlus",
   "field": "poor_fit_use_cases",
   "reason": "conflict",
   "evidence": "V3-F13 (OA1); COR-88"
  },
  {
   "vendor_id": "V3-Apple-Ads",
   "field": "roles",
   "reason": "process-language",
   "evidence": "field outside the listed narrative set, fixed because it read 'per general product knowledge ... not independently reconfirmed this session'; final D5 (RS-S149); D-F18"
  },
  {
   "vendor_id": "V3-Apple-Ads",
   "field": "what_is_sold",
   "reason": "conflict",
   "evidence": "R2-01 Apple row ('21-day-retention' label removed); D-F18 (FX3: 24-hour token); C-F16 (FX2: 30-day tap / 24-hour view); COR-13; ch.3"
  },
  {
   "vendor_id": "V3-Apple-Ads",
   "field": "economics",
   "reason": "process-language",
   "evidence": "final D1 (RS-S146, EF-S12); EF-F05; register_overrides benchmark objectives"
  },
  {
   "vendor_id": "V3-Apple-Ads",
   "field": "measurable_controls",
   "reason": "conflict",
   "evidence": "final D1=1, D2=1, D5=3, D9=3 (text said 'see D1/D5 n/e')"
  },
  {
   "vendor_id": "V3-Apple-Ads",
   "field": "proof_quality",
   "reason": "process-language",
   "evidence": "second-scorer D7 (RS-S151, RS-S152)"
  },
  {
   "vendor_id": "V3-Apple-Ads",
   "field": "switching_limits",
   "reason": "process-language",
   "evidence": "R2-01 (c)"
  },
  {
   "vendor_id": "V3-Apple-Ads",
   "field": "risks",
   "reason": "process-language",
   "evidence": "documentation gaps named in the old text are closed (final D1, D5); C-F17 (FX2); OA5 item 27; ch.3"
  },
  {
   "vendor_id": "V3-Amazon-DSP-App",
   "field": "buyer_and_app_fit",
   "reason": "conflict",
   "evidence": "V3-F04 (OA1); COR-88; OA1 item 84; ch.9"
  },
  {
   "vendor_id": "V3-Amazon-DSP-App",
   "field": "proof_quality",
   "reason": "process-language",
   "evidence": "second-scorer D7 (V3-S04)"
  },
  {
   "vendor_id": "V3-Amazon-DSP-App",
   "field": "switching_limits",
   "reason": "process-language",
   "evidence": "R2-01 (c)"
  },
  {
   "vendor_id": "V3-Amazon-DSP-App",
   "field": "risks",
   "reason": "conflict",
   "evidence": "V3-F04 (OA1); V3-F06 (FX1: AMC outputs aggregated and anonymous only)"
  },
  {
   "vendor_id": "V3-Amazon-DSP-App",
   "field": "poor_fit_use_cases",
   "reason": "process-language",
   "evidence": "V3-F04 (OA1); V3-S04"
  },
  {
   "vendor_id": "V3-Google-AppCampaigns",
   "field": "benchmark.os_measurement",
   "reason": "process-language",
   "evidence": "second-scorer D3 (RS-S136, FX1-S24); RESCORE Google note"
  },
  {
   "vendor_id": "V3-Google-AppCampaigns",
   "field": "benchmark.reporting_export",
   "reason": "conflict",
   "evidence": "V3-F02 (contradicted; OA1: placement report exists in Help Center/Report editor); COR-73"
  },
  {
   "vendor_id": "V3-Apple-Ads",
   "field": "benchmark.os_measurement",
   "reason": "conflict",
   "evidence": "R2-01 Apple row ('21-day data retention' removed); D-F18 (FX3); C-F16 (FX2); C-F17; COR-13; OA5 item 27; ch.3"
  },
  {
   "vendor_id": "V3-Apple-Ads",
   "field": "benchmark.reporting_export",
   "reason": "conflict",
   "evidence": "register_overrides transparency (placements reported per campaign and ad); final D5=3, D8=2 (RS-S150, RS-S153)"
  },
  {
   "vendor_id": "V3-Apple-Ads",
   "field": "benchmark.experiments",
   "reason": "process-language",
   "evidence": "second-scorer D7 (RS-S151, RS-S152)"
  },
  {
   "vendor_id": "V3-Amazon-DSP-App",
   "field": "benchmark.os_measurement",
   "reason": "conflict",
   "evidence": "V3-F04 (OA1); COR-88; register_overrides benchmark objectives"
  },
  {
   "vendor_id": "V3-Amazon-DSP-App",
   "field": "benchmark.transparency",
   "reason": "process-language",
   "evidence": "second-scorer D5 (V3-S04)"
  },
  {
   "vendor_id": "V3-Amazon-DSP-App",
   "field": "benchmark.reporting_export",
   "reason": "conflict",
   "evidence": "V3-F06 (FX1: 'can only access aggregated, anonymous outputs')"
  },
  {
   "vendor_id": "V3-Amazon-DSP-App",
   "field": "benchmark.experiments",
   "reason": "process-language",
   "evidence": "second-scorer D7 (V3-S04)"
  }
 ]
}
