[{"data":1,"prerenderedAt":459},["ShallowReactive",2],{"blog-meta-app-promotion-campaign-en":3,"blog-ad-banners-en":431},{"id":4,"title":5,"excerpt":6,"content":7,"coverImage":373,"meta":381,"site":385,"status":406,"slug":407,"author":408,"category":418,"publishDate":18,"featured":96,"updatedAt":426,"createdAt":427,"contentHtml":428,"previewUrl":429,"localeSlugs":430},583,"Meta App Promotion Campaign: How the Objective Works and What Has to Be in Place First","A Meta app promotion campaign is a measurement setup with an ad campaign attached. This guide walks the objective from app verification and event delivery through delivery troubleshooting and why three sets of install numbers never match.",{"root":8},{"children":9,"direction":18,"format":15,"indent":13,"type":372,"version":17},[10,21,26,30,35,43,69,73,77,83,101,116,122,126,134,138,150,154,158,162,212,216,220,234,242,246,250,254,267,280,284,288,319,323,327,333,339,345,360,364,368],{"children":11,"direction":18,"format":15,"indent":13,"type":19,"version":17,"tag":20},[12],{"detail":13,"format":13,"mode":14,"style":15,"text":5,"type":16,"version":17},0,"normal","","text",1,null,"heading","h1",{"children":22,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[23],{"detail":13,"format":13,"mode":14,"style":15,"text":24,"type":16,"version":17},"A Meta app promotion campaign is not just \"an ad that points at your store listing.\" It is a distinct campaign objective with its own prerequisites, its own optimization targets, and its own measurement path. Most of the problems teams hit — no delivery, installs that never show up in the dashboard, iOS numbers that disagree with everything else — trace back to something that was missing before the campaign ever launched.","paragraph",{"children":27,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[28],{"detail":13,"format":13,"mode":14,"style":15,"text":29,"type":16,"version":17},"This guide walks the objective from the setup requirements through delivery and measurement, and points at where to look when each stage misbehaves.",{"children":31,"direction":18,"format":15,"indent":13,"type":19,"version":17,"tag":34},[32],{"detail":13,"format":13,"mode":14,"style":15,"text":33,"type":16,"version":17},"What the app promotion objective actually optimizes for","h2",{"children":36,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[37,39,41],{"detail":13,"format":13,"mode":14,"style":15,"text":38,"type":16,"version":17},"When you pick app promotion, you are telling Meta's delivery system that the conversion you care about happens ",{"detail":13,"format":17,"mode":14,"style":15,"text":40,"type":16,"version":17},"inside an installed app",{"detail":13,"format":13,"mode":14,"style":15,"text":42,"type":16,"version":17},", not on a web page. That changes three things at once:",{"children":44,"direction":18,"format":15,"indent":13,"type":66,"version":17,"listType":67,"start":17,"tag":68},[45,52,59],{"children":46,"direction":18,"format":15,"indent":13,"type":51,"version":17,"value":17},[47,49],{"detail":13,"format":17,"mode":14,"style":15,"text":48,"type":16,"version":17},"The destination",{"detail":13,"format":13,"mode":14,"style":15,"text":50,"type":16,"version":17}," becomes an app store listing (or a deep link into an already-installed app), rather than a URL you control.","listitem",{"children":53,"direction":18,"format":15,"indent":13,"type":51,"version":17,"value":58},[54,56],{"detail":13,"format":17,"mode":14,"style":15,"text":55,"type":16,"version":17},"The optimization signal",{"detail":13,"format":13,"mode":14,"style":15,"text":57,"type":16,"version":17}," has to come back from the app itself — through an SDK or a mobile measurement partner — because Meta cannot observe what happens after the store hands off to the device.",2,{"children":60,"direction":18,"format":15,"indent":13,"type":51,"version":17,"value":65},[61,63],{"detail":13,"format":17,"mode":14,"style":15,"text":62,"type":16,"version":17},"The auction target",{"detail":13,"format":13,"mode":14,"style":15,"text":64,"type":16,"version":17}," can be an install, a specific in-app event, or the value of that event, and each of those needs a different amount of incoming data before it stabilizes.",3,"list","bullet","ul",{"children":70,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[71],{"detail":13,"format":13,"mode":14,"style":15,"text":72,"type":16,"version":17},"That last point is the one most often skipped. Optimizing for an in-app purchase when the app is sending only install events gives the system nothing to bid against.",{"children":74,"direction":18,"format":15,"indent":13,"type":19,"version":17,"tag":34},[75],{"detail":13,"format":13,"mode":14,"style":15,"text":76,"type":16,"version":17},"The prerequisites, in the order they break",{"children":78,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":17,"textStyle":15},[79,81],{"detail":13,"format":17,"mode":14,"style":15,"text":80,"type":16,"version":17},"1. The app has to be registered and verified with Meta.",{"detail":13,"format":13,"mode":14,"style":15,"text":82,"type":16,"version":17}," An app that is not claimed in the app dashboard, or whose store listing is not linked, cannot be selected as a campaign destination. This is the most common cause of \"I cannot find my app in the dropdown.\"",{"children":84,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":17,"textStyle":15},[85,87,89,99],{"detail":13,"format":17,"mode":14,"style":15,"text":86,"type":16,"version":17},"2. Events have to actually arrive.",{"detail":13,"format":13,"mode":14,"style":15,"text":88,"type":16,"version":17}," Registration is not the same as integration. Whether you go through Meta's own SDK or an MMP, the check is the same: open the events view and confirm that the event you plan to optimize for has been received recently, from the right app version, on the right platform. If you are unsure how the attribution layer fits together, ",{"children":90,"direction":18,"format":15,"indent":13,"type":93,"version":65,"fields":94,"id":98},[91],{"detail":13,"format":13,"mode":14,"style":15,"text":92,"type":16,"version":17},"our guide to mobile attribution SDKs","link",{"linkType":95,"newTab":96,"url":97},"custom",false,"https://deepclick.com/resources/blog/mobile-attribution-sdk-guide-2026/","6a9a3e8b62464300c8a480f0",{"detail":13,"format":13,"mode":14,"style":15,"text":100,"type":16,"version":17}," covers what the SDK is responsible for versus what the platform decides.",{"children":102,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":17,"textStyle":15},[103,105,107,114],{"detail":13,"format":17,"mode":14,"style":15,"text":104,"type":16,"version":17},"3. The MMP link has to be configured on both sides.",{"detail":13,"format":13,"mode":14,"style":15,"text":106,"type":16,"version":17}," If you use a measurement partner, Meta has to be listed as a partner inside that tool, and the tool has to be connected inside Meta. Configuring one side only produces a campaign that runs and reports nothing back. ",{"children":108,"direction":18,"format":15,"indent":13,"type":93,"version":65,"fields":111,"id":113},[109],{"detail":13,"format":13,"mode":14,"style":15,"text":110,"type":16,"version":17},"How Meta's MMP attribution works",{"linkType":95,"newTab":96,"url":112},"https://deepclick.com/resources/blog/facebook-mobile-measurement-partner-2026/","6a9a3e8b62464300c8a480f1",{"detail":13,"format":13,"mode":14,"style":15,"text":115,"type":16,"version":17}," goes through that handshake in detail.",{"children":117,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":17,"textStyle":15},[118,120],{"detail":13,"format":17,"mode":14,"style":15,"text":119,"type":16,"version":17},"4. iOS needs its own configuration.",{"detail":13,"format":13,"mode":14,"style":15,"text":121,"type":16,"version":17}," On iOS, measurement runs through Apple's framework and Meta's aggregated event setup rather than through per-user reporting. The events you want to see have to be configured and prioritized before the campaign starts — changing them mid-flight resets the measurement window.",{"children":123,"direction":18,"format":15,"indent":13,"type":19,"version":17,"tag":34},[124],{"detail":13,"format":13,"mode":14,"style":15,"text":125,"type":16,"version":17},"Automated versus manual: what you are actually choosing",{"children":127,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[128,130,132],{"detail":13,"format":13,"mode":14,"style":15,"text":129,"type":16,"version":17},"Meta offers both a heavily automated app campaign type and a manual one. The practical difference is not \"smart versus dumb\" — it is ",{"detail":13,"format":17,"mode":14,"style":15,"text":131,"type":16,"version":17},"which levers you keep",{"detail":13,"format":13,"mode":14,"style":15,"text":133,"type":16,"version":17},".",{"children":135,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[136],{"detail":13,"format":13,"mode":14,"style":15,"text":137,"type":16,"version":17},"The automated type takes over audience definition, placement selection, and most of the budget distribution across ad sets. You supply creative, a budget, a country set, and the optimization event. It tends to reach a stable delivery state faster because it is not splitting the learning signal across many small ad sets.",{"children":139,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[140,142,149],{"detail":13,"format":13,"mode":14,"style":15,"text":141,"type":16,"version":17},"The manual type keeps audience, placement, and ad set structure in your hands. That is worth having when you have a real reason to separate delivery — a market that needs different creative, a device tier you want to bid differently on, a test you need clean numbers from. It is not worth having when the separation exists only because someone built it that way originally. Splitting one signal across six ad sets is a reliable way to keep all six under-fed; the same trade-off shows up in ",{"children":143,"direction":18,"format":15,"indent":13,"type":93,"version":65,"fields":146,"id":148},[144],{"detail":13,"format":13,"mode":14,"style":15,"text":145,"type":16,"version":17},"how many campaigns and ad sets an account should run",{"linkType":95,"newTab":96,"url":147},"https://deepclick.com/resources/blog/facebook-ads-account-structure/","6a9a3e8b62464300c8a480f2",{"detail":13,"format":13,"mode":14,"style":15,"text":133,"type":16,"version":17},{"children":151,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[152],{"detail":13,"format":13,"mode":14,"style":15,"text":153,"type":16,"version":17},"Neither type rescues an optimization event that is not being received. The automation operates on the signal it gets.",{"children":155,"direction":18,"format":15,"indent":13,"type":19,"version":17,"tag":34},[156],{"detail":13,"format":13,"mode":14,"style":15,"text":157,"type":16,"version":17},"Why a campaign does not deliver",{"children":159,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[160],{"detail":13,"format":13,"mode":14,"style":15,"text":161,"type":16,"version":17},"When an app campaign spends nothing, or spends and produces nothing, the cause is almost always one of a short list. Work through it in this order, because each step is cheaper to check than the next:",{"children":163,"direction":18,"format":15,"indent":13,"type":66,"version":17,"listType":67,"start":17,"tag":68},[164,170,176,182,189,196],{"children":165,"direction":18,"format":15,"indent":13,"type":51,"version":17,"value":17},[166,168],{"detail":13,"format":17,"mode":14,"style":15,"text":167,"type":16,"version":17},"The app or store listing is not eligible.",{"detail":13,"format":13,"mode":14,"style":15,"text":169,"type":16,"version":17}," Region availability, age rating, and store status all gate delivery. An app that is unavailable in a targeted country simply will not be served there.",{"children":171,"direction":18,"format":15,"indent":13,"type":51,"version":17,"value":58},[172,174],{"detail":13,"format":17,"mode":14,"style":15,"text":173,"type":16,"version":17},"The optimization event is not arriving.",{"detail":13,"format":13,"mode":14,"style":15,"text":175,"type":16,"version":17}," Check the events view for recency, not just for existence. An event that stopped arriving three versions ago still shows up in the list.",{"children":177,"direction":18,"format":15,"indent":13,"type":51,"version":17,"value":65},[178,180],{"detail":13,"format":17,"mode":14,"style":15,"text":179,"type":16,"version":17},"The optimization target is too deep for the current volume.",{"detail":13,"format":13,"mode":14,"style":15,"text":181,"type":16,"version":17}," Optimizing toward a rare in-app event when the account is producing few of them per week leaves the system without enough examples to bid on. Optimizing one step earlier in the funnel and moving deeper once volume exists is the usual fix.",{"children":183,"direction":18,"format":15,"indent":13,"type":51,"version":17,"value":188},[184,186],{"detail":13,"format":17,"mode":14,"style":15,"text":185,"type":16,"version":17},"The audience is too narrow for the objective.",{"detail":13,"format":13,"mode":14,"style":15,"text":187,"type":16,"version":17}," App campaigns generally want room to find installers. Layering several narrow conditions on top of each other constrains delivery in a way that is easy to mistake for a bidding problem. Overlapping audiences add a second, subtler version of this — worth checking with the overlap tooling before assuming the bid is at fault.",4,{"children":190,"direction":18,"format":15,"indent":13,"type":51,"version":17,"value":195},[191,193],{"detail":13,"format":17,"mode":14,"style":15,"text":192,"type":16,"version":17},"Creative is not in the formats the placements need.",{"detail":13,"format":13,"mode":14,"style":15,"text":194,"type":16,"version":17}," Missing vertical assets quietly removes whole placements from the auction.",5,{"children":197,"direction":18,"format":15,"indent":13,"type":51,"version":17,"value":211},[198,200,202,209],{"detail":13,"format":17,"mode":14,"style":15,"text":199,"type":16,"version":17},"The account itself is restricted.",{"detail":13,"format":13,"mode":14,"style":15,"text":201,"type":16,"version":17}," If ads are being rejected or the account is under review, no campaign-level change will help until that is resolved. ",{"children":203,"direction":18,"format":15,"indent":13,"type":93,"version":65,"fields":206,"id":208},[204],{"detail":13,"format":13,"mode":14,"style":15,"text":205,"type":16,"version":17},"What to do when an ad account goes under review",{"linkType":95,"newTab":96,"url":207},"https://deepclick.com/resources/blog/ad-account-review-compliance-playbook-2026/","6a9a3e8b62464300c8a480f3",{"detail":13,"format":13,"mode":14,"style":15,"text":210,"type":16,"version":17}," covers that path.",6,{"children":213,"direction":18,"format":15,"indent":13,"type":19,"version":17,"tag":34},[214],{"detail":13,"format":13,"mode":14,"style":15,"text":215,"type":16,"version":17},"Reading the numbers without fooling yourself",{"children":217,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[218],{"detail":13,"format":13,"mode":14,"style":15,"text":219,"type":16,"version":17},"App campaigns produce three sets of numbers that will not match, and this is expected rather than a bug:",{"children":221,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":17,"textStyle":15},[222,224,226,228,230,232],{"detail":13,"format":17,"mode":14,"style":15,"text":223,"type":16,"version":17},"Meta's reported installs",{"detail":13,"format":13,"mode":14,"style":15,"text":225,"type":16,"version":17}," are attributed by Meta, on Meta's attribution settings, within Meta's window. ",{"detail":13,"format":17,"mode":14,"style":15,"text":227,"type":16,"version":17},"Your MMP's installs",{"detail":13,"format":13,"mode":14,"style":15,"text":229,"type":16,"version":17}," are attributed by the MMP, which may apply different windows and its own deduplication across networks. ",{"detail":13,"format":17,"mode":14,"style":15,"text":231,"type":16,"version":17},"The store's install count",{"detail":13,"format":13,"mode":14,"style":15,"text":233,"type":16,"version":17}," counts installs from every source, including organic, and on its own calendar.",{"children":235,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[236,238,240],{"detail":13,"format":13,"mode":14,"style":15,"text":237,"type":16,"version":17},"Comparing them is useful; expecting them to be equal is not. What is worth investigating is a change in the ",{"detail":13,"format":58,"mode":14,"style":15,"text":239,"type":16,"version":17},"gap",{"detail":13,"format":13,"mode":14,"style":15,"text":241,"type":16,"version":17}," — if Meta and your MMP normally sit within a stable band of each other and suddenly diverge, that usually points at an integration change rather than at performance.",{"children":243,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[244],{"detail":13,"format":13,"mode":14,"style":15,"text":245,"type":16,"version":17},"On iOS the gap widens further because measurement is aggregated and delayed by design. Treat iOS reporting as a trend indicator over days, not as a same-day feedback loop.",{"children":247,"direction":18,"format":15,"indent":13,"type":19,"version":17,"tag":34},[248],{"detail":13,"format":13,"mode":14,"style":15,"text":249,"type":16,"version":17},"When an app campaign is the wrong tool",{"children":251,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[252],{"detail":13,"format":13,"mode":14,"style":15,"text":253,"type":16,"version":17},"Two situations come up often enough to name.",{"children":255,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[256,258,265],{"detail":13,"format":13,"mode":14,"style":15,"text":257,"type":16,"version":17},"The first is when the real bottleneck is retention rather than acquisition. If installs arrive and then stop opening the app, buying more installs makes the problem more expensive rather than smaller. ",{"children":259,"direction":18,"format":15,"indent":13,"type":93,"version":65,"fields":262,"id":264},[260],{"detail":13,"format":13,"mode":14,"style":15,"text":261,"type":16,"version":17},"Re-engaging paid app users who bounce on day one",{"linkType":95,"newTab":96,"url":263},"https://deepclick.com/resources/blog/re-engage-paid-app-users/","6a9a3e8b62464300c8a480f4",{"detail":13,"format":13,"mode":14,"style":15,"text":266,"type":16,"version":17}," is the more useful lever there.",{"children":268,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[269,271,278],{"detail":13,"format":13,"mode":14,"style":15,"text":270,"type":16,"version":17},"The second is when store distribution itself is the constraint — a listing that keeps getting pulled, a category with heavy review friction, or a market where the store is not the main install path. In those cases the campaign is fine and the destination is the problem. Some teams route around it with a web-installable experience instead of a store listing; ",{"children":272,"direction":18,"format":15,"indent":13,"type":93,"version":65,"fields":275,"id":277},[273],{"detail":13,"format":13,"mode":14,"style":15,"text":274,"type":16,"version":17},"progressive web apps as an APK alternative for install campaigns",{"linkType":95,"newTab":96,"url":276},"https://deepclick.com/resources/blog/progressive-web-apps-for-advertising/","6a9a3e8b62464300c8a480f5",{"detail":13,"format":13,"mode":14,"style":15,"text":279,"type":16,"version":17}," covers what that changes and what it costs you.",{"children":281,"direction":18,"format":15,"indent":13,"type":19,"version":17,"tag":34},[282],{"detail":13,"format":13,"mode":14,"style":15,"text":283,"type":16,"version":17},"A pre-launch checklist",{"children":285,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[286],{"detail":13,"format":13,"mode":14,"style":15,"text":287,"type":16,"version":17},"Before an app promotion campaign goes live, confirm each of these directly rather than from memory:",{"children":289,"direction":18,"format":15,"indent":13,"type":66,"version":17,"listType":67,"start":17,"tag":68},[290,294,298,302,306,310,314],{"children":291,"direction":18,"format":15,"indent":13,"type":51,"version":17,"value":17},[292],{"detail":13,"format":13,"mode":14,"style":15,"text":293,"type":16,"version":17},"The app is claimed, the store listing is linked, and the app appears in the destination selector.",{"children":295,"direction":18,"format":15,"indent":13,"type":51,"version":17,"value":58},[296],{"detail":13,"format":13,"mode":14,"style":15,"text":297,"type":16,"version":17},"The optimization event has been received within the last few days, from the current app version.",{"children":299,"direction":18,"format":15,"indent":13,"type":51,"version":17,"value":65},[300],{"detail":13,"format":13,"mode":14,"style":15,"text":301,"type":16,"version":17},"If an MMP is used, the partner link is active on both sides.",{"children":303,"direction":18,"format":15,"indent":13,"type":51,"version":17,"value":188},[304],{"detail":13,"format":13,"mode":14,"style":15,"text":305,"type":16,"version":17},"iOS events are configured and prioritized, and you are not planning to change them mid-flight.",{"children":307,"direction":18,"format":15,"indent":13,"type":51,"version":17,"value":195},[308],{"detail":13,"format":13,"mode":14,"style":15,"text":309,"type":16,"version":17},"The target countries are ones where the listing is actually available.",{"children":311,"direction":18,"format":15,"indent":13,"type":51,"version":17,"value":211},[312],{"detail":13,"format":13,"mode":14,"style":15,"text":313,"type":16,"version":17},"Creative exists in every aspect ratio the selected placements require.",{"children":315,"direction":18,"format":15,"indent":13,"type":51,"version":17,"value":318},[316],{"detail":13,"format":13,"mode":14,"style":15,"text":317,"type":16,"version":17},"The optimization target matches the volume the account can realistically produce.",7,{"children":320,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[321],{"detail":13,"format":13,"mode":14,"style":15,"text":322,"type":16,"version":17},"None of this guarantees performance. It removes the failure modes that look like performance problems but are not — which is most of them.",{"children":324,"direction":18,"format":15,"indent":13,"type":19,"version":17,"tag":34},[325],{"detail":13,"format":13,"mode":14,"style":15,"text":326,"type":16,"version":17},"Frequently asked questions",{"children":328,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":17,"textStyle":15},[329,331],{"detail":13,"format":17,"mode":14,"style":15,"text":330,"type":16,"version":17},"Can one campaign promote more than one app?",{"detail":13,"format":13,"mode":14,"style":15,"text":332,"type":16,"version":17}," No. The app is set at the campaign level, so each app needs its own campaign.",{"children":334,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":17,"textStyle":15},[335,337],{"detail":13,"format":17,"mode":14,"style":15,"text":336,"type":16,"version":17},"Does switching the optimization event restart learning?",{"detail":13,"format":13,"mode":14,"style":15,"text":338,"type":16,"version":17}," Yes. Changing what the system is bidding toward changes the problem it is solving, and delivery re-stabilizes afterward. Batch such changes rather than making them one at a time.",{"children":340,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":17,"textStyle":15},[341,343],{"detail":13,"format":17,"mode":14,"style":15,"text":342,"type":16,"version":17},"Why do installs appear in the store but not in reporting?",{"detail":13,"format":13,"mode":14,"style":15,"text":344,"type":16,"version":17}," Either the event is not being sent, the attribution window closed before the install, or the install is organic and was never attributable to the campaign in the first place.",{"children":346,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":17,"textStyle":15},[347,349,351,358],{"detail":13,"format":17,"mode":14,"style":15,"text":348,"type":16,"version":17},"Is deep linking required?",{"detail":13,"format":13,"mode":14,"style":15,"text":350,"type":16,"version":17}," Not for acquiring new installs, but it matters for re-engagement, where the ad should open a specific in-app location rather than the home screen. ",{"children":352,"direction":18,"format":15,"indent":13,"type":93,"version":65,"fields":355,"id":357},[353],{"detail":13,"format":13,"mode":14,"style":15,"text":354,"type":16,"version":17},"Mobile deep linking",{"linkType":95,"newTab":96,"url":356},"https://deepclick.com/resources/blog/mobile-deep-linking-guide/","6a9a3e8b62464300c8a480f6",{"detail":13,"format":13,"mode":14,"style":15,"text":359,"type":16,"version":17}," covers the setup.",{"children":361,"direction":18,"format":15,"indent":13,"type":19,"version":17,"tag":34},[362],{"detail":13,"format":13,"mode":14,"style":15,"text":363,"type":16,"version":17},"The short version",{"children":365,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[366],{"detail":13,"format":13,"mode":14,"style":15,"text":367,"type":16,"version":17},"An app promotion campaign is a measurement setup with an ad campaign attached. The campaign settings are the easy part; the parts that decide whether it works — app verification, event delivery, MMP handshake, iOS event configuration, and an optimization target the account can actually feed — all sit upstream of the campaign editor. Check those first, and most \"delivery problems\" stop being mysterious.",{"children":369,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[370],{"detail":13,"format":13,"mode":14,"style":15,"text":371,"type":16,"version":17},"The fastest way to know what your account offers today is to open the campaign creation flow and read the options in front of you. Platform surfaces change; the dependency order in this article is what tends to stay put.","root",{"id":374,"alt":375,"updatedAt":376,"createdAt":376,"url":377,"thumbnailURL":18,"filename":378,"mimeType":379,"filesize":380,"width":18,"height":18},1064,"Diagram of a mobile app promotion measurement chain: device, app store, SDK events and reporting","2026-09-04T03:43:40.912Z","https://cms-r2.deepclick.com/828-cover-f10da23949e0.jpg","828-cover-f10da23949e0.jpg","application/octet-stream",141876,{"title":382,"description":383,"image":384},"Meta App Promotion Campaign: Setup, Delivery & Measurement (2026)","How Meta app promotion campaigns work: app verification, event delivery, MMP handshake, iOS event configuration, why campaigns fail to deliver, and how to read installs across Meta, your MMP and the store.",{"id":374,"alt":375,"updatedAt":376,"createdAt":376,"url":377,"thumbnailURL":18,"filename":378,"mimeType":379,"filesize":380,"width":18,"height":18},{"id":17,"key":386,"name":387,"prodHost":388,"testHost":389,"blogPath":390,"docPath":391,"zhPrefix":392,"deployHookTest":393,"deployHookProd":394,"brandAuthor":395,"brandKit":399,"enabled":403,"updatedAt":404,"createdAt":405},"deepclick","DeepClick","https://deepclick.com","https://www-test-deepclick.qiliangjia.one","/resources/blog/{slug}","/docs/{slug}","/zh-CN","https://api.cloudflare.com/client/v4/pages/webhooks/deploy_hooks/60a9adef-153b-4c89-8d07-7118e91e9522","https://api.cloudflare.com/client/v4/pages/webhooks/deploy_hooks/05323321-f694-4ce8-a5af-173c507b8bae",{"id":58,"name":387,"avatar":396,"updatedAt":397,"createdAt":398},25,"2026-04-22T08:09:35.299Z","2026-04-22T06:42:49.116Z",{"logoLight":18,"logoDark":18,"primaryColor":400,"accentColor":401,"tagline":402,"wechatName":18,"xhsHandle":18,"wechatQr":18},"#1a73e8","#ff6600","一次点击，多重价值",true,"2026-08-25T06:40:57.663Z","2026-07-14T06:26:38.962Z","published","meta-app-promotion-campaign",{"id":318,"name":409,"avatar":410,"updatedAt":417,"createdAt":417},"Kenji Watanabe",{"id":411,"alt":412,"updatedAt":413,"createdAt":413,"url":414,"thumbnailURL":18,"filename":415,"mimeType":379,"filesize":416,"width":18,"height":18},925,"Kenji Watanabe — PWA & mobile tech writer","2026-07-27T07:17:29.038Z","https://cms-r2.deepclick.com/gpt_1785136568500_0-0d300e3b401a.png","gpt_1785136568500_0-0d300e3b401a.png",2032193,"2026-07-27T07:17:30.604Z",{"id":318,"site":419,"titleZh":421,"titleEn":422,"slug":423,"order":195,"updatedAt":424,"createdAt":425},{"id":17,"key":386,"name":387,"prodHost":388,"testHost":389,"blogPath":390,"docPath":391,"zhPrefix":392,"deployHookTest":393,"deployHookProd":394,"brandAuthor":58,"brandKit":420,"enabled":403,"updatedAt":404,"createdAt":405},{"logoLight":18,"logoDark":18,"primaryColor":400,"accentColor":401,"tagline":402,"wechatName":18,"xhsHandle":18,"wechatQr":18},"技术导航","Tech Guides","tech-guides","2026-04-27T08:37:10.576Z","2026-04-23T02:59:13.436Z","2026-09-04T03:44:52.419Z","2026-09-04T03:44:12.080Z","\u003Cdiv class=\"payload-richtext\">\u003Ch1>Meta App Promotion Campaign: How the Objective Works and What Has to Be in Place First\u003C/h1>\u003Cp>A Meta app promotion campaign is not just &quot;an ad that points at your store listing.&quot; It is a distinct campaign objective with its own prerequisites, its own optimization targets, and its own measurement path. Most of the problems teams hit — no delivery, installs that never show up in the dashboard, iOS numbers that disagree with everything else — trace back to something that was missing before the campaign ever launched.\u003C/p>\u003Cp>This guide walks the objective from the setup requirements through delivery and measurement, and points at where to look when each stage misbehaves.\u003C/p>\u003Ch2>What the app promotion objective actually optimizes for\u003C/h2>\u003Cp>When you pick app promotion, you are telling Meta&#39;s delivery system that the conversion you care about happens \u003Cstrong>inside an installed app\u003C/strong>, not on a web page. That changes three things at once:\u003C/p>\u003Cul class=\"list-bullet\">\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"1\"\n        >\u003Cstrong>The destination\u003C/strong> becomes an app store listing (or a deep link into an already-installed app), rather than a URL you control.\u003C/li>\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"2\"\n        >\u003Cstrong>The optimization signal\u003C/strong> has to come back from the app itself — through an SDK or a mobile measurement partner — because Meta cannot observe what happens after the store hands off to the device.\u003C/li>\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"3\"\n        >\u003Cstrong>The auction target\u003C/strong> can be an install, a specific in-app event, or the value of that event, and each of those needs a different amount of incoming data before it stabilizes.\u003C/li>\u003C/ul>\u003Cp>That last point is the one most often skipped. Optimizing for an in-app purchase when the app is sending only install events gives the system nothing to bid against.\u003C/p>\u003Ch2>The prerequisites, in the order they break\u003C/h2>\u003Cp>\u003Cstrong>1. The app has to be registered and verified with Meta.\u003C/strong> An app that is not claimed in the app dashboard, or whose store listing is not linked, cannot be selected as a campaign destination. This is the most common cause of &quot;I cannot find my app in the dropdown.&quot;\u003C/p>\u003Cp>\u003Cstrong>2. Events have to actually arrive.\u003C/strong> Registration is not the same as integration. Whether you go through Meta&#39;s own SDK or an MMP, the check is the same: open the events view and confirm that the event you plan to optimize for has been received recently, from the right app version, on the right platform. If you are unsure how the attribution layer fits together, \u003Ca href=\"https://deepclick.com/resources/blog/mobile-attribution-sdk-guide-2026/\">our guide to mobile attribution SDKs\u003C/a> covers what the SDK is responsible for versus what the platform decides.\u003C/p>\u003Cp>\u003Cstrong>3. The MMP link has to be configured on both sides.\u003C/strong> If you use a measurement partner, Meta has to be listed as a partner inside that tool, and the tool has to be connected inside Meta. Configuring one side only produces a campaign that runs and reports nothing back. \u003Ca href=\"https://deepclick.com/resources/blog/facebook-mobile-measurement-partner-2026/\">How Meta&#39;s MMP attribution works\u003C/a> goes through that handshake in detail.\u003C/p>\u003Cp>\u003Cstrong>4. iOS needs its own configuration.\u003C/strong> On iOS, measurement runs through Apple&#39;s framework and Meta&#39;s aggregated event setup rather than through per-user reporting. The events you want to see have to be configured and prioritized before the campaign starts — changing them mid-flight resets the measurement window.\u003C/p>\u003Ch2>Automated versus manual: what you are actually choosing\u003C/h2>\u003Cp>Meta offers both a heavily automated app campaign type and a manual one. The practical difference is not &quot;smart versus dumb&quot; — it is \u003Cstrong>which levers you keep\u003C/strong>.\u003C/p>\u003Cp>The automated type takes over audience definition, placement selection, and most of the budget distribution across ad sets. You supply creative, a budget, a country set, and the optimization event. It tends to reach a stable delivery state faster because it is not splitting the learning signal across many small ad sets.\u003C/p>\u003Cp>The manual type keeps audience, placement, and ad set structure in your hands. That is worth having when you have a real reason to separate delivery — a market that needs different creative, a device tier you want to bid differently on, a test you need clean numbers from. It is not worth having when the separation exists only because someone built it that way originally. Splitting one signal across six ad sets is a reliable way to keep all six under-fed; the same trade-off shows up in \u003Ca href=\"https://deepclick.com/resources/blog/facebook-ads-account-structure/\">how many campaigns and ad sets an account should run\u003C/a>.\u003C/p>\u003Cp>Neither type rescues an optimization event that is not being received. The automation operates on the signal it gets.\u003C/p>\u003Ch2>Why a campaign does not deliver\u003C/h2>\u003Cp>When an app campaign spends nothing, or spends and produces nothing, the cause is almost always one of a short list. Work through it in this order, because each step is cheaper to check than the next:\u003C/p>\u003Cul class=\"list-bullet\">\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"1\"\n        >\u003Cstrong>The app or store listing is not eligible.\u003C/strong> Region availability, age rating, and store status all gate delivery. An app that is unavailable in a targeted country simply will not be served there.\u003C/li>\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"2\"\n        >\u003Cstrong>The optimization event is not arriving.\u003C/strong> Check the events view for recency, not just for existence. An event that stopped arriving three versions ago still shows up in the list.\u003C/li>\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"3\"\n        >\u003Cstrong>The optimization target is too deep for the current volume.\u003C/strong> Optimizing toward a rare in-app event when the account is producing few of them per week leaves the system without enough examples to bid on. Optimizing one step earlier in the funnel and moving deeper once volume exists is the usual fix.\u003C/li>\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"4\"\n        >\u003Cstrong>The audience is too narrow for the objective.\u003C/strong> App campaigns generally want room to find installers. Layering several narrow conditions on top of each other constrains delivery in a way that is easy to mistake for a bidding problem. Overlapping audiences add a second, subtler version of this — worth checking with the overlap tooling before assuming the bid is at fault.\u003C/li>\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"5\"\n        >\u003Cstrong>Creative is not in the formats the placements need.\u003C/strong> Missing vertical assets quietly removes whole placements from the auction.\u003C/li>\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"6\"\n        >\u003Cstrong>The account itself is restricted.\u003C/strong> If ads are being rejected or the account is under review, no campaign-level change will help until that is resolved. \u003Ca href=\"https://deepclick.com/resources/blog/ad-account-review-compliance-playbook-2026/\">What to do when an ad account goes under review\u003C/a> covers that path.\u003C/li>\u003C/ul>\u003Ch2>Reading the numbers without fooling yourself\u003C/h2>\u003Cp>App campaigns produce three sets of numbers that will not match, and this is expected rather than a bug:\u003C/p>\u003Cp>\u003Cstrong>Meta&#39;s reported installs\u003C/strong> are attributed by Meta, on Meta&#39;s attribution settings, within Meta&#39;s window. \u003Cstrong>Your MMP&#39;s installs\u003C/strong> are attributed by the MMP, which may apply different windows and its own deduplication across networks. \u003Cstrong>The store&#39;s install count\u003C/strong> counts installs from every source, including organic, and on its own calendar.\u003C/p>\u003Cp>Comparing them is useful; expecting them to be equal is not. What is worth investigating is a change in the \u003Cem>gap\u003C/em> — if Meta and your MMP normally sit within a stable band of each other and suddenly diverge, that usually points at an integration change rather than at performance.\u003C/p>\u003Cp>On iOS the gap widens further because measurement is aggregated and delayed by design. Treat iOS reporting as a trend indicator over days, not as a same-day feedback loop.\u003C/p>\u003Ch2>When an app campaign is the wrong tool\u003C/h2>\u003Cp>Two situations come up often enough to name.\u003C/p>\u003Cp>The first is when the real bottleneck is retention rather than acquisition. If installs arrive and then stop opening the app, buying more installs makes the problem more expensive rather than smaller. \u003Ca href=\"https://deepclick.com/resources/blog/re-engage-paid-app-users/\">Re-engaging paid app users who bounce on day one\u003C/a> is the more useful lever there.\u003C/p>\u003Cp>The second is when store distribution itself is the constraint — a listing that keeps getting pulled, a category with heavy review friction, or a market where the store is not the main install path. In those cases the campaign is fine and the destination is the problem. Some teams route around it with a web-installable experience instead of a store listing; \u003Ca href=\"https://deepclick.com/resources/blog/progressive-web-apps-for-advertising/\">progressive web apps as an APK alternative for install campaigns\u003C/a> covers what that changes and what it costs you.\u003C/p>\u003Ch2>A pre-launch checklist\u003C/h2>\u003Cp>Before an app promotion campaign goes live, confirm each of these directly rather than from memory:\u003C/p>\u003Cul class=\"list-bullet\">\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"1\"\n        >The app is claimed, the store listing is linked, and the app appears in the destination selector.\u003C/li>\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"2\"\n        >The optimization event has been received within the last few days, from the current app version.\u003C/li>\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"3\"\n        >If an MMP is used, the partner link is active on both sides.\u003C/li>\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"4\"\n        >iOS events are configured and prioritized, and you are not planning to change them mid-flight.\u003C/li>\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"5\"\n        >The target countries are ones where the listing is actually available.\u003C/li>\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"6\"\n        >Creative exists in every aspect ratio the selected placements require.\u003C/li>\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"7\"\n        >The optimization target matches the volume the account can realistically produce.\u003C/li>\u003C/ul>\u003Cp>None of this guarantees performance. It removes the failure modes that look like performance problems but are not — which is most of them.\u003C/p>\u003Ch2>Frequently asked questions\u003C/h2>\u003Cp>\u003Cstrong>Can one campaign promote more than one app?\u003C/strong> No. The app is set at the campaign level, so each app needs its own campaign.\u003C/p>\u003Cp>\u003Cstrong>Does switching the optimization event restart learning?\u003C/strong> Yes. Changing what the system is bidding toward changes the problem it is solving, and delivery re-stabilizes afterward. Batch such changes rather than making them one at a time.\u003C/p>\u003Cp>\u003Cstrong>Why do installs appear in the store but not in reporting?\u003C/strong> Either the event is not being sent, the attribution window closed before the install, or the install is organic and was never attributable to the campaign in the first place.\u003C/p>\u003Cp>\u003Cstrong>Is deep linking required?\u003C/strong> Not for acquiring new installs, but it matters for re-engagement, where the ad should open a specific in-app location rather than the home screen. \u003Ca href=\"https://deepclick.com/resources/blog/mobile-deep-linking-guide/\">Mobile deep linking\u003C/a> covers the setup.\u003C/p>\u003Ch2>The short version\u003C/h2>\u003Cp>An app promotion campaign is a measurement setup with an ad campaign attached. The campaign settings are the easy part; the parts that decide whether it works — app verification, event delivery, MMP handshake, iOS event configuration, and an optimization target the account can actually feed — all sit upstream of the campaign editor. Check those first, and most &quot;delivery problems&quot; stop being mysterious.\u003C/p>\u003Cp>The fastest way to know what your account offers today is to open the campaign creation flow and read the options in front of you. Platform surfaces change; the dependency order in this article is what tends to stay put.\u003C/p>\u003C/div>","https://deepclick.com/resources/blog/meta-app-promotion-campaign",{"zh-CN":407,"en":407},[432],{"id":65,"title":433,"site":434,"image":436,"mobileImage":446,"targetUrl":454,"enabled":403,"postDateFrom":455,"postDateTo":456,"updatedAt":457,"createdAt":458},"2026.10.20 Jakarta summit (deepclick)",{"id":17,"key":386,"name":387,"prodHost":388,"testHost":389,"blogPath":390,"docPath":391,"zhPrefix":392,"deployHookTest":393,"deployHookProd":394,"brandAuthor":58,"brandKit":435,"enabled":403,"updatedAt":404,"createdAt":405},{"logoLight":18,"logoDark":18,"primaryColor":400,"accentColor":401,"tagline":402,"wechatName":18,"xhsHandle":18,"wechatQr":18},{"id":437,"alt":438,"updatedAt":439,"createdAt":439,"url":440,"thumbnailURL":18,"filename":441,"mimeType":442,"filesize":443,"width":444,"height":445},1068,"TrafficTalking Jakarta summit 2026.10.20 (en)","2026-09-04T10:44:12.868Z","https://cms-r2.deepclick.com/traffictalking-jakarta-banner-en-9f7ee22f6562.png","traffictalking-jakarta-banner-en-9f7ee22f6562.png","image/png",1565832,2000,400,{"id":447,"alt":448,"updatedAt":449,"createdAt":449,"url":450,"thumbnailURL":18,"filename":451,"mimeType":442,"filesize":452,"width":453,"height":445},1070,"TrafficTalking Jakarta summit 2026.10.20 (mobile-en)","2026-09-04T10:44:23.791Z","https://cms-r2.deepclick.com/traffictalking-jakarta-banner-mobile-en-3ef8e652bbac.png","traffictalking-jakarta-banner-mobile-en-3ef8e652bbac.png",580158,1200,"https://t.me/rrrun_r","2026-09-03T00:00:00.000Z","2026-10-04T00:00:00.000Z","2026-09-04T10:45:05.578Z","2026-09-04T10:45:03.031Z",1788753168879]