[{"data":1,"prerenderedAt":19361},["ShallowReactive",2],{"author-posts-nico":3},[4,1561,2455,4272,4803,5864,7563,8055,8622,9702,10806,12939,16037,17424,17829,18242,18624],{"id":5,"title":6,"author":7,"body":8,"breadcrumbLabel":7,"category":1523,"cover":1524,"createdAt":1525,"description":1526,"extension":1527,"faqs":1528,"meta":1546,"navigation":1547,"noAiBadge":1524,"og":1524,"ogDescription":7,"ogIcon":7,"path":1548,"seo":1549,"slug":1550,"stem":1551,"tags":1552,"updatedAt":1525,"wip":1524,"__hash__":1560},"resources\u002Fresources\u002Fads-examples\u002Fb2b-ad-examples.md","B2B Ad Examples: 29 Real Ads With Breakdowns (Meta, LinkedIn, Google)",null,{"type":9,"value":10,"toc":1461},"minimark",[11,15,23,36,49,52,57,62,75,81,88,95,101,104,108,117,122,129,136,141,143,147,157,162,169,176,181,183,187,198,203,210,217,222,224,228,238,243,249,256,261,263,267,277,282,289,296,301,303,307,318,323,330,337,342,344,348,357,362,369,376,381,383,387,396,401,408,415,420,422,426,435,440,447,454,459,461,465,475,480,487,494,499,501,505,515,520,527,534,539,541,545,555,560,567,574,579,581,585,594,599,606,613,618,620,624,633,638,645,652,657,659,663,666,669,673,683,688,695,702,707,709,713,721,726,733,740,745,747,751,760,765,771,778,783,785,789,798,803,809,816,821,823,827,836,841,847,854,859,861,865,874,879,885,892,897,899,903,912,917,924,931,936,938,942,945,948,952,958,963,970,976,981,983,987,994,999,1005,1008,1013,1015,1019,1026,1031,1037,1040,1045,1047,1051,1058,1063,1069,1075,1089,1091,1095,1101,1106,1113,1120,1125,1127,1131,1138,1143,1150,1157,1162,1164,1168,1175,1180,1187,1194,1199,1201,1205,1208,1212,1215,1219,1225,1229,1232,1236,1239,1261,1264,1268,1274,1278,1281,1285,1288,1292,1295,1299,1302,1306,1313,1317,1320,1324,1328,1331,1335,1348,1352,1360,1364,1376,1380,1383,1387,1390,1422,1429,1447,1450],[12,13,14],"p",{},"B2B companies often think their buyers live on LinkedIn and nowhere else. Whitepapers, webinars, InMails.",[12,16,17,18,22],{},"That assumption is expensive. ",[19,20,21],"strong",{},"B2B buyers spend 74% more time on Facebook than the average user."," They search Google for solutions between meetings. They scroll LinkedIn during commutes. They browse Facebook after hours. The best B2B advertisers meet them on all three platforms, with messaging tailored to each.",[12,24,25,26,29,30,35],{},"We pulled ",[19,27,28],{},"29 real B2B ads"," across Meta, LinkedIn, and Google from our ",[31,32,34],"a",{"href":33},"\u002Ftools\u002Fad-library\u002Fb2b-saas","Ad Library"," database. Every ad is from a real campaign, with data on how long it has been active. These are not mockups or hypothetical examples.",[12,37,38,41,42,48],{},[19,39,40],{},"Why ad longevity matters:"," If a company keeps running the same ad for 90+ days, it is almost certainly profitable. B2B advertisers track pipeline value closely. They do not waste budget on underperformers. ",[31,43,47],{"href":44,"rel":45},"https:\u002F\u002Fwww.hubspot.com\u002Fstate-of-marketing",[46],"nofollow","HubSpot's State of Marketing report"," confirms that a multi-platform approach is the standard for high-performing B2B lead generation.",[12,50,51],{},"Use these examples to study how top B2B companies solve the hardest advertising problem: reaching decision-makers across every platform they use.",[53,54,56],"h2",{"id":55},"meta-facebook-ads","Meta (Facebook) Ads",[58,59,61],"h3",{"id":60},"_1-intercom-the-fake-conversation-that-sells","1. Intercom: The Fake Conversation That Sells",[63,64,72],"ad-card",{"ad-id":65,"company":66,"media-type":67,"website":68,"headline":69,"cta":70,"display-link":71},"6904ade558f444a664a11a37","Intercom","image","https:\u002F\u002Fwww.intercom.com","See Fin in action.","Learn more","FIN.AI",[12,73,74],{},"Fin is the best-performing AI Agent for Financial Services, accurately resolving complex queries like card issues and transaction disputes.",[12,76,77],{},[78,79,80],"em",{},"Cold audience · Running for 113 days · 223 ad variations",[12,82,83,84,87],{},"The entire image is a mock conversation: a customer reports an unrecognized $42.50 charge, and Fin asks to verify identity before helping. That's a high-stakes scenario, the kind that makes finance companies nervous about AI. By showing it handled correctly, Intercom preemptively answers the #1 objection: ",[19,85,86],{},"can AI deal with sensitive stuff like credit card disputes?"," The chat UI feels real enough that you can picture it inside your own product. When you're selling to skeptical buyers, showing the product handling a hard case beats any feature list.",[12,89,90,91,94],{},"The copy keeps repeating \"complex\" on purpose. \"Unmatched accuracy for complex financial queries.\" Intercom isn't going after teams that need a basic FAQ bot. They're targeting financial services with real, messy support tickets. ",[19,92,93],{},"When your copy uses industry-specific language, it filters out the wrong people and makes the right ones feel like you built this for them."," 223 variations means they're running this playbook across multiple verticals.",[12,96,97,100],{},[19,98,99],{},"Takeaway:"," Show your product handling the scariest use case your buyer can imagine, so the demo itself neutralizes their biggest objection.",[102,103],"hr",{},[58,105,107],{"id":106},"_2-settle-margins-you-can-see","2. Settle: Margins You Can See",[63,109,114],{"ad-id":110,"company":111,"media-type":67,"website":112,"headline":113,"cta":70},"69085776318df4f6e235caa3","Settle","https:\u002F\u002Fwww.settle.com","Automate Back Office Chaos for Good",[12,115,116],{},"Manual work isn't what drives growth. With Settle, finance teams cut down on busywork, automate reporting, and trust their numbers every month.",[12,118,119],{},[78,120,121],{},"Cold audience · Running for 115 days · 58 ad variations",[12,123,124,125,128],{},"Four product illustrations, each with a green badge showing a specific margin: +38%, +43%, +51%, +49%. Your eye jumps to the numbers before you read anything else. ",[19,126,127],{},"That's showing the outcome instead of describing the product."," Those percentages are realistic enough to feel like a real dashboard, not a marketing fantasy. You don't need to understand what Settle does to want those numbers on your own products. For a CPG finance team, this visual IS the value proposition.",[12,130,131,132,135],{},"\"Know Your Margins. Every Time.\" takes a vague anxiety every CPG founder has and turns it into a promise. The copy names two things teams currently do in separate tools: \"Real-time inventory + bill pay in one platform.\" But the real targeting is in the details: \"SKU-level accuracy\" and \"Built for CPG.\" ",[19,133,134],{},"When your ad uses your customer's own vocabulary, it filters out everyone else."," Most fintech ads try to speak to everyone. Settle narrows it to a buyer who tracks margins at the SKU level.",[12,137,138,140],{},[19,139,99],{}," Put specific outcome numbers in your image so viewers compare them against their own results before reading a single word of copy.",[102,142],{},[58,144,146],{"id":145},"_3-scribvet-three-steps-to-sell-simplicity","3. ScribVet: Three Steps to Sell Simplicity",[63,148,154],{"ad-id":149,"company":150,"media-type":67,"website":151,"headline":152,"cta":70,"display-link":153},"68f44454989263f0b30d6d54","ScribVet","https:\u002F\u002Fscribvet.com","Veterinary Notes in seconds, not hours!","SCRIBVET.COM",[12,155,156],{},"Tired of spending hours writing veterinary notes? ScribVet transforms spoken notes into detailed veterinary records in seconds.",[12,158,159],{},[78,160,161],{},"Cold audience · Running for 396 days · 12 ad variations",[12,163,164,165,168],{},"\"SOAP notes in seconds:\" followed by three bullet points. Record, let the AI write, \"...Yep, that's it.\" That third bullet does all the work. Vets know SOAP notes are tedious, so ScribVet doesn't explain the pain. The image sells ",[19,166,167],{},"the simplicity of the solution",". Three steps is already easy, but ending with \"Yep, that's it\" makes it feel almost too easy. The minimalist white background reinforces the same message: simple, clean, no fuss.",[12,170,171,172,175],{},"The copy opens with \"Tired of spending hours writing veterinary notes?\" which is a textbook pain-point hook. But the smarter move is \"5x faster than typing.\" That's a concrete number vets can measure against their own experience. If you're writing notes for 30 minutes, 5x faster means 6 minutes. ",[19,173,174],{},"The math does the selling for you."," Still active after 472 days on a single variation, which is remarkable for any ad on any platform.",[12,177,178,180],{},[19,179,99],{}," Reduce your product's value to a simple multiplier (\"5x faster\") so your audience does the ROI math in their own head.",[102,182],{},[58,184,186],{"id":185},"_4-notion-the-12000-anchor","4. Notion: The $12,000 Anchor",[63,188,195],{"ad-id":189,"company":190,"media-type":67,"website":191,"headline":192,"cta":193,"display-link":194},"69845315093d304a381da9b1","Notion","https:\u002F\u002Fwww.notion.com","Get 3 Free Months of Notion Business","Get offer","FB.ME",[12,196,197],{},"Act Fast: Get Your Notion Business Plan FREE for 3 Months. Full AI Suite Included. No Credit Card Required.",[12,199,200],{},[78,201,202],{},"Cold audience · Running for 111 days",[12,204,205,206,209],{},"The bright yellow background doesn't look like a typical SaaS ad. It looks like a conference poster, which makes it blend into feeds instead of feeling like an interruption. \"Get up to $12,000 of Free Notion\" sits below the CTA button and does more work than the headline. Most people will never use $12,000 worth of AI agents, but that number reframes a free trial into a massive gift. ",[19,207,208],{},"That's anchoring",": you stop thinking about whether Notion is worth trying and start thinking about how much value you'd be leaving on the table.",[12,211,212,213,216],{},"The primary text is a wall of checkmarks, each naming a specific capability: \"AI analyzes PDFs, images & documents,\" \"Turn pages into professional websites instantly.\" They're not selling \"productivity\" as an abstract concept. ",[19,214,215],{},"They're listing concrete things you can do tomorrow."," That matters because Notion competes with dozens of tools, and vague positioning gets ignored. \"No Credit Card Required\" removes the last bit of friction.",[12,218,219,221],{},[19,220,99],{}," Anchor your free trial to a high dollar value so prospects feel the cost of not trying, then list specific actions they can take on day one.",[102,223],{},[58,225,227],{"id":226},"_5-headshotpro-beating-chatgpt-at-its-own-game","5. HeadshotPro: Beating ChatGPT at Its Own Game",[63,229,235],{"ad-id":230,"company":231,"media-type":67,"website":232,"headline":233,"cta":70,"display-link":234},"6937b51bf24d7c4817b9886b","HeadshotPro","https:\u002F\u002Fwww.headshotpro.com","Best AI Headshots","HEADSHOTPRO.COM",[12,236,237],{},"Professional business headshots, done for you in 2 hours or less. 100% Online. No appointments. Get hundreds of photos back in 2 hours or less.",[12,239,240],{},[78,241,242],{},"Cold audience · Running for 91 days · 12 ad variations",[12,244,245,246],{},"A casual kitchen selfie on the left, a polished studio headshot on the right, same person. That transformation is the entire pitch. You don't need to explain what AI headshots are when the proof is sitting right there. \"Sorry, ChatGPT\" in the headline is clever because they're competing against the thing everyone has already tried. Most people have thrown a selfie into ChatGPT hoping for a LinkedIn photo. ",[19,247,248],{},"By calling that out, they tap into a shared experience that creates instant recognition.",[12,250,251,252,255],{},"The copy stacks reassurance in a specific order. \"2 hours or less\" appears twice, telling you speed is the main objection they're fighting. Then the checklist handles everything else: no appointments, hundreds of photos, 10 minutes to sign up, full refund guarantee. Each line removes one more reason to say no. ",[19,253,254],{},"\"Full refund if you don't get an incredible headshot\" sets the quality bar high on purpose",", which actually increases trust because it signals confidence in the product.",[12,257,258,260],{},[19,259,99],{}," Name the free alternative your audience already tried (and was disappointed by), then show a side-by-side result that makes your paid product the obvious upgrade.",[102,262],{},[58,264,266],{"id":265},"_6-clickup-the-consolidation-play","6. ClickUp: The Consolidation Play",[63,268,274],{"ad-id":269,"company":270,"media-type":67,"website":271,"headline":272,"cta":70,"display-link":273},"695f8c5b06f9f00d6c63e97e","ClickUp","https:\u002F\u002Fclickup.com","The everything app for work","CLICKUP.COM",[12,275,276],{},"This app is the #1 productivity tool 2025.",[12,278,279],{},[78,280,281],{},"Cold audience · Running for 144 days · 14 ad variations",[12,283,284,285,288],{},"The image lists seven tools most teams already use: Projects, Chat, Email, Recordings, Documents, Whiteboards, Time Tracking. Each sits in its own card, and they all connect with a line flowing into the ClickUp logo. ",[19,286,287],{},"The mess is on the left, the solution is on the right."," Anyone managing a team across Slack, Gmail, Notion, and Loom will feel that image before they process the words. The visual structure IS the argument.",[12,290,291,292,295],{},"The copy says \"This app is the #1 productivity tool 2025.\" That's ",[19,293,294],{},"borrowing authority from a ranking to skip the trust-building phase entirely",". When you claim the number one spot, people don't ask \"is this good?\" They ask \"why haven't I tried this yet?\" The headline, \"The everything app for work,\" reinforces what the image already showed. For a product that does seven things, showing restraint in the ad itself is the smartest move.",[12,297,298,300],{},[19,299,99],{}," Visually map the scattered tools your buyer already uses flowing into your single product, so the image makes the consolidation argument before the copy does.",[102,302],{},[58,304,306],{"id":305},"_7-motion-the-30-minute-monday-routine","7. Motion: The 30-Minute Monday Routine",[63,308,315],{"ad-id":309,"company":310,"media-type":311,"website":312,"headline":313,"cta":70,"display-link":314},"698436ec093d304a381c0ef4","Motion","video","https:\u002F\u002Fwww.usemotion.com","Get 25% more done","WWW.USEMOTION.COM",[12,316,317],{},"There's a new way to get 25% more done.",[12,319,320],{},[78,321,322],{},"Cold audience · Running for 542 days",[12,324,325,326,329],{},"The video walks through a morning routine, minute by minute, from 6:00am to 6:30am. Each step is timestamped, making the whole thing feel achievable. You're not watching a product demo, you're watching someone's actual workflow. The woman on the balcony looks like any creator posting a \"day in my life\" reel. ",[19,327,328],{},"It blends right into organic content",", which is why it's been running for 542 days with a single variation.",[12,331,332,333,336],{},"The hook does something clever: \"Them: what's your secret? Me: I spend 30 minutes on Monday to save 11h\u002Fweek.\" That's a 22x return on time, framed as a secret someone asked about. It feels like overheard advice, not a pitch. The Facebook copy says \"There's a new way to get 25% more done.\" Vague on purpose. It doesn't mention AI or scheduling. ",[19,334,335],{},"It just promises a result",", which is all anyone scrolling their feed cares about.",[12,338,339,341],{},[19,340,99],{}," Frame your product as a timestamped daily routine that blends into organic \"day in my life\" content, so it feels like a creator tip instead of an ad.",[102,343],{},[58,345,347],{"id":346},"_8-ramp-the-office-spending-interrogation","8. Ramp: The Office Spending Interrogation",[63,349,354],{"ad-id":350,"company":351,"media-type":311,"website":352,"cta":70,"display-link":353},"6905909eba0dd30d7e12ef11","Ramp","https:\u002F\u002Framp.com","RAMP.COM",[12,355,356],{},"Kolin reviews the team's spending on their Ramp cards for the month.",[12,358,359],{},[78,360,361],{},"Cold audience · Running for 90 days",[12,363,364,365,368],{},"The hook isn't about Ramp at all. A boss calls employees in one by one to review their corporate card spending, and the numbers are absurd: $133,645 in 30 days, $13,500 to a reptile company. Each confrontation gets funnier because the employees genuinely don't think they did anything wrong. ",[19,366,367],{},"The product disappears into the entertainment."," You're watching a comedy sketch, not an ad, which means you don't skip it. By the time you realize this is about expense management, you've already absorbed the message.",[12,370,371,372,375],{},"The primary text is just one line: \"Kolin reviews the team's spending on their Ramp cards for the month.\" No features, no benefits, no CTA in the copy. ",[19,373,374],{},"The video does 100% of the selling",", so the copy just sets the scene. Every ridiculous expense in the sketch is a real pain point for finance teams. Stilt walkers for an office party? A T-Rex rental? Anyone who has managed company cards knows the reality isn't far off.",[12,377,378,380],{},[19,379,99],{}," Turn your buyer's real pain points into an absurd comedy sketch, then let the product appear naturally as the solution without ever pitching it.",[102,382],{},[58,384,386],{"id":385},"_9-seoptimer-the-free-audit-hook","9. SEOptimer: The Free Audit Hook",[63,388,393],{"ad-id":389,"company":390,"media-type":67,"website":391,"headline":392,"cta":70},"6959940b0de4bee17e7f5c28","GrowthBar","https:\u002F\u002Fwww.seoptimer.com","Get a FREE SEO health check",[12,394,395],{},"Not ranking on Google? Stop guessing and start optimizing your entire site in seconds.",[12,397,398],{},[78,399,400],{},"Cold audience · Running for 146 days",[12,402,403,404,407],{},"The image shows a mock audit report: a C- grade, category scores from A- to F, and a pink \"Recommendations: 21\" badge. Showing a mediocre score is intentional. ",[19,405,406],{},"Nobody looks at an A+ report and thinks \"I need this tool.\""," A C- triggers curiosity and a little anxiety. You immediately wonder what YOUR score would be. That's the gap between \"interesting ad\" and \"I have to click this right now.\"",[12,409,410,411,414],{},"\"Not ranking on Google? Stop guessing.\" That addresses a pain most site owners feel but can't diagnose on their own. Then comes the free offer: \"Audit your site for free today.\" When your product delivers value before asking for anything, the ad almost sells itself. ",[19,412,413],{},"Give people a taste of the insight, show them what they're missing",", and the upgrade conversation happens naturally.",[12,416,417,419],{},[19,418,99],{}," Show a mediocre score in your free audit ad, not a perfect one, so viewers feel compelled to check their own.",[102,421],{},[58,423,425],{"id":424},"_10-bluebeam-selling-outcomes-not-features","10. Bluebeam: Selling Outcomes, Not Features",[63,427,432],{"ad-id":428,"company":429,"media-type":67,"website":430,"headline":431,"cta":70},"68f98cd1c5aaeecbf5ee3a3d","Bluebeam","https:\u002F\u002Fwww.bluebeam.com","Get Price",[12,433,434],{},"Go beyond basic PDFs. Bluebeam gives you powerful tools to mark up, measure, and annotate directly on your plans, so teams can stay aligned and move faster.",[12,436,437],{},[78,438,439],{},"Cold audience · Running for 234 days · 12 ad variations",[12,441,442,443,446],{},"\"Cut Errors. Save Time. Win Projects.\" Three sentences that speak directly to what construction teams care about. The image doesn't show the software. It stacks three proof points: ",[19,444,445],{},"3x more bids, 5x faster estimating, 50% more projects won."," Anyone in construction estimating knows winning more projects is the entire game. The blueprint-blue background immediately signals \"this is for people who work with plans\" without saying it.",[12,448,449,450,453],{},"The copy takes the opposite approach, getting into the product: \"mark up, measure, and annotate directly on your plans.\" ",[19,451,452],{},"The image sells the outcome, the copy sells the tool."," The headline says \"Get Price\" instead of \"Learn More,\" which pre-qualifies clicks by telling people they'll see pricing. You don't click \"Get Price\" unless you're actually considering buying. That filters out casual browsers and sends higher-intent traffic to the landing page.",[12,455,456,458],{},[19,457,99],{}," Use \"Get Price\" instead of \"Learn More\" as your CTA to pre-qualify clicks and send only high-intent buyers to your landing page.",[102,460],{},[58,462,464],{"id":463},"_11-slack-the-post-holiday-nightmare","11. Slack: The Post-Holiday Nightmare",[63,466,472],{"ad-id":467,"company":468,"media-type":311,"website":469,"headline":470,"cta":70,"display-link":471},"69589d47ffea625d09052d8c","Slack","https:\u002F\u002Fslack.com","Try AI in Slack. Work smarter.","SLACK.COM",[12,473,474],{},"AI shouldn't make you think, it should help you do. Discover a powerfully simple way to be more productive today, with AI in Slack.",[12,476,477],{},[78,478,479],{},"Cold audience · Running for 36 days · 7 ad variations",[12,481,482,483,486],{},"\"Coming back from holiday where you're running multiple businesses is an absolute nightmare.\" The creator doesn't start with Slack or AI. He starts with holiday footage, luggage, a boat. Then he's at a desk with hundreds of unread messages. ",[19,484,485],{},"The first 7 seconds feel like a rant from a founder you follow, not an ad for enterprise software."," By the time Slack AI enters at the 24-second mark, you're already nodding along. That's the whole strategy: make the problem feel personal before the product shows up.",[12,488,489,490,493],{},"The screen recording shows him selecting channels, getting AI recaps, and marking everything as read. It takes an abstract feature (\"AI summaries\") and makes it tangible. The copy says \"AI shouldn't make you think, it should help you do,\" which is ",[19,491,492],{},"a clean way to position against the \"AI is overwhelming\" narrative",". \"Running multiple businesses\" speaks directly to founders who'd actually have buying power for a Slack upgrade.",[12,495,496,498],{},[19,497,99],{}," Open your video with a relatable personal frustration for 7+ seconds before mentioning your product, so viewers engage with the story before realizing it's an ad.",[102,500],{},[58,502,504],{"id":503},"_12-cognism-rewriting-the-buyers-inner-monologue","12. Cognism: Rewriting the Buyer's Inner Monologue",[63,506,512],{"ad-id":507,"company":508,"media-type":67,"website":509,"headline":510,"cta":70,"display-link":511},"690840ca318df4f6e23596fd","Cognism","https:\u002F\u002Fwww.cognism.com","Claim your free data sample","INFO.COGNISM.COM",[12,513,514],{},"Hey there, send us a list of accounts you're dying to break into. We'll give you a sample of leads for those accounts, absolutely free.",[12,516,517],{},[78,518,519],{},"Retargeting · 16 ad variations",[12,521,522,523,526],{},"The image uses strikethrough text. Crossed-out lines read like someone's frustration: \"I'm losing it trying to pick the best B2B data provider from 100s of pushy vendors.\" Then two remaining purple lines flip that into action: \"I'm ready to test a data sample.\" You read it both ways. First the full complaint, then just the purple text. ",[19,524,525],{},"That double reading turns the viewer's pain into Cognism's CTA."," No screenshots, no dashboards. Just a single reframe that moves someone from overwhelmed to ready.",[12,528,529,530,533],{},"The copy matches: \"send us a list of accounts you're dying to break into.\" The offer, a free sample of your own target accounts, is smart because ",[19,531,532],{},"it's a personalized test drive, not a generic whitepaper",". If the sample data is good, you basically sell yourself on switching. Low commitment + high relevance makes it hard to ignore for anyone already vendor-shopping.",[12,535,536,538],{},[19,537,99],{}," Offer a free sample using your prospect's own data (their accounts, their site, their list) so the trial itself becomes the sales pitch.",[102,540],{},[58,542,544],{"id":543},"_13-klaviyo-stealing-from-the-competition","13. Klaviyo: Stealing From the Competition",[63,546,552],{"ad-id":547,"company":548,"media-type":67,"website":549,"headline":550,"cta":551},"69552d8b82f9bc19eec78870","Klaviyo","https:\u002F\u002Fwww.klaviyo.com","Integrations that keep up","Sign up",[12,553,554],{},"Klaviyo's 350+ integrations keep your data systems talking so your brand stays moving.",[12,556,557],{},[78,558,559],{},"Retargeting · Running for 59 days · 7 ad variations",[12,561,562,563,566],{},"\"50k brands moved from Mailchimp to Klaviyo.\" That number doesn't say Klaviyo is better. It says 50,000 brands already made the decision for you. If you're a Mailchimp user who's been frustrated, that stat removes the risk. ",[19,564,565],{},"You're not an early adopter taking a gamble, you're late to the party."," Using Mailchimp's own mascot imagery (the chimps) turns a competitor's brand asset into a visual argument against them. Every Mailchimp user instantly recognizes those illustrations, which means the ad stops them before they read a word.",[12,568,569,570,573],{},"\"Time to switch\" is the entire CTA, and it works because everything above already did the convincing. The copy mentions \"350+ integrations,\" targeting a specific pain for brands outgrowing Mailchimp. ",[19,571,572],{},"When you position your product as where everyone is already going",", the question shifts from \"should I switch?\" to \"why haven't I switched yet?\"",[12,575,576,578],{},[19,577,99],{}," Lead with the number of people who already switched from your competitor, so the decision feels like catching up rather than taking a risk.",[102,580],{},[58,582,584],{"id":583},"_14-foreplay-show-the-product-skip-the-pitch","14. Foreplay: Show the Product, Skip the Pitch",[63,586,591],{"ad-id":587,"company":588,"media-type":67,"website":589,"headline":590,"cta":70},"695d8c0eb30ac4442040ede1","Foreplay","https:\u002F\u002Fwww.foreplay.co","Introducing Foreplay",[12,592,593],{},"\"Foreplay allowed us to find better ads, make them and learn from them really really fast\" - Christina Bell, Growth Lead @ Webtopia",[12,595,596],{},[78,597,598],{},"Retargeting · 9 ad variations",[12,600,601,602,605],{},"The bottom half of this ad is a screenshot of Foreplay's actual interface: swipe file, ad cards, real brands like RIMOWA and Alphalete in the grid. It's not a mockup. For a tool that helps marketers save and study ads, ",[19,603,604],{},"showing the real UI is the strongest proof you can offer",". You don't need to explain what it does when people can just look at it. The dark gradient fading into the screenshot keeps the top clean while making the product extend beyond the frame.",[12,607,608,609,612],{},"The copy leans on a testimonial from Christina Bell, Growth Lead at Webtopia. For a retargeting audience, ",[19,610,611],{},"that role-specific social proof"," hits different than generic praise. The headline just says \"Introducing Foreplay\" with a low-pressure CTA. When your audience is already warm, you don't need to sell hard. You just need to remind them why other marketers love it. \"Start a 7 day free trial\" gives them an easy next step.",[12,614,615,617],{},[19,616,99],{}," Pair a real product screenshot with a testimonial from someone whose job title matches your target buyer, so warm audiences see both the tool and the social proof in one glance.",[102,619],{},[58,621,623],{"id":622},"_15-mondaycom-overthinking-as-the-hook","15. monday.com: Overthinking as the Hook",[63,625,630],{"ad-id":626,"company":627,"media-type":311,"website":628,"headline":629,"cta":551},"695d5004c1cdf0c9efa0bba7","monday.com","https:\u002F\u002Fmonday.com","Still deciding? Consider it done!",[12,631,632],{},"Happens to the best of us. No worries! Start your free trial and see why most of the F500 use monday.com.",[12,634,635],{},[78,636,637],{},"Retargeting",[12,639,640,641,644],{},"The entire video is a single interaction: a cursor clicks \"Try it for free,\" confetti explodes, and the button turns green with \"Done.\" Then it loops. No product demo, no features, no testimonials. monday.com is betting their audience already knows what the product does. Instead of explaining it again, ",[19,642,643],{},"they address the real blocker: hesitation",". \"You're probably overthinking this\" calls out exactly what someone in the consideration phase is doing. The video literally shows them how easy the next step is. One click. Done. Confetti.",[12,646,647,648,651],{},"The copy drops \"most of the F500 use monday.com\" like it's no big deal, which makes it even more persuasive. They don't list logos or say \"trusted by 200,000 companies.\" ",[19,649,650],{},"They go straight for the Fortune 500 because that signals enterprise credibility in five words."," \"Still deciding? Consider it done!\" mirrors the video perfectly. Everything in this ad makes signing up feel like the easiest decision you'll make today.",[12,653,654,656],{},[19,655,99],{}," For retargeting ads, stop explaining your product and instead call out the hesitation itself, then make the signup feel like one effortless click.",[102,658],{},[53,660,662],{"id":661},"linkedin-ads","LinkedIn Ads",[12,664,665],{},"LinkedIn is the most expensive ad platform per click, but it is the only place where you can target people by job title, company size, and industry simultaneously. For B2B, that precision is worth the premium. A VP of Engineering at a 500-person company will see your ad because they are a VP of Engineering at a 500-person company, not because they liked a business page once.",[12,667,668],{},"The best B2B LinkedIn ads look like advice from a smart colleague, not a pitch from a vendor. They blend into the professional feed by using formats that resemble organic posts. If you want to see B2B LinkedIn ads across more industries, check out our SaaS Ad Examples collection.",[58,670,672],{"id":671},"_16-foleon-the-pdf-call-out","16. Foleon: The PDF Call-Out",[63,674,680],{"ad-id":675,"company":676,"media-type":67,"website":677,"headline":678,"platform":679},"696cc8067e2df6b472bd8f6b","Foleon","https:\u002F\u002Ffoleon.com","Send us a PDF. We'll show you what engagement looks like.","linkedin",[12,681,682],{},"70% of your audience is on mobile and won't read your PDF.",[12,684,685],{},[78,686,687],{},"Cold audience · Running for 809 days · 1 ad variation",[12,689,690,691,694],{},"\"Tell me you're not sending PDFs to actual prospects.\" Paired with a grumpy PDF icon, this ad makes you feel called out. Every B2B marketer on LinkedIn has sent a whitepaper, case study, or one-pager as a PDF this week. ",[19,692,693],{},"That emotional reaction, guilt mixed with humor, is what stops the scroll."," The image does not show Foleon's product. It shows the problem you have right now.",[12,696,697,698,701],{},"The primary text backs it up with a stat: 70% of your audience is on mobile and will not read your PDF. That reframes the problem from \"PDFs are fine\" to \"you are losing most of your audience.\" Then the headline flips into a low-friction CTA: send us a PDF, we will show you what engagement looks like. ",[19,699,700],{},"They are not asking for a demo call. They are asking for a file you already have."," 809 days running on a single variation tells you this approach keeps working.",[12,703,704,706],{},[19,705,99],{}," Call out a specific behavior your B2B audience does every week (like sending PDFs) and make them feel the cost of not changing.",[102,708],{},[58,710,712],{"id":711},"_17-conveyor-the-honest-diy-review","17. Conveyor: The Honest DIY Review",[63,714,718],{"ad-id":715,"company":716,"media-type":67,"website":717,"platform":679},"69457d238abe263257a2a282","Conveyor","https:\u002F\u002Fconveyor.com",[12,719,720],{},"Yesterday, I stumbled across someone who built out a custom GPT for DIY security questionnaires and ran some quick tests!",[12,722,723],{},[78,724,725],{},"Cold audience · Running for 526 days · 1 ad variation",[12,727,728,729,732],{},"The image is a screenshot of ChatGPT showing a custom GPT for security questionnaires. That is the competitor, and Conveyor is running an ad that sends you to it. The entire post reads like someone genuinely evaluating a free tool, listing its limitations: specific formats only, cannot handle checkboxes, heavy manual setup. ",[19,730,731],{},"It never mentions Conveyor by name."," That is the whole strategy.",[12,734,735,736,739],{},"By honestly reviewing the DIY approach, Conveyor positions itself as the obvious next step without ever pitching. Anyone who reads this and thinks \"too much work\" is already pre-sold. ",[19,737,738],{},"For B2B security and compliance teams, credibility matters more than flash."," The copy is structured like a native LinkedIn post with hashtags and short paragraphs, which LinkedIn's algorithm rewards with more distribution.",[12,741,742,744],{},[19,743,99],{}," Honestly review the free DIY alternative your B2B audience already uses, then let your product be the obvious upgrade without ever naming it.",[102,746],{},[58,748,750],{"id":749},"_18-hubspot-the-free-template","18. HubSpot: The Free Template",[63,752,757],{"ad-id":753,"company":754,"media-type":67,"website":755,"headline":756,"platform":679},"697adee8157a4d6bc88d75b5","HubSpot","https:\u002F\u002Fhubspot.com","Free Marketing Plan Template",[12,758,759],{},"We built the definitive Marketing Plan Template so you don't have to.",[12,761,762],{},[78,763,764],{},"Cold audience · Running for 274 days · 1 ad variation",[12,766,767,768],{},"\"FREE\" in small text at the top, then \"Marketing Plan Template\" in massive bold type. On LinkedIn, the word \"FREE\" combined with something genuinely useful stops marketing managers mid-scroll. This is a lead magnet, and it works because the offer is dead simple: a template, no credit card, no demo call. ",[19,769,770],{},"The B2B play here is capturing emails from marketers who are actively planning.",[12,772,773,774,777],{},"The copy is one sentence: \"We built the definitive Marketing Plan Template so you don't have to.\" The word \"definitive\" tells you this is not a generic PDF, it is THE one. For B2B companies, the best LinkedIn lead magnets solve a real, recurring problem that your target buyer faces every quarter. ",[19,775,776],{},"HubSpot does not sell their CRM in this ad. They sell a shortcut to a task every marketer dreads."," The CRM conversation happens after the download.",[12,779,780,782],{},[19,781,99],{}," Offer a free template that solves a recurring professional pain point. The best B2B LinkedIn lead magnets require zero commitment and deliver immediate value.",[102,784],{},[58,786,788],{"id":787},"_19-coefficient-the-meme-that-targets-everyone","19. Coefficient: The Meme That Targets Everyone",[63,790,795],{"ad-id":791,"company":792,"media-type":67,"website":793,"headline":794,"platform":679},"694518468abe263257a10cf5","Coefficient","https:\u002F\u002Fcoefficient.io","Become the hero in your org by connecting live data to spreadsheets",[12,796,797],{},"We all use Google Sheets or Excel. But some work smarter, not harder. With Coefficient, 500K pros are automating data imports.",[12,799,800],{},[78,801,802],{},"Cold audience · Running for 430 days · 1 ad variation",[12,804,805,806],{},"\"People who use spreadsheets: 100%.\" It is a pie chart with one slice. The joke is obvious, and that is why it works on LinkedIn. A B2B tool for spreadsheet automation could default to a product screenshot. Instead, Coefficient uses a meme-format visual that says \"we understand your world\" without explaining a single feature. ",[19,807,808],{},"On a platform where most B2B ads look like pitch decks, humor is the strongest pattern interrupt.",[12,810,811,812,815],{},"The copy pivots to \"500K pros are automating data imports\" for social proof. Then the headline appeals to professional identity: \"Become the hero in your org.\" ",[19,813,814],{},"People on LinkedIn care about how they look at work."," For B2B products that solve invisible problems (like manual data entry), positioning the buyer as the hero, not the tool as the solution, is what gets clicks. 430 days running proves memes work in B2B.",[12,817,818,820],{},[19,819,99],{}," Use a simple meme or joke format to earn attention on LinkedIn, then position your product as something that makes the buyer look smart within their organization.",[102,822],{},[58,824,826],{"id":825},"_20-ada-budget-meeting-language","20. Ada: Budget Meeting Language",[63,828,833],{"ad-id":829,"company":830,"media-type":311,"website":831,"headline":832,"platform":679},"69685422339c04e15e51da2b","Ada","https:\u002F\u002Fada.cx","Quality CX at Scale with AI Customer Service Agents",[12,834,835],{},"Deliver instant, personalized customer service 24\u002F7, without adding headcount.",[12,837,838],{},[78,839,840],{},"Cold audience · Running for 134 days · 1 ad variation",[12,842,843,844],{},"The video opens on a simple chat bubble: a customer typing with the AI about to respond. That frame mimics the exact interface your B2B prospects use every day, so it registers as familiar, not promotional. ",[19,845,846],{},"When your product IS the UI, showing the actual experience is more persuasive than any claim about capabilities.",[12,848,849,850,853],{},"The copy leans hard into \"without adding headcount.\" That is the exact language a VP would use in a budget meeting. Not \"streamline your operations\" or \"improve efficiency.\" ",[19,851,852],{},"\"Without adding headcount\" names the specific cost decision-makers are trying to avoid."," For B2B ads targeting leadership, mirroring the phrases they use when justifying spend internally makes your ad feel like it was written by someone who has been in their meetings.",[12,855,856,858],{},[19,857,99],{}," Write your B2B ad copy using the exact language your buyer uses in budget meetings (\"without adding headcount\"), not the language marketers put in pitch decks.",[102,860],{},[58,862,864],{"id":863},"_21-ahrefs-fear-of-missing-a-shift","21. Ahrefs: Fear of Missing a Shift",[63,866,871],{"ad-id":867,"company":868,"media-type":67,"website":869,"headline":870,"platform":679},"6985cb9e9d38eaa37901560e","Ahrefs","https:\u002F\u002Fahrefs.com","Try Brand Radar now",[12,872,873],{},"AI is the new front page. Don't let your brand be background noise.",[12,875,876],{},[78,877,878],{},"Cold audience · Running for 140 days · 1 ad variation",[12,880,881,882],{},"\"If you're not in AI answers, you're invisible.\" That taps into a real fear B2B marketers feel right now. The mock ChatGPT response underneath, showing \"Your brand not found,\" turns an abstract worry into something concrete you can see. Ahrefs is selling a new category (AI brand monitoring), and the challenge with new categories is that people do not know they need the product yet. ",[19,883,884],{},"By showing the problem as a fake AI chat response, they skip the explanation entirely.",[12,886,887,888,891],{},"\"AI is the new front page\" reframes AI search as the place where first impressions happen. For B2B companies where brand visibility drives inbound pipeline, that framing is terrifying in the best way. ",[19,889,890],{},"When you are creating a new category, your ad's job is not to explain the product. It is to make people feel the pain of not having it."," Tie your product to a larger trend your B2B audience is already worried about.",[12,893,894,896],{},[19,895,99],{}," Tie your B2B product to a trend your audience is already worried about. Fear of missing a platform shift sells new categories faster than feature lists.",[102,898],{},[58,900,902],{"id":901},"_22-datarails-jargon-as-targeting","22. Datarails: Jargon as Targeting",[63,904,909],{"ad-id":905,"company":906,"media-type":67,"website":907,"headline":908,"platform":679},"6946c3a78abe263257a77b5d","Datarails","https:\u002F\u002Fdatarails.com","The smarter way to manage FP&A",[12,910,911],{},"The smartest finance teams aren't working harder. They're working with Datarails.",[12,913,914],{},[78,915,916],{},"Cold audience · Running for 44 days · 1 ad variation",[12,918,919,920,923],{},"\"The smartest way to do FP&A.\" Most people scrolling LinkedIn have no idea what FP&A stands for. And that is the point. If you are a finance professional, those three letters immediately signal \"this was built for me.\" ",[19,921,922],{},"Using industry jargon as a hook on LinkedIn works as a natural filter."," You do not need LinkedIn's targeting to reach finance teams when your copy does the filtering for you.",[12,925,926,927,930],{},"The copy reframes the product from a tool into a status signal: \"The smartest finance teams aren't working harder. They're working with Datarails.\" Then three specific outcomes: real-time insights, automated reports, zero manual errors. ",[19,928,929],{},"Each targets a daily pain point for finance teams drowning in spreadsheets."," For B2B products serving a niche audience, speaking their language in the ad itself is the most efficient targeting you can do.",[12,932,933,935],{},[19,934,99],{}," Use industry-specific jargon (like \"FP&A\") as your hook on LinkedIn. Acronyms filter for exactly the right B2B audience and signal insider credibility.",[102,937],{},[53,939,941],{"id":940},"google-ads","Google Ads",[12,943,944],{},"Google Ads captures B2B buyers at the moment of highest intent. They are actively searching for a solution, comparing options, or looking for a specific tool. Your job is to show up with the right message when they are ready to act.",[12,946,947],{},"Unlike Meta and LinkedIn, you have very limited real estate: a headline, a description, and sometimes extensions. Every word has to earn its place. For more Google ad examples across SaaS, see our SaaS Ad Examples collection.",[58,949,951],{"id":950},"_23-clickup-direct-problem-solution","23. ClickUp: Direct Problem-Solution",[953,954],"search-ad-card",{"company":270,"description":955,"display-url":956,"headline":957,"website":271},"Stop Switching Between Multiple Tools. Manage Everything In One Platform.","clickup.com","ClickUp Project Management | Official Download",[12,959,960],{},[78,961,962],{},"Running for 1,042 days",[12,964,965,966,969],{},"Nearly three years running. \"Stop Switching Between Multiple Tools\" names the exact frustration that drives a B2B buyer to search for project management software. ",[19,967,968],{},"The description mirrors the problem the person just typed into the search bar."," \"Manage Everything In One Platform\" answers it in seven words. No feature list, no clever hook.",[12,971,972,973],{},"For B2B buyers comparing tools, the decision often comes down to consolidation. Teams are tired of paying for Slack, Notion, Asana, and three other tools separately. ClickUp's ad positions the product as the end of that stack by naming the pain (\"switching\") rather than listing features. ",[19,974,975],{},"When you are competing with 10 other search results, the ad that names the searcher's frustration wins the click.",[12,977,978,980],{},[19,979,99],{}," Mirror the exact problem your B2B buyer typed into Google and solve it in one sentence. On search, clarity beats creativity every time.",[102,982],{},[58,984,986],{"id":985},"_24-hibob-confidence-that-stands-out","24. HiBob: Confidence That Stands Out",[953,988],{"company":989,"description":990,"display-url":991,"headline":992,"website":993},"HiBob","Bob, innovating the ways companies do HR.","hibob.com","HiBob Is So Much Better","https:\u002F\u002Fhibob.com",[12,995,996],{},[78,997,998],{},"Running for 1,062 days",[12,1000,1001,1002],{},"\"So Much Better\" is an unusually bold claim for a Google Ad. Better than what? That curiosity gap is intentional. Most B2B search ads play it safe with feature-benefit copy: \"All-in-one HR platform with payroll and onboarding.\" HiBob goes the opposite direction. ",[19,1003,1004],{},"Confidence as a differentiator works because it breaks the pattern in a SERP full of nearly identical ads.",[12,1006,1007],{},"In the HR software category, where every competitor says \"streamline HR\" and \"simplify onboarding,\" a headline that reads like a personal recommendation stands out. For B2B categories where every ad sounds the same, saying something that sounds like what a colleague would tell you at lunch is a real advantage. 1,062 days running proves the approach converts.",[12,1009,1010,1012],{},[19,1011,99],{}," Use a confident, slightly provocative headline to stand out in B2B search results where every competitor's ad sounds identical.",[102,1014],{},[58,1016,1018],{"id":1017},"_25-semrush-segment-your-audience","25. Semrush: Segment Your Audience",[953,1020],{"company":1021,"description":1022,"display-url":1023,"headline":1024,"website":1025},"Semrush","Put your agency in front of warm leads & grow your client base faster.","semrush.com","Semrush + Client Portal","https:\u002F\u002Fsemrush.com",[12,1027,1028],{},[78,1029,1030],{},"Running for 991 days",[12,1032,1033,1034],{},"This ad targets a specific B2B segment (agencies) with a specific feature (client portal) and a specific outcome (warm leads, more clients). That level of specificity signals that Semrush understands agency workflows, not generic marketing needs. ",[19,1035,1036],{},"A targeted search ad for \"agencies\" outperforms a generic ad for \"marketers\" because the searcher feels the product was built for their exact situation.",[12,1038,1039],{},"\"Grow your client base faster\" speaks to the one metric every agency cares about. Running separate Google Ads for each B2B segment you serve, agencies, enterprise, SMBs, means each audience sees copy that matches their priorities. Nearly 1,000 days running validates this segmented approach.",[12,1041,1042,1044],{},[19,1043,99],{}," Create separate Google Ads for each B2B segment you serve. An ad that speaks directly to agencies beats a generic \"for marketers\" ad every time.",[102,1046],{},[58,1048,1050],{"id":1049},"_26-360learning-the-anti-chaos-position","26. 360Learning: The Anti-Chaos Position",[953,1052],{"company":1053,"description":1054,"display-url":1055,"headline":1056,"website":1057},"360Learning","Fast, collaborative, and easy to use. Get all the power of a modern LMS without the chaos.","360learning.com","360Learning | Create Courses Quickly","https:\u002F\u002F360learning.com",[12,1059,1060],{},[78,1061,1062],{},"Running for 999 days",[12,1064,1065,1066],{},"\"Without the chaos\" is doing all the heavy lifting. If you have ever implemented an LMS at a company, you know exactly what that word means: broken integrations, endless configuration, confused users, IT tickets. ",[19,1067,1068],{},"360Learning does not name specific features. They name the feeling of using the wrong tool.",[12,1070,1071,1072],{},"\"All the power of a modern LMS without the chaos\" is a formula that works for any B2B product. Three adjectives (fast, collaborative, easy) hit the three things LMS buyers actually care about. For B2B products in categories known for painful implementations, ",[19,1073,1074],{},"addressing the fear of switching is often more important than listing the benefits of your product.",[12,1076,1077,1079,1080,1084,1085,1088],{},[19,1078,99],{}," Use the formula \"All the ",[1081,1082,1083],"span",{},"benefit"," without the ",[1081,1086,1087],{},"common pain","\" to address both desire and fear in one Google Ad description.",[102,1090],{},[58,1092,1094],{"id":1093},"_27-headshotpro-step-by-step-clarity","27. HeadshotPro: Step-by-Step Clarity",[953,1096],{"company":231,"description":1097,"display-url":1098,"headline":1099,"website":1100},"Corporate headshots made easy. Just upload a few selfies and 2 hours later you'll receive high-quality headshots.","headshotpro.com","HeadshotPro | 14 Days Money Back","https:\u002F\u002Fheadshotpro.com",[12,1102,1103],{},[78,1104,1105],{},"Running for 1,014 days",[12,1107,1108,1109,1112],{},"The entire process is explained in one sentence: upload selfies, wait 2 hours, get headshots. ",[19,1110,1111],{},"That is the most persuasive thing you can do in a B2B Google Ad: remove all ambiguity."," The searcher knows exactly what they are buying, how it works, and how long it takes. For HR teams and office managers searching for corporate headshot solutions, this clarity beats any claim about AI quality.",[12,1114,1115,1116,1119],{},"The 14-day money-back guarantee in the headline removes the last objection. For B2B buyers who need to justify the purchase to their manager, a guarantee makes the decision low-risk. ",[19,1117,1118],{},"When your product sounds too good to be true, a step-by-step explanation builds more trust than any testimonial."," 1,014 days running in a competitive category.",[12,1121,1122,1124],{},[19,1123,99],{}," Explain your entire B2B product process in one sentence: what the buyer does, how long it takes, what they get. Remove all ambiguity from the purchase decision.",[102,1126],{},[58,1128,1130],{"id":1129},"_28-gohighlevel-selling-cost-elimination","28. GoHighLevel: Selling Cost Elimination",[953,1132],{"company":1133,"description":1134,"display-url":1135,"headline":1136,"website":1137},"GoHighLevel","Enjoy the benefits of not having to hire or rely on a tech team.","gohighlevel.com","All-In-One Marketing Platform | GoHighLevel SaaS Pro","https:\u002F\u002Fgohighlevel.com",[12,1139,1140],{},[78,1141,1142],{},"Running for 986 days",[12,1144,1145,1146,1149],{},"\"Enjoy the benefits of not having to hire or rely on a tech team.\" That is not selling software. That is selling ",[19,1147,1148],{},"the elimination of a recurring cost."," Agency owners and B2B service providers live with the frustration of depending on developers for every change. GoHighLevel names that dependency and removes it in one sentence.",[12,1151,1152,1153,1156],{},"The \"All-In-One\" framing reinforces the cost argument: one platform means one subscription instead of a tech team salary. ",[19,1154,1155],{},"For B2B buyers, the biggest cost is often not software, it is the people you hire to run it."," When your product replaces headcount rather than adding a line item, lead with the cost you eliminate, not the features you provide.",[12,1158,1159,1161],{},[19,1160,99],{}," Sell the elimination of a cost (like hiring a tech team) rather than the addition of features. For B2B buyers, removing a line item from the budget is more compelling than adding one.",[102,1163],{},[58,1165,1167],{"id":1166},"_29-feedonomics-owning-a-niche-category","29. Feedonomics: Owning a Niche Category",[953,1169],{"company":1170,"description":1171,"display-url":1172,"headline":1173,"website":1174},"Feedonomics","We Engineered the World's Most Powerful Shopping Feed Platform for Multichannel Ecommerce.","feedonomics.com","Feedonomics.com","https:\u002F\u002Ffeedonomics.com",[12,1176,1177],{},[78,1178,1179],{},"Running for 1,044 days",[12,1181,1182,1183,1186],{},"\"We Engineered\" implies craftsmanship and technical depth. \"World's Most Powerful\" is a superlative that works because ",[19,1184,1185],{},"the B2B niche is small enough to credibly own."," Claiming \"best project management tool\" is a stretch anyone can see through. Claiming \"most powerful shopping feed platform\" is believable because most people cannot name a second company in that space.",[12,1188,1189,1190,1193],{},"Feedonomics targets a specific, technical B2B audience (multichannel ecommerce operations) and speaks with the confidence of a market leader. ",[19,1191,1192],{},"In niche B2B categories, superlatives are more credible because fewer people can challenge the claim."," 1,044 days running validates that owning your niche in search ads works better than trying to appeal broadly.",[12,1195,1196,1198],{},[19,1197,99],{}," In niche B2B categories, claim the #1 or \"most powerful\" position confidently. When your market is small enough, superlatives are credible and they win clicks.",[102,1200],{},[53,1202,1204],{"id":1203},"b2b-ad-patterns-that-actually-work","B2B Ad Patterns That Actually Work",[12,1206,1207],{},"After analyzing all 29 ads across three platforms, clear patterns emerge for what makes B2B advertising work.",[58,1209,1211],{"id":1210},"_1-specificity-beats-generalization-every-platform","1. Specificity Beats Generalization (Every Platform)",[12,1213,1214],{},"The best B2B ads do not say \"improve your workflow.\" They say \"veterinary notes in seconds\" or \"FP&A automation\" or \"without adding headcount.\" The more specific the pain point, the higher the relevance and the lower the cost per lead. On Facebook, specific copy acts as the audience filter. On LinkedIn, jargon targets the right job titles. On Google, it matches search intent.",[58,1216,1218],{"id":1217},"_2-lead-with-value-on-social-lead-with-clarity-on-search","2. Lead With Value on Social, Lead With Clarity on Search",[12,1220,1221,1222],{},"On Facebook and LinkedIn, the ads that work best offer something free or immediately useful: a template, a report, a data sample, a free trial. On Google, the winning ads explain exactly what happens after the click. Different platforms reward different approaches, but the principle is the same: ",[19,1223,1224],{},"give the buyer what they need at their current stage of awareness.",[58,1226,1228],{"id":1227},"_3-longevity-is-the-best-performance-signal","3. Longevity Is the Best Performance Signal",[12,1230,1231],{},"The ads running 100+ days are the proven winners across all platforms. ScribVet at 396 days on Meta, Foleon at 809 days on LinkedIn, Feedonomics at 1,044 days on Google. B2B companies track pipeline revenue closely. If an ad survives three months of budget scrutiny, it is generating real results.",[58,1233,1235],{"id":1234},"_4-each-platform-has-a-different-job","4. Each Platform Has a Different Job",[12,1237,1238],{},"The most successful B2B companies in this collection use each platform for a different purpose:",[1240,1241,1242,1249,1255],"ol",{},[1243,1244,1245,1248],"li",{},[19,1246,1247],{},"Facebook:"," Retargeting, lookalike audiences, and lead magnet distribution",[1243,1250,1251,1254],{},[19,1252,1253],{},"LinkedIn:"," Cold outreach to decision-makers, lead magnets, thought leadership",[1243,1256,1257,1260],{},[19,1258,1259],{},"Google:"," Capturing high-intent buyers actively searching for solutions",[12,1262,1263],{},"Facebook's retargeting is its strongest B2B feature. LinkedIn's job title targeting is unmatched. Google's search intent is the closest to a purchase decision.",[58,1265,1267],{"id":1266},"_5-match-your-message-to-the-platform","5. Match Your Message to the Platform",[12,1269,1270,1271],{},"Facebook ads that work look like organic content (comedy sketches, creator tips, visual product demos). LinkedIn ads that work look like professional advice (playbooks, templates, honest reviews). Google ads that work are direct and clear (problem-solution, process explanation, trust signals). ",[19,1272,1273],{},"The same product needs three different messages for three different contexts.",[53,1275,1277],{"id":1276},"how-to-build-a-b2b-ad-strategy-across-platforms","How to Build a B2B Ad Strategy Across Platforms",[12,1279,1280],{},"These examples are useful for inspiration, but a system is more useful than individual ads. Here is a framework based on what the top-performing B2B advertisers in this list actually do.",[58,1282,1284],{"id":1283},"step-1-build-your-audience-foundation","Step 1: Build Your Audience Foundation",[12,1286,1287],{},"Upload your customer email list to Meta as a Custom Audience and build a Lookalike Audience from your best customers. On LinkedIn, create matched audiences from your CRM. On Google, set up remarketing lists and target high-intent keywords. This gives you a targeting foundation across all three platforms.",[58,1289,1291],{"id":1290},"step-2-create-a-lead-magnet-worth-downloading","Step 2: Create a Lead Magnet Worth Downloading",[12,1293,1294],{},"The HubSpot, Cognism, and Foleon approach works at any scale. Create a free template, audit, data sample, or playbook that solves a real problem for your target buyer. Promote it on LinkedIn and Facebook to capture emails. Use Google to capture people actively searching for that type of resource.",[58,1296,1298],{"id":1297},"step-3-retarget-across-platforms","Step 3: Retarget Across Platforms",[12,1300,1301],{},"Once someone downloads your resource, retarget them everywhere: product-focused ads on Facebook, case studies on LinkedIn, branded search ads on Google. The Intercom and Ada approaches show how to move warm audiences toward a purchase by showing the product solving the exact problem the lead magnet addressed.",[58,1303,1305],{"id":1304},"step-4-refresh-creative-every-2-to-4-weeks","Step 4: Refresh Creative Every 2 to 4 Weeks",[12,1307,1308,1312],{},[31,1309,1311],{"href":1310},"\u002Fglossary\u002Fcreative-fatigue","Creative fatigue"," hits faster in B2B because your audiences are smaller. The same 10,000 decision-makers will see your ad multiple times. Rotate headlines, visuals, and offers regularly to keep performance stable. Google search ads are the exception, where the same copy can run for years if it matches intent.",[58,1314,1316],{"id":1315},"step-5-measure-pipeline-not-leads","Step 5: Measure Pipeline, Not Leads",[12,1318,1319],{},"A lead form submission is not revenue, regardless of which platform it came from. Connect all your ad platforms to your CRM to track which campaigns produce actual pipeline and closed deals. B2B sales cycles average 6+ months, so give campaigns time before making judgment calls.",[53,1321,1323],{"id":1322},"faq","FAQ",[58,1325,1327],{"id":1326},"do-facebook-ads-work-for-b2b","Do Facebook ads work for B2B?",[12,1329,1330],{},"Yes. B2B buyers spend 74% more time on Facebook than the average user, and 91% of B2B marketers use Facebook for paid social. The key difference from LinkedIn is strategy: Facebook excels at retargeting, lookalike audiences, and lead magnet distribution rather than cold outbound. The 15 Meta ads in this collection show how top B2B companies make it work.",[58,1332,1334],{"id":1333},"how-much-do-b2b-ads-cost-per-lead-across-platforms","How much do B2B ads cost per lead across platforms?",[12,1336,1337,1338,1342,1343,1347],{},"It varies significantly by platform. Facebook averages about $27 per lead, but B2B leads typically cost $40 to $250 depending on industry. LinkedIn is the most expensive at $75 to $200+ per lead, but delivers higher-quality leads for enterprise sales. Google varies by keyword competitiveness. Use our ",[31,1339,1341],{"href":1340},"\u002Ftools\u002Fcpm-calculator","CPM Calculator"," and ",[31,1344,1346],{"href":1345},"\u002Ftools\u002Fcpc-calculator","CPC Calculator"," to estimate your numbers.",[58,1349,1351],{"id":1350},"which-platform-is-best-for-b2b-advertising","Which platform is best for B2B advertising?",[12,1353,1354,1355,1359],{},"All three serve different purposes. LinkedIn offers precise job title and company size targeting, ideal for cold outreach to decision-makers. Facebook offers cheaper ",[31,1356,1358],{"href":1357},"\u002Fglossary\u002Fcpm","CPMs",", stronger retargeting, and better reach for lead magnets. Google captures buyers with high purchase intent. Most successful B2B companies run at least two platforms together. See our 45 Best SaaS Ad Examples for more platform-specific strategies.",[58,1361,1363],{"id":1362},"what-type-of-b2b-ads-convert-best","What type of B2B ads convert best?",[12,1365,1366,1367,1370,1371,1375],{},"On Facebook, lead generation ads with forms convert best for top-of-funnel. On LinkedIn, lead magnets like playbooks and templates drive pipeline. On Google, search ads targeting high-intent keywords (\"best ",[1081,1368,1369],{},"category"," software\") capture ready-to-buy traffic. Video ads get more ",[31,1372,1374],{"href":1373},"\u002Fglossary\u002Freach","reach"," on social platforms, while static images often drive more clicks for retargeting.",[58,1377,1379],{"id":1378},"how-long-does-it-take-to-see-results-from-b2b-ads","How long does it take to see results from B2B ads?",[12,1381,1382],{},"On Facebook, expect 4 to 8 weeks to exit the learning phase. LinkedIn campaigns need 2 to 4 weeks. Google search ads can drive results within days for high-intent keywords. Since B2B sales cycles average 6+ months, true ROI measurement requires CRM integration and pipeline tracking across all platforms, not just lead form submissions.",[53,1384,1386],{"id":1385},"how-to-use-these-examples","How to Use These Examples",[12,1388,1389],{},"Studying ads is only useful if you apply what you learn. Here is a practical approach:",[1240,1391,1392,1398,1404,1410,1416],{},[1243,1393,1394,1397],{},[19,1395,1396],{},"Pick 3 to 5 ads"," from companies with a similar sales cycle and buyer persona",[1243,1399,1400,1403],{},[19,1401,1402],{},"Identify the structure:"," What is the hook? What is the proof? What is the CTA?",[1243,1405,1406,1409],{},[19,1407,1408],{},"Adapt, do not copy."," Take the structure and rewrite it for your audience and offer",[1243,1411,1412,1415],{},[19,1413,1414],{},"Test one variable at a time."," Change the hook but keep the structure. Then change the visual. Then change the CTA.",[1243,1417,1418,1421],{},[19,1419,1420],{},"Track longevity."," If your ad is still performing after 30 days, you found something. After 90 days, scale it.",[12,1423,1424,1425,1428],{},"For more B2B ads organized by category and platform, browse the full ",[31,1426,1427],{"href":33},"AdKit Ad Library",". Found ads you want to reference later? Save them to your Swipe File so you can revisit the structure and copy when building your next campaign. When you are ready to create, AI Studio lets you generate ad creatives based on the patterns you have studied.",[12,1430,1431,1432,1436,1437,1436,1439,1441,1442,1446],{},"Want to understand the metrics behind your campaigns? Check out our free ",[31,1433,1435],{"href":1434},"\u002Ftools\u002Froas-calculator","ROAS Calculator",", ",[31,1438,1346],{"href":1345},[31,1440,1341],{"href":1340},", and ",[31,1443,1445],{"href":1444},"\u002Fglossary\u002Fcac","CAC guide",".",[12,1448,1449],{},"For Facebook ads across all industries, see our 15 Best Facebook Ad Examples. For a broader look at SaaS advertising across all platforms, see our 45 Best SaaS Ad Examples.",[12,1451,1452,1453,1342,1457,1446],{},"If you are just getting started with paid ads, read our guide on ",[31,1454,1456],{"href":1455},"\u002Fresources\u002Fwhen-to-run-ads-for-saas","when to run ads for your SaaS",[31,1458,1460],{"href":1459},"\u002Fresources\u002Fhow-ads-platforms-works","how ad platforms actually work",{"title":1462,"searchDepth":1463,"depth":1463,"links":1464},"",2,[1465,1483,1492,1501,1508,1515,1522],{"id":55,"depth":1463,"text":56,"children":1466},[1467,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482],{"id":60,"depth":1468,"text":61},3,{"id":106,"depth":1468,"text":107},{"id":145,"depth":1468,"text":146},{"id":185,"depth":1468,"text":186},{"id":226,"depth":1468,"text":227},{"id":265,"depth":1468,"text":266},{"id":305,"depth":1468,"text":306},{"id":346,"depth":1468,"text":347},{"id":385,"depth":1468,"text":386},{"id":424,"depth":1468,"text":425},{"id":463,"depth":1468,"text":464},{"id":503,"depth":1468,"text":504},{"id":543,"depth":1468,"text":544},{"id":583,"depth":1468,"text":584},{"id":622,"depth":1468,"text":623},{"id":661,"depth":1463,"text":662,"children":1484},[1485,1486,1487,1488,1489,1490,1491],{"id":671,"depth":1468,"text":672},{"id":711,"depth":1468,"text":712},{"id":749,"depth":1468,"text":750},{"id":787,"depth":1468,"text":788},{"id":825,"depth":1468,"text":826},{"id":863,"depth":1468,"text":864},{"id":901,"depth":1468,"text":902},{"id":940,"depth":1463,"text":941,"children":1493},[1494,1495,1496,1497,1498,1499,1500],{"id":950,"depth":1468,"text":951},{"id":985,"depth":1468,"text":986},{"id":1017,"depth":1468,"text":1018},{"id":1049,"depth":1468,"text":1050},{"id":1093,"depth":1468,"text":1094},{"id":1129,"depth":1468,"text":1130},{"id":1166,"depth":1468,"text":1167},{"id":1203,"depth":1463,"text":1204,"children":1502},[1503,1504,1505,1506,1507],{"id":1210,"depth":1468,"text":1211},{"id":1217,"depth":1468,"text":1218},{"id":1227,"depth":1468,"text":1228},{"id":1234,"depth":1468,"text":1235},{"id":1266,"depth":1468,"text":1267},{"id":1276,"depth":1463,"text":1277,"children":1509},[1510,1511,1512,1513,1514],{"id":1283,"depth":1468,"text":1284},{"id":1290,"depth":1468,"text":1291},{"id":1297,"depth":1468,"text":1298},{"id":1304,"depth":1468,"text":1305},{"id":1315,"depth":1468,"text":1316},{"id":1322,"depth":1463,"text":1323,"children":1516},[1517,1518,1519,1520,1521],{"id":1326,"depth":1468,"text":1327},{"id":1333,"depth":1468,"text":1334},{"id":1350,"depth":1468,"text":1351},{"id":1362,"depth":1468,"text":1363},{"id":1378,"depth":1468,"text":1379},{"id":1385,"depth":1463,"text":1386},"ads-examples",false,"2026-02-17","The best B2B ads from Intercom, HubSpot, Salesforce, and more. 29 real examples across Meta, LinkedIn, and Google with breakdowns of what works for lead gen and retargeting.","md",[1529,1532,1535,1538,1541,1544],{"question":1530,"answer":1531},"Do Facebook ads work for B2B companies?","Yes. B2B buyers spend 74% more time on Facebook than the average user, and 91% of B2B marketers use Facebook over LinkedIn for paid social. The key is matching your strategy to the platform. Facebook excels at retargeting, lookalike audiences, and lead magnet distribution rather than cold outbound.",{"question":1533,"answer":1534},"How much do B2B ads cost per lead?","It depends on the platform. Facebook averages about $27 per lead, but B2B leads typically cost $40 to $250 depending on industry. LinkedIn is the most expensive at $75 to $200+ per lead, but delivers higher quality for enterprise sales. Google Ads varies by keyword, with B2B software terms running $50 to $150+ per click.",{"question":1536,"answer":1537},"What type of ads work best for B2B?","On Facebook, lead generation ads with forms convert best for top-of-funnel. On LinkedIn, lead magnets like playbooks and templates drive pipeline. On Google, search ads targeting high-intent keywords capture buyers actively looking for solutions. The best B2B strategies use all three platforms together.",{"question":1539,"answer":1540},"How do you target B2B audiences on Facebook?","Upload customer email lists as Custom Audiences, then build Lookalike Audiences from them. Layer job title interests, industry-related page likes, and behavior signals like CRM tool usage. For account-based marketing, use tools like Cognism or Clearbit to build verified contact lists and upload them directly to Meta.",{"question":1542,"answer":1543},"Should B2B companies use Facebook, LinkedIn, or Google for ads?","All three, but for different purposes. LinkedIn offers precise job title and company size targeting, ideal for cold outreach to decision-makers. Facebook offers cheaper CPMs, stronger retargeting, and better reach for lead magnets. Google captures people actively searching for solutions. Most successful B2B companies run at least two platforms together.",{"question":1379,"answer":1545},"On Facebook, expect 4 to 8 weeks to exit the learning phase. LinkedIn campaigns need 2 to 4 weeks for optimization. Google search ads can drive results within days for high-intent keywords. Since B2B sales cycles average 6+ months, true ROI measurement requires CRM integration and pipeline tracking across all platforms.",{},true,"\u002Fresources\u002Fads-examples\u002Fb2b-ad-examples",{"title":6,"description":1526},"b2b-ad-examples","resources\u002Fads-examples\u002Fb2b-ad-examples",[1553,1554,1555,1556,1557,1558,1559],"b2b","facebook ads","meta ads","linkedin ads","google ads","lead generation","examples","H3pgm9SaeqlZZWfzDzaLQodLRqvqJR1jPVUnWCaTF5c",{"id":1562,"title":1563,"author":7,"body":1564,"breadcrumbLabel":7,"category":1523,"cover":1524,"createdAt":2427,"description":2428,"extension":1527,"faqs":2429,"meta":2445,"navigation":1547,"noAiBadge":1524,"og":1524,"ogDescription":7,"ogIcon":7,"path":2446,"seo":2447,"slug":2448,"stem":2449,"tags":2450,"updatedAt":2427,"wip":1524,"__hash__":2454},"resources\u002Fresources\u002Fads-examples\u002Ffacebook-ad-examples.md","15 Proven Facebook Ad Examples to Copy (With Breakdowns)",{"type":9,"value":1565,"toc":2392},[1566,1573,1576,1583,1599,1602,1613,1617,1621,1632,1637,1648,1655,1660,1662,1666,1675,1680,1687,1698,1703,1705,1709,1719,1724,1731,1737,1742,1744,1748,1757,1762,1765,1772,1777,1779,1783,1793,1798,1805,1812,1817,1819,1823,1833,1838,1845,1851,1861,1863,1867,1876,1881,1888,1895,1900,1902,1906,1915,1920,1927,1934,1939,1941,1945,1955,1960,1967,1974,1979,1981,1985,1995,2000,2007,2010,2015,2017,2021,2031,2036,2042,2049,2054,2056,2060,2070,2075,2082,2088,2093,2095,2099,2108,2113,2119,2125,2130,2132,2136,2147,2152,2159,2166,2171,2173,2177,2185,2190,2197,2203,2208,2210,2219,2223,2226,2230,2233,2237,2240,2244,2256,2260,2263,2265,2269,2280,2284,2287,2291,2305,2309,2322,2326,2329,2331,2360,2365,2374,2382],[12,1567,1568,1569,1572],{},"Below are ",[19,1570,1571],{},"15 effective Facebook ad examples"," pulled from live Meta campaigns, each with a full copy and creative breakdown. These are not mockups or stock templates. They are real ads with real spend behind them.",[12,1574,1575],{},"The few ads that stick follow patterns. Not random creativity, not expensive production. Patterns that are learnable, repeatable, and backed by data.",[12,1577,1578,1579,1582],{},"We pulled these from our ",[31,1580,34],{"href":1581},"\u002Ftools\u002Fad-library"," database, which tracks how long each ad has been running. These are not mockups. They are real ads spending real money.",[12,1584,1585,1587,1588,1592,1593,1598],{},[19,1586,40],{}," If a company keeps running the same ad for 90+ days, it is almost certainly profitable. Advertisers do not waste budget on underperformers. The longer an ad runs, the more likely it is generating positive ",[31,1589,1591],{"href":1590},"\u002Fglossary\u002Froas","ROAS",". This aligns with ",[31,1594,1597],{"href":1595,"rel":1596},"https:\u002F\u002Fwww.facebook.com\u002Fbusiness\u002Fads\u002Fad-creative",[46],"Meta's own recommendation"," to test multiple creative variations and let winning ads run.",[12,1600,1601],{},"This collection covers DTC brands, consumer apps, AI tools, health products, and business tools. For each ad, we break down what works and give you a concrete takeaway you can apply today.",[12,1603,1604,1605,1609,1610,1446],{},"Looking for SaaS-specific ads? Check our ",[31,1606,1608],{"href":1607},"\u002Fresources\u002Fads-examples\u002Fsaas-ad-examples","45 Best SaaS Ad Examples",". For B2B-specific strategies, see ",[31,1611,1612],{"href":1548},"29 Best B2B Ad Examples",[53,1614,1616],{"id":1615},"_15-best-facebook-ad-examples","15 Best Facebook Ad Examples",[58,1618,1620],{"id":1619},"_1-eight-sleep-scientific-positioning","1. Eight Sleep: Scientific Positioning",[63,1622,1629],{"ad-id":1623,"company":1624,"cta":1625,"headline":1626,"media-type":67,"website":1627,"display-link":1628},"696a93e5d441e68c82dabc0d","Eight Sleep","Shop now","Pod 5: Sleep That Fits Your Needs","https:\u002F\u002Fwww.eightsleep.com","EIGHTSLEEP.COM",[12,1630,1631],{},"The Pod is clinically proven to deliver: Up to 34% more deep sleep. Faster recovery night after night. Temperature adjustments in real-time.",[12,1633,1634],{},[78,1635,1636],{},"Cold audience · Running for 107 days · 11 ad variations",[12,1638,1639,1640,1643,1644,1647],{},"The ad starts with an exact number: ",[19,1641,1642],{},"Up to 34% more deep sleep",". People love specificity, it helps them understand exactly how their life can improve. The number + the fact that they mention it's clinically proven is ",[19,1645,1646],{},"massive social proof"," for Eight Sleep, which increases trust. They're not just selling comfort or a better bed, they are selling proven and data-backed results: Sleeping better. People don't buy a bed, they buy better sleep.",[12,1649,1650,1651,1654],{},"The image says \"Less sweating, more sleeping\" over a close-up of the Pod device sitting next to a bed with slippers on the floor. It focuses on a specific problem: ",[19,1652,1653],{},"being hot and sweaty in bed",". Anyone who has struggled sleeping because their bed is too hot will immediately relate. This is a great way to hook people scrolling through their feed. Show them something they care about and tie that to your product.",[12,1656,1657,1659],{},[19,1658,99],{}," Pair a clinical stat with a relatable physical frustration so your ad sells both the data and the feeling at the same time.",[102,1661],{},[58,1663,1665],{"id":1664},"_2-hexclad-the-anti-cheap-copy","2. HexClad: The Anti-Cheap Copy",[63,1667,1672],{"ad-id":1668,"company":1669,"cta":70,"headline":1670,"media-type":67,"website":1671},"6975adc6827519837b0c098c","HexClad","Cookware Built To Last A Lifetime","https:\u002F\u002Fhexclad.com",[12,1673,1674],{},"Used by over 500,000 home cooks and thousands of five-star reviews, HexClad hybrid cookware brings unmatched performance in the kitchen.",[12,1676,1677],{},[78,1678,1679],{},"Cold audience · Running for 174 days · 16 ad variations",[12,1681,1682,1683,1686],{},"\"Our pans aren't cheap.\" That's the opening image copy, and most brands would never dare use it. But it works because it ",[19,1684,1685],{},"filters the audience instantly",": if you want the cheapest pan on Amazon, this ad isn't for you. By turning away price-shoppers, HexClad attracts buyers who value quality. The repetition of \"don't buy HexClad\" builds tension until the payoff: \"If you want to break the cheap pan cycle, invest in HexClad.\" It reads like a dare.",[12,1688,1689,1690,1693,1694,1697],{},"\"The only cookware you buy once\" plus a ",[19,1691,1692],{},"Lifetime Warranty"," banner at the bottom seals the message. The Facebook copy mentions \"500,000 home cooks,\" not chefs, not professionals. Home cooks. That's Facebook's core audience: people who watch cooking reels and want better gear. When your ",[19,1695,1696],{},"social proof language matches how your buyer describes themselves",", trust goes up.",[12,1699,1700,1702],{},[19,1701,99],{}," Open with a bold disqualifier (\"our product isn't cheap\") to filter out price-shoppers and attract quality-driven buyers who feel the ad was written for them.",[102,1704],{},[58,1706,1708],{"id":1707},"_3-mejuri-premium-minimalism","3. Mejuri: Premium Minimalism",[63,1710,1716],{"ad-id":1711,"company":1712,"cta":1625,"headline":1713,"media-type":67,"website":1714,"display-link":1715},"6978f233157a4d6bc87bdf75","Mejuri","Beaded Ring White Gold","https:\u002F\u002Fmejuri.com","MEJURI.COM",[12,1717,1718],{},"Make your own milestones. Shop fine jewellery essentials.",[12,1720,1721],{},[78,1722,1723],{},"Cold audience · Running for 431 days · 20 ad variations",[12,1725,1726,1727,1730],{},"Two gold earrings on a cream background. Six words of copy: \"Make your own milestones.\" That's the entire ad, and it's been running for 431 days. On a feed full of screaming headlines and discount codes, ",[19,1728,1729],{},"this quietness is what stops the scroll",". Mejuri doesn't need clever copy because the product does the selling. If you sell something premium, sometimes the best thing you can do is get out of the way.",[12,1732,1733,1734,1446],{},"\"Make your own milestones\" reframes jewelry from something you receive (birthday, anniversary) into something you buy for yourself. That's a completely different buyer. Instead of targeting gift-shoppers, Mejuri targets women who treat themselves. It's a small positioning shift that opens up an audience most jewelry brands ignore entirely. When your product looks this good, ",[19,1735,1736],{},"restraint IS the ad strategy",[12,1738,1739,1741],{},[19,1740,99],{}," Strip your ad down to a single product image and a short reframe that repositions who the buyer is, not what the product does.",[102,1743],{},[58,1745,1747],{"id":1746},"_4-ridge-cultural-storytelling","4. RIDGE: Cultural Storytelling",[63,1749,1754],{"ad-id":1750,"company":1751,"cta":1625,"headline":1752,"media-type":311,"website":1753},"6971cb8f1b6b41973937782b","RIDGE","BREAK THE MOLD","https:\u002F\u002Fridge.com",[12,1755,1756],{},"Inspired by the Japanese art of Kintsugi, our latest drop brings cracked-beautiful patterns to your everyday essentials. Wallets and keycases built to last, and made to stand out.",[12,1758,1759],{},[78,1760,1761],{},"Cold audience · Running for 62 days · 7 ad variations",[12,1763,1764],{},"A guy holding the wallet, turning it in his hands, showing the golden Kintsugi pattern up close. It feels like a friend showing you something cool he just bought, not a brand pushing product. The video format is essential here because you need to see the etched patterns to feel the quality. A static image couldn't carry this concept. And ending with \"99-day trial, free shipping, free returns\" removes every objection for a wallet that costs more than most people are used to paying.",[12,1766,1767,1768,1771],{},"\"One of only eight exclusive designs.\" That number is doing serious work. Eight is small enough to feel genuinely rare, but large enough that you believe there's still one left for you. The Kintsugi angle gives the scarcity a story: it's limited edition because it's inspired by a Japanese art form, not because the brand is manufacturing urgency. ",[19,1769,1770],{},"Scarcity backed by a story feels intentional, not manufactured."," And \"over five million men worldwide\" proves the brand even if the collection is exclusive.",[12,1773,1774,1776],{},[19,1775,99],{}," Back your limited-edition claim with a cultural or design story so the scarcity feels intentional, not like a manufactured countdown timer.",[102,1778],{},[58,1780,1782],{"id":1781},"_5-noom-the-testimonial-quiz","5. Noom: The Testimonial Quiz",[63,1784,1790],{"ad-id":1785,"company":1786,"cta":70,"headline":1787,"media-type":67,"website":1788,"display-link":1789},"6983408b4c615a1133d15686","Noom","Weight loss reimagined","https:\u002F\u002Fwww.noom.com","WWW.NOOM.COM",[12,1791,1792],{},"Take our FREE 5-minute quiz and see how long it takes to reach your goal weight.",[12,1794,1795],{},[78,1796,1797],{},"Cold audience · Running for 153 days · 7 ad variations",[12,1799,1800,1801,1804],{},"The background is raspberries, which seems random until you realize what it's doing. It frames weight loss as abundance (eating beautiful food) rather than restriction. That's a ",[19,1802,1803],{},"smart reframe for an audience tired of diet culture",". The whole image looks like a healthy eating post, not a weight loss ad. Most people scroll past anything that looks like a diet ad because they've seen thousands of them.",[12,1806,1807,1808,1811],{},"\"15 months on Noom and I'm down nearly 90 pounds.\" That quote from Deborah M. is the hook. No features, no screenshots, no pricing. Just a real result from a real person. The number is specific enough to feel true and large enough to grab attention. And the CTA is \"Take the 5-min quiz,\" not \"Subscribe now.\" A quiz costs you nothing except 5 minutes. ",[19,1809,1810],{},"That's a lead magnet",": you get value before Noom asks for anything.",[12,1813,1814,1816],{},[19,1815,99],{}," Lead with a customer's specific result as the hook, then pair it with a free quiz CTA so the first action feels like getting value, not making a commitment.",[102,1818],{},[58,1820,1822],{"id":1821},"_6-prime-prometics-hyper-niche-targeting","6. Prime Prometics: Hyper-Niche Targeting",[63,1824,1830],{"ad-id":1825,"company":1826,"cta":1625,"headline":1827,"media-type":311,"website":1828,"display-link":1829},"696e32137e2df6b472c8bea5","Prime Prometics","Mascara For Mature Lashes","https:\u002F\u002Fwww.primeprometics.com","WWW.PRIMEPROMETICS.COM",[12,1831,1832],{},"Looking for lash perfection? Meet PrimeLash Mascara, the ultimate solution for mature women. It glides on smooth, doesn't clump or smudge, and it's even water resistant.",[12,1834,1835],{},[78,1836,1837],{},"Retargeting · Running for 145 days · 26 ad variations",[12,1839,1840,1841,1844],{},"The entire video is a side-by-side comparison: Prime Prometics vs. Thrive Causemetics. Both are tubing mascaras at nearly the same price ($28 vs $26), so the decision comes down to feel and performance. \"Won't smudge all day\" vs \"Smudges on hooded eyelids.\" That last detail is the killer line. ",[19,1842,1843],{},"Hooded eyelids are extremely common in mature women",", and anyone dealing with that will feel like this ad was written just for them. When you compare yourself to a brand your customer already knows, you borrow their credibility.",[12,1846,1847,1848,1446],{},"This is retargeting, which makes the competitor angle even smarter. These people already know Prime Prometics and are probably comparing options right now. So the ad does the comparison for them. The headline \"Mascara For Mature Lashes\" filters for exactly the right buyer: when a woman over 50 sees those words, ",[19,1849,1850],{},"she knows this product was made for her, not adapted for her as an afterthought",[12,1852,1853,1855,1856,1860],{},[19,1854,99],{}," Run a side-by-side comparison against a named competitor in your ",[31,1857,1859],{"href":1858},"\u002Fglossary\u002Fretargeting","retargeting"," ads, highlighting the one specific detail your niche audience cares about most.",[102,1862],{},[58,1864,1866],{"id":1865},"_7-lovable-the-7000-demo","7. Lovable: The $7,000 Demo",[63,1868,1873],{"ad-id":1869,"company":1870,"cta":70,"headline":1871,"media-type":311,"website":1872},"6983c34e093d304a3815ee56","Lovable","Try Lovable today","https:\u002F\u002Flovable.dev",[12,1874,1875],{},"Build production-ready apps in minutes. No code. No templates. With Lovable, you just describe what you want. AI turns it into a working product with UI, backend, and logic included.",[12,1877,1878],{},[78,1879,1880],{},"Cold audience · Running for 38 days · 3 ad variations",[12,1882,1883,1884,1887],{},"The creator types a prompt and Lovable builds a full coaching dashboard with login and calendar integration. No code, no templates. When your product sounds too good to be true, ",[19,1885,1886],{},"a live demo is the only ad format that works",". The UGC delivery (guy talking to camera, screen recording) makes it feel like a friend sharing a tool, not a polished ad. You just watched it happen, so the proof is built in.",[12,1889,1890,1891,1894],{},"\"I charged $7,000 for this app and I built it in one day.\" That opening makes you stop scrolling. The number does double duty: developers think \"I could charge that\" and non-technical people think \"I could save that.\" Both reactions lead to trying Lovable. And \"Try Lovable for free\" at the end removes the last barrier. You've just watched someone build a ",[19,1892,1893],{},"$7,000 app in under a minute",", and now it costs nothing to try.",[12,1896,1897,1899],{},[19,1898,99],{}," Open your UGC ad with a dollar amount that makes viewers do the math on what they could earn or save, then show the product delivering on that number live.",[102,1901],{},[58,1903,1905],{"id":1904},"_8-brick-first-person-storytelling","8. Brick: First-Person Storytelling",[63,1907,1912],{"ad-id":1908,"company":1909,"cta":70,"headline":1910,"media-type":67,"website":1911},"69700b141b6b4197392b4a93","Brick","Brick - Your Phone, Without The Distractions","https:\u002F\u002Fgetbrick.app",[12,1913,1914],{},"My phone has been Bricked for 1 hour and 16 minutes, and here's what that means: No social media. No work emails. No Slack. No shopping apps. No mobile games. No fantasy football. No distractions.",[12,1916,1917],{},[78,1918,1919],{},"Cold audience · Running for 71 days · 4 ad variations",[12,1921,1922,1923,1926],{},"The image looks like something a friend posted to their story: phone in hand at a bar, drink on the table, lock screen showing the Brick widget. You don't register it as an ad, you register it as someone showing off their screen time win. ",[19,1924,1925],{},"That's UGC at its best",": the product feels like a personal recommendation, not a pitch. The phone screen itself is the proof: apps are locked, and the person is clearly out living their life.",[12,1928,1929,1930,1933],{},"The copy reads like a personal testimony. \"My phone has been Bricked for 1 hour and 16 minutes, and here's what that means:\" then rolls into everything they're NOT doing. No social media, no Slack, no shopping apps. Instead of telling you what the product does, ",[19,1931,1932],{},"they show you what life looks like without the distractions",". And \"on my terms\" at the end positions it as a control tool, not a punishment.",[12,1935,1936,1938],{},[19,1937,99],{}," Write your ad copy in first person as a user testimony, listing what they stopped doing instead of explaining what the product does.",[102,1940],{},[58,1942,1944],{"id":1943},"_9-opal-confrontational-hook","9. Opal: Confrontational Hook",[63,1946,1952],{"ad-id":1947,"company":1948,"cta":551,"headline":1949,"media-type":311,"website":1950,"display-link":1951},"6988df78a13e680dad98b0e8","Opal","Built to support ADHD brains.","https:\u002F\u002Fwww.opal.so","ITUNES.APPLE.COM",[12,1953,1954],{},"ADHD and endless scrolling? Bad combo. Opal helps you block distractions, stick to routines, and finally focus. No guilt.",[12,1956,1957],{},[78,1958,1959],{},"Cold audience · Running for 21 days · 2 ad variations",[12,1961,1962,1963,1966],{},"The video shows what Opal actually does: blocking Instagram, blocking Twitter, asking \"Do You Need Instagram Right Now?\" These are moments that would normally frustrate a user, but in this ad they feel like proof the product works. ",[19,1964,1965],{},"The friction IS the feature."," And \"100 Million Hours Saved\" at the end gives social proof at scale. You're not downloading another wellness app, you're joining something bigger.",[12,1968,1969,1970,1973],{},"\"You are high on the most potent drug known to man right now, and it's called your phone.\" That opening hits hard because you're literally on your phone watching this ad. ",[19,1971,1972],{},"The accusation is true in real time",", and that's the hook. The ad copy narrows the targeting with \"ADHD and endless scrolling? Bad combo.\" People who identify with ADHD are far more responsive to ads that validate what they already believe about themselves. \"No guilt\" positions Opal as compassionate, not punishing.",[12,1975,1976,1978],{},[19,1977,99],{}," Open with a confrontational statement that is literally true while the viewer watches your ad, then narrow the targeting with an identity label they already identify with.",[102,1980],{},[58,1982,1984],{"id":1983},"_10-gusto-brevity-as-strategy","10. Gusto: Brevity as Strategy",[63,1986,1992],{"ad-id":1987,"company":1988,"cta":551,"headline":1989,"media-type":67,"website":1990,"display-link":1991},"6984f8ca093d304a38266ec5","Gusto","HR for Remote Teams","https:\u002F\u002Fgusto.com","GUSTO.COM",[12,1993,1994],{},"Your HR toolbox just got bigger. Now go build an even stronger team!",[12,1996,1997],{},[78,1998,1999],{},"Cold audience · Running for 50 days · 4 ad variations",[12,2001,2002,2003,2006],{},"The creative shows Gusto's actual payroll dashboard: progress bar, employee name, hours logged. It's both the pitch and the demo. Instead of telling you what the product does, they show you. ",[19,2004,2005],{},"\"Run payroll\" as a button label inside the screenshot does more selling than any CTA could."," When your audience is already problem-aware, a product screenshot builds more trust than any stock photo.",[12,2008,2009],{},"\"Payroll just got easier.\" Four words, no hype, no stats. Gusto is betting that the word \"payroll\" alone stops their target audience mid-scroll. And for anyone who has manually run payroll for a remote team, it does. The headline \"HR for Remote Teams\" filters for the exact buyer: distributed companies that need payroll, benefits, and compliance in one place. If you're not that person, you scroll past. If you are, every word speaks to you.",[12,2011,2012,2014],{},[19,2013,99],{}," Use an actual product screenshot as your ad creative so the UI buttons and labels do the selling, then keep the copy to a single short sentence.",[102,2016],{},[58,2018,2020],{"id":2019},"_11-circle-attacking-the-platform-on-the-platform","11. Circle: Attacking the Platform, On the Platform",[63,2022,2028],{"ad-id":2023,"company":2024,"cta":551,"headline":2025,"media-type":311,"website":2026,"display-link":2027},"6925942f4cd6dd0f1a6a03b4","Circle","Connect with your community (how you want, when you want)","https:\u002F\u002Fcircle.so","CIRCLE.SO",[12,2029,2030],{},"Wish your content got consistent engagement? Spending hours crafting content, only for it to reach a small fraction of your Facebook Group members, isn't what you envisioned.",[12,2032,2033],{},[78,2034,2035],{},"Cold audience · Running for 110 days · 11 ad variations",[12,2037,2038,2039],{},"The video opens with simulated posts getting 5 views, 8 views, money draining away. Then a giant muted microphone fills the screen: your voice is being silenced by the algorithm. Anyone who has spent hours on a Facebook Group post for three people to see will feel that frustration. Then the switch: vibrant purple, \"Reach 100% of your audience.\" ",[19,2040,2041],{},"The dark-to-bright contrast communicates the value faster than any paragraph of copy.",[12,2043,2044,2045,2048],{},"Circle is running this ad on Facebook, targeting people frustrated with Facebook Groups. Bold move. The primary text says \"Spending hours crafting content, only for it to reach a small fraction of your Facebook Group members.\" That specificity is what makes it work. When your copy describes someone's ",[19,2046,2047],{},"exact frustration",", they feel like the ad was made for them. \"Like 15,000+ other community builders\" reframes Circle from risky alternative to proven platform.",[12,2050,2051,2053],{},[19,2052,99],{}," Run ads on the platform you are replacing, naming its exact limitation in your copy so frustrated users see your product as the obvious next step.",[102,2055],{},[58,2057,2059],{"id":2058},"_12-nomad-spec-sheet-social-proof","12. NOMAD: Spec-Sheet Social Proof",[63,2061,2067],{"ad-id":2062,"company":2063,"cta":70,"headline":2064,"media-type":67,"website":2065,"display-link":2066},"696544a5339c04e15e3c28c6","NOMAD","Designed for Apple Watch Ultra & Ultra 2","https:\u002F\u002Fnomadgoods.com","NOMADGOODS.COM",[12,2068,2069],{},"Ultra-tough, breathable, waterproof and built for any adventure. This Special Edition Carbon Black band blends durable FKM, titanium, and carbon powder for peak performance and the deepest black finish.",[12,2071,2072],{},[78,2073,2074],{},"Cold audience · Running for 88 days · 10 ad variations",[12,2076,2077,2078,2081],{},"The watch floats against a dark gradient with nothing else competing for attention. Every detail exists to make the band look like a piece of gear, not jewelry. The red watch face against the matte black band pulls your eye straight to the product. For an accessory brand targeting Apple Watch Ultra owners, ",[19,2079,2080],{},"this restraint is a confidence play",": the product sells itself.",[12,2083,2084,2085,1446],{},"\"Brand New Special Edition Black Band.\" No benefit statement, no social proof. Just an announcement. And it works because this audience already knows why they want it. \"Carbon Infused For The Deepest Black Finish Yet\" gives material-obsessed buyers exactly the detail they want. It reads like engineering, not marketing. The copy lists \"FKM, titanium, and carbon powder,\" and for this audience, ",[19,2086,2087],{},"technical materials ARE the social proof",[12,2089,2090,2092],{},[19,2091,99],{}," Replace benefit statements with technical material specs when targeting gear-obsessed buyers who read specifications the way most people read reviews.",[102,2094],{},[58,2096,2098],{"id":2097},"_13-newoai-the-industry-specific-pitch","13. Newo.ai: The Industry-Specific Pitch",[63,2100,2105],{"ad-id":2101,"company":2102,"cta":70,"headline":2103,"media-type":311,"website":2104,"display-link":194},"693b67d2f24d7c4817c6e72d","Newo.ai","Set Up in 3 Minutes. Get 14 Days Free.","https:\u002F\u002Fnewo.ai",[12,2106,2107],{},"Why are dental practices losing up to 20% of patients? The leads are already calling. They just can't get through.",[12,2109,2110],{},[78,2111,2112],{},"Cold audience · 226 days active",[12,2114,2115,2116],{},"The video leads with a \"4 months free\" offer and a woman talking straight to camera. That UGC format makes the ad blend into the feed like a recommendation, not a software pitch. The ad copy targets dentists with Dentrix and OpenDental integrations, but the video keeps it broad. ",[19,2117,2118],{},"Copy qualifies the audience while the video casts a wider net.",[12,2120,2121,2122,1446],{},"\"Why are dental practices losing up to 20% of patients?\" The Q&A format rules out obvious answers: bad marketing, bad staff. The real answer is missed calls. This structure mirrors how the buyer already thinks. Any dental office owner knows they miss calls after hours, they just haven't connected that to patient loss. Putting a number on it makes the problem feel urgent. By the time you reach \"Newo AI Receptionist,\" ",[19,2123,2124],{},"the product feels like the only logical answer",[12,2126,2127,2129],{},[19,2128,99],{}," Frame your ad as a question that quantifies hidden revenue loss for a specific industry, then present your product as the answer after ruling out the obvious causes.",[102,2131],{},[58,2133,2135],{"id":2134},"_14-remini-riding-a-trend","14. Remini: Riding a Trend",[63,2137,2144],{"ad-id":2138,"company":2139,"cta":2140,"headline":2141,"media-type":311,"website":2142,"display-link":2143},"6973aa081b6b419739484fed","Remini","Install now","Try it now!","https:\u002F\u002Fremini.ai","REMINI.AI",[12,2145,2146],{},"No digicam? No problem! AI Flash on got you covered.",[12,2148,2149],{},[78,2150,2151],{},"Cold audience · Running for 86 days · 3 ad variations",[12,2153,2154,2155,2158],{},"The video does one thing: shows photos transforming in real time. No voiceover, no tutorial. Just a dark photo becoming a bright one with \"add flash to your photos with one tap\" on screen. Two different photos get the treatment, proving it works on any image, not just a cherry-picked example. ",[19,2156,2157],{},"For an app install ad, you need people to understand what it does in three seconds",", and a visible before\u002Fafter is the fastest way.",[12,2160,2161,2162,2165],{},"\"No digicam? No problem!\" hooks into a trend that went viral on social media. Remini isn't selling \"AI photo enhancement.\" They're selling the digicam look without buying a digicam. That's smarter positioning because it ",[19,2163,2164],{},"borrows demand from a trend that already exists",". You don't need to convince people they want the look. They already want it. You just need to show them they can get it with an app.",[12,2167,2168,2170],{},[19,2169,99],{}," Position your product as the shortcut to a viral trend people already want instead of pitching the underlying technology.",[102,2172],{},[58,2174,2176],{"id":2175},"_15-photoroom-tutorial-style-demo","15. Photoroom: Tutorial-Style Demo",[63,2178,2182],{"ad-id":2179,"company":2180,"cta":2140,"headline":2141,"media-type":311,"website":2181,"display-link":1951},"695ede41fde49a465c83f883","Photoroom","https:\u002F\u002Fwww.photoroom.com",[12,2183,2184],{},"Turn any photo into AI Reel.",[12,2186,2187],{},[78,2188,2189],{},"Cold audience · Running for 108 days · 10 ad variations",[12,2191,2192,2193,2196],{},"\"You have to see this\" is a simple hook but the demo delivers. The video shows the full process: take a photo of a product, the AI removes the background, generates new backgrounds, then animates the whole thing into a video. Each step looks effortless, and ",[19,2194,2195],{},"that perceived simplicity is the entire sales pitch",". If you're an ecommerce seller or content creator, you watch this and think \"I could do that in 30 seconds.\" That low barrier to entry is what drives installs.",[12,2198,2199,2200,1446],{},"The copy is just seven words: \"Turn any photo into AI Reel.\" That's all Photoroom needs because the video does 100% of the selling. The tutorial format (showing each step sequentially) gives viewers a mental model of the process before they even download the app. The creator filming a product and showing the result on their phone makes it feel achievable, not like a polished marketing demo. When your product creates a visible transformation, ",[19,2201,2202],{},"let the demo carry the ad and cut the copy to the minimum",[12,2204,2205,2207],{},[19,2206,99],{}," Show every step of the process in your video ad so viewers build a mental model of themselves using the product before they even click.",[102,2209],{},[53,2211,2213,2214,2218],{"id":2212},"_5-creative-strategy-patterns-from-these-15-ads","5 ",[31,2215,2217],{"href":2216},"\u002Fglossary\u002Fcreative-strategy","Creative Strategy"," Patterns From These 15 Ads",[58,2220,2222],{"id":2221},"_1-specificity-wins-every-time","1. Specificity Wins Every Time",[12,2224,2225],{},"The best-performing ads in this collection use specific numbers: \"34% more deep sleep,\" \"500,000 home cooks,\" \"20% of patients.\" Vague claims like \"better results\" or \"improved performance\" do not stop the scroll. Numbers do.",[58,2227,2229],{"id":2228},"_2-video-ads-dominate-for-demonstration","2. Video Ads Dominate for Demonstration",[12,2231,2232],{},"Eight of the 15 ads use video. Not because video is inherently better, but because these products benefit from showing the result: RIDGE shows craftsmanship, Lovable shows an app being built, Remini shows a photo transforming. If your product has a visual transformation or process, video is not optional.",[58,2234,2236],{"id":2235},"_3-the-best-copy-mirrors-the-readers-thoughts","3. The Best Copy Mirrors the Reader's Thoughts",[12,2238,2239],{},"Brick's first-person narrative, Circle's pain-point opener, and Newo.ai's Q&A format all work because they sound like what the reader is already thinking. The ad does not feel like a pitch. It feels like the reader's own inner dialogue, which builds trust before the CTA.",[58,2241,2243],{"id":2242},"_4-niche-beats-broad","4. Niche Beats Broad",[12,2245,2246,2247,2250,2251,2255],{},"Prime Prometics targets \"mature lashes.\" NOMAD targets \"Apple Watch Ultra owners.\" Newo.ai targets \"dental practices.\" Opal targets \"ADHD brains.\" The more specific the audience in the ad, the lower the ",[31,2248,2249],{"href":1357},"CPM"," and the higher the ",[31,2252,2254],{"href":2253},"\u002Fglossary\u002Fconversion-rate","conversion rate",". Meta's algorithm rewards relevance. If your ad resonates deeply with a small audience, it will outperform a generic ad shown to everyone.",[58,2257,2259],{"id":2258},"_5-premium-brands-sell-with-restraint","5. Premium Brands Sell With Restraint",[12,2261,2262],{},"Mejuri, RIDGE, and NOMAD prove that less copy can mean more impact. When your product targets a premium buyer, silence signals confidence. A loud, urgent, discount-heavy ad tells the buyer: \"we are desperate for your money.\" A quiet, beautifully shot ad tells them: \"the product speaks for itself.\"",[53,2264,1323],{"id":1322},[58,2266,2268],{"id":2267},"which-facebook-ads-are-most-effective","Which Facebook ads are most effective?",[12,2270,2271,2272,2274,2275,2279],{},"The most effective Facebook ads combine a specific hook (a number, a question, or a bold claim) with a visual that stops the scroll. In this collection, the longest-running ads share one trait: they communicate one idea clearly. Video ads get 2 to 3x more ",[31,2273,1374],{"href":1373}," from Meta's algorithm, but static images with strong copy often drive higher ",[31,2276,2278],{"href":2277},"\u002Fglossary\u002Fctr","CTR",". The best format depends on your goal.",[58,2281,2283],{"id":2282},"what-is-the-3-2-2-method-of-facebook-ads","What is the 3-2-2 method of Facebook ads?",[12,2285,2286],{},"The 3-2-2 method means creating 3 different ad images, 2 different primary text variations, and 2 different headlines for each campaign. This gives Meta's algorithm 12 combinations to test and find the best performer. It is a practical way to run creative tests without producing dozens of individual ads.",[58,2288,2290],{"id":2289},"how-much-do-facebook-ads-cost","How much do Facebook ads cost?",[12,2292,2293,2294,2298,2299,2301,2302,2304],{},"The average ",[31,2295,2297],{"href":2296},"\u002Fglossary\u002Fcpc","CPC"," on Facebook is about $0.54 to $0.70 depending on campaign type. ",[31,2300,1358],{"href":1357}," vary by industry, audience size, and time of year. Lead generation campaigns tend to cost more per click ($1.92 average) because they target higher-intent actions. Use our ",[31,2303,1341],{"href":1340}," to estimate costs for your audience.",[58,2306,2308],{"id":2307},"how-do-i-find-competitor-facebook-ads","How do I find competitor Facebook ads?",[12,2310,2311,2312,2317,2318,2321],{},"Use the ",[31,2313,2316],{"href":2314,"rel":2315},"https:\u002F\u002Fwww.facebook.com\u002Fads\u002Flibrary",[46],"Meta Ad Library"," to search any brand and see their active ads. You can filter by country, platform, and date range. For deeper analysis with performance signals like ad longevity, use a tool like ",[31,2319,2320],{"href":1581},"AdKit's Ad Library"," that tracks how long ads have been running.",[58,2323,2325],{"id":2324},"are-facebook-ads-still-worth-it-in-2026","Are Facebook ads still worth it in 2026?",[12,2327,2328],{},"Yes. Facebook has over 3 billion monthly active users, and the platform offers the best combination of reach, targeting, and cost efficiency for most businesses. The 15 ads in this collection prove the point: companies across every industry are running profitable campaigns on Meta right now.",[53,2330,1386],{"id":1385},[1240,2332,2333,2338,2342,2347,2351],{},[1243,2334,2335,2337],{},[19,2336,1396],{}," that match your industry and audience",[1243,2339,2340,1403],{},[19,2341,1402],{},[1243,2343,2344,2346],{},[19,2345,1408],{}," Take the structure and rewrite it for your product",[1243,2348,2349,1415],{},[19,2350,1414],{},[1243,2352,2353,2355,2356,2359],{},[19,2354,1420],{}," If your ad is still performing after 30 days, you have a winner. After 90 days, scale it hard. Watch for ",[31,2357,2358],{"href":1310},"creative fatigue"," when performance dips on a proven ad.",[12,2361,2362,2363,1428],{},"For more ads organized by industry and platform, browse the full ",[31,2364,1427],{"href":1581},[12,2366,2367,2368,1436,2370,1441,2372,1446],{},"Want to understand the metrics behind your campaigns? Check our free ",[31,2369,1435],{"href":1434},[31,2371,1346],{"href":1345},[31,2373,1341],{"href":1340},[12,2375,2376,2377,2379,2380,1446],{},"For SaaS-specific strategies across Meta, LinkedIn, and Google, see our ",[31,2378,1608],{"href":1607},". For B2B-specific ad strategies, read ",[31,2381,1612],{"href":1548},[12,2383,2384,2385,2388,2389,1446],{},"Learn how ad platforms work under the hood in our guide on ",[31,2386,2387],{"href":1459},"how ads platforms actually work",", or figure out ",[31,2390,2391],{"href":1455},"when to start running ads for your SaaS",{"title":1462,"searchDepth":1463,"depth":1463,"links":2393},[2394,2411,2419,2426],{"id":1615,"depth":1463,"text":1616,"children":2395},[2396,2397,2398,2399,2400,2401,2402,2403,2404,2405,2406,2407,2408,2409,2410],{"id":1619,"depth":1468,"text":1620},{"id":1664,"depth":1468,"text":1665},{"id":1707,"depth":1468,"text":1708},{"id":1746,"depth":1468,"text":1747},{"id":1781,"depth":1468,"text":1782},{"id":1821,"depth":1468,"text":1822},{"id":1865,"depth":1468,"text":1866},{"id":1904,"depth":1468,"text":1905},{"id":1943,"depth":1468,"text":1944},{"id":1983,"depth":1468,"text":1984},{"id":2019,"depth":1468,"text":2020},{"id":2058,"depth":1468,"text":2059},{"id":2097,"depth":1468,"text":2098},{"id":2134,"depth":1468,"text":2135},{"id":2175,"depth":1468,"text":2176},{"id":2212,"depth":1463,"text":2412,"children":2413},"5 Creative Strategy Patterns From These 15 Ads",[2414,2415,2416,2417,2418],{"id":2221,"depth":1468,"text":2222},{"id":2228,"depth":1468,"text":2229},{"id":2235,"depth":1468,"text":2236},{"id":2242,"depth":1468,"text":2243},{"id":2258,"depth":1468,"text":2259},{"id":1322,"depth":1463,"text":1323,"children":2420},[2421,2422,2423,2424,2425],{"id":2267,"depth":1468,"text":2268},{"id":2282,"depth":1468,"text":2283},{"id":2289,"depth":1468,"text":2290},{"id":2307,"depth":1468,"text":2308},{"id":2324,"depth":1468,"text":2325},{"id":1385,"depth":1463,"text":1386},"2026-02-12","Real Facebook ads tracked in the wild, some running for months. Each one includes full copy, creative notes, and a breakdown of what makes it work.",[2430,2433,2435,2438,2441,2443],{"question":2431,"answer":2432},"What makes a good Facebook ad?","The best Facebook ads share four traits. They lead with a specific hook (a number, a question, or a bold claim). They use a visual that stops the scroll. They include social proof or a clear benefit. And they end with a low-friction CTA like \"Try free\" or \"Learn more.\" Specificity beats vagueness every time.",{"question":2290,"answer":2434},"The average cost per click on Facebook is about $0.54 to $0.70 depending on campaign type. CPMs (cost per thousand impressions) vary by industry, audience size, and time of year. Lead generation campaigns tend to cost more per click ($1.92 average) because they target higher-intent actions. You can start with as little as $5 per day.",{"question":2436,"answer":2437},"What type of Facebook ad gets the most clicks?","Video ads get the most reach from Meta's algorithm (2 to 3x more than static images). But for click-through rate, single image ads with clear copy and a strong headline often win. Carousel ads work best for showcasing multiple products or features. The best format depends on your goal, whether that is awareness, traffic, or conversions.",{"question":2439,"answer":2440},"How long should a Facebook video ad be?","For cold audiences, keep it under 15 seconds. The hook must land in the first 3 seconds, or viewers scroll past. For retargeting (people who already know your brand), 30 to 60 seconds works well because the audience is warmer. Always add subtitles since 85% of Facebook video is watched without sound.",{"question":2308,"answer":2442},"Use the Meta Ad Library (facebook.com\u002Fads\u002Flibrary) to search any brand and see their active ads. You can filter by country, platform, and date range. For deeper analysis with performance signals like ad longevity, use a tool like AdKit's Ad Library that tracks how long ads have been running, which is one of the most reliable indicators that an ad is working.",{"question":2325,"answer":2444},"Yes. Facebook has over 3 billion monthly active users, and 54% of marketers report that Facebook ads are very effective for driving sales. The platform offers the best combination of reach, targeting, and cost efficiency for most businesses. The key is matching your ad format, creative, and targeting to your specific audience and goal.",{},"\u002Fresources\u002Fads-examples\u002Ffacebook-ad-examples",{"title":1563,"description":2428},"facebook-ad-examples","resources\u002Fads-examples\u002Ffacebook-ad-examples",[1554,1555,2451,2452,2453],"ad examples","advertising","marketing","mUKn-3tl5Mqca5RY0xHatlD5MRVWWhhsAj7LNN2LEfQ",{"id":2456,"title":2457,"author":7,"body":2458,"breadcrumbLabel":7,"category":1523,"cover":1524,"createdAt":4248,"description":4249,"extension":1527,"faqs":4250,"meta":4264,"navigation":1547,"noAiBadge":1524,"og":1524,"ogDescription":7,"ogIcon":7,"path":1607,"seo":4265,"slug":4266,"stem":4267,"tags":4268,"updatedAt":4248,"wip":1524,"__hash__":4271},"resources\u002Fresources\u002Fads-examples\u002Fsaas-ad-examples.md","Best SaaS Ads in 2026: 45 Examples With Breakdowns",{"type":9,"value":2459,"toc":4184},[2460,2463,2466,2475,2480,2483,2486,2490,2496,2499,2502,2506,2513,2518,2525,2532,2537,2539,2543,2549,2554,2561,2564,2569,2571,2575,2582,2587,2594,2597,2602,2604,2608,2617,2622,2629,2632,2637,2639,2643,2648,2653,2660,2667,2672,2674,2678,2688,2693,2700,2703,2708,2710,2714,2721,2726,2733,2736,2741,2743,2747,2756,2761,2768,2771,2780,2782,2786,2796,2801,2808,2815,2820,2822,2826,2836,2841,2848,2851,2856,2858,2862,2871,2876,2883,2890,2895,2897,2901,2911,2916,2923,2926,2931,2933,2937,2947,2952,2959,2966,2971,2973,2977,2986,2991,2998,3005,3010,3012,3016,3026,3031,3038,3041,3046,3048,3052,3062,3070,3072,3074,3077,3080,3083,3087,3095,3099,3106,3109,3114,3116,3120,3128,3133,3139,3146,3151,3153,3157,3161,3165,3170,3173,3178,3180,3184,3193,3198,3205,3208,3213,3215,3219,3228,3233,3240,3243,3248,3250,3254,3258,3262,3268,3275,3280,3282,3286,3290,3294,3301,3307,3312,3314,3318,3322,3326,3331,3334,3339,3341,3345,3349,3353,3360,3371,3376,3378,3382,3391,3396,3403,3406,3411,3413,3417,3421,3425,3431,3438,3443,3445,3449,3457,3462,3469,3472,3477,3479,3483,3487,3491,3497,3503,3508,3510,3514,3523,3528,3535,3538,3543,3545,3549,3557,3562,3565,3572,3577,3579,3583,3594,3596,3598,3601,3604,3607,3611,3613,3617,3624,3627,3632,3634,3638,3640,3644,3651,3654,3659,3661,3665,3672,3677,3684,3687,3692,3694,3698,3700,3704,3710,3713,3718,3720,3724,3731,3736,3743,3746,3763,3765,3769,3776,3781,3787,3790,3795,3797,3801,3803,3807,3814,3817,3822,3824,3828,3830,3834,3840,3843,3848,3850,3854,3856,3860,3866,3869,3878,3880,3884,3891,3896,3903,3906,3911,3913,3917,3924,3929,3936,3939,3944,3946,3950,3952,3956,3962,3965,3970,3972,3976,3983,3988,3994,3997,4002,4004,4008,4014,4019,4026,4029,4034,4036,4040,4047,4052,4059,4062,4067,4069,4073,4087,4089,4093,4096,4100,4106,4110,4116,4120,4123,4127,4130,4132,4135,4162,4167,4177],[12,2461,2462],{},"You've seen hundreds of SaaS ads in your feed. Most of them are forgettable. A few made you stop scrolling, click, or even sign up.",[12,2464,2465],{},"What separates the two? That's what this collection answers.",[12,2467,25,2468,2471,2472,2474],{},[19,2469,2470],{},"45 real SaaS ads"," from our ",[31,2473,34],{"href":33}," database, organized by platform: Meta (Facebook\u002FInstagram), LinkedIn, and Google. Every ad listed here is from a real campaign run by a real SaaS company, with data on how long it's been active.",[12,2476,2477,2479],{},[19,2478,40],{}," If a well-funded company keeps running the same ad for 200+ days, it's almost certainly profitable. Longevity is one of the most reliable signals that an ad is working.",[12,2481,2482],{},"Use these examples to study the patterns, steal the structures, and build better ads for your own SaaS product.",[12,2484,2485],{},"Looking for Facebook ads across all industries? See our 15 Best Facebook Ad Examples. For B2B-specific strategies, check 15 Best B2B Ad Examples.",[53,2487,2489],{"id":2488},"meta-ads-facebook-instagram","Meta Ads (Facebook & Instagram)",[12,2491,2492,2493,2495],{},"Meta is where most SaaS companies start advertising. The ",[31,2494,1358],{"href":1357}," are relatively low, the retargeting is powerful, and the algorithm is excellent at finding your audience once you feed it enough data.",[12,2497,2498],{},"The best Meta ads for SaaS share a few traits: they lead with a hook that creates curiosity, they use visuals that stand out in a feed full of personal content, and they include clear social proof.",[12,2500,2501],{},"Here are 15 Meta ads from SaaS companies worth studying.",[58,2503,2505],{"id":2504},"_1-mondaycom-social-proof-at-scale","1. monday.com: Social Proof at Scale",[63,2507,2510],{"ad-id":2508,"company":627,"media-type":67,"website":628,"headline":2509,"cta":551},"698413e6093d304a381a2c90","Start your free account today",[12,2511,2512],{},"There's a reason why 180K+ customers use monday.com to efficiently manage their teams, work and processes.",[12,2514,2515],{},[78,2516,2517],{},"Cold audience · Running for 160 days · 2 ad variations",[12,2519,2520,2521,2524],{},"The image uses abstract workflow nodes instead of a product screenshot, which lets every viewer project their own messy process onto the ad. monday.com isn't showing you their tool. They're showing the concept of organized work, and that's smart because ",[19,2522,2523],{},"everyone's workflow is different."," A specific UI screenshot would only resonate with one type of team. This visual works for all of them.",[12,2526,2527,2528,2531],{},"\"180K+ customers\" appears before anything else about the product. That number answers \"why should I care?\" before you even get to the pitch. ",[19,2529,2530],{},"When 180,000 other teams already use your tool, you skip past the trust question entirely."," The rest of the copy stays intentionally broad: \"manage their teams, work and processes.\" They're casting a wide net and letting the social proof carry the weight.",[12,2533,2534,2536],{},[19,2535,99],{}," Lead with your customer count before explaining your product. When the number is big enough, it answers \"why should I care?\" on its own.",[102,2538],{},[58,2540,2542],{"id":2541},"_2-intercom-the-live-demo","2. Intercom: The Live Demo",[63,2544,2547],{"ad-id":2545,"company":66,"media-type":67,"website":2546,"headline":69,"cta":70,"display-link":71},"6904ad9958f444a664a1198d","https:\u002F\u002Fintercom.com",[12,2548,74],{},[12,2550,2551],{},[78,2552,2553],{},"Cold audience · Running for 129 days · 1 ad variation",[12,2555,2556,2557,2560],{},"The image shows a mock chat where a customer reports a $42.50 unrecognized charge, and Fin handles the dispute. Instead of claiming \"our AI can handle complex queries,\" Intercom shows it happening. ",[19,2558,2559],{},"The specificity of \"$42.50\" makes it feel real",", not like a marketing mockup. When your product sounds too good to be true, a demo is worth more than any claim.",[12,2562,2563],{},"The headline \"Unmatched accuracy for complex financial queries\" targets the exact fear: that AI will get things wrong when the stakes are high. By naming the objection directly, Intercom builds trust before the click. And \"See Fin in action\" as the CTA tells you exactly what you'll get. No bait-and-switch.",[12,2565,2566,2568],{},[19,2567,99],{}," Show your product solving a specific, realistic problem instead of claiming it can handle complex queries.",[102,2570],{},[58,2572,2574],{"id":2573},"_3-settle-outcome-over-features","3. Settle: Outcome Over Features",[63,2576,2579],{"ad-id":2577,"company":111,"media-type":67,"website":2578,"headline":113,"cta":70},"6904ff3d58f444a664a1a5ef","https:\u002F\u002Fsettle.com",[12,2580,2581],{},"Manual work isn't what drives growth. Give your team the tools to trust their numbers every month.",[12,2583,2584],{},[78,2585,2586],{},"Cold audience · Running for 134 days · 2 ad variations",[12,2588,2589,2590,2593],{},"\"Know Your Margins. Every Time.\" sits at the top of the image, with four product illustrations each showing a specific margin percentage. If you run a CPG brand, you immediately compare those numbers to your own. ",[19,2591,2592],{},"The ad doesn't explain what Settle does with a feature list. It shows you the outcome",": knowing your exact margin on every SKU.",[12,2595,2596],{},"\"Built for CPG\" at the bottom tells the right people this is for them, and everyone else that it's not. The Facebook copy reinforces this: \"Manual work isn't what drives growth.\" That reframes back-office automation from a boring efficiency play into a growth strategy. Specific numbers create instant self-identification.",[12,2598,2599,2601],{},[19,2600,99],{}," Replace your feature list with specific outcome numbers your audience can compare against their own.",[102,2603],{},[58,2605,2607],{"id":2606},"_4-codecademy-borrowed-credibility","4. Codecademy: Borrowed Credibility",[63,2609,2614],{"ad-id":2610,"company":2611,"media-type":67,"website":2612,"headline":2613,"cta":70},"68f4421b989263f0b30d6c64","Codecademy","https:\u002F\u002Fcodecademy.com","Save 50% on Codecademy Pro",[12,2615,2616],{},"Stay sharp with 50% off Pro, including certification prep & more.",[12,2618,2619],{},[78,2620,2621],{},"Retargeting · Running for 123 days · 3 ad variations",[12,2623,2624,2625,2628],{},"The 50% off tag takes up most of the image, but that's not what makes this ad convert. It's the four logos underneath: Google, Microsoft, AWS, CompTIA. ",[19,2626,2627],{},"A discount on a random coding course is forgettable. A discount on Google and AWS certification prep feels like a career opportunity."," Codecademy is borrowing credibility from brands everyone already trusts.",[12,2630,2631],{},"\"FLASH SALE\" + \"LIMITED TIME ONLY\" stacked together creates enough urgency that price-sensitive buyers feel the pressure to act now. The Facebook copy keeps it simple: \"Stay sharp with 50% off Pro.\" It doesn't oversell. When you have logos doing the trust-building, the copy just needs to get out of the way.",[12,2633,2634,2636],{},[19,2635,99],{}," Borrow credibility from certification partners or well-known brands to make your offer feel like a career opportunity, not just a discount.",[102,2638],{},[58,2640,2642],{"id":2641},"_5-motion-the-22x-time-return","5. Motion: The 22x Time Return",[63,2644,2646],{"ad-id":309,"company":310,"media-type":311,"website":2645,"headline":313,"cta":70,"display-link":314},"https:\u002F\u002Fusemotion.com",[12,2647,317],{},[12,2649,2650],{},[78,2651,2652],{},"Cold audience · Running for 542 days · 1 ad variation",[12,2654,2655,2656,2659],{},"The video structures a minute-by-minute morning routine: 6:00am brain dump, 6:15am let AI schedule, 6:30am done. \"I spend 30 minutes on Monday to save 11h\u002Fweek\" is a ",[19,2657,2658],{},"22x return on time",", and your brain does the math instantly. Motion isn't asking you to change how you work. It's showing that one short session replaces a week of scrambling.",[12,2661,2662,2663,2666],{},"The routine format gives you a mental picture of yourself actually doing it. And framing it as \"Them: what's your secret?\" turns the whole thing into a productivity flex that feels like a creator tip, not an ad. ",[19,2664,2665],{},"Structure your value prop as a routine."," Step-by-step formats are more believable than vague promises.",[12,2668,2669,2671],{},[19,2670,99],{}," Structure your value prop as a step-by-step routine so viewers can picture themselves doing it.",[102,2673],{},[58,2675,2677],{"id":2676},"_6-kinsta-pain-first-positioning","6. Kinsta: Pain-First Positioning",[63,2679,2685],{"ad-id":2680,"company":2681,"media-type":67,"website":2682,"headline":2683,"cta":70,"display-link":2684},"6985da319d38eaa379021592","Kinsta","https:\u002F\u002Fkinsta.com","The Kinsta Update You've Been Waiting For","KINSTA.COM",[12,2686,2687],{},"What's the real cost of manual updates? It's not just about the hours spent updating your plugins and themes yourself. It's about security vulnerabilities that linger while you wait to batch update.",[12,2689,2690],{},[78,2691,2692],{},"Cold audience · Running for 231 days · 1 ad variation",[12,2694,2695,2696,2699],{},"The image leads with a dashboard showing \"12 Successful, 0 Failed\" updates with a real completion time (23 min). Anyone who manages WordPress sites knows the anxiety of plugin updates breaking things. ",[19,2697,2698],{},"The proof comes before the pitch."," Seeing the actual dashboard with specific numbers builds trust more than any feature description could.",[12,2701,2702],{},"The Facebook copy then goes deep on pain: \"security vulnerabilities that linger,\" \"client relationships damaged by preventable downtime.\" Every line targets a specific fear WordPress developers live with. Kinsta doesn't need to convince them the problem exists. They just need to remind them how much it costs to ignore it.",[12,2704,2705,2707],{},[19,2706,99],{}," Show real product data (dashboards, success metrics) before making any claims. Proof before pitch builds trust.",[102,2709],{},[58,2711,2713],{"id":2712},"_7-gusto-unlimited-as-differentiator","7. Gusto: Unlimited as Differentiator",[63,2715,2718],{"ad-id":2716,"company":1988,"media-type":311,"website":1990,"headline":2717,"cta":70,"display-link":1991},"6984fd7b093d304a3826b3c3","Unlimited payroll runs.",[12,2719,2720],{},"Pay your team weekly, or use different pay schedules. You can run infinite payrolls at no extra cost.",[12,2722,2723],{},[78,2724,2725],{},"Cold audience · Running for 126 days · 1 ad variation",[12,2727,2728,2729,2732],{},"This 7-second animated video hammers one message: ",[19,2730,2731],{},"unlimited payroll runs, no extra cost."," Competitors like ADP and Paychex often charge per run or limit how many you can process. By leading with \"unlimited,\" Gusto directly attacks the pricing model its audience already resents.",[12,2734,2735],{},"The copy adds a subtle reframe: \"Pay your team weekly, or use different pay schedules\" feels like permission. Most small business owners assume payroll locks them into biweekly runs. Gusto is reframing flexibility as a feature you already get, not an upgrade you pay for. Find what competitors charge extra for, then make it your headline.",[12,2737,2738,2740],{},[19,2739,99],{}," Find what your competitors charge extra for and make it your free, included-by-default headline.",[102,2742],{},[58,2744,2746],{"id":2745},"_8-skool-identity-based-targeting","8. Skool: Identity-Based Targeting",[63,2748,2753],{"ad-id":2749,"company":2750,"media-type":67,"website":2751,"headline":2752,"cta":70},"69848c0c093d304a3820a5fe","Skool","https:\u002F\u002Fskool.com","Try it free for 14 days!",[12,2754,2755],{},"Got something you love? You should make a skool for that! Like painting? Love games? Into wellness, fitness, or breathwork?",[12,2757,2758],{},[78,2759,2760],{},"Cold audience · Running for 102 days · 4 ad variations",[12,2762,2763,2764,2767],{},"\"If you're a spiritual guide, we want you on Skool.\" That one line is the entire image, and it's ",[19,2765,2766],{},"qualifying the audience before they even read the ad copy."," By calling out a specific identity, Skool makes that person feel this ad was made for them. Everyone else self-selects out, which means fewer wasted clicks.",[12,2769,2770],{},"The Facebook copy then goes broad: painting, games, wellness, breathwork. That mismatch is intentional. The image hooks one niche, but the copy catches anyone who didn't fit that label. 4 variations suggests Skool is testing different identity callouts in each image. Let readers self-select with identity-based targeting. It's more engaging than telling them what the product does.",[12,2772,2773,2775,2776,2779],{},[19,2774,99],{}," Call out a specific identity in your image (\"If you're a ",[1081,2777,2778],{},"role","\") to make the right audience feel the ad was made for them.",[102,2781],{},[58,2783,2785],{"id":2784},"_9-synthesia-pain-elimination","9. Synthesia: Pain Elimination",[63,2787,2793],{"ad-id":2788,"company":2789,"media-type":311,"website":2790,"headline":2791,"cta":70,"display-link":2792},"6989f53f16c0920798257a5a","Synthesia","https:\u002F\u002Fsynthesia.io","Create a FREE AI video now","SYNTHESIA.IO",[12,2794,2795],{},"Synthesia made making training videos too easy for more than 50,000 L&D teams. Skip the production studio, update videos in seconds, don't even need to be on camera.",[12,2797,2798],{},[78,2799,2800],{},"Cold audience · Running for 149 days · 1 ad variation",[12,2802,2803,2804,2807],{},"\"Skip the production studio. Update videos in seconds. Don't even need to be on camera.\" Each bullet removes one painful step from the traditional training video process. ",[19,2805,2806],{},"Synthesia isn't selling AI video generation. They're selling the elimination of everything you hate about making training videos."," List the things your audience hates about the current solution, then cross them off.",[12,2809,2810,2811,2814],{},"\"50,000+ teams\" appears twice, at the top and bottom of the copy. The first mention hooks you, the second seals credibility right before the CTA. ",[19,2812,2813],{},"Bookending your copy with social proof"," is a simple tactic most brands miss. And \"Create a FREE AI video now\" gives you a clear, zero-risk action to take immediately.",[12,2816,2817,2819],{},[19,2818,99],{}," List the painful steps of the old process, then show how your product eliminates each one.",[102,2821],{},[58,2823,2825],{"id":2824},"_10-arcads-before-and-after","10. Arcads: Before and After",[63,2827,2833],{"ad-id":2828,"company":2829,"media-type":311,"website":2830,"headline":2831,"cta":193,"display-link":2832},"6981fcb2b1e34fcafdedb67f","Arcads","https:\u002F\u002Farcads.ai","AI Video: Then vs Now","ARCADS.AI",[12,2834,2835],{},"AI video has come a long way in 2 years. Meet Alex, an AI avatar created with Arcads.ai. Experience the next generation of realistic AI video today.",[12,2837,2838],{},[78,2839,2840],{},"Cold audience · Running for 859 days · 1 ad variation",[12,2842,2843,2844,2847],{},"The split-screen \"AI 2 years ago VS Now\" does in two seconds what a paragraph of copy never could. The bottom half shows a clearly artificial AI person. The top half shows \"Alex,\" an Arcads avatar that looks real. Then the reveal: \"You can generate me because I am AI generated.\" ",[19,2845,2846],{},"If you dismissed AI video as too robotic, that moment re-opens the door."," The best product demos don't tell you to reconsider, they force you to.",[12,2849,2850],{},"The final seconds show a grid of diverse AI actors, answering the obvious next question: can I find someone who fits my brand? The copy keeps it simple: \"AI video has come a long way.\" Before\u002Fafter is one of the most compelling ad formats because it requires zero explanation.",[12,2852,2853,2855],{},[19,2854,99],{}," Use a before\u002Fafter comparison when your audience has already dismissed your product category. Let the visual force them to reconsider.",[102,2857],{},[58,2859,2861],{"id":2860},"_11-jenni-ai-fomo-meets-social-proof","11. Jenni AI: FOMO Meets Social Proof",[63,2863,2868],{"ad-id":2864,"company":2865,"media-type":67,"website":2866,"headline":2867,"cta":551},"6980f2e38d979058578372bc","Jenni AI","https:\u002F\u002Fjenni.ai","Try Jenni AI for FREE",[12,2869,2870],{},"Writing without an AI assistant is a waste of time and energy. Join over 5 million users saving hours of time with Jenni.ai.",[12,2872,2873],{},[78,2874,2875],{},"Cold audience · Running for 312 days · 4 ad variations",[12,2877,2878,2879,2882],{},"The creative looks like someone's TikTok: a girl with her laptop, \"essay\" in bold text. It blends into organic content so well that most people won't register it as an ad until they've already engaged. ",[19,2880,2881],{},"On a platform where people skip anything that looks polished, UGC-style creative earns attention."," That's the image's entire strategy.",[12,2884,2885,2886,2889],{},"\"Writing without an AI assistant is a waste of time and energy.\" That opening doesn't pitch the product, it makes you feel behind. Then: \"Join over 5 million users.\" The shift from \"you're wasting time\" to \"5 million people already figured this out\" creates ",[19,2887,2888],{},"fear of missing out mixed with social proof."," You're not just slow, you're one of the last people doing it the hard way.",[12,2891,2892,2894],{},[19,2893,99],{}," Pair \"you're falling behind\" messaging with a large user count to create urgency backed by social proof.",[102,2896],{},[58,2898,2900],{"id":2899},"_12-wistia-the-complete-funnel","12. Wistia: The Complete Funnel",[63,2902,2908],{"ad-id":2903,"company":2904,"media-type":67,"website":2905,"headline":2906,"cta":70,"display-link":2907},"697246e31b6b4197393bd7c8","Wistia","https:\u002F\u002Fwistia.com","Webinars made simple.","WISTIA.COM",[12,2909,2910],{},"Wistia helps you manage invites, host engaging webinars, and track insights, all in one place. Less hassle, better results.",[12,2912,2913],{},[78,2914,2915],{},"Cold audience · Running for 260 days · 1 ad variation",[12,2917,2918,2919,2922],{},"The image tells the entire product story without reading the copy. \"From invites to insights\" maps to two visuals: a registration card and a metrics dashboard showing 536 impressions, 336 registrations, 291 attendees, 206 watched 75%. ",[19,2920,2921],{},"Those aren't random numbers. They show a complete webinar funnel with realistic drop-off",", which is exactly what marketers want to see.",[12,2924,2925],{},"\"A better webinar toolkit\" implies you already have one and it's not good enough. Instead of explaining what a webinar tool is, Wistia assumes you already use one and positions itself as the upgrade. Three words in the headline, \"Webinars made simple,\" carry the entire value prop. If you can say it in three words, don't use ten.",[12,2927,2928,2930],{},[19,2929,99],{}," Show realistic funnel numbers with natural drop-off rates. Perfect metrics look fake. Real ones build trust.",[102,2932],{},[58,2934,2936],{"id":2935},"_13-kajabi-revenue-receipts","13. Kajabi: Revenue Receipts",[63,2938,2944],{"ad-id":2939,"company":2940,"media-type":311,"website":2941,"headline":2942,"cta":551,"display-link":2943},"693a194bf24d7c4817c246d3","Kajabi","https:\u002F\u002Fkajabi.com","From 0 to 150k students in 18 months","KAJABI.COM",[12,2945,2946],{},"STEAL the exact strategy to create, launch and scale an online course in 2026.",[12,2948,2949],{},[78,2950,2951],{},"Cold audience · Running for 428 days · 1 ad variation",[12,2953,2954,2955,2958],{},"The hook is \"How to start an Online Course\" over a woman talking to camera. But the real move happens at the one-minute mark: a revenue dashboard showing $10,815,338. ",[19,2956,2957],{},"That screenshot is doing the work of a hundred testimonials."," Kajabi sells the dream with receipts, not promises.",[12,2960,2961,2962,2965],{},"The copy stacks two free offers: 14 video lessons + a 30-day trial. Each case study is a different niche (\"Spencer makes 7 figures teaching toddlers to read,\" \"Simran makes $1M teaching women to invest\"). ",[19,2963,2964],{},"If you're thinking about creating a course on anything, one of these stories will feel like yours."," Turn your best customer result into your headline. Specific numbers + timeline = credibility.",[12,2967,2968,2970],{},[19,2969,99],{}," Turn your best customer result into your headline. A real revenue number from a real person beats any feature description.",[102,2972],{},[58,2974,2976],{"id":2975},"_14-mailchimp-the-proof-stack","14. Mailchimp: The Proof Stack",[63,2978,2983],{"ad-id":2979,"company":2980,"media-type":67,"website":2981,"headline":2982,"cta":551},"69315ff2de26ccce3a8cfd61","Mailchimp","https:\u002F\u002Fmailchimp.com","Build Omnichannel Campaigns",[12,2984,2985],{},"Transform your marketing with Mailchimp's advanced automations and AI-powered tools. Get started today.",[12,2987,2988],{},[78,2989,2990],{},"Cold audience · Running for 121 days · 2 ad variations",[12,2992,2993,2994,2997],{},"\"We are able to generate ",[19,2995,2996],{},"30x revenue ROI"," through our email marketing efforts using Mailchimp.\" That quote from a real customer does all the selling. Mailchimp doesn't need to explain what their platform does. They let someone else drop a specific number, and 30x ROI is absurd enough to make you pause. Attaching a real name and company transforms a bold stat into a believable testimonial.",[12,2999,3000,3001,3004],{},"The bottom half shows a laptop with \"Predictive Segmentation\" open, quietly answering the \"how\" question. It's a ",[19,3002,3003],{},"proof stack",": testimonial on top, product screenshot below. Let a customer make the bold claim for you. A testimonial with specific numbers is more credible than self-promotion.",[12,3006,3007,3009],{},[19,3008,99],{}," Let a customer make the bold ROI claim for you. A third-party testimonial with specific numbers beats anything you say about yourself.",[102,3011],{},[58,3013,3015],{"id":3014},"_15-madgicx-metrics-as-creative","15. Madgicx: Metrics as Creative",[63,3017,3023],{"ad-id":3018,"company":3019,"media-type":67,"website":3020,"headline":3021,"cta":551,"display-link":3022},"69716bb61b6b41973933f847","Madgicx","https:\u002F\u002Fmadgicx.com","CHAOS OUT, AI IN CONTROL","MADGICX.COM",[12,3024,3025],{},"Manual Strategies Can't Compete. START YOUR 30-DAY TRIAL.",[12,3027,3028],{},[78,3029,3030],{},"Cold audience · Running for 127 days · 1 ad variation",[12,3032,3033,3034,3037],{},"The image splits into two worlds: red chaos showing 0.19 ROAS and $284 CPA, then blue calm with 3.3 ROAS and $24 CPA. ",[19,3035,3036],{},"Those are exact numbers that make a media buyer's stomach drop or sing."," Putting real metrics in the creative is a filter. If you don't know what ROAS or CPA means, this ad isn't for you, and that's intentional.",[12,3039,3040],{},"\"Manual Strategies Can't Compete\" doesn't explain what Madgicx does. It tells you your current approach is losing. The before\u002Fafter visual already did the selling, so \"Start Your 7-Day Free Trial\" just removes the last barrier. Contrast is powerful: frame your product as the opposite of the current painful state.",[12,3042,3043,3045],{},[19,3044,99],{}," Put real performance metrics (ROAS, CPA) in your creative to filter for the audience that actually understands them.",[102,3047],{},[58,3049,3051],{"id":3050},"what-the-best-meta-ads-have-in-common","What the best Meta ads have in common",[12,3053,3054,3057,3058,3061],{},[19,3055,3056],{},"Specific numbers appear in almost every winner",": \"180K+ customers,\" \"5 million users,\" \"50,000+ teams,\" \"30x ROI.\" Not one top Meta ad uses vague social proof like \"trusted by many.\" The ads that run longest (Arcads at 859 days, Motion at 542 days) communicate ",[19,3059,3060],{},"one idea clearly."," No feature lists, no multi-benefit pitches. And the ads that name a specific pain point consistently outperform those that lead with product capabilities. Meta rewards emotional hooks, conversational tone, and visuals that stop the scroll before the copy does any work.",[12,3063,3064,3065,3069],{},"This lines up with ",[31,3066,3068],{"href":1595,"rel":3067},[46],"Meta's own creative best practices",": lead with one clear message, design for mobile-first, and test multiple variations. The top SaaS advertisers here are doing exactly that.",[102,3071],{},[53,3073,662],{"id":661},[12,3075,3076],{},"LinkedIn is the most expensive ad platform per click, but it's also the only place you can target people by job title, company size, and industry. For B2B SaaS, that precision is worth the premium.",[12,3078,3079],{},"The best LinkedIn ads feel like advice from a smart colleague, not a pitch from a vendor. They blend into the professional feed by using formats that look like organic posts.",[12,3081,3082],{},"Here are 15 LinkedIn ads from SaaS companies worth studying.",[58,3084,3086],{"id":3085},"_1-claude-the-lead-magnet-play","1. Claude: The Lead Magnet Play",[63,3088,3092],{"ad-id":3089,"company":3090,"media-type":67,"website":3091,"platform":679},"6984e25f093d304a3825583e","Claude","https:\u002F\u002Fclaude.ai",[12,3093,3094],{},"Learn how leading companies are eliminating technical debt and accelerating innovation with agentic coding.",[12,3096,3097],{},[78,3098,840],{},[12,3100,3101,3102,3105],{},"\"The Code Modernization Playbook\" is a ",[19,3103,3104],{},"lead magnet"," disguised as a LinkedIn thought leadership post. No screenshots, no product UI, no feature list. On a platform where every SaaS company screams about features, Claude offers to teach you something instead. That's the strategy: give value first, sell later.",[12,3107,3108],{},"The copy leans into pain language decision-makers use: \"eliminating technical debt\" and \"accelerating innovation.\" Those phrases show up in board meetings. Claude isn't targeting developers here. They're targeting the person who approves the budget. \"Agentic coding\" positions Claude in a specific, emerging category rather than the generic \"AI assistant\" space.",[12,3110,3111,3113],{},[19,3112,99],{}," Offer a playbook or guide instead of pitching your product. On LinkedIn, value-first content beats feature-first ads.",[102,3115],{},[58,3117,3119],{"id":3118},"_2-boardy-the-fake-text","2. Boardy: The Fake Text",[63,3121,3125],{"ad-id":3122,"company":3123,"media-type":67,"website":3124,"platform":679},"6984aa9c093d304a38223c9c","Boardy","https:\u002F\u002Fboardy.ai",[12,3126,3127],{},"Here's a networking hack I wish I knew sooner... When someone asks for an intro you can't make, send them to Boardy.",[12,3129,3130],{},[78,3131,3132],{},"Cold audience · Running for 212 days · 1 ad variation",[12,3134,3135,3136],{},"The image is a screenshot of an iMessage conversation where someone asks for a connection at Yamaha Music, and a friend recommends Boardy. It doesn't look like an ad. On LinkedIn, where people are constantly getting pitched, ",[19,3137,3138],{},"something that looks like a private text completely bypasses your \"this is an ad\" filter.",[12,3140,3141,3142,3145],{},"The recommendation is specific: \"You give it your number, it calls you and asks about your experience, then makes an email intro.\" That explains exactly how the product works in a casual, believable way. The copy flips the perspective: instead of needing an intro, you're the person who can't make one. ",[19,3143,3144],{},"Boardy solves both sides."," The best-performing ads on LinkedIn don't look like ads at all.",[12,3147,3148,3150],{},[19,3149,99],{}," Design your ad to look like a real conversation screenshot. On LinkedIn, native-looking content bypasses the \"this is an ad\" filter.",[102,3152],{},[58,3154,3156],{"id":3155},"_3-conveyor-the-honest-review","3. Conveyor: The Honest Review",[63,3158,3159],{"ad-id":715,"company":716,"media-type":67,"website":717,"platform":679},[12,3160,720],{},[12,3162,3163],{},[78,3164,725],{},[12,3166,3167,3168],{},"The image is a screenshot of ChatGPT showing a custom GPT for security questionnaires. That's the competitor. And Conveyor is running an ad that sends you to it. The whole post reads like someone genuinely evaluating a free tool, listing its limitations: specific formats only, can't handle checkboxes, heavy manual setup. ",[19,3169,731],{},[12,3171,3172],{},"By honestly reviewing the DIY approach, Conveyor positions itself as the obvious next step without ever pitching. Anyone who reads this and thinks \"too much work\" is already pre-sold. The copy is structured like a native LinkedIn post with hashtags and short paragraphs, which LinkedIn's algorithm rewards. Reference the workarounds your audience already uses, then show them the proper solution.",[12,3174,3175,3177],{},[19,3176,99],{}," Honestly review the free DIY alternative your audience already uses, and let your product be the obvious upgrade.",[102,3179],{},[58,3181,3183],{"id":3182},"_4-adjust-the-deep-dive-ebook","4. Adjust: The Deep Dive Ebook",[63,3185,3190],{"ad-id":3186,"company":3187,"media-type":67,"website":3188,"headline":3189,"platform":679},"6943d9bf8abe2632579c3e4e","Adjust","https:\u002F\u002Fadjust.com","Seamless user experiences with deep linking",[12,3191,3192],{},"Struggling with broken links and complicated app journeys? Discover how deep linking can boost conversions.",[12,3194,3195],{},[78,3196,3197],{},"Cold audience · Running for 167 days · 1 ad variation",[12,3199,3200,3201,3204],{},"\"A deep dive into deep links\" leads the image, and the subtitle spells out who this is for: \"mobile app marketers, developers, and product managers.\" ",[19,3202,3203],{},"That specificity matters on LinkedIn, where your job title is in your profile."," If you're a mobile product manager, those words make you feel like this was made for you.",[12,3206,3207],{},"The \"EBOOK\" label and \"Download the playbook\" CTA tell you instantly what you're getting and what it costs (nothing). The LinkedIn copy opens with a real pain point: \"Struggling with broken links and complicated app journeys?\" Specific enough to filter, relatable enough to stop the scroll. Name the technical problem your audience faces, then connect it to a business outcome.",[12,3209,3210,3212],{},[19,3211,99],{}," Name your target audience's exact job title in the ad so they feel the content was made specifically for them.",[102,3214],{},[58,3216,3218],{"id":3217},"_5-revenuecat-complexity-as-hook","5. RevenueCat: Complexity as Hook",[63,3220,3225],{"ad-id":3221,"company":3222,"media-type":67,"website":3223,"headline":3224,"platform":679},"693f105be4159b817d89051f","RevenueCat","https:\u002F\u002Frevenuecat.com","See why 50,000 apps use RevenueCat",[12,3226,3227],{},"Let us handle in-app subscriptions so that you can get back to focusing on what's important, building your app.",[12,3229,3230],{},[78,3231,3232],{},"Cold audience · Running for 173 days · 1 ad variation",[12,3234,3235,3236,3239],{},"\"In-app subscriptions shouldn't be this complicated.\" That line sits above a flowchart showing grace periods, billing retries, renewal failures, price increases. ",[19,3237,3238],{},"The image isn't showing what RevenueCat does. It's showing what your life looks like without RevenueCat."," Any mobile developer who has wrestled with Apple or Google's subscription APIs will see that flowchart and feel it.",[12,3241,3242],{},"The word \"complicated\" in red is the only color breaking the black and white, pulling your eye to the exact emotion they want. \"50,000 apps\" in the headline provides scale-based social proof developers respect. Position your product as the thing that removes the chore so your customer can do what they actually enjoy.",[12,3244,3245,3247],{},[19,3246,99],{}," Visualize the complexity your audience faces without your product. Make the pain graphic, not verbal.",[102,3249],{},[58,3251,3253],{"id":3252},"_6-foleon-the-pdf-call-out","6. Foleon: The PDF Call-Out",[63,3255,3256],{"ad-id":675,"company":676,"media-type":67,"website":677,"headline":678,"platform":679},[12,3257,682],{},[12,3259,3260],{},[78,3261,687],{},[12,3263,3264,3265],{},"\"Tell me you're not sending PDFs to actual prospects.\" Paired with a grumpy PDF icon rolling its eyes, this ad makes you feel called out. If you're a B2B marketer on LinkedIn, you've sent a PDF to a prospect this week. ",[19,3266,3267],{},"That emotional reaction, guilt mixed with humor, stops the scroll.",[12,3269,3270,3271,3274],{},"The primary text backs it up: \"70% of your audience is on mobile and won't read your PDF.\" That reframes the problem from \"PDFs are fine\" to \"you're losing most of your audience.\" Then the headline flips into a low-friction CTA: \"Send us a PDF. We'll show you what engagement looks like.\" They're not asking for a demo, just a file you already have. ",[19,3272,3273],{},"Turn your pitch into a challenge or demonstration."," The fact that this has run for 809 days tells you the approach keeps working.",[12,3276,3277,3279],{},[19,3278,99],{}," Call out a specific behavior your audience does every week (like sending PDFs) and make them feel the cost of not changing.",[102,3281],{},[58,3283,3285],{"id":3284},"_7-coefficient-humor-as-pattern-interrupt","7. Coefficient: Humor as Pattern Interrupt",[63,3287,3288],{"ad-id":791,"company":792,"media-type":67,"website":793,"headline":794,"platform":679},[12,3289,797],{},[12,3291,3292],{},[78,3293,802],{},[12,3295,3296,3297,3300],{},"\"People who use spreadsheets: 100%.\" It's a pie chart with one slice. The joke is obvious, and that's why it works on LinkedIn. A B2B tool for spreadsheet automation could default to a product screenshot. Instead, Coefficient uses a meme-format visual that says \"we get you\" without explaining a feature. ",[19,3298,3299],{},"Humor is the pattern interrupt"," on a platform where most ads look like pitch decks.",[12,3302,3303,3304,3306],{},"The copy pivots to \"500K pros are automating data imports\" for social proof. And \"Become the hero in your org\" appeals to professional identity. ",[19,3305,814],{}," Appeal to how your product makes the buyer look good within their organization.",[12,3308,3309,3311],{},[19,3310,99],{}," Use a meme or joke format to earn attention on LinkedIn, where every other ad looks like a pitch deck.",[102,3313],{},[58,3315,3317],{"id":3316},"_8-ahrefs-fear-based-positioning","8. Ahrefs: Fear-Based Positioning",[63,3319,3320],{"ad-id":867,"company":868,"media-type":67,"website":869,"headline":870,"platform":679},[12,3321,873],{},[12,3323,3324],{},[78,3325,878],{},[12,3327,3328,3329],{},"\"If you're not in AI answers, you're invisible.\" That taps into a real fear marketers feel right now. The mock ChatGPT response underneath, \"Your brand not found,\" turns an abstract worry into something concrete. Ahrefs is selling a new category (Brand Radar), and the challenge with new categories is people don't know they need it yet. ",[19,3330,884],{},[12,3332,3333],{},"\"AI is the new front page\" reframes AI search as the place where first impressions happen, which makes every marketer think \"wait, am I showing up there?\" Tie your product to a larger trend your audience is already worried about. When you're creating a new category, the ad's job isn't to explain the product. It's to make people feel the pain of not having it.",[12,3335,3336,3338],{},[19,3337,99],{}," Tie your product to a trend your audience is already worried about. Fear of missing a shift sells new categories faster than features.",[102,3340],{},[58,3342,3344],{"id":3343},"_9-ada-the-familiar-interface","9. Ada: The Familiar Interface",[63,3346,3347],{"ad-id":829,"company":830,"media-type":311,"website":831,"headline":832,"platform":679},[12,3348,835],{},[12,3350,3351],{},[78,3352,840],{},[12,3354,3355,3356,3359],{},"The video opens on a simple chat bubble: a customer typing with the AI about to respond. That frame mimics the exact interface your prospects use every day, so it registers as familiar, not promotional. On LinkedIn, where people scroll past polished brand videos, ",[19,3357,3358],{},"something that looks like a real conversation earns a pause."," When your product IS the UI, showing the actual experience is stronger than any claim.",[12,3361,3362,3363,3366,3367,3370],{},"The copy leans hard into \"without adding headcount,\" the exact language a VP would use in a budget meeting. ",[19,3364,3365],{},"That's the difference between generic value props and copy that mirrors how your buyer actually thinks."," \"Without ",[1081,3368,3369],{},"the thing they want to avoid","\" is a powerful copy structure. Name the cost they're trying to escape.",[12,3372,3373,3375],{},[19,3374,99],{}," Write copy using the exact language your buyer uses in budget meetings (\"without adding headcount\"), not the language marketers use in ads.",[102,3377],{},[58,3379,3381],{"id":3380},"_10-salesforce-recruiting-as-marketing","10. Salesforce: Recruiting as Marketing",[63,3383,3388],{"ad-id":3384,"company":3385,"media-type":67,"website":3386,"headline":3387,"platform":679},"696f1a807e2df6b472cfe0ef","Salesforce","https:\u002F\u002Fsalesforce.com","Get exclusive invitations, career tips, open role alerts",[12,3389,3390],{},"Here, ambition meets action. Tech meets trust. And innovation isn't just a buzzword; it's a way of life.",[12,3392,3393],{},[78,3394,3395],{},"Cold audience · Running for 62 days · 1 ad variation",[12,3397,3398,3399,3402],{},"This isn't selling software. It's selling community and career advancement. The image says \"Join our Talent Community\" but the copy talks about Agentforce and innovation. That disconnect is intentional. ",[19,3400,3401],{},"Salesforce uses product excitement to fuel recruiting."," If you're a tech professional who keeps hearing about AI agents, this ad ties that energy to career opportunities.",[12,3404,3405],{},"The headline flips to something practical: career tips, open role alerts. It's not asking you to apply. It's asking you to join a community, which is a much lower commitment. You're collecting warm leads who might not be job-hunting today. On LinkedIn, sell the professional growth your product enables, not just the product itself.",[12,3407,3408,3410],{},[19,3409,99],{}," Use product excitement to fuel recruiting. On LinkedIn, career-focused ads reach people already thinking about growth.",[102,3412],{},[58,3414,3416],{"id":3415},"_11-hubspot-the-free-template","11. HubSpot: The Free Template",[63,3418,3419],{"ad-id":753,"company":754,"media-type":67,"website":755,"headline":756,"platform":679},[12,3420,759],{},[12,3422,3423],{},[78,3424,764],{},[12,3426,3427,3428,3430],{},"\"FREE\" in small text at the top, then \"Marketing Plan Template\" in massive bold type. On LinkedIn, the word \"FREE\" combined with something genuinely useful stops marketers mid-scroll. This is a ",[19,3429,3104],{},", and it works because the offer is dead simple: a template, no credit card, no demo call.",[12,3432,3433,3434,3437],{},"The copy is one sentence: \"We built the definitive Marketing Plan Template so you don't have to.\" \"Definitive\" tells you this isn't a generic PDF, it's THE one. ",[19,3435,3436],{},"On LinkedIn, where marketing managers are the core audience, this hits a real pain",": everyone needs a marketing plan, nobody wants to build one from scratch. Offer a free tool or template that solves a real problem. It's the Trojan horse of SaaS marketing.",[12,3439,3440,3442],{},[19,3441,99],{}," Offer a free template that solves a real, recurring problem. The best LinkedIn lead magnets require zero commitment.",[102,3444],{},[58,3446,3448],{"id":3447},"_12-gorgias-partner-positioning","12. Gorgias: Partner Positioning",[63,3450,3454],{"ad-id":3451,"company":3452,"media-type":311,"website":3453,"platform":679},"6946d3178abe263257a7ba0a","Gorgias","https:\u002F\u002Fgorgias.com",[12,3455,3456],{},"AI is transforming ecommerce, and we're here to help you innovate alongside it.",[12,3458,3459],{},[78,3460,3461],{},"Cold audience · Running for 238 days · 1 ad variation",[12,3463,3464,3465,3468],{},"\"AI is transforming ecommerce, and we're here to help you innovate alongside it.\" That positions Gorgias as a guide, not a vendor. On LinkedIn, partnership framing resonates more than hard sells. ",[19,3466,3467],{},"The real hook comes later: \"An AI Agent that turns casual shoppers into buyers.\""," That reframes Gorgias from a helpdesk tool into a revenue driver.",[12,3470,3471],{},"For ecommerce brands, the promise of turning browsers into buyers is way more compelling than \"better ticket resolution.\" The event angle (\"Join us at Gorgias Connect in LA\") turns a product launch into an exclusive moment, which performs well on LinkedIn. Position your company as a partner in transformation, not just a tool to buy.",[12,3473,3474,3476],{},[19,3475,99],{}," Position your company as a partner in your audience's transformation, not just a vendor selling a tool.",[102,3478],{},[58,3480,3482],{"id":3481},"_13-datarails-jargon-as-filter","13. Datarails: Jargon as Filter",[63,3484,3485],{"ad-id":905,"company":906,"media-type":67,"website":907,"headline":908,"platform":679},[12,3486,911],{},[12,3488,3489],{},[78,3490,916],{},[12,3492,3493,3494],{},"\"The smartest way to do FP&A.\" Most people scrolling LinkedIn have no idea what FP&A means. And that's the point. If you're a finance professional, those letters immediately signal \"this is for me.\" ",[19,3495,3496],{},"Using industry jargon as a hook on LinkedIn filters for exactly the right audience.",[12,3498,3499,3500,3502],{},"The copy takes it further: \"The smartest finance teams aren't working harder. They're working with Datarails.\" That reframes the product from a tool into a status signal. Then three specific outcomes: real-time insights, automated reports, zero manual errors. ",[19,3501,929],{}," Make your target audience feel like the smart ones for choosing your product.",[12,3504,3505,3507],{},[19,3506,99],{}," Use industry jargon as your hook on LinkedIn. Acronyms like \"FP&A\" filter for exactly the right audience and signal \"this is for my people.\"",[102,3509],{},[58,3511,3513],{"id":3512},"_14-appsflyer-emotion-over-features","14. AppsFlyer: Emotion Over Features",[63,3515,3520],{"ad-id":3516,"company":3517,"media-type":67,"website":3518,"headline":3519,"platform":679},"698901dba13e680dad9aa8f9","AppsFlyer","https:\u002F\u002Fappsflyer.com","An MMP you can count on",[12,3521,3522],{},"Your MMP should give you insights, not anxiety.",[12,3524,3525],{},[78,3526,3527],{},"Cold audience · Running for 162 days · 1 ad variation",[12,3529,3530,3531,3534],{},"\"One graph always goes down when marketers switch to AppsFlyer.\" You're thinking about performance metrics. Then the graph label hits: \"Stress levels.\" It's a joke, but it names the real pain. ",[19,3532,3533],{},"Mobile marketers dealing with MMPs know the frustration of messy dashboards."," AppsFlyer could have talked about accuracy or integrations. Instead, they went with how it feels to use a bad tool.",[12,3536,3537],{},"That emotional angle is way more effective on LinkedIn, where people scroll past feature lists but stop for something that makes them smile. \"Join 15k+ brands\" in the CTA handles the social proof. Name the negative emotion your competitor's product causes, then position yours as the opposite.",[12,3539,3540,3542],{},[19,3541,99],{}," Name the negative emotion your competitor's product causes (\"anxiety,\" \"stress\"), then position yours as the relief.",[102,3544],{},[58,3546,3548],{"id":3547},"_15-klaviyo-original-research","15. Klaviyo: Original Research",[63,3550,3554],{"ad-id":3551,"company":548,"media-type":67,"website":3552,"headline":3553,"platform":679},"69730ef41b6b41973942ecec","https:\u002F\u002Fklaviyo.com","Welcome to a new era in consumer marketing",[12,3555,3556],{},"Find out what 8,000+ consumers say matters most in 2025.",[12,3558,3559],{},[78,3560,3561],{},"Cold audience · Running for 102 days · 1 ad variation",[12,3563,3564],{},"\"We surveyed 8,000 global consumers.\" On LinkedIn, where marketers are bombarded with opinions, a stat backed by actual research stands out. The image looks like a report cover, with small UI elements scattered around (product cards, SMS notifications, 5-star reviews) that show what Klaviyo powers without explaining the product.",[12,3566,3567,3568,3571],{},"The copy gives away the answer upfront: \"it's all about great customer experiences.\" Most lead magnets tease to get the click. ",[19,3569,3570],{},"Klaviyo tells you the takeaway so you trust the report is worth downloading."," That works because the spoiler itself positions Klaviyo's core value. If you have original data, lead with it. Proprietary research is one of the strongest hooks for B2B audiences.",[12,3573,3574,3576],{},[19,3575,99],{}," Lead with proprietary data or original research. On LinkedIn, exclusive numbers are the strongest hooks for B2B audiences.",[102,3578],{},[58,3580,3582],{"id":3581},"what-the-best-linkedin-ads-have-in-common","What the best LinkedIn ads have in common",[12,3584,3585,3586,3589,3590,3593],{},"LinkedIn's best-performing ads barely look like ads. ",[19,3587,3588],{},"Lead magnets dominate",": playbooks, templates, ebooks, research reports. The top performers offer value before asking for anything. The second pattern is ",[19,3591,3592],{},"job-title-specific language",": \"mobile app marketers,\" \"finance teams,\" \"FP&A professionals.\" On the only platform where people list their roles in their profiles, naming the title is the strongest filter. And the longest-running ads (Foleon at 809 days, Conveyor at 526 days) all use organic post formatting: short paragraphs, hashtags, conversational tone. On LinkedIn, looking native is more important than looking polished.",[102,3595],{},[53,3597,941],{"id":940},[12,3599,3600],{},"Google Ads captures people at the moment of highest intent. They're actively searching for a solution. Your job is to show up with the right message at the right time.",[12,3602,3603],{},"Unlike Meta and LinkedIn, you have very limited real estate: a headline, a description, and sometimes extensions. Every word has to earn its place.",[12,3605,3606],{},"Here are 15 Google ads from SaaS companies worth studying.",[58,3608,3610],{"id":3609},"_1-clickup-direct-problem-solution","1. ClickUp: Direct Problem-Solution",[953,3612],{"company":270,"description":955,"display-url":956,"headline":957,"website":271},[12,3614,3615],{},[78,3616,962],{},[12,3618,3619,3620,3623],{},"Nearly three years running. \"Stop Switching Between Multiple Tools\" names the exact frustration that drives someone to search for project management software. ",[19,3621,3622],{},"Your description should mirror the problem the person just typed into the search bar."," \"Manage Everything In One Platform\" answers it in seven words.",[12,3625,3626],{},"No feature list, no clever hook. Just problem and solution in the most direct format possible. When you're competing with 10 other search results, clarity wins over creativity every time.",[12,3628,3629,3631],{},[19,3630,99],{}," Mirror the exact problem the searcher typed and solve it in one sentence. On Google, clarity beats creativity.",[102,3633],{},[58,3635,3637],{"id":3636},"_2-hibob-confidence-as-differentiator","2. HiBob: Confidence as Differentiator",[953,3639],{"company":989,"description":990,"display-url":991,"headline":992,"website":993},[12,3641,3642],{},[78,3643,998],{},[12,3645,3646,3647,3650],{},"\"So Much Better\" is bold for a Google Ad. Better than what? That's the curiosity gap. Most search ads play it safe with feature-benefit copy. HiBob goes the other direction: ",[19,3648,3649],{},"confidence as a differentiator."," The description keeps it minimal, letting the brand name do the work.",[12,3652,3653],{},"In a SERP full of \"Best HR Software\" headlines, something that reads like a personal recommendation stands out. Confident, even slightly provocative headlines stand out in a sea of safe Google Ads because they break the pattern.",[12,3655,3656,3658],{},[19,3657,99],{}," Use a confident, even provocative headline to stand out in a SERP full of safe, feature-benefit copy.",[102,3660],{},[58,3662,3664],{"id":3663},"_3-riverside-search-intent-match","3. Riverside: Search Intent Match",[953,3666],{"company":3667,"description":3668,"display-url":3669,"headline":3670,"website":3671},"Riverside","Record remote podcasts and video interviews in studio quality from anywhere.","riverside.fm","Riverside.fm","https:\u002F\u002Friverside.fm",[12,3673,3674],{},[78,3675,3676],{},"Running for 1,059 days",[12,3678,3679,3680,3683],{},"\"Record remote podcasts and video interviews in studio quality from anywhere.\" That description reads like a direct answer to the search query \"how to record podcasts remotely.\" ",[19,3681,3682],{},"When your description matches the searcher's intent word for word, your click-through rate goes up"," because it feels like Google found exactly what they asked for.",[12,3685,3686],{},"\"Studio quality from anywhere\" compresses the entire value prop into five words. The headline is just the domain name, which works when the description is doing all the heavy lifting.",[12,3688,3689,3691],{},[19,3690,99],{}," Write your description as a direct answer to the search query so it reads like Google found exactly what the searcher needs.",[102,3693],{},[58,3695,3697],{"id":3696},"_4-highlevel-cost-elimination","4. HighLevel: Cost Elimination",[953,3699],{"company":1133,"description":1134,"display-url":1135,"headline":1136,"website":1137},[12,3701,3702],{},[78,3703,1142],{},[12,3705,3706,3707,3709],{},"\"Enjoy the benefits of not having to hire or rely on a tech team.\" That's not selling software. That's selling ",[19,3708,1148],{}," Agency owners and small business operators live with the frustration of depending on developers for every change.",[12,3711,3712],{},"The \"All-In-One\" framing in the headline reinforces it: one platform means one subscription instead of a tech team salary. For many SaaS buyers, the biggest cost isn't software, it's the people you hire to run it.",[12,3714,3715,3717],{},[19,3716,99],{}," Sell the elimination of a cost (like hiring a tech team) rather than the addition of features.",[102,3719],{},[58,3721,3723],{"id":3722},"_5-clickfunnels-aspiration-over-features","5. ClickFunnels: Aspiration Over Features",[953,3725],{"company":3726,"description":3727,"display-url":3728,"headline":3729,"website":3730},"ClickFunnels","Join 100,000+ Entrepreneurs Who Use ClickFunnels To Get Their Products Out To The World!","clickfunnels.com","ClickFunnels Official Site","https:\u002F\u002Fclickfunnels.com",[12,3732,3733],{},[78,3734,3735],{},"Running for 992 days",[12,3737,3738,3739,3742],{},"\"Join 100,000+ Entrepreneurs\" is doing two things at once: ",[19,3740,3741],{},"social proof and identity targeting."," It tells you the tool is proven AND that it's for entrepreneurs specifically. \"Get Their Products Out To The World\" is aspirational, not technical.",[12,3744,3745],{},"Nobody searches for \"funnel builder\" because they love building funnels. They search because they want to launch something. ClickFunnels matches the aspiration, not the task. That distinction is why this copy works better than \"Build High-Converting Sales Funnels.\"",[12,3747,3748,3750,3751,3754,3755,3758,3759,3762],{},[19,3749,99],{}," Combine social proof with identity targeting in one line: \"Join ",[1081,3752,3753],{},"number"," ",[1081,3756,3757],{},"identity group"," who use ",[1081,3760,3761],{},"product",".\"",[102,3764],{},[58,3766,3768],{"id":3767},"_6-weglot-fear-plus-ease","6. Weglot: Fear Plus Ease",[953,3770],{"company":3771,"description":3772,"display-url":3773,"headline":3774,"website":3775},"Weglot","Stop losing customers. Talk to them in their own language with Weglot. No coding required.","weglot.com","Translate your Store | Best multilingual app","https:\u002F\u002Fweglot.com",[12,3777,3778],{},[78,3779,3780],{},"Running for 974 days",[12,3782,3783,3784],{},"\"Stop losing customers\" opens with a fear that's hard to ignore. If your store only speaks English, you're leaving money on the table, and you probably know it. ",[19,3785,3786],{},"That hook works because it names a problem the searcher already suspects but hasn't fixed yet.",[12,3788,3789],{},"\"No coding required\" immediately removes the implementation objection that stops most store owners from translating their site. Two pain points, both resolved in the same description.",[12,3791,3792,3794],{},[19,3793,99],{}," Open with a fear-based line about what they're losing, then immediately remove the implementation objection in the same description.",[102,3796],{},[58,3798,3800],{"id":3799},"_7-semrush-segment-and-speak","7. Semrush: Segment and Speak",[953,3802],{"company":1021,"description":1022,"display-url":1023,"headline":1024,"website":1025},[12,3804,3805],{},[78,3806,1030],{},[12,3808,3809,3810,3813],{},"This ad targets a specific segment (agencies) with a specific feature (client portal) and a specific outcome (warm leads, more clients). That level of specificity signals that Semrush understands agency workflows, not generic marketing needs. ",[19,3811,3812],{},"A targeted ad for agencies beats a generic ad for \"marketers\" every time"," because the searcher feels like the product was built for their exact situation.",[12,3815,3816],{},"\"Grow your client base faster\" speaks to the one metric every agency cares about. Nearly 1,000 days running validates the segmented approach.",[12,3818,3819,3821],{},[19,3820,99],{}," Segment your Google Ads by audience type. An ad that speaks to agencies beats a generic \"marketers\" ad every time.",[102,3823],{},[58,3825,3827],{"id":3826},"_8-headshotpro-process-clarity","8. HeadshotPro: Process Clarity",[953,3829],{"company":231,"description":1097,"display-url":1098,"headline":1099,"website":1100},[12,3831,3832],{},[78,3833,1105],{},[12,3835,1108,3836,3839],{},[19,3837,3838],{},"That's the most persuasive thing you can do in a Google Ad: remove all ambiguity."," The searcher knows exactly what they're buying, how it works, and how long it takes.",[12,3841,3842],{},"The 14-day money-back guarantee in the headline removes the last objection. For AI products that sound too good to be true, this step-by-step approach builds more trust than any claim about quality or technology.",[12,3844,3845,3847],{},[19,3846,99],{}," Explain your entire process in one sentence: what they do, how long it takes, what they get. Remove all ambiguity.",[102,3849],{},[58,3851,3853],{"id":3852},"_9-360learning-the-anti-chaos-position","9. 360Learning: The Anti-Chaos Position",[953,3855],{"company":1053,"description":1054,"display-url":1055,"headline":1056,"website":1057},[12,3857,3858],{},[78,3859,1062],{},[12,3861,3862,3863],{},"\"Without the chaos\" is doing all the heavy lifting. If you've ever implemented an LMS, you know exactly what that word means: broken integrations, endless setup, confused users. ",[19,3864,3865],{},"360Learning doesn't name specific features. They name the feeling of using the wrong tool.",[12,3867,3868],{},"\"All the power of a modern LMS without the chaos\" is a formula you can steal for any product. Three adjectives (fast, collaborative, easy) hit the three things LMS buyers actually want.",[12,3870,3871,1079,3873,1084,3875,3877],{},[19,3872,99],{},[1081,3874,1083],{},[1081,3876,1087],{},"\" to address both desire and fear in one line.",[102,3879],{},[58,3881,3883],{"id":3882},"_10-spyfu-humor-in-search","10. SpyFu: Humor in Search",[953,3885],{"company":3886,"description":3887,"display-url":3888,"headline":3889,"website":3890},"SpyFu","Some people humiliate themselves for the top organic search spot.","spyfu.com","Spy On Your SEO Competition","https:\u002F\u002Fspyfu.com",[12,3892,3893],{},[78,3894,3895],{},"Running for 1,039 days",[12,3897,3898,3899,3902],{},"\"Some people humiliate themselves for the top organic search spot.\" That's funny, slightly dark, and completely unexpected in a Google Ad. Most search ads are serious and feature-driven. ",[19,3900,3901],{},"SpyFu breaks the pattern by being entertaining",", which makes people click out of curiosity alone.",[12,3904,3905],{},"The headline \"Spy On Your SEO Competition\" plays into the competitive nature every SEO professional already feels. It's not selling analytics software. It's selling the thrill of seeing what your competitors do.",[12,3907,3908,3910],{},[19,3909,99],{}," Use humor in your Google Ad to break the pattern in categories where every other result is serious and feature-driven.",[102,3912],{},[58,3914,3916],{"id":3915},"_11-jungle-scout-authority-claims","11. Jungle Scout: Authority Claims",[953,3918],{"company":3919,"description":3920,"display-url":3921,"headline":3922,"website":3923},"Jungle Scout","Get The #1 Essential All-In-One AMZ Product Finder & Research Tool.","junglescout.com","Welcome To JungleScout.com | AMZ Seller Software","https:\u002F\u002Fjunglescout.com",[12,3925,3926],{},[78,3927,3928],{},"Running for 988 days",[12,3930,3931,3932,3935],{},"\"#1\" and \"All-In-One\" are power phrases in search ads because they compress a buying decision into two signals: ",[19,3933,3934],{},"this is the best, and it does everything."," Amazon sellers searching for product research tools don't want to compare five options. They want someone to tell them which one to use.",[12,3937,3938],{},"\"Essential\" reinforces that this isn't optional. The headline is keyword-rich (\"AMZ Seller Software\") which helps quality score and click-through rate. 988 days in a competitive niche proves this direct approach works.",[12,3940,3941,3943],{},[19,3942,99],{}," Claim the #1 position explicitly when search intent is \"which tool should I use.\" Searchers want someone to decide for them.",[102,3945],{},[58,3947,3949],{"id":3948},"_12-feedonomics-niche-superlatives","12. Feedonomics: Niche Superlatives",[953,3951],{"company":1170,"description":1171,"display-url":1172,"headline":1173,"website":1174},[12,3953,3954],{},[78,3955,1179],{},[12,3957,1182,3958,3961],{},[19,3959,3960],{},"the niche is small enough to credibly own."," Claiming \"#1 project management tool\" is a stretch anyone can see through. Claiming \"most powerful shopping feed platform\" is believable because most people can't name a second one.",[12,3963,3964],{},"Feedonomics targets a specific, technical audience (multichannel ecommerce) and speaks with the confidence of a market leader. 1,044 days running validates that the claim resonates with buyers who know the category.",[12,3966,3967,3969],{},[19,3968,99],{}," In niche B2B categories, superlatives are more credible because fewer people can challenge the claim. Own it.",[102,3971],{},[58,3973,3975],{"id":3974},"_13-koinly-time-promise","13. Koinly: Time Promise",[953,3977],{"company":3978,"description":3979,"display-url":3980,"headline":3981,"website":3982},"Koinly","Calculate your crypto taxes in 20 minutes.","koinly.io","Instant Crypto Tax Calculation | Koinly Crypto Tax Calculator","https:\u002F\u002Fkoinly.io",[12,3984,3985],{},[78,3986,3987],{},"Running for 984 days",[12,3989,3990,3991],{},"\"Calculate your crypto taxes in 20 minutes.\" That's the entire value proposition in seven words. Crypto taxes are stressful and complex. Most people dread them. ",[19,3992,3993],{},"A specific time promise removes the biggest mental barrier: not knowing how long the pain will last.",[12,3995,3996],{},"\"20 minutes\" is concrete in a way that \"fast and easy\" never could be. The headline doubles down with \"Instant,\" reinforcing the speed promise from a different angle. For products that solve a dreaded task, the best copy isn't about features. It's about how quickly the problem goes away.",[12,3998,3999,4001],{},[19,4000,99],{}," For products that solve dreaded tasks, lead with a specific time promise (\"20 minutes\") instead of vague \"fast and easy\" claims.",[102,4003],{},[58,4005,4007],{"id":4006},"_14-appsumo-trust-signal-stack","14. AppSumo: Trust Signal Stack",[953,4009],{"company":4010,"description":4011,"display-url":4012,"headline":4010,"website":4013},"AppSumo","60-Day Money-Back Guarantee. Lifetime Access To 5-Star Products. Trusted By 1.25M+ Entrepreneurs.","appsumo.com","https:\u002F\u002Fappsumo.com",[12,4015,4016],{},[78,4017,4018],{},"Running for 1,029 days",[12,4020,4021,4022,4025],{},"Three trust signals in rapid succession: 60-day guarantee, lifetime access, 1.25M entrepreneurs. ",[19,4023,4024],{},"Each phrase removes a different objection before the searcher can form it."," \"What if I don't like it?\" 60-day guarantee. \"Is it a subscription?\" Lifetime access. \"Is this legit?\" 1.25M entrepreneurs.",[12,4027,4028],{},"The brand name alone in the headline works because AppSumo has strong recognition. When you've built enough brand equity, your name in the headline + trust signals in the description is all you need.",[12,4030,4031,4033],{},[19,4032,99],{}," Stack three trust signals in your description, each addressing a different objection: guarantee, access model, and social proof.",[102,4035],{},[58,4037,4039],{"id":4038},"_15-learnworlds-keyword-repetition","15. LearnWorlds: Keyword Repetition",[953,4041],{"company":4042,"description":4043,"display-url":4044,"headline":4045,"website":4046},"LearnWorlds","The Best Online Course Platform For Creating, Selling And Promoting Your Online Courses.","learnworlds.com","LearnWorlds Official Site | Online Course Platform","https:\u002F\u002Flearnworlds.com",[12,4048,4049],{},[78,4050,4051],{},"Running for 1,015 days",[12,4053,4054,4055,4058],{},"\"Online Course Platform\" appears in both headline and description. That's not lazy copy, it's intentional. ",[19,4056,4057],{},"Keyword repetition signals maximum relevance to Google's algorithm",", which improves quality score and lowers your CPC.",[12,4060,4061],{},"\"Creating, Selling And Promoting\" covers the full lifecycle of online courses, telling the searcher they won't need additional tools. For competitive keywords where 10+ ads appear, being the most relevant result matters more than being the most clever.",[12,4063,4064,4066],{},[19,4065,99],{}," Repeat your target keyword in both headline and description. For competitive search terms, relevance signals beat clever copy.",[102,4068],{},[58,4070,4072],{"id":4071},"what-the-best-google-ads-have-in-common","What the best Google ads have in common",[12,4074,4075,4076,4079,4080,4083,4084,4086],{},"Longevity is extreme on search: every ad here has been running 900+ days, some past 1,000. That tells you ",[19,4077,4078],{},"search intent doesn't shift"," the way social trends do. The best performers mirror the exact words someone typed: \"project management,\" \"record podcasts,\" \"crypto tax calculator.\" Trust signals are concentrated and stacked: money-back guarantees, customer counts, time promises appear together because ",[19,4081,4082],{},"searchers compare 5+ results at once"," and trust per word matters more than on any other platform. The ads that explain what happens after the click (\"upload selfies, get headshots in 2 hours\") consistently outperform vague promises. If your ",[31,4085,2278],{"href":2277}," is below 3% on branded search, your ad copy likely needs more specificity.",[53,4088,1323],{"id":1322},[58,4090,4092],{"id":4091},"what-makes-a-good-saas-ad","What makes a good SaaS ad?",[12,4094,4095],{},"The best SaaS ads lead with a specific outcome, not a feature list. They include social proof (customer counts, G2 badges, specific metrics), a clear CTA, and a visual that either shows the product in action or illustrates the result. Every top-performing ad in this collection hits at least three of those elements. Specificity beats vagueness every time.",[58,4097,4099],{"id":4098},"which-platform-is-best-for-saas-advertising","Which platform is best for SaaS advertising?",[12,4101,4102,4103,4105],{},"It depends on your goal. LinkedIn is best for targeting decision-makers by job title and company size. Meta (Facebook\u002FInstagram) gives you cheaper ",[31,4104,1358],{"href":1357}," and strong retargeting. Google captures people already searching for a solution. Most successful SaaS companies run ads on at least two platforms, which is why we organized this collection by platform.",[58,4107,4109],{"id":4108},"how-much-do-saas-companies-spend-on-ads","How much do SaaS companies spend on ads?",[12,4111,4112,4113,4115],{},"The average B2B SaaS company spends 10 to 20 percent of annual revenue on marketing, with paid ads taking a significant share. Early-stage companies often allocate more (20 to 40 percent) to build awareness quickly. Use our ",[31,4114,1341],{"href":1340}," to estimate costs for your specific audience.",[58,4117,4119],{"id":4118},"should-saas-ads-use-video-or-static-images","Should SaaS ads use video or static images?",[12,4121,4122],{},"Both work, but for different stages. Video drives higher engagement for cold audiences (especially on Meta and LinkedIn). Static images work well for retargeting and Google Display. In this collection, the longest-running Meta ads are split between both formats. The key is matching the format to the platform and audience intent.",[58,4124,4126],{"id":4125},"how-do-you-write-saas-ad-copy-that-converts","How do you write SaaS ad copy that converts?",[12,4128,4129],{},"Start with the problem, not the product. Use specific numbers instead of vague claims. \"Save 10 hours a week\" beats \"streamline your workflow.\" Include social proof and end with a clear, low-friction CTA like \"Start free\" or \"Try it free for 14 days.\" The pattern section under each platform above shows this in action.",[53,4131,1386],{"id":1385},[12,4133,4134],{},"Studying ads is only useful if you take action. Here is a practical framework:",[1240,4136,4137,4142,4147,4153,4157],{},[1243,4138,4139,4141],{},[19,4140,1396],{}," from companies similar to yours (same size, same audience, same platform)",[1243,4143,4144,4146],{},[19,4145,1402],{}," What's the hook? What's the proof? What's the CTA?",[1243,4148,4149,4152],{},[19,4150,4151],{},"Adapt, don't copy."," Take the structure and rewrite it for your product and audience",[1243,4154,4155,1415],{},[19,4156,1414],{},[1243,4158,4159,4161],{},[19,4160,1420],{}," If your ad is still performing after 30 days, you're onto something. After 90 days, scale it.",[12,4163,4164,4165,1428],{},"For more SaaS ads organized by category and platform, browse the full ",[31,4166,1427],{"href":33},[12,4168,1431,4169,1436,4171,1436,4173,1441,4175,1446],{},[31,4170,1435],{"href":1434},[31,4172,1346],{"href":1345},[31,4174,1341],{"href":1340},[31,4176,1445],{"href":1444},[12,4178,4179,4180,1342,4182,1446],{},"If you're just getting started with paid ads, read our guide on ",[31,4181,1456],{"href":1455},[31,4183,1460],{"href":1459},{"title":1462,"searchDepth":1463,"depth":1463,"links":4185},[4186,4204,4222,4240,4247],{"id":2488,"depth":1463,"text":2489,"children":4187},[4188,4189,4190,4191,4192,4193,4194,4195,4196,4197,4198,4199,4200,4201,4202,4203],{"id":2504,"depth":1468,"text":2505},{"id":2541,"depth":1468,"text":2542},{"id":2573,"depth":1468,"text":2574},{"id":2606,"depth":1468,"text":2607},{"id":2641,"depth":1468,"text":2642},{"id":2676,"depth":1468,"text":2677},{"id":2712,"depth":1468,"text":2713},{"id":2745,"depth":1468,"text":2746},{"id":2784,"depth":1468,"text":2785},{"id":2824,"depth":1468,"text":2825},{"id":2860,"depth":1468,"text":2861},{"id":2899,"depth":1468,"text":2900},{"id":2935,"depth":1468,"text":2936},{"id":2975,"depth":1468,"text":2976},{"id":3014,"depth":1468,"text":3015},{"id":3050,"depth":1468,"text":3051},{"id":661,"depth":1463,"text":662,"children":4205},[4206,4207,4208,4209,4210,4211,4212,4213,4214,4215,4216,4217,4218,4219,4220,4221],{"id":3085,"depth":1468,"text":3086},{"id":3118,"depth":1468,"text":3119},{"id":3155,"depth":1468,"text":3156},{"id":3182,"depth":1468,"text":3183},{"id":3217,"depth":1468,"text":3218},{"id":3252,"depth":1468,"text":3253},{"id":3284,"depth":1468,"text":3285},{"id":3316,"depth":1468,"text":3317},{"id":3343,"depth":1468,"text":3344},{"id":3380,"depth":1468,"text":3381},{"id":3415,"depth":1468,"text":3416},{"id":3447,"depth":1468,"text":3448},{"id":3481,"depth":1468,"text":3482},{"id":3512,"depth":1468,"text":3513},{"id":3547,"depth":1468,"text":3548},{"id":3581,"depth":1468,"text":3582},{"id":940,"depth":1463,"text":941,"children":4223},[4224,4225,4226,4227,4228,4229,4230,4231,4232,4233,4234,4235,4236,4237,4238,4239],{"id":3609,"depth":1468,"text":3610},{"id":3636,"depth":1468,"text":3637},{"id":3663,"depth":1468,"text":3664},{"id":3696,"depth":1468,"text":3697},{"id":3722,"depth":1468,"text":3723},{"id":3767,"depth":1468,"text":3768},{"id":3799,"depth":1468,"text":3800},{"id":3826,"depth":1468,"text":3827},{"id":3852,"depth":1468,"text":3853},{"id":3882,"depth":1468,"text":3883},{"id":3915,"depth":1468,"text":3916},{"id":3948,"depth":1468,"text":3949},{"id":3974,"depth":1468,"text":3975},{"id":4006,"depth":1468,"text":4007},{"id":4038,"depth":1468,"text":4039},{"id":4071,"depth":1468,"text":4072},{"id":1322,"depth":1463,"text":1323,"children":4241},[4242,4243,4244,4245,4246],{"id":4091,"depth":1468,"text":4092},{"id":4098,"depth":1468,"text":4099},{"id":4108,"depth":1468,"text":4109},{"id":4118,"depth":1468,"text":4119},{"id":4125,"depth":1468,"text":4126},{"id":1385,"depth":1463,"text":1386},"2026-02-19","The best SaaS ads running right now. 45 real examples from Meta, LinkedIn, and Google with strategic breakdowns of why each one works.",[4251,4253,4255,4257,4259,4262],{"question":4092,"answer":4252},"The best SaaS ads lead with a specific outcome, not a feature list. They include social proof (customer counts, G2 badges, specific metrics), a clear CTA, and a visual that either shows the product in action or illustrates the result. Specificity beats vagueness every time.",{"question":4099,"answer":4254},"It depends on your goal. LinkedIn is best for targeting decision-makers by job title and company size. Meta (Facebook\u002FInstagram) gives you cheaper CPMs and strong retargeting. Google captures people already searching for a solution. Most successful SaaS companies run ads on at least two platforms.",{"question":4109,"answer":4256},"The average B2B SaaS company spends 10 to 20 percent of annual revenue on marketing, with paid ads taking a significant share. Early-stage companies often allocate more (20 to 40 percent) to build awareness quickly, while mature companies spend 5 to 10 percent.",{"question":4119,"answer":4258},"Both work, but for different stages. Video drives higher engagement for cold audiences (especially on Meta and LinkedIn). Static images work well for retargeting and Google Display. The key is matching the format to the platform and audience intent.",{"question":4260,"answer":4261},"How long should a SaaS video ad be?","For cold audiences, 15 seconds max. For retargeting, 30 to 60 seconds. The hook must land in the first 3 seconds. Always add subtitles since most people watch without sound.",{"question":4126,"answer":4263},"Start with the problem, not the product. Use specific numbers instead of vague claims. \"Save 10 hours a week\" beats \"streamline your workflow.\" Include social proof and end with a clear, low-friction CTA like \"Start free\" or \"Try it free for 14 days.\"",{},{"title":2457,"description":4249},"saas-ad-examples","resources\u002Fads-examples\u002Fsaas-ad-examples",[4269,4270,2453,1559],"saas","ads","o6QQ1e3fbi8vqpV4NxQi-8XGxZ-NSH6GXjYDQZcdeFk",{"id":4273,"title":4274,"author":7,"body":4275,"breadcrumbLabel":7,"category":4776,"cover":1524,"createdAt":4777,"description":4778,"extension":1527,"faqs":4779,"meta":4792,"navigation":1547,"noAiBadge":1524,"og":1524,"ogDescription":7,"ogIcon":7,"path":4793,"seo":4794,"slug":4795,"stem":4795,"tags":4796,"updatedAt":7,"wip":1524,"__hash__":4802},"resources\u002Fresources\u002Fai-ad-agents.md","AI Ad Agents: What They Are and How to Set One Up (2026)",{"type":9,"value":4276,"toc":4761},[4277,4292,4295,4298,4302,4309,4312,4345,4351,4364,4371,4375,4379,4390,4405,4409,4412,4416,4432,4435,4439,4445,4449,4462,4466,4481,4485,4488,4498,4502,4505,4511,4517,4527,4533,4539,4543,4546,4577,4580,4584,4696,4699,4707,4710,4714,4725,4731,4743,4749,4758],[12,4278,4279,4282,4283,4287,4288,1446],{},[19,4280,4281],{},"TL;DR:","\nAn ",[31,4284,4286],{"href":4285},"\u002Fglossary\u002Fai-ad-agent","AI Ad Agent"," connects to your ad accounts (Google, Meta, Tiktok, etc.) through ",[31,4289,4291],{"href":4290},"\u002Fresources\u002Fgoogle-ads-mcp-setup","MCP servers",[12,4293,4294],{},"It lets you query live campaign data and operate it in plain English, pull reports, spot budget issues, compare ROAS across platforms, all without needing to use platform's outdated and slow dashboards.",[12,4296,4297],{},"They are powerful but can be risky if not used with caution. Setup takes 30-60 minutes. The technology works, but the guardrails don't exist yet.",[53,4299,4301],{"id":4300},"what-is-an-ai-ad-agent","What is an AI ad agent?",[12,4303,4304,4305,4308],{},"An ",[19,4306,4307],{},"AI ad agent"," (sometimes called an AI marketing agent) goes beyond chatbots and rule-based automation. The market is splitting into three categories: creative agents (like Creatify and Arcads) that generate ad visuals and copy, campaign management agents (like AdsGency AI and Amazon's built-in agent) that handle bidding and budgets, and full-stack platforms (like Jasper) that try to do everything. But they all share the same core idea.",[12,4310,4311],{},"How agents compare to what you might already use:",[4313,4314,4315,4321,4330,4336],"ul",{},[1243,4316,4317,4320],{},[19,4318,4319],{},"Generic AI models"," (ChatGPT, Gemini, etc.) answer questions from general knowledge. They don't connect to your data.",[1243,4322,4323,4326,4327,4329],{},[19,4324,4325],{},"Rule-based automation"," follows fixed rules you set up (\"if ",[31,4328,2278],{"href":2277}," drops below 1%, pause the ad\"). It can't adapt when conditions change.",[1243,4331,4332,4335],{},[19,4333,4334],{},"Copilots"," suggest actions but wait for you to approve each one. Helpful, but slow.",[1243,4337,4338,4341,4342],{},[19,4339,4340],{},"AI ad agents"," connect to your platforms, observe performance data, decide what matters, and can act on it. They follow a continuous loop: ",[19,4343,4344],{},"observe, decide, act.",[12,4346,4347,4348,4350],{},"In the \"observe\" step, the agent pulls real data from your ad platform. Spend, ",[31,4349,2249],{"href":1357},", conversions, creative metrics, audience breakdowns. In \"decide,\" it compares current performance against your goals and identifies what needs attention. In \"act,\" it either surfaces recommendations or makes changes directly, depending on its access level.",[12,4352,4353,4354,4359,4360,4363],{},"This is where ",[31,4355,4358],{"href":4356,"rel":4357},"https:\u002F\u002Fmodelcontextprotocol.io",[46],"MCP (Model Context Protocol)"," comes in. MCP is an open standard created by Anthropic that lets AI tools plug into external data sources. Think of it like a USB port: any compatible AI tool can connect to any compatible data source. When an agent connects to your ",[31,4361,4362],{"href":4290},"Google Ads MCP server",", it's reading your real campaign numbers, not guessing. The data flows directly from the platform's API.",[12,4365,4366,4367,4370],{},"The key distinction is ",[19,4368,4369],{},"autonomy",". Traditional tools need you to define every rule. An agent works from goals (\"find campaigns wasting budget\") and figures out the steps itself. You set the destination. It figures out the route.",[53,4372,4374],{"id":4373},"where-ai-ad-agents-work-today","Where AI ad agents work today",[4376,4377],"icon-grid",{":items":4378},"[{\"id\":\"google\",\"name\":\"Google Ads\",\"icon\":\"logos:google-ads\",\"to\":\"\u002Fresources\u002Fgoogle-ads-mcp-setup\"},{\"id\":\"meta\",\"name\":\"Meta Ads\",\"icon\":\"logos:meta-icon\",\"to\":\"\u002Ffeatures\u002Fads-mcp\u002Fmeta\"},{\"id\":\"tiktok\",\"name\":\"TikTok Ads\",\"icon\":\"fa6-brands:tiktok\",\"badge\":\"Coming\"}, {\"id\":\"linkedin\",\"name\":\"LinkedIn Ads\",\"icon\":\"logos:linkedin-icon\",\"badge\":\"Coming\"}, {\"id\":\"reddit\",\"name\":\"Reddit Ads\",\"icon\":\"logos:reddit-icon\",\"badge\":\"Coming\"}, {\"id\":\"x\",\"name\":\"X Ads\",\"icon\":\"logos:x\",\"badge\":\"Coming\"}]",[12,4380,4381,4383,4384,4389],{},[19,4382,941],{}," has an ",[31,4385,4388],{"href":4386,"rel":4387},"https:\u002F\u002Fdevelopers.google.com\u002Fgoogle-ads\u002Fapi\u002Fdocs\u002Fdeveloper-toolkit\u002Fmcp-server",[46],"official MCP server"," maintained by Google's Ads API team. Launched October 2025, read-only. You can pull any report or metric but can't change bids or budgets through it. That's the right call for now, write access without guardrails on live ad spend is asking for trouble.",[12,4391,4392,4395,4396,4400,4401,4404],{},[19,4393,4394],{},"Meta Ads"," has several ",[31,4397,4399],{"href":4398},"\u002Ffeatures\u002Fads-mcp\u002Fmeta","third-party MCP servers"," but no official one from Meta. This is a problem. Third-party servers can break when Meta updates its Marketing API, and your campaign data flows through infrastructure you don't control. You don't know what these providers log, store, or do with your data. Some support write operations, meaning a third party's code can modify your live campaigns. Read our ",[31,4402,4403],{"href":4398},"Meta Ads MCP guide"," before connecting anything.",[53,4406,4408],{"id":4407},"what-ai-ad-agents-can-do-today","What AI ad agents can do today",[12,4410,4411],{},"Most of what agents do today falls into the \"observe and analyze\" category. Read-only. But it covers a lot of ground.",[58,4413,4415],{"id":4414},"pull-reports-and-analyze-data","Pull reports and analyze data",[12,4417,4418,4419,4421,4422,4424,4425,4427,4428,1342,4430,1446],{},"Ask a question in plain English, get an answer from live campaign data. Something like \"Which campaigns had the worst ",[31,4420,1591],{"href":1590}," last month?\" or \"Show me every ad set where ",[31,4423,2249],{"href":1357}," is above $20 and ",[31,4426,2278],{"href":2277}," is below 1%.\" No dashboard clicking, no exports, no spreadsheet normalization. This works today through MCP connections to ",[31,4429,941],{"href":4290},[31,4431,4394],{"href":4398},[12,4433,4434],{},"If you manage multiple accounts, this alone changes your workflow. Pulling comparable metrics across three client accounts takes minutes instead of an hour of tab-switching and CSV wrangling.",[58,4436,4438],{"id":4437},"spot-budget-problems-and-pacing-issues","Spot budget problems and pacing issues",[12,4440,4441,4442,4444],{},"Track how budget gets consumed across campaigns. Find the ones exhausting their daily budget by 2pm (missing afternoon traffic) or only spending 40% of their allocation (targeting probably too narrow). An agent can also spot trends over time, like a ",[31,4443,2297],{"href":2296}," that's been creeping up 5% week over week, something you might not notice until it's already eaten into your margins.",[58,4446,4448],{"id":4447},"creative-performance-and-fatigue-detection","Creative performance and fatigue detection",[12,4450,4451,4452,4455,4456,4458,4459,4461],{},"See which headlines, images, or videos are actually driving results. Compare ",[31,4453,4454],{"href":2253},"conversion rates"," across creatives and formats. Flag ads with declining CTR or rising frequency, the early signs of ",[31,4457,2358],{"href":1310},", so you can refresh creatives before ",[31,4460,1591],{"href":1590}," tanks.",[58,4463,4465],{"id":4464},"audience-insights","Audience insights",[12,4467,4468,4469,4472,4473,4475,4476,4480],{},"Which audiences have the lowest ",[31,4470,4471],{"href":1444},"cost per acquisition","? Which ",[31,4474,1859],{"href":1858}," lists are converting and which are exhausted? You can use our ",[31,4477,4479],{"href":4478},"\u002Ftools\u002Fcac-calculator","CAC calculator"," to benchmark these numbers, but an agent surfaces them across every segment in seconds. Cross-segment analysis is one of the most painful things to do in any ad platform UI. With an agent, it's one question.",[58,4482,4484],{"id":4483},"cross-platform-reporting","Cross-platform reporting",[12,4486,4487],{},"This is where agents become worth the setup time. Instead of logging into three dashboards and normalizing metrics by hand, you ask a single AI assistant to compare ROAS across Google, Meta, and Amazon in one conversation. Find which platform has the best cost per acquisition. Identify where an extra $500 in daily budget would have the highest impact. See which platform's audience overlap is cannibalizing your spend.",[12,4489,4490,4491,4494,4495,1446],{},"The individual platform queries are useful but incremental. Cross-platform analysis in seconds, from one conversation, is a different kind of capability. You can also benchmark your numbers manually with our ",[31,4492,4493],{"href":1434},"ROAS calculator"," or ",[31,4496,4497],{"href":1340},"CPM calculator",[53,4499,4501],{"id":4500},"what-ai-ad-agents-cant-do-yet","What AI ad agents can't do yet",[12,4503,4504],{},"Most marketing content won't tell you this part. But it matters.",[12,4506,4507,4510],{},[19,4508,4509],{},"Write operations are limited and risky."," Most MCP servers are read-only. Google's official server is read-only. Amazon's supports writes, and some third-party Meta servers do too. But giving AI write access to live ad spend without proper guardrails is dangerous. There are no undo buttons in ad platforms. A misunderstood prompt can pause your best campaign, blow through a daily budget in minutes, or change bids across every ad group in your account. And you won't know until you check.",[12,4512,4513,4516],{},[19,4514,4515],{},"No reliable cross-platform orchestration."," You can query multiple platforms, but no agent can reliably shift budget from Google to Meta based on real-time performance. The data formats are different, attribution windows don't match, and the platforms don't talk to each other.",[12,4518,4519,4522,4523,4526],{},[19,4520,4521],{},"Creative generation is not creative strategy."," AI can generate ad copy and images. It cannot understand your brand voice, know why your audience buys, or develop a ",[31,4524,4525],{"href":2216},"creative strategy",". It follows patterns from training data. That's useful for variations, not for direction.",[12,4528,4529,4532],{},[19,4530,4531],{},"Human judgment still matters."," An agent can tell you a campaign is underperforming. It can't tell you whether that campaign is a strategic loss leader for brand awareness, or whether the audience segment it's testing will matter in six months. Context, intent, and strategy are still human territory.",[12,4534,4535,4538],{},[19,4536,4537],{},"Unsupervised changes on live spend are dangerous."," More and more ad spend is being managed with some form of agentic AI. But \"managed\" ranges from \"AI pulls reports\" to \"AI controls the budget.\" The latter, without human oversight, has led to expensive mistakes. Always keep a human in the loop for anything that spends money.",[53,4540,4542],{"id":4541},"how-to-connect-an-ai-agent-to-your-ad-account","How to connect an AI agent to your ad account",[12,4544,4545],{},"MCP is the foundation. The setup is simpler than most people expect. Three steps:",[1240,4547,4548,4554,4567],{},[1243,4549,4550,4553],{},[19,4551,4552],{},"Pick your platform."," Choose from the grid above. Each platform has a different MCP server with different capabilities and tradeoffs. Google's official server is the most reliable. Meta's third-party options give you more flexibility (including write access) but less stability, and your data passes through their infrastructure.",[1243,4555,4556,4559,4560,4494,4563,4566],{},[19,4557,4558],{},"Set up the MCP server."," Follow our platform-specific guides: ",[31,4561,4562],{"href":4290},"Google Ads MCP",[31,4564,4565],{"href":4398},"Meta Ads MCP",". You'll need API credentials from the ad platform, which is the most technical part. Setup takes 15-60 minutes depending on your comfort with API keys and OAuth.",[1243,4568,4569,4572,4573,4576],{},[19,4570,4571],{},"Start querying your data."," Connect your AI tool (Claude, Cursor, Windsurf, or similar) to the MCP server and start asking questions about your campaigns in plain English. Test with something simple first: ",[78,4574,4575],{},"\"What campaigns are currently active in my account?\""," If you get real data back, you're connected.",[12,4578,4579],{},"This is not a full tutorial. The platform-specific guides walk through every step with detailed instructions and troubleshooting for common issues like token expiration and rate limits.",[53,4581,4583],{"id":4582},"ai-ad-agents-vs-manual-campaign-management","AI ad agents vs manual campaign management",[4585,4586,4587,4601],"table",{},[4588,4589,4590],"thead",{},[4591,4592,4593,4596,4598],"tr",{},[4594,4595],"th",{},[4594,4597,4286],{},[4594,4599,4600],{},"Human Media Buyer",[4602,4603,4604,4618,4631,4644,4657,4670,4683],"tbody",{},[4591,4605,4606,4612,4615],{},[4607,4608,4609],"td",{},[19,4610,4611],{},"Speed",[4607,4613,4614],{},"Reacts in seconds",[4607,4616,4617],{},"Checks campaigns 1-2x per day",[4591,4619,4620,4625,4628],{},[4607,4621,4622],{},[19,4623,4624],{},"Cost",[4607,4626,4627],{},"MCP servers free, AI tools $20-100\u002Fmo",[4607,4629,4630],{},"Salary ($50-120k) or agency fees (15-20% of spend)",[4591,4632,4633,4638,4641],{},[4607,4634,4635],{},[19,4636,4637],{},"Scale",[4607,4639,4640],{},"Handles hundreds of campaigns simultaneously",[4607,4642,4643],{},"Limited by attention and hours",[4591,4645,4646,4651,4654],{},[4607,4647,4648],{},[19,4649,4650],{},"Accuracy",[4607,4652,4653],{},"Data-driven, no emotional bias",[4607,4655,4656],{},"Can misread data, but catches context AI misses",[4591,4658,4659,4664,4667],{},[4607,4660,4661],{},[19,4662,4663],{},"Creativity",[4607,4665,4666],{},"Weak: follows patterns from training data",[4607,4668,4669],{},"Strong: understands brand, audience, culture",[4591,4671,4672,4677,4680],{},[4607,4673,4674],{},[19,4675,4676],{},"Strategy",[4607,4678,4679],{},"Can't set goals, only optimize toward them",[4607,4681,4682],{},"Sets direction and makes judgment calls",[4591,4684,4685,4690,4693],{},[4607,4686,4687],{},[19,4688,4689],{},"Risk",[4607,4691,4692],{},"Can make costly mistakes fast if unsupervised",[4607,4694,4695],{},"Mistakes are slower and usually smaller",[12,4697,4698],{},"AI agents are best at execution. The repetitive, data-heavy work that eats your mornings. Humans are best at strategy, creative direction, and risk management. The most effective setup combines both.",[12,4700,4701,4702,4706],{},"Think of it like ",[31,4703,4705],{"href":4704},"\u002Fglossary\u002Fmarketing-automation","marketing automation"," in general. The best results come from automating the tedious parts while keeping human oversight on the decisions that matter. Nobody automates their way to a great brand. But you can automate your way to faster, more informed decisions about where to spend your next dollar.",[12,4708,4709],{},"For most teams, the realistic workflow looks like this: the AI agent monitors your campaigns continuously and surfaces a daily briefing of what changed, what's working, and what needs attention. You review, make the strategic calls, and let the agent handle the data-heavy follow-through. Not glamorous, but it's what actually works today without putting live ad spend at risk.",[53,4711,4713],{"id":4712},"the-future-of-ai-ad-agents","The future of AI ad agents",[12,4715,4716,4719,4720,4724],{},[19,4717,4718],{},"Write operations are arriving."," Google hasn't announced a timeline for write access on its MCP server, but the pattern from other Google APIs suggests a staged rollout: limited actions first (pausing campaigns, adjusting budgets), full campaign management later. Amazon is already there. When write access becomes standard, ",[31,4721,4723],{"href":4722},"\u002Fglossary\u002Fai-media-buying","AI media buying"," stops being a concept and becomes a workflow.",[12,4726,4727,4730],{},[19,4728,4729],{},"Cross-platform orchestration."," Today, you can query multiple platforms through separate MCP connections. The goal is a single agent that understands your entire ad portfolio and can shift budget between platforms based on real-time performance. Nobody does this reliably yet.",[12,4732,4733,4736,4737,4742],{},[19,4734,4735],{},"Industry standards are forming."," The ",[31,4738,4741],{"href":4739,"rel":4740},"https:\u002F\u002Fadcontextprotocol.org",[46],"AdCP (Ad Context Protocol)"," initiative, backed by 20+ companies, is working on standardized agent-to-platform interoperability. If it succeeds, connecting an AI agent to any ad platform becomes as straightforward as plugging in a USB cable. Right now, every platform has its own API format, its own authentication flow, its own data schema. AdCP aims to fix that fragmentation.",[12,4744,4745,4748],{},[19,4746,4747],{},"The market is splitting into tiers."," At the top, full-service AI ad platforms that handle everything from creative generation to campaign optimization. In the middle, MCP-based agents that connect to your existing ad accounts and add an intelligence layer. At the bottom, simple rule-based automations that still call themselves \"AI.\" Understanding where a tool sits on this spectrum helps you avoid paying for capabilities you don't need.",[12,4750,4751,4754,4755,4757],{},[19,4752,4753],{},"Agent-assisted, not agent-replaced."," Amazon has stated publicly that they're moving from \"AI-assisted\" to \"AI-managed\" advertising. But even their vision keeps humans in the loop for strategy and oversight. The best ",[31,4756,4340],{"href":4285}," will handle execution while you get better insights, make faster decisions, and focus on the work that actually requires a human brain.",[12,4759,4760],{},"At AdKit, we're building toward MCP-powered cross-platform intelligence. One place to analyze your Google, Meta, and Amazon campaigns without setting up separate MCP servers for each platform.",{"title":1462,"searchDepth":1463,"depth":1463,"links":4762},[4763,4764,4765,4772,4773,4774,4775],{"id":4300,"depth":1463,"text":4301},{"id":4373,"depth":1463,"text":4374},{"id":4407,"depth":1463,"text":4408,"children":4766},[4767,4768,4769,4770,4771],{"id":4414,"depth":1468,"text":4415},{"id":4437,"depth":1468,"text":4438},{"id":4447,"depth":1468,"text":4448},{"id":4464,"depth":1468,"text":4465},{"id":4483,"depth":1468,"text":4484},{"id":4500,"depth":1463,"text":4501},{"id":4541,"depth":1463,"text":4542},{"id":4582,"depth":1463,"text":4583},{"id":4712,"depth":1463,"text":4713},"ai-agent-ads","2026-03-17","AI ad agents pull reports, spot budget issues, and optimize campaigns across Google, Meta, and Amazon. Learn how they work and set one up in under an hour.",[4780,4783,4786,4789],{"question":4781,"answer":4782},"What is an AI agent in advertising?","An AI ad agent is software that connects to your ad platforms and autonomously performs tasks like pulling reports, analyzing performance, and flagging budget issues. Unlike generic AI models that just answer questions, agents interact directly with your campaign data through APIs and can take action on what they find.",{"question":4784,"answer":4785},"How much does an AI ad agent cost?","The core infrastructure is often free. MCP servers for Google Ads and Amazon Ads are open-source. AI tools like Claude or ChatGPT have their own subscription costs (typically $20-100\u002Fmonth). Full-service AI ad platforms like Jasper or AdsGency AI charge more, usually $49-500\u002Fmonth depending on features and ad spend volume.",{"question":4787,"answer":4788},"Can AI agents replace media buyers?","Not yet, and probably not fully. AI agents handle the repetitive, data-heavy work faster than humans, things like pulling reports, spotting budget pacing issues, and flagging creative fatigue. But strategy, creative direction, brand judgment, and knowing your audience still require a human. The best setup is AI handling execution while humans set direction.",{"question":4790,"answer":4791},"What platforms do AI ad agents work with?","Google Ads has an official MCP server (read-only, launched October 2025). Amazon Ads launched its MCP server in February 2026 with both read and write access. Meta Ads has several third-party MCP options but no official server. TikTok Ads has no MCP support yet. The number of supported platforms is growing fast.",{},"\u002Fresources\u002Fai-ad-agents",{"title":4274,"description":4778},"resources\u002Fai-ad-agents",[4797,4798,4799,4800,4801,1557,1555],"ai","ad agents","mcp","automation","campaign management","IIId-irbsASJ50fKZbDkkPMsApwuAnjDpxV2MqGUjvQ",{"id":4804,"title":4805,"author":7,"body":4806,"breadcrumbLabel":7,"category":5830,"cover":1524,"createdAt":5831,"description":5832,"extension":1527,"faqs":5833,"meta":5855,"navigation":1547,"noAiBadge":1524,"og":1524,"ogDescription":7,"ogIcon":7,"path":5856,"seo":5857,"slug":5858,"stem":5858,"tags":5859,"updatedAt":7,"wip":1524,"__hash__":5863},"resources\u002Fresources\u002Fcampaign-naming-conventions.md","Campaign Naming Conventions: Guide + Copy-Paste Template",{"type":9,"value":4807,"toc":5807},[4808,4811,4819,4892,4897,4901,4904,4924,4927,4992,4997,5001,5004,5035,5042,5047,5058,5064,5070,5078,5082,5085,5094,5101,5105,5108,5114,5117,5120,5126,5129,5133,5136,5225,5228,5231,5240,5244,5247,5308,5358,5363,5369,5373,5376,5438,5443,5447,5450,5454,5457,5463,5467,5470,5473,5479,5484,5490,5493,5497,5504,5515,5521,5529,5537,5543,5548,5554,5559,5562,5565,5571,5579,5606,5610,5613,5639,5685,5690,5702,5706,5709,5732,5736,5739,5745,5748,5752,5759,5770,5773,5779,5784,5787,5796,5800],[12,4809,4810],{},"A campaign naming convention is a fixed set of rules for naming campaigns, ad sets (or ad groups), and ads. Every name carries the same information, in the same order, every time. Done right, it turns a messy, unsearchable account into clean data you can filter, report on, and trust.",[12,4812,4813,4814,4818],{},"Most guides treat naming as tidiness. It's more than that. Your naming convention is the spec your dashboards, and increasingly your AI agents, read to make sense of your account. They can't guess what ",[4815,4816,4817],"code",{},"Summer sale FINAL"," means, and neither can the teammate who inherits the account.",[4585,4820,4821,4831],{},[4588,4822,4823],{},[4591,4824,4825,4828],{},[4594,4826,4827],{},"❌ Without a convention",[4594,4829,4830],{},"✅ With a convention",[4602,4832,4833,4844,4856,4868,4880],{},[4591,4834,4835,4839],{},[4607,4836,4837],{},[4815,4838,4817],{},[4607,4840,4841],{},[4815,4842,4843],{},"Meta_Conv_2026-07_BOF_RTG_US",[4591,4845,4846,4851],{},[4607,4847,4848],{},[4815,4849,4850],{},"summer-sale-2 (copy)",[4607,4852,4853],{},[4815,4854,4855],{},"Meta_Conv_2026-07_TOF_Broad_US",[4591,4857,4858,4863],{},[4607,4859,4860],{},[4815,4861,4862],{},"TEST don't touch",[4607,4864,4865],{},[4815,4866,4867],{},"Google_Leads_2026-07_NonBrand_UK",[4591,4869,4870,4875],{},[4607,4871,4872],{},[4815,4873,4874],{},"FB campaign new",[4607,4876,4877],{},[4815,4878,4879],{},"Google_Leads_2026-07_Brand_UK",[4591,4881,4882,4887],{},[4607,4883,4884],{},[4815,4885,4886],{},"Copy of Copy of Q3",[4607,4888,4889],{},[4815,4890,4891],{},"TikTok_Aware_2026-07_TOF_US",[12,4893,4894],{},[78,4895,4896],{},"The same campaigns, named two ways. Only one of them lets you filter and report.",[53,4898,4900],{"id":4899},"what-is-a-campaign-naming-convention","What is a campaign naming convention?",[12,4902,4903],{},"Three things get blurred together, so it helps to separate them:",[4313,4905,4906,4912,4918],{},[1243,4907,4908,4911],{},[19,4909,4910],{},"Taxonomy:"," what you decide to track (objective, audience, geo, and so on).",[1243,4913,4914,4917],{},[19,4915,4916],{},"Convention:"," how you write it down (which fields, in what order, with which separator).",[1243,4919,4920,4923],{},[19,4921,4922],{},"Name:"," the result that shows up in your ad account.",[12,4925,4926],{},"A name is what you see in your tools. The convention is the blueprint that makes every name consistent enough to analyse later. Here are two broken into their parts:",[4585,4928,4929,4951],{},[4588,4930,4931],{},[4591,4932,4933,4936,4939,4942,4945,4948],{},[4594,4934,4935],{},"Platform",[4594,4937,4938],{},"Objective",[4594,4940,4941],{},"Date",[4594,4943,4944],{},"Funnel",[4594,4946,4947],{},"Audience",[4594,4949,4950],{},"Geo",[4602,4952,4953,4973],{},[4591,4954,4955,4958,4961,4964,4967,4970],{},[4607,4956,4957],{},"Meta",[4607,4959,4960],{},"Conv",[4607,4962,4963],{},"2026-07",[4607,4965,4966],{},"BOF",[4607,4968,4969],{},"RTG",[4607,4971,4972],{},"US",[4591,4974,4975,4978,4981,4983,4986,4989],{},[4607,4976,4977],{},"Google",[4607,4979,4980],{},"Leads",[4607,4982,4963],{},[4607,4984,4985],{},"TOF",[4607,4987,4988],{},"NonBrand",[4607,4990,4991],{},"UK",[12,4993,4994],{},[78,4995,4996],{},"Each field sits in a fixed position, so the name reads like a sentence.",[58,4998,5000],{"id":4999},"why-campaign-naming-conventions-matter","Why campaign naming conventions matter",[12,5002,5003],{},"Naming feels like admin until a report doesn't add up. Then it becomes the difference between a five-minute answer and an afternoon of cleaning data. A good convention buys you four things:",[4313,5005,5006,5012,5023,5029],{},[1243,5007,5008,5011],{},[19,5009,5010],{},"Cleaner reporting and attribution."," When the name encodes objective, audience and geo, your dashboards can roll performance up by any of them.",[1243,5013,5014,5017,5018,4494,5020,5022],{},[19,5015,5016],{},"Filtering at scale."," Type ",[4815,5019,4972],{},[4815,5021,4969],{}," into the search box and every matching campaign appears at once.",[1243,5024,5025,5028],{},[19,5026,5027],{},"Cross-platform consistency."," One shared structure means a Meta campaign and a Google campaign for the same push line up, instead of fragmenting into separate rows you can't match.",[1243,5030,5031,5034],{},[19,5032,5033],{},"Fewer errors and easier handovers."," Anyone, whether a teammate, a new hire or an agency, can read a name and know exactly what it is.",[12,5036,5037],{},[5038,5039],"img",{"alt":5040,"src":5041},"Google Analytics traffic acquisition report, with paid search among the channels","\u002Fimages\u002Fblog\u002Fcampaign-naming-conventions\u002Fga4-traffic-acquisition-chart.png",[12,5043,5044],{},[78,5045,5046],{},"Google Analytics is where your campaign data ends up. Consistent names decide whether you can actually read it.",[12,5048,5049,5050,5053,5054,5057],{},"The structure is also machine-readable. Your dashboards, and increasingly your ",[31,5051,5052],{"href":4793},"AI agents",", can parse it automatically. More on the agents shortly. (For the bigger picture on how the platforms group this data, see ",[31,5055,5056],{"href":1459},"how ad platforms work",".)",[12,5059,5060,5061,5063],{},"Here's where that filtering happens in practice. Every ads platform has a search and filter bar above the campaign list. With coded names, typing ",[4815,5062,4969],{}," there surfaces every retargeting campaign at once:",[12,5065,5066],{},[5038,5067],{"alt":5068,"src":5069},"The filter and search bar in Meta's Ads interface, where you type a code to surface matching campaigns","\u002Fimages\u002Fblog\u002Fcampaign-naming-conventions\u002Fmeta-ads-filter-search.png",[12,5071,5072],{},[78,5073,5074,5075,5077],{},"Meta's Ads view. This is where you type a code like ",[4815,5076,4969],{},", or stack filters, to surface matching campaigns.",[53,5079,5081],{"id":5080},"campaign-naming-convention-template-copy-paste","Campaign naming convention template (copy-paste)",[12,5083,5084],{},"Want a sensible default to start from? Use this at the campaign level:",[5086,5087,5092],"pre",{"className":5088,"code":5090,"language":5091},[5089],"language-text","[Product]_[Objective]_[YYYY-MM]_[Funnel]_[Audience]_[Geo]\n","text",[4815,5093,5090],{"__ignoreMap":1462},[12,5095,5096,5097,5100],{},"Only one product? Drop the first field. Reports mixing platforms? Prefix ",[4815,5098,5099],{},"[Platform]_"," before everything.",[58,5102,5104],{"id":5103},"campaign-name-examples","Campaign name examples",[12,5106,5107],{},"Filled in, the template looks like this:",[5086,5109,5112],{"className":5110,"code":5111,"language":5091},[5089],"RuckPack_Conv_2026-07_BOF_RTG_US\nDemoBooking_Leads_2026-07_TOF_NonBrand_UK\nMeta_RuckPack_Aware_2026-07_TOF_Broad_US\n",[4815,5113,5111],{"__ignoreMap":1462},[5115,5116],"campaign-name-widget",{},[12,5118,5119],{},"Then keep the lower levels lean, since they inherit context from the campaign:",[5086,5121,5124],{"className":5122,"code":5123,"language":5091},[5089],"Ad set:  RTG_Cart-Abandoners_7d\nAd:      UGC_Video_HookA_v2\n",[4815,5125,5123],{"__ignoreMap":1462},[12,5127,5128],{},"The rest of this guide unpacks the template: what each field means, the formatting rules that keep it parseable, and how to keep names in sync with your tracking.",[53,5130,5132],{"id":5131},"the-building-blocks-of-a-campaign-name","The building blocks of a campaign name",[12,5134,5135],{},"The template runs on a handful of fields. Pick only the ones you'll actually report on, because every extra field is one more thing to keep consistent.",[4585,5137,5138,5151],{},[4588,5139,5140],{},[4591,5141,5142,5145,5148],{},[4594,5143,5144],{},"Field",[4594,5146,5147],{},"What it captures",[4594,5149,5150],{},"Example values",[4602,5152,5153,5164,5174,5183,5194,5204,5214],{},[4591,5154,5155,5158,5161],{},[4607,5156,5157],{},"Product \u002F Offer (optional)",[4607,5159,5160],{},"What's promoted",[4607,5162,5163],{},"RuckPack, FreeTrial",[4591,5165,5166,5168,5171],{},[4607,5167,4938],{},[4607,5169,5170],{},"The main goal",[4607,5172,5173],{},"Conv, Leads, Aware, Traffic",[4591,5175,5176,5178,5181],{},[4607,5177,4941],{},[4607,5179,5180],{},"Launch month, year-first",[4607,5182,4963],{},[4591,5184,5185,5188,5191],{},[4607,5186,5187],{},"Funnel stage",[4607,5189,5190],{},"Where in the journey",[4607,5192,5193],{},"TOF, MOF, BOF",[4591,5195,5196,5198,5201],{},[4607,5197,4947],{},[4607,5199,5200],{},"Targeting, in short code",[4607,5202,5203],{},"RTG, Broad, LAL",[4591,5205,5206,5208,5211],{},[4607,5207,4950],{},[4607,5209,5210],{},"Market, as a country code",[4607,5212,5213],{},"US, UK, DE",[4591,5215,5216,5219,5222],{},[4607,5217,5218],{},"Platform (optional)",[4607,5220,5221],{},"Where the campaign runs",[4607,5223,5224],{},"Meta, Google, TikTok",[12,5226,5227],{},"A few of those codes, in plain English: TOF, MOF and BOF are top, middle and bottom of funnel; RTG is retargeting; LAL is a lookalike audience.",[12,5229,5230],{},"Two of those are optional. Product \u002F Offer: skip it if you only promote one thing. Platform: inside Meta or Google every campaign already belongs to that platform, so keep the field only if names from several platforms land in the same column, like a blended dashboard or a spreadsheet export with no source column next to it.",[5232,5233,5234],"blockquote",{},[12,5235,5236,5239],{},[19,5237,5238],{},"Tip:"," Keep audiences and budgets in coded short-form. Campaign names often end up inside your tracking tags, which are visible in a visitor's browser, so you don't want real audience or client names exposed there.",[53,5241,5243],{"id":5242},"formatting-rules-delimiters-case-and-dates","Formatting rules: delimiters, case, and dates",[12,5245,5246],{},"The fields matter, but the formatting is what keeps names readable by machines. Five rules cover almost everything:",[1240,5248,5249,5263,5269,5285,5298],{},[1243,5250,5251,5254,5255,5258,5259,5262],{},[19,5252,5253],{},"Use an underscore between fields."," Not a space, not a slash, not a pipe. An underscore (",[4815,5256,5257],{},"_",") is the one separator that survives every platform, every spreadsheet export and every tracking tag without breaking. Keep hyphens (",[4815,5260,5261],{},"-",") for inside a field if you need them.",[1243,5264,5265,5268],{},[19,5266,5267],{},"Avoid spaces and special characters."," Slashes, ampersands and punctuation break parsing, some platforms reject them outright, and they corrupt your tracking tags.",[1243,5270,5271,5274,5275,5278,5279,1342,5281,5284],{},[19,5272,5273],{},"Pick one text case and stick to it."," CamelCase or lowercase both work. CamelCase (",[4815,5276,5277],{},"SummerSale",") reads cleanly without spaces. Mixing cases silently splits your data: analytics tools treat ",[4815,5280,5277],{},[4815,5282,5283],{},"summersale"," as two different values, so one campaign becomes two rows in every report.",[1243,5286,5287,5290,5291,4494,5294,5297],{},[19,5288,5289],{},"Write dates year-first."," Always ",[4815,5292,5293],{},"YYYY-MM",[4815,5295,5296],{},"YYYY-MM-DD"," (this is the ISO format). Every analytics tool understands it, and it sorts in the right order.",[1243,5299,5300,5303,5304,5307],{},[19,5301,5302],{},"Order fields by how you'd search for the campaign."," Campaign lists sort alphabetically, so the first field works like a folder: every campaign sharing it groups together. Start with what you'd scan for when hunting through 80 campaigns, usually the product, then the objective and launch month, and leave the targeting details for the end. Report columns also cut long names off (",[4815,5305,5306],{},"RuckPack_Conv_2026-…","), and this order keeps the part you need most visible.",[4585,5309,5310,5320],{},[4588,5311,5312],{},[4591,5313,5314,5317],{},[4594,5315,5316],{},"❌ Avoid",[4594,5318,5319],{},"✅ Use instead",[4602,5321,5322,5334,5346],{},[4591,5323,5324,5329],{},[4607,5325,5326],{},[4815,5327,5328],{},"Summer Sale 2026",[4607,5330,5331],{},[4815,5332,5333],{},"Summer_Sale_2026",[4591,5335,5336,5341],{},[4607,5337,5338],{},[4815,5339,5340],{},"promo\u002Fsale&deal",[4607,5342,5343],{},[4815,5344,5345],{},"Promo_Sale_Deal",[4591,5347,5348,5353],{},[4607,5349,5350],{},[4815,5351,5352],{},"café#2026",[4607,5354,5355],{},[4815,5356,5357],{},"Cafe_2026",[12,5359,5360],{},[78,5361,5362],{},"Spaces and special characters break parsing and tracking tags. Stick to underscores and plain characters.",[12,5364,5365,5368],{},[19,5366,5367],{},"Above all, document your short codes."," A one-page sheet listing every allowed value (objectives, audiences, geos) stops five people from inventing five different abbreviations.",[58,5370,5372],{"id":5371},"name-every-level-of-the-hierarchy","Name every level of the hierarchy",[12,5374,5375],{},"Most ad platforms share the same structure: Campaign, then Ad set (or Ad group), then Ad. Each level should name only what is unique to it. Don't repeat information from the level above.",[4585,5377,5378,5391],{},[4588,5379,5380],{},[4591,5381,5382,5385,5388],{},[4594,5383,5384],{},"Level",[4594,5386,5387],{},"Example",[4594,5389,5390],{},"What it names",[4602,5392,5393,5408,5423],{},[4591,5394,5395,5400,5405],{},[4607,5396,5397],{},[19,5398,5399],{},"Campaign",[4607,5401,5402],{},[4815,5403,5404],{},"Meta_Conv_2026-07_BOF_US",[4607,5406,5407],{},"Objective, geo, timeframe",[4591,5409,5410,5415,5420],{},[4607,5411,5412],{},[19,5413,5414],{},"Ad set \u002F Ad group",[4607,5416,5417],{},[4815,5418,5419],{},"RTG_Cart-Abandoners_7d",[4607,5421,5422],{},"Audience and targeting",[4591,5424,5425,5430,5435],{},[4607,5426,5427],{},[19,5428,5429],{},"Ad",[4607,5431,5432],{},[4815,5433,5434],{},"UGC_Video_HookA_v2",[4607,5436,5437],{},"Creative, format, version",[12,5439,5440],{},[78,5441,5442],{},"Each level names only what is unique to it. Never repeat the parent.",[53,5444,5446],{"id":5445},"naming-conventions-by-platform","Naming conventions by platform",[12,5448,5449],{},"The principles are universal, but platforms split into two families, and each family leans on different fields.",[58,5451,5453],{"id":5452},"search-platforms-google-and-microsoft-ads","Search platforms: Google and Microsoft Ads",[12,5455,5456],{},"Search platforms use Campaign, then Ad group, then Ad. On search, swap the template's Funnel and Audience fields for Network and Match type, since those are what drive how you read search performance. Microsoft Ads (Bing) mirrors Google's structure, and the same format carries over unchanged.",[5086,5458,5461],{"className":5459,"code":5460,"language":5091},[5089],"Google_Search_2026-07_NonBrand_Exact_UK\nMicrosoft_Search_2026-07_Brand_Exact_UK\n",[4815,5462,5460],{"__ignoreMap":1462},[58,5464,5466],{"id":5465},"social-platforms-meta-tiktok-linkedin-and-reddit","Social platforms: Meta, TikTok, LinkedIn, and Reddit",[12,5468,5469],{},"Meta uses Campaign, then Ad set, then Ad. TikTok, Reddit and LinkedIn follow the same three-level shape with their own labels (TikTok and Reddit call the middle level an ad group). Whatever the labels, funnel stage and audience are the fields you'll filter on most when you compare prospecting against retargeting.",[12,5471,5472],{},"On Meta, your campaigns live in Ads Manager, one click from the Ads summary page:",[12,5474,5475],{},[5038,5476],{"alt":5477,"src":5478},"Meta's Ads page, with Ads Manager highlighted in the sidebar as the place where campaigns are managed","\u002Fimages\u002Fblog\u002Fcampaign-naming-conventions\u002Fmeta-ads-manager-sidebar.png",[12,5480,5481],{},[78,5482,5483],{},"Ads Manager is where your campaign names live on Meta. Everything you name here flows into your reports.",[5086,5485,5488],{"className":5486,"code":5487,"language":5091},[5089],"Meta_Conv_2026-07_BOF_RTG_US\nTikTok_Aware_2026-07_TOF_Broad_US\n",[4815,5489,5487],{"__ignoreMap":1462},[12,5491,5492],{},"One social-specific tip: creative turnover is fast, especially on TikTok, so make sure your ad-level names track format and version. That's how you spot fatigue quickly.",[53,5494,5496],{"id":5495},"utm-naming-conventions-keep-names-in-sync","UTM naming conventions: keep names in sync",[12,5498,5499,5500,5503],{},"UTMs are the little tags you add to a link so your analytics knows which campaign a visitor came from. Your ",[4815,5501,5502],{},"utm_campaign"," value should mirror your campaign name: same fields, same order. When they match, the numbers from your ad platform and the numbers in Google Analytics line up, instead of telling two different stories.",[12,5505,5506,5511,5512,5514],{},[31,5507,5510],{"href":5508,"rel":5509},"https:\u002F\u002Fsupport.google.com\u002Fanalytics\u002Fanswer\u002F10917952",[46],"Google's own reference"," explains each parameter. The one that matters here is ",[4815,5513,5502],{},":",[12,5516,5517],{},[5038,5518],{"alt":5519,"src":5520},"Google's reference table of campaign URL parameters, with the utm_campaign row pointed out","\u002Fimages\u002Fblog\u002Fcampaign-naming-conventions\u002Fcampaign-url-parameters.png",[12,5522,5523],{},[78,5524,5525,5526,5528],{},"The campaign parameters as Google documents them. ",[4815,5527,5502],{}," is the field your campaign name goes into.",[12,5530,5531,5532,5514],{},"To build the tagged link, drop your exact campaign name into ",[31,5533,5536],{"href":5534,"rel":5535},"https:\u002F\u002Fga-dev-tools.google\u002Fcampaign-url-builder\u002F",[46],"Google's Campaign URL Builder",[12,5538,5539],{},[5038,5540],{"alt":5541,"src":5542},"Google's Campaign URL Builder filled in, with the campaign name field pointed out","\u002Fimages\u002Fblog\u002Fcampaign-naming-conventions\u002Fcampaign-url-builder-filled.png",[12,5544,5545],{},[78,5546,5547],{},"Google's Campaign URL Builder. Paste your exact campaign name into the campaign name field and the tagged URL is generated for you.",[5086,5549,5552],{"className":5550,"code":5551,"language":5091},[5089],"Campaign name:  Meta_Conv_2026-07_BOF_RTG_US\nutm_campaign:   Meta_Conv_2026-07_BOF_RTG_US\n",[4815,5553,5551],{"__ignoreMap":1462},[12,5555,5556],{},[78,5557,5558],{},"Identical strings mean a clean campaign-level view across your platform reports and your analytics.",[5560,5561],"utm-builder-widget",{},[12,5563,5564],{},"And this is where it all lands: the traffic acquisition report in Google Analytics. With matching names, your paid traffic splits cleanly by campaign instead of blurring into one row:",[12,5566,5567],{},[5038,5568],{"alt":5569,"src":5570},"The traffic acquisition report in Google Analytics, with the paid search channel pointed out","\u002Fimages\u002Fblog\u002Fcampaign-naming-conventions\u002Fga4-traffic-acquisition-table.png",[12,5572,5573],{},[78,5574,5575,5576,5578],{},"Google Analytics, Reports, Acquisition, Traffic acquisition. Paid Search is where your ",[4815,5577,5502],{}," names show up.",[5232,5580,5581],{},[12,5582,5583,5586,5587,5590,5591,5594,5595,5598,5599,1436,5602,5605],{},[19,5584,5585],{},"Sidenote:"," Campaign names go public through dynamic placeholders: ",[4815,5588,5589],{},"{campaignname}"," on Google, ",[4815,5592,5593],{},"{{campaign.name}}"," on Meta. They insert your campaign name into the ad's URL, visible in the visitor's address bar, so ",[4815,5596,5597],{},"Cart_Abandoners_HighBudget"," hands your strategy to anyone who clicks. Either pass the campaign ID instead (",[4815,5600,5601],{},"{campaignid}",[4815,5603,5604],{},"{{campaign.id}}","), which exposes nothing but leaves raw numbers in your analytics, or keep passing the name and let your coded short-forms do the hiding.",[53,5607,5609],{"id":5608},"how-to-roll-it-out-and-keep-it-consistent","How to roll it out and keep it consistent",[12,5611,5612],{},"A convention is only as good as your discipline in applying it. Four habits keep it alive:",[4313,5614,5615,5621,5627,5633],{},[1243,5616,5617,5620],{},[19,5618,5619],{},"Document it once."," Keep a single source of truth, a shared sheet with the template and every allowed code.",[1243,5622,5623,5626],{},[19,5624,5625],{},"Assign ownership."," Someone needs to own the standard, or it quietly drifts as new people join.",[1243,5628,5629,5632],{},[19,5630,5631],{},"Don't change it mid-flight."," Renaming live campaigns fragments your historical data, so settle the format before you scale.",[1243,5634,5635,5638],{},[19,5636,5637],{},"Audit periodically."," A quick scan for names that don't fit the pattern catches mistakes before they pollute a quarter of reporting.",[4585,5640,5641,5650],{},[4588,5642,5643],{},[4591,5644,5645,5647],{},[4594,5646,5144],{},[4594,5648,5649],{},"Allowed values, documented once",[4602,5651,5652,5659,5665,5671,5678],{},[4591,5653,5654,5656],{},[4607,5655,4935],{},[4607,5657,5658],{},"Meta, Google, Microsoft, TikTok, LinkedIn, Reddit",[4591,5660,5661,5663],{},[4607,5662,4938],{},[4607,5664,5173],{},[4591,5666,5667,5669],{},[4607,5668,4944],{},[4607,5670,5193],{},[4591,5672,5673,5675],{},[4607,5674,4947],{},[4607,5676,5677],{},"RTG, Broad, LAL, NonBrand",[4591,5679,5680,5682],{},[4607,5681,4950],{},[4607,5683,5684],{},"US, UK, DE, FR",[12,5686,5687],{},[78,5688,5689],{},"A shared sheet of allowed codes keeps everyone naming from the same list.",[5232,5691,5692],{},[12,5693,5694,5697,5698,5701],{},[19,5695,5696],{},"Pro tip:"," Need to retire an old campaign without breaking the convention? Prefix its name with ",[4815,5699,5700],{},"ZZ_",". It drops to the bottom of every sorted list, so you can filter it out in one click instead of deleting history.",[58,5703,5705],{"id":5704},"cleaning-up-an-existing-account","Cleaning up an existing account",[12,5707,5708],{},"Don't mass-rename. Renaming a live campaign fragments its history in your reports, so dig out gradually instead:",[1240,5710,5711,5717,5726],{},[1243,5712,5713,5716],{},[19,5714,5715],{},"Apply the convention forward only."," Every campaign created from today follows the format. Old ones stay as they are.",[1243,5718,5719,5725],{},[19,5720,5721,5722,1446],{},"Prefix old campaigns with ",[4815,5723,5724],{},"LEGACY_"," One filter hides them all, and nobody confuses them with the new system.",[1243,5727,5728,5731],{},[19,5729,5730],{},"Hand-rename only the few old campaigns that still spend real money."," For everything else, the cleanup isn't worth the broken history.",[58,5733,5735],{"id":5734},"the-whole-convention-on-one-page","The whole convention on one page",[12,5737,5738],{},"Everything above condenses into one block. Copy it and swap in your own codes:",[5086,5740,5743],{"className":5741,"code":5742,"language":5091},[5089],"CAMPAIGN NAMING RULES: [your team]\n\nTemplate:  Product_Objective_YYYY-MM_Funnel_Audience_Geo\n           (drop Product_ if you promote one thing;\n            prefix Platform_ only if your reports mix platforms)\n\nCodes:     Objective → Conv, Leads, Aware\n           Funnel    → TOF, MOF, BOF\n           Audience  → RTG, LAL, Broad\n\nRules:     underscores between fields · one casing, always\n           dates year-first (2026-07) · no budgets or client names\n           pass campaign IDs, not names, in tracking URLs\n\nOwner:     [name] · log every format change\n           old campaigns → LEGACY_ · retired → ZZ_\n",[4815,5744,5742],{"__ignoreMap":1462},[12,5746,5747],{},"Pin it in your team wiki. The same block, pasted into an AI agent's instructions, makes every campaign it drafts come out named right.",[53,5749,5751],{"id":5750},"naming-conventions-in-the-age-of-ai-agents","Naming conventions in the age of AI agents",[12,5753,5754,5755,5758],{},"More and more, you're not the one typing the campaign name. An ",[31,5756,5757],{"href":4285},"AI agent"," is.",[12,5760,5761,5762,5766,5767,1446],{},"When an agent builds campaigns for you (for example, using an ",[31,5763,5765],{"href":5764},"\u002Ffeatures\u002Fads-mcp","Ads MCP","), your naming convention stops being a style guide and becomes the specification it follows. Give it the format once, and every campaign it drafts comes out consistent. No human slips, no ",[4815,5768,5769],{},"final_v2",[12,5771,5772],{},"This is also where one cross-platform convention pays off. A single rule that holds whether the campaign lands on Google, Meta, TikTok or Reddit means the agent produces clean, comparable data everywhere.",[12,5774,5775],{},[5038,5776],{"alt":5777,"src":5778},"Connecting an AI agent such as Claude or ChatGPT to AdKit","\u002Fimages\u002Fblog\u002Fcampaign-naming-conventions\u002Fadkit-connect-your-agent.jpg",[12,5780,5781],{},[78,5782,5783],{},"AdKit lets your agent draft campaigns across platforms, draft-first, from one place.",[12,5785,5786],{},"Tools like AdKit are built around this. Your agent researches, drafts and launches campaigns across every platform, draft-first so nothing goes live without your approval, while your naming convention keeps that cross-platform data clean and reportable.",[12,5788,5789,5790,1342,5792,5795],{},"If you want to set one up, the ",[31,5791,4562],{"href":4290},[31,5793,4565],{"href":5794},"\u002Fresources\u002Fmeta-ads-mcp-setup"," setup guides walk through it step by step. (An \"ads MCP\" is just the connection that lets the agent work inside your ad accounts.)",[53,5797,5799],{"id":5798},"lock-it-in-before-you-scale","Lock it in before you scale",[12,5801,5802,5803,5806],{},"A naming convention is boring right up until the day it saves you. Copy the template above, document your allowed codes in one sheet, and apply it to the next campaign you launch, while your account is still small enough to keep clean. And if an agent does the launching for you, put the convention in its instructions: ",[31,5804,5805],{"href":4793},"AI Ad Agents: What They Are and How to Set One Up"," shows you how.",{"title":1462,"searchDepth":1463,"depth":1463,"links":5808},[5809,5812,5815,5816,5819,5823,5824,5828,5829],{"id":4899,"depth":1463,"text":4900,"children":5810},[5811],{"id":4999,"depth":1468,"text":5000},{"id":5080,"depth":1463,"text":5081,"children":5813},[5814],{"id":5103,"depth":1468,"text":5104},{"id":5131,"depth":1463,"text":5132},{"id":5242,"depth":1463,"text":5243,"children":5817},[5818],{"id":5371,"depth":1468,"text":5372},{"id":5445,"depth":1463,"text":5446,"children":5820},[5821,5822],{"id":5452,"depth":1468,"text":5453},{"id":5465,"depth":1468,"text":5466},{"id":5495,"depth":1463,"text":5496},{"id":5608,"depth":1463,"text":5609,"children":5825},[5826,5827],{"id":5704,"depth":1468,"text":5705},{"id":5734,"depth":1468,"text":5735},{"id":5750,"depth":1463,"text":5751},{"id":5798,"depth":1463,"text":5799},"running-ads","2026-07-17","Build a campaign naming convention that keeps Meta, Google, and TikTok reporting clean. Includes a copy-paste template, field cheat sheet, and UTM rules.",[5834,5837,5840,5843,5846,5849,5852],{"question":5835,"answer":5836},"What's the best delimiter for campaign names?","An underscore between fields. It's reliable to parse and avoids the problems spaces and special characters cause in analytics tools and tracking tags.",{"question":5838,"answer":5839},"Should my campaign name match my UTM campaign?","Yes. Use the same fields in the same order. Matching strings keep your platform data and your analytics in agreement at the campaign level.",{"question":5841,"answer":5842},"Are PPC and social naming conventions different?","The principles are identical. Only the fields you emphasise change: search leans on match type and network, social leans on funnel stage and audience.",{"question":5844,"answer":5845},"Can I change my naming convention later?","Avoid changing it on live campaigns, since that fragments historical data. If you outgrow your structure, version it and apply the new format to new campaigns only.",{"question":5847,"answer":5848},"Does the naming convention affect ad performance?","No. Names have zero effect on delivery, bidding or the algorithm, so you can fix your naming anytime without touching performance. The value is in reporting speed, clean analytics, and automation.",{"question":5850,"answer":5851},"What are the three types of naming conventions?","For campaigns, three styles come up: delimiter-based (Conv_BOF_RTG_US), key-value pairs (obj-conv_aud-rtg_geo-us), and free-form descriptive names. The first two are machine-readable; free-form is what this guide helps you escape.",{"question":5853,"answer":5854},"What are some good campaign names?","Good campaign names are structured, not creative. Conv_2026-07_BOF_RTG_US beats SummerBlast because it tells you objective, audience, market and date at a glance. Save the creative naming for the Product or Offer field if you want a memorable touch.",{},"\u002Fresources\u002Fcampaign-naming-conventions",{"title":4805,"description":5832},"resources\u002Fcampaign-naming-conventions",[4801,5860,5861,5862,1557,1555],"naming conventions","utm","reporting","H8t7MReY2eifi4iLieAUWNYXbLWUHEGS9zbF2rJJQHc",{"id":5865,"title":5866,"author":7,"body":5867,"breadcrumbLabel":7,"category":4776,"cover":1524,"createdAt":7527,"description":7528,"extension":1527,"faqs":7529,"meta":7554,"navigation":1547,"noAiBadge":1524,"og":1524,"ogDescription":7555,"ogIcon":7,"path":4290,"seo":7556,"slug":7557,"stem":7557,"tags":7558,"updatedAt":7,"wip":1524,"__hash__":7562},"resources\u002Fresources\u002Fgoogle-ads-mcp-setup.md","How to Set Up the Google Ads MCP in 5 steps",{"type":9,"value":5868,"toc":7512},[5869,5880,5883,5891,5895,5898,5925,5929,5938,5944,5951,5974,5985,5988,5992,6001,6007,6010,6022,6028,6031,6035,6038,6055,6061,6077,6083,6096,6102,6105,6109,6123,6126,6176,6183,6218,6229,6236,6242,6252,6255,6259,6266,6309,6312,6315,6340,6343,7089,7095,7105,7108,7112,7115,7129,7135,7138,7149,7156,7160,7174,7177,7197,7200,7226,7229,7233,7236,7239,7242,7247,7272,7330,7333,7337,7368,7386,7398,7412,7420,7444,7448,7455,7462,7475,7479,7508],[5232,5870,5871],{},[12,5872,5873,5875,5876,5879],{},[19,5874,4281],{}," Google's official Google Ads MCP is free and ",[19,5877,5878],{},"read-only",": your AI can pull reports from Google Ads but can't change a thing. Setup runs on your own computer and takes 30 to 45 minutes. It works in Claude Code, Cursor, Gemini, and VS Code, not on claude.ai or ChatGPT web.",[12,5881,5882],{},"Fair warning: this is more involved than most MCP setups. You'll build your own Google sign-in, request a developer token, and run a terminal command, all so your AI can read your campaigns without being able to change them.",[12,5884,5885,5886,5890],{},"There's a shortcut. A hosted version like ",[31,5887,5889],{"href":5888},"\u002Ffeatures\u002Fads-mcp\u002Fgoogle","AdKit"," (the one we make) connects in about three clicks with no technical setup, and it can safely make changes too, only with your approval. Otherwise, here's the full walkthrough.",[53,5892,5894],{"id":5893},"what-youll-need","What you'll need",[12,5896,5897],{},"The official Google Ads MCP is a bit technical, but I'll walk you through all of it. This guide handles the Google login, the Google Cloud project, and the access token as you go. To actually start, you only need three things:",[4313,5899,5900,5907,5919],{},[1243,5901,5902,5903,5906],{},"A ",[19,5904,5905],{},"Google Ads account"," with the campaigns you want to read (thanks captain obvious!)",[1243,5908,5909,5910,5913,5914,5918],{},"One ",[19,5911,5912],{},"AI tool that runs on your computer",": Claude Code, Cursor, Gemini, or VS Code. Web agents like Claude and ChatGPT can't use the official Google Ads MCP, because it runs locally on your machine instead of in a browser. See ",[31,5915,5917],{"href":5916},"#what-it-can-and-cannot-do","what it can and cannot do"," for more.",[1243,5920,5921,5922,1446],{},"About ",[19,5923,5924],{},"30 to 45 minutes",[53,5926,5928],{"id":5927},"_1-get-a-developer-token","1. Get a developer token",[12,5930,5931,5932,5937],{},"Your developer token is the key that lets the API talk to Google Ads, and it only lives on a manager account. Sign in to Google Ads, then open the ",[31,5933,5936],{"href":5934,"rel":5935},"https:\u002F\u002Fads.google.com\u002Faw\u002Fapicenter",[46],"API Center",". If you don't have a manager account yet, create one first; it's free and takes a minute. (Not sure whether you have one? See the FAQ at the end.)",[12,5939,5940],{},[5038,5941],{"alt":5942,"src":5943},"Google Ads API Center showing the developer token and its access level","\u002Fimages\u002Fblog\u002Fgoogle-mcp-setup\u002Fapi-center-token.png",[12,5945,5946,5947,5950],{},"In the API Center, complete the API access form, accept the terms, and note your token's ",[19,5948,5949],{},"access level",". That one field decides whether this works:",[4313,5952,5953,5959,5965],{},[1243,5954,5955,5958],{},[19,5956,5957],{},"Test access"," reads test accounts only. It can't touch your real campaigns, so it's the one level that won't work here.",[1243,5960,5961,5964],{},[19,5962,5963],{},"Explorer access"," reads your real accounts, with a daily limit well beyond what reporting needs. Google's automatic review grants this to most people the moment they submit the access form.",[1243,5966,5967,4494,5970,5973],{},[19,5968,5969],{},"Basic",[19,5971,5972],{},"Standard access"," also read real accounts, with higher limits.",[12,5975,5976,5977,5980,5981,5984],{},"When you submit that access form, Google reviews it automatically and usually grants ",[19,5978,5979],{},"Explorer"," access on the spot, which is all you need here. You only hit a wall if that automatic review can't clear you and your token lands on ",[19,5982,5983],{},"Test"," access instead. If that happens, apply for Basic access in the API Center and wait; Google targets a couple of business days, but the queue can run longer. Once your token shows Explorer, Basic, or Standard, you're clear to continue.",[12,5986,5987],{},"You now have a token. Next it needs an API to call.",[53,5989,5991],{"id":5990},"_2-create-a-cloud-project","2. Create a Cloud project",[12,5993,5994,5995,6000],{},"The MCP talks to Google Ads through the Google Ads API, which lives in a Google Cloud project. Open the ",[31,5996,5999],{"href":5997,"rel":5998},"https:\u002F\u002Fconsole.cloud.google.com",[46],"Google Cloud console",", create a new project (or pick one), and note the project ID.",[12,6002,6003],{},[5038,6004],{"alt":6005,"src":6006},"Google Cloud New Project page showing the project name and project ID","\u002Fimages\u002Fblog\u002Fgoogle-mcp-setup\u002Fgcp-project-created.png",[12,6008,6009],{},"One rule from Google's setup docs: a project can use only one developer token, so don't reuse a project that was tied to a different token before. A fresh project is the safe choice.",[12,6011,6012,6013,6018,6019,1446],{},"Now enable the API. Go to the ",[31,6014,6017],{"href":6015,"rel":6016},"https:\u002F\u002Fconsole.cloud.google.com\u002Fapis\u002Flibrary\u002Fgoogleads.googleapis.com",[46],"Google Ads API library page"," and click ",[19,6020,6021],{},"Enable",[12,6023,6024],{},[5038,6025],{"alt":6026,"src":6027},"Google Ads API library page with the Enable button","\u002Fimages\u002Fblog\u002Fgoogle-mcp-setup\u002Fenable-google-ads-api.png",[12,6029,6030],{},"The API is live. Now you need a way to prove you're allowed to use it, which means an OAuth client.",[53,6032,6034],{"id":6033},"_3-build-the-oauth-client","3. Build the OAuth client",[12,6036,6037],{},"You need your own OAuth client because gcloud's built-in one is now blocked for the Google Ads scope. This is three small parts: the consent screen, the test users, and the client itself. Skipping the test-user part is the single most common cause of a failed first login, so don't.",[12,6039,6040,6041,6046,6047,6050,6051,6054],{},"First, the consent screen. Open the ",[31,6042,6045],{"href":6043,"rel":6044},"https:\u002F\u002Fconsole.cloud.google.com\u002Fauth\u002Fbranding",[46],"Cloud console branding page",", fill in an app name and your email, and set the user type to ",[19,6048,6049],{},"External"," with publishing status ",[19,6052,6053],{},"Testing",". Testing is fine; you don't need Google to verify the app for your own use.",[12,6056,6057],{},[5038,6058],{"alt":6059,"src":6060},"Google Cloud OAuth branding page showing app name, support email, and Testing status","\u002Fimages\u002Fblog\u002Fgoogle-mcp-setup\u002Foauth-consent-branding.png",[12,6062,6063,6064,6069,6070,6073,6074,1446],{},"Now the part everyone forgets. Go to the ",[31,6065,6068],{"href":6066,"rel":6067},"https:\u002F\u002Fconsole.cloud.google.com\u002Fauth\u002Faudience",[46],"Audience page"," and add ",[19,6071,6072],{},"test users",". Add two emails: the Google account you're authenticating with, and your Google Ads login email. If those aren't both on the list, your login fails with ",[4815,6075,6076],{},"Error 403: access_denied, app is being tested",[12,6078,6079],{},[5038,6080],{"alt":6081,"src":6082},"Google Cloud Audience page showing the test users list with two emails added","\u002Fimages\u002Fblog\u002Fgoogle-mcp-setup\u002Ftest-users-list.png",[12,6084,6085,6086,6091,6092,6095],{},"Finally, create the client. Go to the ",[31,6087,6090],{"href":6088,"rel":6089},"https:\u002F\u002Fconsole.cloud.google.com\u002Fauth\u002Fclients",[46],"Clients page",", create an OAuth client, choose application type ",[19,6093,6094],{},"Desktop app",", and download the JSON. Save it somewhere you'll remember; you'll point at it in the next step.",[12,6097,6098],{},[5038,6099],{"alt":6100,"src":6101},"Creating a Desktop app OAuth client and downloading the client secret JSON","\u002Fimages\u002Fblog\u002Fgoogle-mcp-setup\u002Fdesktop-oauth-client.png",[12,6103,6104],{},"You have a client and a JSON file. Now you use it to authenticate.",[53,6106,6108],{"id":6107},"_4-authenticate-with-gcloud","4. Authenticate with gcloud",[12,6110,6111,6112,6115,6116,6119,6120,6122],{},"This step generates the credentials the MCP will read, using your own OAuth client. From here on you'll use your computer's ",[19,6113,6114],{},"terminal",". To open it: on Mac, press Cmd+Space, type \"terminal,\" and press Enter; on Windows, open the Start menu, type \"powershell,\" and press Enter. One Windows note for the rest of the guide: commands that break across lines with ",[4815,6117,6118],{},"\\"," need to go on a single line, because PowerShell doesn't read ",[4815,6121,6118],{}," that way.",[12,6124,6125],{},"If you don't already have the gcloud CLI, install it first:",[6127,6128,6129,6160],"os-tabs",{},[6130,6131,6132,6135],"template",{"v-slot:mac":1462},[12,6133,6134],{},"Paste this into Terminal. It uses Homebrew; if you don't have it, install Homebrew from brew.sh first.",[5086,6136,6140],{"className":6137,"code":6138,"language":6139,"meta":1462,"style":1462},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","brew install --cask google-cloud-sdk\n","bash",[4815,6141,6142],{"__ignoreMap":1462},[1081,6143,6146,6150,6154,6157],{"class":6144,"line":6145},"line",1,[1081,6147,6149],{"class":6148},"sBMFI","brew",[1081,6151,6153],{"class":6152},"sfazB"," install",[1081,6155,6156],{"class":6152}," --cask",[1081,6158,6159],{"class":6152}," google-cloud-sdk\n",[6130,6161,6162,6165],{"v-slot:windows":1462},[12,6163,6164],{},"Paste this into PowerShell to download and run Google's installer.",[5086,6166,6170],{"className":6167,"code":6168,"language":6169,"meta":1462,"style":1462},"language-powershell shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","(New-Object Net.WebClient).DownloadFile(\"https:\u002F\u002Fdl.google.com\u002Fdl\u002Fcloudsdk\u002Fchannels\u002Frapid\u002FGoogleCloudSDKInstaller.exe\", \"$env:Temp\\GoogleCloudSDKInstaller.exe\") & $env:Temp\\GoogleCloudSDKInstaller.exe\n","powershell",[4815,6171,6172],{"__ignoreMap":1462},[1081,6173,6174],{"class":6144,"line":6145},[1081,6175,6168],{},[12,6177,6178,6179,6182],{},"Then run the command below, pointing ",[4815,6180,6181],{},"--client-id-file"," at the JSON you downloaded in step 3:",[5086,6184,6186],{"className":6137,"code":6185,"language":6139,"meta":1462,"style":1462},"gcloud auth application-default login \\\n  --client-id-file=\u002Fpath\u002Fto\u002Fclient_secret.json \\\n  --scopes=https:\u002F\u002Fwww.googleapis.com\u002Fauth\u002Fadwords,https:\u002F\u002Fwww.googleapis.com\u002Fauth\u002Fcloud-platform\n",[4815,6187,6188,6206,6213],{"__ignoreMap":1462},[1081,6189,6190,6193,6196,6199,6202],{"class":6144,"line":6145},[1081,6191,6192],{"class":6148},"gcloud",[1081,6194,6195],{"class":6152}," auth",[1081,6197,6198],{"class":6152}," application-default",[1081,6200,6201],{"class":6152}," login",[1081,6203,6205],{"class":6204},"sTEyZ"," \\\n",[1081,6207,6208,6211],{"class":6144,"line":1463},[1081,6209,6210],{"class":6152},"  --client-id-file=\u002Fpath\u002Fto\u002Fclient_secret.json",[1081,6212,6205],{"class":6204},[1081,6214,6215],{"class":6144,"line":1468},[1081,6216,6217],{"class":6152},"  --scopes=https:\u002F\u002Fwww.googleapis.com\u002Fauth\u002Fadwords,https:\u002F\u002Fwww.googleapis.com\u002Fauth\u002Fcloud-platform\n",[12,6219,6220,6221,6224,6225,6228],{},"Two things to change before you run it. Replace ",[4815,6222,6223],{},"\u002Fpath\u002Fto\u002Fclient_secret.json"," with the real location of the OAuth client file you downloaded in step 3. Leave the ",[4815,6226,6227],{},"--scopes"," line exactly as written; those two long entries are the permissions the server needs, one for Google Ads and one for your Google Cloud project.",[12,6230,6231,6232,6235],{},"Your browser opens and shows a warning: \"Google hasn't verified this app.\" That's expected, because it's your own test app. Click ",[19,6233,6234],{},"Continue"," (you're the developer it's asking you to trust), then allow the permissions on the next screen.",[12,6237,6238],{},[5038,6239],{"alt":6240,"src":6241},"Browser warning that Google hasn't verified this app, with the Advanced link","\u002Fimages\u002Fblog\u002Fgoogle-mcp-setup\u002Funverified-app-warning.png",[12,6243,6244,6245,6248,6249,1446],{},"When it finishes, gcloud prints a line like ",[4815,6246,6247],{},"Credentials saved to file: [PATH]",". Copy that path. The MCP config reads it as ",[4815,6250,6251],{},"GOOGLE_APPLICATION_CREDENTIALS",[12,6253,6254],{},"Credentials are saved. The last step is connecting your AI client.",[53,6256,6258],{"id":6257},"_5-install-and-connect-the-mcp-server","5. Install and connect the MCP server",[12,6260,6261,6262,6265],{},"The Google Ads MCP isn't a website you log into. It's a small program that runs on your own computer, and your AI tool starts it up when it needs it. To run it, you first install a little helper called ",[19,6263,6264],{},"pipx"," (it installs and runs tools like this one).",[6127,6267,6268,6295],{},[6130,6269,6270,6272],{"v-slot:mac":1462},[12,6271,6134],{},[5086,6273,6275],{"className":6137,"code":6274,"language":6139,"meta":1462,"style":1462},"brew install pipx && pipx ensurepath\n",[4815,6276,6277],{"__ignoreMap":1462},[1081,6278,6279,6281,6283,6286,6290,6292],{"class":6144,"line":6145},[1081,6280,6149],{"class":6148},[1081,6282,6153],{"class":6152},[1081,6284,6285],{"class":6152}," pipx",[1081,6287,6289],{"class":6288},"sMK4o"," &&",[1081,6291,6285],{"class":6148},[1081,6293,6294],{"class":6152}," ensurepath\n",[6130,6296,6297,6300],{"v-slot:windows":1462},[12,6298,6299],{},"pipx needs Python. If you don't have it, install Python from python.org (tick \"Add to PATH\" during setup), then paste this into PowerShell:",[5086,6301,6303],{"className":6167,"code":6302,"language":6169,"meta":1462,"style":1462},"py -m pip install --user pipx && py -m pipx ensurepath\n",[4815,6304,6305],{"__ignoreMap":1462},[1081,6306,6307],{"class":6144,"line":6145},[1081,6308,6302],{},[12,6310,6311],{},"Either way, close and reopen your terminal afterward so the change takes effect.",[12,6313,6314],{},"Now you point your AI tool at the server. The block below has four CAPITALIZED slots to fill in. They look cryptic, but each one is just something you already collected:",[4313,6316,6317,6322,6328,6334],{},[1243,6318,6319,6321],{},[4815,6320,6251],{}," is the path to the credentials file from step 4.",[1243,6323,6324,6327],{},[4815,6325,6326],{},"GOOGLE_PROJECT_ID"," is your Cloud project ID from step 2.",[1243,6329,6330,6333],{},[4815,6331,6332],{},"GOOGLE_ADS_DEVELOPER_TOKEN"," is your developer token from step 1.",[1243,6335,6336,6339],{},[4815,6337,6338],{},"GOOGLE_ADS_LOGIN_CUSTOMER_ID"," is your manager account ID, digits only.",[12,6341,6342],{},"Pick your tool, swap those four values into the example, and paste it in:",[6344,6345,6347,6439,6681,6887],"agent-tabs",{"default":6346},"claude",[6130,6348,6349,6356],{"v-slot:claude":1462},[12,6350,6351,6352,6355],{},"Run this in your terminal. Swap in your real values, and use ",[19,6353,6354],{},"digits only"," for the manager ID (no dashes):",[5086,6357,6359],{"className":6137,"code":6358,"language":6139,"meta":1462,"style":1462},"claude mcp add google-ads \\\n  --env GOOGLE_APPLICATION_CREDENTIALS=\u002Fpath\u002Fto\u002Fapplication_default_credentials.json \\\n  --env GOOGLE_PROJECT_ID=your-project-id \\\n  --env GOOGLE_ADS_DEVELOPER_TOKEN=your-developer-token \\\n  --env GOOGLE_ADS_LOGIN_CUSTOMER_ID=1234567890 \\\n  -- pipx run --spec git+https:\u002F\u002Fgithub.com\u002Fgoogleads\u002Fgoogle-ads-mcp.git google-ads-mcp\n",[4815,6360,6361,6376,6386,6395,6405,6419],{"__ignoreMap":1462},[1081,6362,6363,6365,6368,6371,6374],{"class":6144,"line":6145},[1081,6364,6346],{"class":6148},[1081,6366,6367],{"class":6152}," mcp",[1081,6369,6370],{"class":6152}," add",[1081,6372,6373],{"class":6152}," google-ads",[1081,6375,6205],{"class":6204},[1081,6377,6378,6381,6384],{"class":6144,"line":1463},[1081,6379,6380],{"class":6152},"  --env",[1081,6382,6383],{"class":6152}," GOOGLE_APPLICATION_CREDENTIALS=\u002Fpath\u002Fto\u002Fapplication_default_credentials.json",[1081,6385,6205],{"class":6204},[1081,6387,6388,6390,6393],{"class":6144,"line":1468},[1081,6389,6380],{"class":6152},[1081,6391,6392],{"class":6152}," GOOGLE_PROJECT_ID=your-project-id",[1081,6394,6205],{"class":6204},[1081,6396,6398,6400,6403],{"class":6144,"line":6397},4,[1081,6399,6380],{"class":6152},[1081,6401,6402],{"class":6152}," GOOGLE_ADS_DEVELOPER_TOKEN=your-developer-token",[1081,6404,6205],{"class":6204},[1081,6406,6408,6410,6413,6417],{"class":6144,"line":6407},5,[1081,6409,6380],{"class":6152},[1081,6411,6412],{"class":6152}," GOOGLE_ADS_LOGIN_CUSTOMER_ID=",[1081,6414,6416],{"class":6415},"sbssI","1234567890",[1081,6418,6205],{"class":6204},[1081,6420,6422,6425,6427,6430,6433,6436],{"class":6144,"line":6421},6,[1081,6423,6424],{"class":6152},"  --",[1081,6426,6285],{"class":6152},[1081,6428,6429],{"class":6152}," run",[1081,6431,6432],{"class":6152}," --spec",[1081,6434,6435],{"class":6152}," git+https:\u002F\u002Fgithub.com\u002Fgoogleads\u002Fgoogle-ads-mcp.git",[1081,6437,6438],{"class":6152}," google-ads-mcp\n",[6130,6440,6441,6448],{"v-slot:cursor":1462},[12,6442,6443,6444,6447],{},"Edit ",[4815,6445,6446],{},".cursor\u002Fmcp.json"," in your project (or the global Cursor MCP file) and add:",[5086,6449,6453],{"className":6450,"code":6451,"language":6452,"meta":1462,"style":1462},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n    \"mcpServers\": {\n        \"google-ads\": {\n            \"command\": \"pipx\",\n            \"args\": [\"run\", \"--spec\", \"git+https:\u002F\u002Fgithub.com\u002Fgoogleads\u002Fgoogle-ads-mcp.git\", \"google-ads-mcp\"],\n            \"env\": {\n                \"GOOGLE_APPLICATION_CREDENTIALS\": \"\u002Fpath\u002Fto\u002Fapplication_default_credentials.json\",\n                \"GOOGLE_PROJECT_ID\": \"your-project-id\",\n                \"GOOGLE_ADS_DEVELOPER_TOKEN\": \"your-developer-token\",\n                \"GOOGLE_ADS_LOGIN_CUSTOMER_ID\": \"1234567890\"\n            }\n        }\n    }\n}\n","json",[4815,6454,6455,6460,6477,6490,6512,6564,6577,6599,6619,6639,6657,6663,6669,6675],{"__ignoreMap":1462},[1081,6456,6457],{"class":6144,"line":6145},[1081,6458,6459],{"class":6288},"{\n",[1081,6461,6462,6465,6469,6472,6474],{"class":6144,"line":1463},[1081,6463,6464],{"class":6288},"    \"",[1081,6466,6468],{"class":6467},"spNyl","mcpServers",[1081,6470,6471],{"class":6288},"\"",[1081,6473,5514],{"class":6288},[1081,6475,6476],{"class":6288}," {\n",[1081,6478,6479,6482,6484,6486,6488],{"class":6144,"line":1468},[1081,6480,6481],{"class":6288},"        \"",[1081,6483,940],{"class":6148},[1081,6485,6471],{"class":6288},[1081,6487,5514],{"class":6288},[1081,6489,6476],{"class":6288},[1081,6491,6492,6495,6498,6500,6502,6505,6507,6509],{"class":6144,"line":6397},[1081,6493,6494],{"class":6288},"            \"",[1081,6496,6497],{"class":6415},"command",[1081,6499,6471],{"class":6288},[1081,6501,5514],{"class":6288},[1081,6503,6504],{"class":6288}," \"",[1081,6506,6264],{"class":6152},[1081,6508,6471],{"class":6288},[1081,6510,6511],{"class":6288},",\n",[1081,6513,6514,6516,6519,6521,6523,6526,6528,6531,6533,6536,6538,6541,6543,6545,6547,6550,6552,6554,6556,6559,6561],{"class":6144,"line":6407},[1081,6515,6494],{"class":6288},[1081,6517,6518],{"class":6415},"args",[1081,6520,6471],{"class":6288},[1081,6522,5514],{"class":6288},[1081,6524,6525],{"class":6288}," [",[1081,6527,6471],{"class":6288},[1081,6529,6530],{"class":6152},"run",[1081,6532,6471],{"class":6288},[1081,6534,6535],{"class":6288},",",[1081,6537,6504],{"class":6288},[1081,6539,6540],{"class":6152},"--spec",[1081,6542,6471],{"class":6288},[1081,6544,6535],{"class":6288},[1081,6546,6504],{"class":6288},[1081,6548,6549],{"class":6152},"git+https:\u002F\u002Fgithub.com\u002Fgoogleads\u002Fgoogle-ads-mcp.git",[1081,6551,6471],{"class":6288},[1081,6553,6535],{"class":6288},[1081,6555,6504],{"class":6288},[1081,6557,6558],{"class":6152},"google-ads-mcp",[1081,6560,6471],{"class":6288},[1081,6562,6563],{"class":6288},"],\n",[1081,6565,6566,6568,6571,6573,6575],{"class":6144,"line":6421},[1081,6567,6494],{"class":6288},[1081,6569,6570],{"class":6415},"env",[1081,6572,6471],{"class":6288},[1081,6574,5514],{"class":6288},[1081,6576,6476],{"class":6288},[1081,6578,6580,6583,6586,6588,6590,6592,6595,6597],{"class":6144,"line":6579},7,[1081,6581,6582],{"class":6288},"                \"",[1081,6584,6251],{"class":6585},"swJcz",[1081,6587,6471],{"class":6288},[1081,6589,5514],{"class":6288},[1081,6591,6504],{"class":6288},[1081,6593,6594],{"class":6152},"\u002Fpath\u002Fto\u002Fapplication_default_credentials.json",[1081,6596,6471],{"class":6288},[1081,6598,6511],{"class":6288},[1081,6600,6602,6604,6606,6608,6610,6612,6615,6617],{"class":6144,"line":6601},8,[1081,6603,6582],{"class":6288},[1081,6605,6326],{"class":6585},[1081,6607,6471],{"class":6288},[1081,6609,5514],{"class":6288},[1081,6611,6504],{"class":6288},[1081,6613,6614],{"class":6152},"your-project-id",[1081,6616,6471],{"class":6288},[1081,6618,6511],{"class":6288},[1081,6620,6622,6624,6626,6628,6630,6632,6635,6637],{"class":6144,"line":6621},9,[1081,6623,6582],{"class":6288},[1081,6625,6332],{"class":6585},[1081,6627,6471],{"class":6288},[1081,6629,5514],{"class":6288},[1081,6631,6504],{"class":6288},[1081,6633,6634],{"class":6152},"your-developer-token",[1081,6636,6471],{"class":6288},[1081,6638,6511],{"class":6288},[1081,6640,6642,6644,6646,6648,6650,6652,6654],{"class":6144,"line":6641},10,[1081,6643,6582],{"class":6288},[1081,6645,6338],{"class":6585},[1081,6647,6471],{"class":6288},[1081,6649,5514],{"class":6288},[1081,6651,6504],{"class":6288},[1081,6653,6416],{"class":6152},[1081,6655,6656],{"class":6288},"\"\n",[1081,6658,6660],{"class":6144,"line":6659},11,[1081,6661,6662],{"class":6288},"            }\n",[1081,6664,6666],{"class":6144,"line":6665},12,[1081,6667,6668],{"class":6288},"        }\n",[1081,6670,6672],{"class":6144,"line":6671},13,[1081,6673,6674],{"class":6288},"    }\n",[1081,6676,6678],{"class":6144,"line":6677},14,[1081,6679,6680],{"class":6288},"}\n",[6130,6682,6683,6695],{"v-slot:gemini":1462},[12,6684,6443,6685,6688,6689,6691,6692,5514],{},[4815,6686,6687],{},"~\u002F.gemini\u002Fsettings.json"," and add the same ",[4815,6690,6468],{}," block. Gemini CLI is the client Google documents first, and you can trigger its auth flow with ",[4815,6693,6694],{},"\u002Fmcp auth google-ads",[5086,6696,6697],{"className":6450,"code":6451,"language":6452,"meta":1462,"style":1462},[4815,6698,6699,6703,6715,6727,6745,6789,6801,6819,6837,6855,6871,6875,6879,6883],{"__ignoreMap":1462},[1081,6700,6701],{"class":6144,"line":6145},[1081,6702,6459],{"class":6288},[1081,6704,6705,6707,6709,6711,6713],{"class":6144,"line":1463},[1081,6706,6464],{"class":6288},[1081,6708,6468],{"class":6467},[1081,6710,6471],{"class":6288},[1081,6712,5514],{"class":6288},[1081,6714,6476],{"class":6288},[1081,6716,6717,6719,6721,6723,6725],{"class":6144,"line":1468},[1081,6718,6481],{"class":6288},[1081,6720,940],{"class":6148},[1081,6722,6471],{"class":6288},[1081,6724,5514],{"class":6288},[1081,6726,6476],{"class":6288},[1081,6728,6729,6731,6733,6735,6737,6739,6741,6743],{"class":6144,"line":6397},[1081,6730,6494],{"class":6288},[1081,6732,6497],{"class":6415},[1081,6734,6471],{"class":6288},[1081,6736,5514],{"class":6288},[1081,6738,6504],{"class":6288},[1081,6740,6264],{"class":6152},[1081,6742,6471],{"class":6288},[1081,6744,6511],{"class":6288},[1081,6746,6747,6749,6751,6753,6755,6757,6759,6761,6763,6765,6767,6769,6771,6773,6775,6777,6779,6781,6783,6785,6787],{"class":6144,"line":6407},[1081,6748,6494],{"class":6288},[1081,6750,6518],{"class":6415},[1081,6752,6471],{"class":6288},[1081,6754,5514],{"class":6288},[1081,6756,6525],{"class":6288},[1081,6758,6471],{"class":6288},[1081,6760,6530],{"class":6152},[1081,6762,6471],{"class":6288},[1081,6764,6535],{"class":6288},[1081,6766,6504],{"class":6288},[1081,6768,6540],{"class":6152},[1081,6770,6471],{"class":6288},[1081,6772,6535],{"class":6288},[1081,6774,6504],{"class":6288},[1081,6776,6549],{"class":6152},[1081,6778,6471],{"class":6288},[1081,6780,6535],{"class":6288},[1081,6782,6504],{"class":6288},[1081,6784,6558],{"class":6152},[1081,6786,6471],{"class":6288},[1081,6788,6563],{"class":6288},[1081,6790,6791,6793,6795,6797,6799],{"class":6144,"line":6421},[1081,6792,6494],{"class":6288},[1081,6794,6570],{"class":6415},[1081,6796,6471],{"class":6288},[1081,6798,5514],{"class":6288},[1081,6800,6476],{"class":6288},[1081,6802,6803,6805,6807,6809,6811,6813,6815,6817],{"class":6144,"line":6579},[1081,6804,6582],{"class":6288},[1081,6806,6251],{"class":6585},[1081,6808,6471],{"class":6288},[1081,6810,5514],{"class":6288},[1081,6812,6504],{"class":6288},[1081,6814,6594],{"class":6152},[1081,6816,6471],{"class":6288},[1081,6818,6511],{"class":6288},[1081,6820,6821,6823,6825,6827,6829,6831,6833,6835],{"class":6144,"line":6601},[1081,6822,6582],{"class":6288},[1081,6824,6326],{"class":6585},[1081,6826,6471],{"class":6288},[1081,6828,5514],{"class":6288},[1081,6830,6504],{"class":6288},[1081,6832,6614],{"class":6152},[1081,6834,6471],{"class":6288},[1081,6836,6511],{"class":6288},[1081,6838,6839,6841,6843,6845,6847,6849,6851,6853],{"class":6144,"line":6621},[1081,6840,6582],{"class":6288},[1081,6842,6332],{"class":6585},[1081,6844,6471],{"class":6288},[1081,6846,5514],{"class":6288},[1081,6848,6504],{"class":6288},[1081,6850,6634],{"class":6152},[1081,6852,6471],{"class":6288},[1081,6854,6511],{"class":6288},[1081,6856,6857,6859,6861,6863,6865,6867,6869],{"class":6144,"line":6641},[1081,6858,6582],{"class":6288},[1081,6860,6338],{"class":6585},[1081,6862,6471],{"class":6288},[1081,6864,5514],{"class":6288},[1081,6866,6504],{"class":6288},[1081,6868,6416],{"class":6152},[1081,6870,6656],{"class":6288},[1081,6872,6873],{"class":6144,"line":6659},[1081,6874,6662],{"class":6288},[1081,6876,6877],{"class":6144,"line":6665},[1081,6878,6668],{"class":6288},[1081,6880,6881],{"class":6144,"line":6671},[1081,6882,6674],{"class":6288},[1081,6884,6885],{"class":6144,"line":6677},[1081,6886,6680],{"class":6288},[6130,6888,6889,6895],{"v-slot:vscode":1462},[12,6890,6443,6891,6894],{},[4815,6892,6893],{},".vscode\u002Fmcp.json"," in your project and add:",[5086,6896,6898],{"className":6450,"code":6897,"language":6452,"meta":1462,"style":1462},"{\n    \"servers\": {\n        \"google-ads\": {\n            \"command\": \"pipx\",\n            \"args\": [\"run\", \"--spec\", \"git+https:\u002F\u002Fgithub.com\u002Fgoogleads\u002Fgoogle-ads-mcp.git\", \"google-ads-mcp\"],\n            \"env\": {\n                \"GOOGLE_APPLICATION_CREDENTIALS\": \"\u002Fpath\u002Fto\u002Fapplication_default_credentials.json\",\n                \"GOOGLE_PROJECT_ID\": \"your-project-id\",\n                \"GOOGLE_ADS_DEVELOPER_TOKEN\": \"your-developer-token\",\n                \"GOOGLE_ADS_LOGIN_CUSTOMER_ID\": \"1234567890\"\n            }\n        }\n    }\n}\n",[4815,6899,6900,6904,6917,6929,6947,6991,7003,7021,7039,7057,7073,7077,7081,7085],{"__ignoreMap":1462},[1081,6901,6902],{"class":6144,"line":6145},[1081,6903,6459],{"class":6288},[1081,6905,6906,6908,6911,6913,6915],{"class":6144,"line":1463},[1081,6907,6464],{"class":6288},[1081,6909,6910],{"class":6467},"servers",[1081,6912,6471],{"class":6288},[1081,6914,5514],{"class":6288},[1081,6916,6476],{"class":6288},[1081,6918,6919,6921,6923,6925,6927],{"class":6144,"line":1468},[1081,6920,6481],{"class":6288},[1081,6922,940],{"class":6148},[1081,6924,6471],{"class":6288},[1081,6926,5514],{"class":6288},[1081,6928,6476],{"class":6288},[1081,6930,6931,6933,6935,6937,6939,6941,6943,6945],{"class":6144,"line":6397},[1081,6932,6494],{"class":6288},[1081,6934,6497],{"class":6415},[1081,6936,6471],{"class":6288},[1081,6938,5514],{"class":6288},[1081,6940,6504],{"class":6288},[1081,6942,6264],{"class":6152},[1081,6944,6471],{"class":6288},[1081,6946,6511],{"class":6288},[1081,6948,6949,6951,6953,6955,6957,6959,6961,6963,6965,6967,6969,6971,6973,6975,6977,6979,6981,6983,6985,6987,6989],{"class":6144,"line":6407},[1081,6950,6494],{"class":6288},[1081,6952,6518],{"class":6415},[1081,6954,6471],{"class":6288},[1081,6956,5514],{"class":6288},[1081,6958,6525],{"class":6288},[1081,6960,6471],{"class":6288},[1081,6962,6530],{"class":6152},[1081,6964,6471],{"class":6288},[1081,6966,6535],{"class":6288},[1081,6968,6504],{"class":6288},[1081,6970,6540],{"class":6152},[1081,6972,6471],{"class":6288},[1081,6974,6535],{"class":6288},[1081,6976,6504],{"class":6288},[1081,6978,6549],{"class":6152},[1081,6980,6471],{"class":6288},[1081,6982,6535],{"class":6288},[1081,6984,6504],{"class":6288},[1081,6986,6558],{"class":6152},[1081,6988,6471],{"class":6288},[1081,6990,6563],{"class":6288},[1081,6992,6993,6995,6997,6999,7001],{"class":6144,"line":6421},[1081,6994,6494],{"class":6288},[1081,6996,6570],{"class":6415},[1081,6998,6471],{"class":6288},[1081,7000,5514],{"class":6288},[1081,7002,6476],{"class":6288},[1081,7004,7005,7007,7009,7011,7013,7015,7017,7019],{"class":6144,"line":6579},[1081,7006,6582],{"class":6288},[1081,7008,6251],{"class":6585},[1081,7010,6471],{"class":6288},[1081,7012,5514],{"class":6288},[1081,7014,6504],{"class":6288},[1081,7016,6594],{"class":6152},[1081,7018,6471],{"class":6288},[1081,7020,6511],{"class":6288},[1081,7022,7023,7025,7027,7029,7031,7033,7035,7037],{"class":6144,"line":6601},[1081,7024,6582],{"class":6288},[1081,7026,6326],{"class":6585},[1081,7028,6471],{"class":6288},[1081,7030,5514],{"class":6288},[1081,7032,6504],{"class":6288},[1081,7034,6614],{"class":6152},[1081,7036,6471],{"class":6288},[1081,7038,6511],{"class":6288},[1081,7040,7041,7043,7045,7047,7049,7051,7053,7055],{"class":6144,"line":6621},[1081,7042,6582],{"class":6288},[1081,7044,6332],{"class":6585},[1081,7046,6471],{"class":6288},[1081,7048,5514],{"class":6288},[1081,7050,6504],{"class":6288},[1081,7052,6634],{"class":6152},[1081,7054,6471],{"class":6288},[1081,7056,6511],{"class":6288},[1081,7058,7059,7061,7063,7065,7067,7069,7071],{"class":6144,"line":6641},[1081,7060,6582],{"class":6288},[1081,7062,6338],{"class":6585},[1081,7064,6471],{"class":6288},[1081,7066,5514],{"class":6288},[1081,7068,6504],{"class":6288},[1081,7070,6416],{"class":6152},[1081,7072,6656],{"class":6288},[1081,7074,7075],{"class":6144,"line":6659},[1081,7076,6662],{"class":6288},[1081,7078,7079],{"class":6144,"line":6665},[1081,7080,6668],{"class":6288},[1081,7082,7083],{"class":6144,"line":6671},[1081,7084,6674],{"class":6288},[1081,7086,7087],{"class":6144,"line":6677},[1081,7088,6680],{"class":6288},[12,7090,7091,7092,7094],{},"Drop the ",[4815,7093,6338],{}," line if you access your ad account directly, without a manager.",[12,7096,7097,7100,7101,7104],{},[19,7098,7099],{},"On Windows",", write file paths in the JSON with forward slashes (",[4815,7102,7103],{},"C:\u002FUsers\u002Fyou\u002Fgcloud\u002F...","), because a single backslash breaks the file.",[12,7106,7107],{},"That's everything wired up.",[53,7109,7111],{"id":7110},"verify-it-works","Verify it works",[12,7113,7114],{},"Confirm the server connected before you trust any answer. In Claude Code, run:",[5086,7116,7118],{"className":6137,"code":7117,"language":6139,"meta":1462,"style":1462},"claude mcp list\n",[4815,7119,7120],{"__ignoreMap":1462},[1081,7121,7122,7124,7126],{"class":6144,"line":6145},[1081,7123,6346],{"class":6148},[1081,7125,6367],{"class":6152},[1081,7127,7128],{"class":6152}," list\n",[12,7130,7131,7132,7134],{},"You want to see ",[4815,7133,940],{}," marked connected. The first run is slow because pipx clones and builds the server from GitHub, so give it a minute.",[12,7136,7137],{},"Then ask your agent the cleanest connectivity check there is:",[5086,7139,7143],{"className":7140,"code":7141,"language":7142,"meta":1462,"style":1462},"language-txt shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","What ad accounts do I have access to via Google Ads MCP?\n","txt",[4815,7144,7145],{"__ignoreMap":1462},[1081,7146,7147],{"class":6144,"line":6145},[1081,7148,7141],{},[12,7150,7151,7152,7155],{},"That runs ",[4815,7153,7154],{},"list_accessible_customers"," and returns your accessible customer IDs. If you get a list back, you're connected to real data.",[53,7157,7159],{"id":7158},"what-it-can-and-cannot-do","What it can and cannot do",[12,7161,7162,7163,7166,7167,7170,7171,7173],{},"The server has exactly three tools, and all three only pull data out of your account, never change it: ",[4815,7164,7165],{},"search"," (runs a report), ",[4815,7168,7169],{},"get_resource_metadata"," (tells the agent what fields exist), and ",[4815,7172,7154],{}," (lists your accounts). None of them creates, edits, or pauses anything. Google says it plainly: the server \"cannot modify bids, pause campaigns, or create new assets.\"",[12,7175,7176],{},"So it handles the reporting you'd normally click through the Ads dashboard to get. For example:",[4313,7178,7179,7185,7191],{},[1243,7180,7181,7184],{},[19,7182,7183],{},"Search terms report:"," \"Show search terms from the last 30 days that spent over $50 with zero conversions.\" Wasted spend and negative-keyword candidates in one pass.",[1243,7186,7187,7190],{},[19,7188,7189],{},"Performance by campaign:"," \"Compare spend, conversions, and cost per conversion by campaign, this month versus last.\"",[1243,7192,7193,7196],{},[19,7194,7195],{},"Across every account at once:"," \"Which campaigns have the worst cost per conversion right now, across all my accounts?\" No clicking into each one.",[12,7198,7199],{},"Four limits decide whether that's enough for you. None are bugs; they're the design:",[4313,7201,7202,7208,7214,7220],{},[1243,7203,7204,7207],{},[19,7205,7206],{},"It can only read."," It can show you a campaign that's wasting budget in seconds, but you still switch to the Ads dashboard to pause it yourself. Good for analysis, only half of an actual workflow.",[1243,7209,7210,7213],{},[19,7211,7212],{},"Not in the browser."," It runs as a program on your computer, so it only works in AI tools you install: Claude Code, Cursor, Gemini, VS Code. The browser versions of Claude (claude.ai) and ChatGPT can't reach it.",[1243,7215,7216,7219],{},[19,7217,7218],{},"The same question can return different numbers."," You ask in plain English, and the AI translates that into a precise report query on its own, a little differently each time. So a figure it gives you is a quick read, not a final number. Confirm anything you'll report on against the Ads dashboard first.",[1243,7221,7222,7225],{},[19,7223,7224],{},"Google only."," No Meta, no LinkedIn. Every other platform is a separate setup.",[12,7227,7228],{},"The first one is the dealbreaker for most people: you can ask, but you can't act.",[53,7230,7232],{"id":7231},"when-you-need-to-make-changes","When you need to make changes",[12,7234,7235],{},"If you want your agent to actually change things, pause a campaign, shift a budget, push a new asset, the official server can't do it, at least not yet. It's read-only by design, and Google hasn't announced anything about write support.",[12,7237,7238],{},"The only way to get write access today is a hosted MCP: a remote server that holds the keys to your account and makes changes for you.",[12,7240,7241],{},"That access is broad. A hosted MCP can see your spend, your performance, and your customer data, and it can make changes to your live account. Give that to some random server you found online and you've handed a stranger real access, with no idea who runs it or where your data goes.",[12,7243,7244,7246],{},[31,7245,5889],{"href":5888}," is the one we make, and it's built for exactly that worry:",[4313,7248,7249,7256,7263],{},[1243,7250,7251,7252,7255],{},"It's an ",[19,7253,7254],{},"official Google tech partner",", vetted to work with the Ads API. Not an unknown endpoint.",[1243,7257,7258,7259,7262],{},"Every change is ",[19,7260,7261],{},"draft-first",": the agent proposes the edit, and nothing goes live until you approve it.",[1243,7264,7265,7268,7269,7271],{},[19,7266,7267],{},"One connection covers Google and Meta",", so a cross-platform ",[31,7270,1591],{"href":1590}," view isn't two separate setups.",[4585,7273,7274,7285],{},[4588,7275,7276],{},[4591,7277,7278,7280,7283],{},[4594,7279],{},[4594,7281,7282],{},"Official Google Ads MCP",[4594,7284,5889],{},[4602,7286,7287,7298,7309,7320],{},[4591,7288,7289,7292,7295],{},[4607,7290,7291],{},"Access",[4607,7293,7294],{},"Read-only",[4607,7296,7297],{},"Read and write, with your approval",[4591,7299,7300,7303,7306],{},[4607,7301,7302],{},"Setup",[4607,7304,7305],{},"30 to 45 minutes, on your machine",[4607,7307,7308],{},"About 3 clicks",[4591,7310,7311,7314,7317],{},[4607,7312,7313],{},"Platforms",[4607,7315,7316],{},"Google only",[4607,7318,7319],{},"Google, Meta, and more",[4591,7321,7322,7324,7327],{},[4607,7323,4624],{},[4607,7325,7326],{},"Free",[4607,7328,7329],{},"Starting at $29\u002Fmonth",[12,7331,7332],{},"Two honest options: free and read-only, or write access through a service you can actually trust.",[53,7334,7336],{"id":7335},"troubleshooting","Troubleshooting",[7338,7339,7340,7344],"details",{},[7341,7342,7343],"summary",{},"\"This app is blocked\" or \"cloud-platform scope required\"",[12,7345,7346,7347,7349,7350,1342,7353,7356,7357,7359,7360,1342,7364,1446],{},"You tried to authenticate with gcloud's built-in OAuth client, which Google no longer permits for the Google Ads scope. Create your own OAuth client (Desktop type), download its JSON, and pass it with ",[4815,7348,6181],{},". Make sure both ",[4815,7351,7352],{},"adwords",[4815,7354,7355],{},"cloud-platform"," are in your ",[4815,7358,6227],{}," flag. See ",[31,7361,7363],{"href":7362},"#3-build-the-oauth-client","step 3",[31,7365,7367],{"href":7366},"#4-authenticate-with-gcloud","step 4",[7338,7369,7370,7373,7380],{},[7341,7371,7372],{},"\"Error 403: access_denied, app is being tested\"",[12,7374,7375,7376,7379],{},"Your OAuth consent screen is in Testing mode and the email you signed in with isn't on the test users list. Go to the ",[31,7377,6068],{"href":6066,"rel":7378},[46]," and add both your own Google account and your Google Ads login email as test users, then retry the gcloud login.",[12,7381,7382],{},[5038,7383],{"alt":7384,"src":7385},"The 403 access_denied 'app is being tested' block screen","\u002Fimages\u002Fblog\u002Fgoogle-mcp-setup\u002F403-access-denied.png",[7338,7387,7388,7391],{},[7341,7389,7390],{},"\"The developer token is only approved for use with test accounts\"",[12,7392,7393,7394,7397],{},"Your token has Test Account access, which can't read production data. Most people get Explorer access instead (it reads real accounts and is enough for this MCP) when Google auto-approves the API access form. A Test result means that auto-review couldn't clear you, so open the ",[31,7395,5936],{"href":5934,"rel":7396},[46]," on your manager account and apply for Basic access. Google targets a couple of business days, but the queue can run longer.",[7338,7399,7400,7403],{},[7341,7401,7402],{},"Manager account: \"can't find the account\"",[12,7404,7405,7406,7408,7409,7411],{},"If you reach your ad account through a manager (MCC), the server needs to know which manager to log in through. Set ",[4815,7407,6338],{}," to the manager account's customer ID, ",[19,7410,6354],{},", no dashes. Without it, the server can't resolve accounts under the manager.",[7338,7413,7414,7417],{},[7341,7415,7416],{},"Service account dead-end: \"zero Google Ads access\"",[12,7418,7419],{},"Service accounts can't be added as users in Google Ads, so they have no access to your campaigns no matter how the permissions look in Cloud. The official server uses user OAuth with your own client, which is what this guide sets up. If you went hunting for a service-account route, this is the dead-end it saves you from.",[7338,7421,7422,7425],{},[7341,7423,7424],{},"Server doesn't appear in `claude mcp list`",[12,7426,7427,7428,7431,7432,7435,7436,7439,7440,7443],{},"The first ",[4815,7429,7430],{},"pipx run"," clones and builds the server from GitHub, which is slow and needs network plus git. Give it a minute and re-check. If it still doesn't appear, confirm pipx is installed and on your PATH (",[4815,7433,7434],{},"pipx ensurepath",", then restart your terminal), and that Python is available. On macOS, ",[4815,7437,7438],{},"python"," vs ",[4815,7441,7442],{},"python3"," mismatches are a common cause.",[53,7445,7447],{"id":7446},"final-thoughts","Final thoughts",[12,7449,7450,7451,7454],{},"The two platforms are far apart right now. ",[31,7452,7453],{"href":5794},"Meta's official MCP"," is a paste-a-URL, two-minute setup with full write access. Google's is a 30-to-45-minute local build, longer if your token needs approval, and at the end it can only read. Neither is wrong; it's just where each one sits today.",[12,7456,7457,7458,7461],{},"If you want free, first-party Google reporting and don't mind the setup, the official server is the right call, and this guide gets you there. If you need to make changes, or you also run Meta, that's where a hosted option like ",[31,7459,7460],{"href":5888},"AdKit's Google Ads MCP"," fits.",[12,7463,7464,7465,4494,7470,1446],{},"If you get stuck, ping me on ",[31,7466,7469],{"href":7467,"rel":7468},"https:\u002F\u002Fx.com\u002Fnico_jeannen",[46],"X",[31,7471,7474],{"href":7472,"rel":7473},"https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fnico-jeannen\u002F",[46],"LinkedIn",[58,7476,7478],{"id":7477},"sources","Sources",[1240,7480,7481,7488,7494,7501],{},[1243,7482,7483],{},[31,7484,7487],{"href":7485,"rel":7486},"https:\u002F\u002Fgithub.com\u002Fgoogleads\u002Fgoogle-ads-mcp",[46],"Official Google Ads MCP server (GitHub)",[1243,7489,7490],{},[31,7491,7493],{"href":4386,"rel":7492},[46],"Google Ads MCP Server documentation",[1243,7495,7496],{},[31,7497,7500],{"href":7498,"rel":7499},"https:\u002F\u002Fdevelopers.google.com\u002Fgoogle-ads\u002Fapi\u002Fdocs\u002Fget-started\u002Fdev-token",[46],"Google Ads developer token guide",[1243,7502,7503],{},[31,7504,7507],{"href":7505,"rel":7506},"https:\u002F\u002Fdevelopers.google.com\u002Fgoogle-ads\u002Fapi\u002Fdocs\u002Foauth\u002Fcloud-project",[46],"Google Ads API: Cloud project and OAuth setup",[7509,7510,7511],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}",{"title":1462,"searchDepth":1463,"depth":1463,"links":7513},[7514,7515,7516,7517,7518,7519,7520,7521,7522,7523,7524],{"id":5893,"depth":1463,"text":5894},{"id":5927,"depth":1463,"text":5928},{"id":5990,"depth":1463,"text":5991},{"id":6033,"depth":1463,"text":6034},{"id":6107,"depth":1463,"text":6108},{"id":6257,"depth":1463,"text":6258},{"id":7110,"depth":1463,"text":7111},{"id":7158,"depth":1463,"text":7159},{"id":7231,"depth":1463,"text":7232},{"id":7335,"depth":1463,"text":7336},{"id":7446,"depth":1463,"text":7447,"children":7525},[7526],{"id":7477,"depth":1468,"text":7478},"2026-06-09","Google's official Ads MCP is read-only and takes ~30-45 min to wire up. Step-by-step setup for Claude Code, Cursor, and Gemini, with the gotchas.",[7530,7533,7536,7539,7542,7545,7548,7551],{"question":7531,"answer":7532},"Is the Google Ads MCP free?","Yes. Google's official server (github.com\u002Fgoogleads\u002Fgoogle-ads-mcp) is open-source and free. You run it locally via pipx. There is no hosted version and no subscription. Your only cost is the time it takes to set up, which is real.",{"question":7534,"answer":7535},"Can the Google Ads MCP create or pause campaigns?","No. The official server is strictly read-only. Google's docs say it 'cannot modify bids, pause campaigns, or create new assets.' It has three tools, all for reading data. If you need to make changes, you need a different tool with write access.",{"question":7537,"answer":7538},"Does the Google Ads MCP work with claude.ai or ChatGPT on the web?","No. The official server runs locally on your machine, so it only works with clients that launch local processes: Claude Code (the CLI), Cursor, Gemini CLI, Gemini Code Assist, and VS Code. claude.ai web and ChatGPT web connect to hosted URLs only, and Google does not host this server.",{"question":7540,"answer":7541},"Why do I get 'this app is being tested' when I authenticate?","Your OAuth consent screen is in Testing mode and the Google account you signed in with is not on the test users list. Add both your own email and your Google Ads login email as test users in the Google Cloud console, then try again.",{"question":7543,"answer":7544},"My developer token only works on test accounts. How do I fix it?","Your token has Test Account access, which can't read real campaigns. Google's automatic review usually grants Explorer access (which reads real accounts) the moment you submit the API access form, so a Test result means that auto-review couldn't clear you. Apply for Basic access in the Google Ads API Center and wait; Google targets a couple of business days, but the queue can run longer.",{"question":7546,"answer":7547},"Do I need a Google Ads manager (MCC) account?","Yes, to get a developer token. The API Center only appears on a manager account, and the token request form lives there. Creating a manager account is free. If you access your ad account through that manager, set GOOGLE_ADS_LOGIN_CUSTOMER_ID to the manager's ID, digits only.",{"question":7549,"answer":7550},"Can I use a service account instead of OAuth?","Not for Google Ads. Service accounts can't be added as users in Google Ads, so they have zero access to your campaigns. Use user OAuth with your own client, which is what this guide walks through.",{"question":7552,"answer":7553},"Will the official Google Ads MCP ever support writing or editing campaigns?","Google hasn't committed to it. There is clear demand for write access, but no date and no promise. If you need to make changes today, you need a hosted MCP that already has write access, such as AdKit.",{},"Read-only. Local setup. Claude Code, Cursor, Gemini only.",{"title":5866,"description":7528},"resources\u002Fgoogle-ads-mcp-setup",[1557,4799,7559,4800,7560,7561],"ai agents","tutorial","claude code","zE3-vNb-PAJshycpKaZ8PoPsYs5DI9oT_nLbK5a3YSc",{"id":7564,"title":7565,"author":7,"body":7566,"breadcrumbLabel":7,"category":8028,"cover":1524,"createdAt":8029,"description":8030,"extension":1527,"faqs":8031,"meta":8045,"navigation":1547,"noAiBadge":1524,"og":1524,"ogDescription":8046,"ogIcon":7,"path":8047,"seo":8048,"slug":8049,"stem":8049,"tags":8050,"updatedAt":7,"wip":1524,"__hash__":8054},"resources\u002Fresources\u002Fgoogle-ads-transparency-center.md","Google Ads Transparency Center: Spy on Winning Competitor Ads",{"type":9,"value":7567,"toc":8014},[7568,7577,7580,7583,7586,7590,7593,7596,7602,7605,7611,7614,7617,7621,7628,7631,7634,7640,7644,7647,7650,7656,7667,7673,7680,7683,7689,7693,7696,7699,7705,7712,7718,7721,7727,7730,7734,7737,7740,7746,7749,7755,7762,7768,7771,7775,7778,7785,7791,7794,7798,7801,7804,7810,7813,7819,7822,7826,7829,7832,7838,7844,7850,7853,7856,7862,7866,7869,7875,7886,7896,7902,7905,7909,7912,7915,7921,7924,7930,7932,7938,7944,7950,7956,7962,7968,7972,7975,7996,7999],[12,7569,7570,7571,7576],{},"You can see almost every ad a competitor runs on Google, for free, with no account and no login. The tool is Google's own ",[31,7572,7575],{"href":7573,"rel":7574},"https:\u002F\u002Fadstransparency.google.com",[46],"Ads Transparency Center",", and it opens at adstransparency.google.com.",[12,7578,7579],{},"But seeing a competitor's ads isn't the point. Any of their ads could be a flop they forgot to turn off. The real job is finding the winning ads, the two or three that are actually making them money, so you can borrow what already works instead of guessing.",[12,7581,7582],{},"This is the workflow for that. Pick the right competitors, find their ads, spot the winners, read the keywords they pay for, estimate what they spend, and confirm it all with reach data most people never look for. By the end you'll be reverse-engineering a proven strategy, not staring at a wall of creatives.",[12,7584,7585],{},"One honest limit before you start. The Transparency Center shows you creative, not performance. No spend, no click-through rate, no conversions. Half the skill here is reading the signals Google does give you to infer the numbers it won't.",[53,7587,7589],{"id":7588},"_1-pick-the-right-competitors","1. Pick the right competitors",[12,7591,7592],{},"Before you research anyone, get the list right. The competitors you think you're up against often aren't the ones you actually compete with in the auction.",[12,7594,7595],{},"Watch three kinds. Direct competitors sell the same product to the same people. Adjacent competitors sell something nearby to that same audience. And same-audience advertisers sell a completely different product to the same buyer. You bid against all three in the auction, and that last group is quietly useful: it shows which creative styles land with your audience in general, even when the product isn't yours.",[12,7597,7598],{},[5038,7599],{"alt":7600,"src":7601},"The three kinds of competitor worth watching","\u002Fimages\u002Fblog\u002Fgoogle-ads-transparency-center\u002Fdgm-competitor-types.png",[12,7603,7604],{},"If you already run Google Ads, Auction Insights hands you this list for free. Sitting in your Google Ads account under a campaign or keyword, it shows the exact domains bidding on the same searches as you, and four numbers worth reading: impression share (how often each advertiser shows up), overlap rate (how often you appear in the same auction), outranking share (how often you beat them), and position. Its best trick is surfacing competitors you didn't know you had, brands that quietly show up on your searches without ever being on your radar.",[12,7606,7607],{},[5038,7608],{"alt":7609,"src":7610},"Our own Auction Insights report, where Reddit, ChatGPT, and TikTok all bid against us","\u002Fimages\u002Fblog\u002Fgoogle-ads-transparency-center\u002Fauction-insights.png",[12,7612,7613],{},"That's our own report, with a few competitor names redacted. Reddit shows up on our searches more often than we do, and ChatGPT and TikTok are in there too. We would never have put those three on a competitor list.",[12,7615,7616],{},"If you don't run ads yet, do it by hand. Search your three or four most important keywords in an incognito window and write down every advertiser at the top. Aim for a short list of three to five real competitors before you open the Transparency Center. Now let's pull their ads.",[53,7618,7620],{"id":7619},"what-the-google-ads-transparency-center-hides","What the Google Ads Transparency Center hides",[12,7622,7623,7624,7627],{},"It shows the ads of ",[78,7625,7626],{},"verified"," advertisers across Search, Display, YouTube, and Shopping, in almost every country Google runs ads. For each ad you get the creative, the format, the regions it ran in, and the dates it was live.",[12,7629,7630],{},"What it hides is every performance number. Two competitors with identical ad libraries look identical here, even if one outspends the other a hundred to one. That gap is the whole reason the steps below exist: they turn \"here are their ads\" into \"here's the ad that works.\"",[12,7632,7633],{},"The word \"verified\" matters. Google only lists advertisers who passed its identity check, so an advertiser who skipped it is invisible here, with one regional exception we'll come back to.",[12,7635,7636],{},[5038,7637],{"alt":7638,"src":7639},"Every ad is filed under the verified advertiser, Hubspot, Inc.","\u002Fimages\u002Fblog\u002Fgoogle-ads-transparency-center\u002Fgatc-hubspot-adgrid.png",[53,7641,7643],{"id":7642},"_2-find-the-advertiser","2. Find the advertiser",[12,7645,7646],{},"Type the competitor's domain, not their brand name. This one habit fixes the mistake that makes people wrongly conclude a competitor \"isn't advertising.\"",[12,7648,7649],{},"Google files ads under the verified legal entity, which often isn't the name on the website. Search HubSpot and it shows up under its website, not as a tidy \"HubSpot\" advertiser, and every ad is filed under Hubspot, Inc. Mailchimp is filed under its parent, Intuit. When a domain search still comes up short, grab the legal name from the site's footer and search that instead.",[12,7651,7652],{},[5038,7653],{"alt":7654,"src":7655},"Ads are filed under the verified legal entity, so search the domain, not the brand","\u002Fimages\u002Fblog\u002Fgoogle-ads-transparency-center\u002Fdgm-domain-vs-brand.png",[1240,7657,7658,7661,7664],{},[1243,7659,7660],{},"Open adstransparency.google.com.",[1243,7662,7663],{},"Type the competitor's domain, like hubspot.com, not \"HubSpot\".",[1243,7665,7666],{},"Pick it from the dropdown. A domain search pulls every advertiser account pointing at that site.",[12,7668,7669],{},[5038,7670],{"alt":7671,"src":7672},"Search the domain and the competitor shows up under Websites, not as a named advertiser","\u002Fimages\u002Fblog\u002Fgoogle-ads-transparency-center\u002Fgatc-domain-search-dropdown.png",[5232,7674,7675],{},[12,7676,7677,7679],{},[19,7678,5238],{}," you can also jump here from any live Google ad. Click the three-dot \"About this ad\" menu on the ad itself and choose \"See more ads from this advertiser,\" and it drops you straight onto their Transparency Center page.",[12,7681,7682],{},"Land on the advertiser page and Google tells you how much you're looking at. For HubSpot it's around 300 ads, with filters for date, platform, and format sitting right above them. Those filters are the rest of this workflow.",[12,7684,7685],{},[5038,7686],{"alt":7687,"src":7688},"The domain page shows the ad count and filters for date, platform, and format","\u002Fimages\u002Fblog\u002Fgoogle-ads-transparency-center\u002Fgatc-domain-results-header.png",[53,7690,7692],{"id":7691},"_3-spy-on-their-display-ads-and-search-ads","3. Spy on their display ads and search ads",[12,7694,7695],{},"Use the format filter and look at all four, not just the search text ads. Most people skim the search ads and leave, which is exactly why the headlines are the least revealing part.",[12,7697,7698],{},"Each format answers a different question. Search ads show the exact offers a competitor leads with. Display ads show the visual hooks they push across the web. YouTube ads show the scripts they'll pay to have watched, the closest thing to their core pitch. Shopping ads, for ecommerce, show the products and prices they're actively pushing.",[12,7700,7701],{},[5038,7702],{"alt":7703,"src":7704},"Each format reveals a different part of the strategy","\u002Fimages\u002Fblog\u002Fgoogle-ads-transparency-center\u002Fdgm-formats.png",[12,7706,7707,7708,7711],{},"Here's why this section is the one worth slowing down on. Performance Max is now Google's dominant campaign type, and it has no keywords at all: Google spreads the creative across Search, Display, YouTube, Gmail, and Shopping on its own. That makes the Transparency Center the ",[78,7709,7710],{},"only"," place you can see a competitor's Performance Max creatives, because there are no keywords for a keyword tool to report. Filter to Display, YouTube, and Shopping and you're looking at the assets feeding their PMax campaigns.",[12,7713,7714],{},[5038,7715],{"alt":7716,"src":7717},"Filter to Display or YouTube to see the Performance Max creatives no keyword tool can show","\u002Fimages\u002Fblog\u002Fgoogle-ads-transparency-center\u002Fgatc-display-creative.png",[12,7719,7720],{},"HubSpot's search ads make its strategy obvious: almost all of them lead with a free tool, \"Free Online CRM,\" \"Free Email Signature Generator,\" \"Free Appointment Scheduler.\" Get people in the door with something free, and you can read it straight off the grid.",[12,7722,7723],{},[5038,7724],{"alt":7725,"src":7726},"HubSpot's search ads almost all lead with a free tool","\u002Fimages\u002Fblog\u002Fgoogle-ads-transparency-center\u002Fgatc-hubspot-free-tool-ads.png",[12,7728,7729],{},"Now you know the full spread of what a competitor is saying. What you still can't see is which of these ads is worth copying.",[53,7731,7733],{"id":7732},"_4-spot-their-winning-ads","4. Spot their winning ads",[12,7735,7736],{},"The ad a competitor has run the longest is almost always the one that works. This is the single most useful signal in the whole tool, and it costs nothing.",[12,7738,7739],{},"The logic is simple. Advertisers kill losing ads fast, because a loser wastes money every day it stays live. An ad still running after four months has survived that culling, which means it's probably paying for itself. An ad that showed up for six days and vanished is one they tested and dropped.",[12,7741,7742],{},[5038,7743],{"alt":7744,"src":7745},"This HubSpot ad has run since March 2023: a long-lived winner","\u002Fimages\u002Fblog\u002Fgoogle-ads-transparency-center\u002Fgatc-ad-run-dates.png",[12,7747,7748],{},"Two more signals sharpen the read. First, watch the variations. Several versions of one long-running ad means they found something that works and are scaling it, because nobody bothers rewriting a loser. A stream of brand-new ads that each last a week or two means the opposite, they're still hunting for the winner. Second, sheer volume is a rough budget signal. An advertiser running 300 live ads is playing a very different game from one running 12, and the count tells you who's spending at scale before you read a single creative.",[12,7750,7751],{},[5038,7752],{"alt":7753,"src":7754},"Sort by how long ads have run. The long bars are the ones worth copying","\u002Fimages\u002Fblog\u002Fgoogle-ads-transparency-center\u002Fdgm-winners-vs-tests.png",[12,7756,7757,7758,7761],{},"Doing this by hand means opening each ad, reading two dates, and doing the subtraction across hundreds of ads. This is the first place a dedicated tool saves real time. In ",[31,7759,2320],{"href":7760},"\u002Ffeatures\u002Fad-library"," you sort a competitor by \"longest running\" and the survivors jump to the top, each with its run duration already calculated. HubSpot's oldest live ads, the free business plan template and HubSpot Academy, have been running well over a thousand days. That length is the tell.",[12,7763,7764],{},[5038,7765],{"alt":7766,"src":7767},"AdKit sorts a competitor's ads by longest running, so the winners surface instantly","\u002Fimages\u002Fblog\u002Fgoogle-ads-transparency-center\u002Fadkit-longest-running.png",[12,7769,7770],{},"Run length tells you an ad probably works. It won't tell you which searches it's chasing, which is next.",[53,7772,7774],{"id":7773},"_5-see-the-keywords-they-pay-for","5. See the keywords they pay for",[12,7776,7777],{},"Creative tells you the message. Keywords tell you the intent behind it, the actual searches a competitor pays to win. The Transparency Center won't show you those, because it only holds the ads, not the terms behind them.",[12,7779,7780,7781,7784],{},"This is where you need real keyword data. AdKit's keyword view combines confirmed paid keywords from Google's search results with terms estimated from the ad copy itself, then attaches search volume and ",[31,7782,7783],{"href":2296},"cost per click"," to each. For HubSpot it surfaces the expensive commercial terms they defend, like \"hubspot free crm\" and \"relationships crm,\" some costing north of $40 a click.",[12,7786,7787],{},[5038,7788],{"alt":7789,"src":7790},"AdKit's keyword view shows the paid terms a competitor bids on, with volume and CPC","\u002Fimages\u002Fblog\u002Fgoogle-ads-transparency-center\u002Fadkit-keywords.png",[12,7792,7793],{},"One caveat, so you read it right. This isn't pulled from inside a competitor's ad account, nobody has that access. It's built from public search data and their live ad copy, so treat it as a strong, sourced estimate rather than their exact bid list. A high cost per click next to a long-running ad is about the clearest \"this makes us money\" signal you'll find without their login.",[53,7795,7797],{"id":7796},"_6-confirm-winners-with-the-eu-setting","6. Confirm winners with the EU setting",[12,7799,7800],{},"Set the region filter to a European country and Google starts showing data it hides everywhere else: an impressions range for the ad, and, on many ads, the targeting the advertiser asked for.",[12,7802,7803],{},"By default the tool shows your own country, so from the US you get creative and run dates and nothing more. Switch the region to Germany, France, or Italy, open a single ad, and the detail page now carries an impressions range inside the EU plus targeting details like age, location, and roughly who was included or excluded.",[12,7805,7806],{},[5038,7807],{"alt":7808,"src":7809},"Switch the region to an EU country to unlock reach and targeting Google hides elsewhere","\u002Fimages\u002Fblog\u002Fgoogle-ads-transparency-center\u002Fdgm-eu-unlock.png",[12,7811,7812],{},"This isn't a favor. Under the EU's Digital Services Act, Google has to publish this for ads shown in the EU, so it scopes the disclosure to where the law applies and strips it everywhere else. You're borrowing a European viewer's version of the same ad. Google even offers API access and an archive of ads it has removed for that region, both things the rest of the world never gets.",[12,7814,7815],{},[5038,7816],{"alt":7817,"src":7818},"The EU \"Audience selection\" shows who the advertiser included and excluded","\u002Fimages\u002Fblog\u002Fgoogle-ads-transparency-center\u002Fgatc-eu-reach-targeting.png",[12,7820,7821],{},"An ad that has run for months, carries a large EU impressions range, and sits on an expensive keyword is one a competitor is clearly feeding real budget. That impressions range is also the key to the question everyone actually wants answered.",[53,7823,7825],{"id":7824},"_7-estimate-what-they-spend","7. Estimate what they spend",[12,7827,7828],{},"No tool shows a competitor's real ad spend, and anyone claiming otherwise is guessing. But you can calculate a defensible floor, a \"minimum spend,\" straight from the EU view.",[12,7830,7831],{},"Every ad in an EU region shows an impressions range. Take the low end and turn it into money. How you do that depends on the format, because Google doesn't sell every ad the same way.",[12,7833,7834,7835,7837],{},"Display and YouTube ads are sold by the impression, so multiply the low end by a typical ",[31,7836,2249],{"href":1357},", the cost of a thousand impressions. One million impressions at a $2 CPM means the advertiser spent at least $2,000 on that single ad, in the EU alone.",[12,7839,7840,7841,7843],{},"Search ads are sold by the click, so the math takes one more step. Turn the impressions into clicks with a typical click-through rate, then multiply by a typical ",[31,7842,7783],{"href":2296},". Twenty-five thousand impressions at a 4% click-through rate is a thousand clicks, and at $4 a click that's $4,000 on one ad. Search costs far more per impression than display, which is why the same impression count can mean wildly different money depending on the format.",[12,7845,7846],{},[5038,7847],{"alt":7848,"src":7849},"Two ways to turn an impressions range into a minimum spend","\u002Fimages\u002Fblog\u002Fgoogle-ads-transparency-center\u002Fdgm-spend-math.png",[12,7851,7852],{},"It's a floor, not their budget, but unlike most \"spy tool spend estimates,\" it's a real number you can point to.",[12,7854,7855],{},"The catch is the arithmetic, and the fact that not every ad carries the impressions row. This is the other spot a tool earns its place. Open the same ad in AdKit and the detail panel shows the EU impressions and an estimated minimum spend for that exact creative, run with per-industry click-through and click-cost rates instead of one generic number.",[12,7857,7858],{},[5038,7859],{"alt":7860,"src":7861},"AdKit's ad detail shows EU impressions and an estimated minimum spend for that ad","\u002Fimages\u002Fblog\u002Fgoogle-ads-transparency-center\u002Fadkit-ad-spend.png",[53,7863,7865],{"id":7864},"_8-know-the-three-blind-spots","8. Know the three blind spots",[12,7867,7868],{},"The Transparency Center is a snapshot, not a complete archive. Three gaps decide what you can and can't see.",[12,7870,7871,7874],{},[19,7872,7873],{},"Unverified advertisers."," If a competitor never completed identity verification, their ads don't appear at all, except to viewers in the EU and Türkiye.",[12,7876,7877,3754,7880,7885],{},[19,7878,7879],{},"The indexing lag.",[31,7881,7884],{"href":7882,"rel":7883},"https:\u002F\u002Fadstransparency.google.com\u002Ffaq",[46],"New ads take roughly 48 to 72 hours to appear"," after going live, or after an advertiser finishes verifying.",[12,7887,7888,3754,7891,7895],{},[19,7889,7890],{},"The one-year window.",[31,7892,7894],{"href":7882,"rel":7893},[46],"Google keeps a commercial ad for about a year"," after it last ran, then drops it (political ads stay up to seven years). The EU archive of removed ads is the one place this loosens.",[12,7897,7898],{},[5038,7899],{"alt":7900,"src":7901},"A blank result usually means unverified, filtered out, or older than a year","\u002Fimages\u002Fblog\u002Fgoogle-ads-transparency-center\u002Fgatc-no-ads-found.png",[12,7903,7904],{},"The moment you want an ad a competitor already deleted, or you want to know the day they launch a new one, a public browser tab can't help you.",[53,7906,7908],{"id":7907},"_9-track-the-next-launch","9. Track the next launch",[12,7910,7911],{},"Everything above is a manual sweep: you search each competitor, read what's live today, and repeat next week. It can't give you two things, history and speed. The ads they've already deleted, and the day they launch a new one, both slip past a browser tab.",[12,7913,7914],{},"Adding a competitor to a tracker once fixes both. In AdKit you add HubSpot and get their whole footprint in one place, an estimated spend, the live ad count, and every platform they're on, without opening four ad libraries by hand.",[12,7916,7917],{},[5038,7918],{"alt":7919,"src":7920},"Add a competitor once and AdKit shows their whole ad footprint and estimated spend","\u002Fimages\u002Fblog\u002Fgoogle-ads-transparency-center\u002Fadkit-overview.png",[12,7922,7923],{},"From there the archive keeps the ads they take down, and a digest flags the new ones they publish. Instead of discovering a competitor's campaign three weeks late, you see it within a day of going live.",[12,7925,7926],{},[5038,7927],{"alt":7928,"src":7929},"AdKit's activity feed lists the new ads a tracked competitor has launched","\u002Fimages\u002Fblog\u002Fgoogle-ads-transparency-center\u002Fadkit-activity.png",[53,7931,1323],{"id":1322},[12,7933,7934,7937],{},[19,7935,7936],{},"Is the Google Ads Transparency Center free?"," Yes. No account, no login, and it works in almost every country Google runs ads in. Only verified advertisers appear in it.",[12,7939,7940,7943],{},[19,7941,7942],{},"Can you see how much a competitor spends?"," Not their real spend, no. But the EU view gives an impressions range per ad, and that range converts into a defensible minimum, as shown above. A tracker like AdKit runs that math for you on every ad that has the data.",[12,7945,7946,7949],{},[19,7947,7948],{},"Can you see their keywords?"," Not in the Transparency Center, which holds the ads, not the search terms behind them. A keyword tool infers the paid terms from confirmed search-results data plus the ad copy, which is how you get volume and cost per click without their account.",[12,7951,7952,7955],{},[19,7953,7954],{},"Can you see Performance Max ads?"," Yes, and this is the only place you can. PMax has no keywords, so keyword tools miss it entirely. Filter an advertiser to Display, YouTube, or Shopping to see the creatives feeding their PMax campaigns.",[12,7957,7958,7961],{},[19,7959,7960],{},"How far back does it go?"," Google keeps commercial ads for about a year after they last ran, and political ads for up to seven. New ads take 48 to 72 hours to appear.",[12,7963,7964,7967],{},[19,7965,7966],{},"How is it different from the Meta Ad Library?"," Both are public archives forced by regulation, but they index different things. Meta files ads under a page, so anyone can advertise from a fresh one. Google files them under a verified legal entity tied to a domain, which makes advertisers harder to hide, but leaves unverified ones invisible outside the EU and Türkiye.",[53,7969,7971],{"id":7970},"your-next-30-minutes","Your next 30 minutes",[12,7973,7974],{},"You don't need a project for this. Here's the version you can run right now.",[1240,7976,7977,7980,7983,7990,7993],{},[1243,7978,7979],{},"Get your list. Open Auction Insights, or google your top three keywords in incognito, and pick three real competitors across the direct, adjacent, and same-audience buckets.",[1243,7981,7982],{},"Pull each one in the Transparency Center by domain, and scan for their longest-running ads and their display and YouTube creatives.",[1243,7984,7985,7986,1446],{},"Write down the offer and angle each winner leads with. That's your ",[31,7987,7989],{"href":7988},"\u002Fglossary\u002Fai-swipe-file","swipe file",[1243,7991,7992],{},"Switch the region to an EU country, open the ones that matter, and estimate a minimum spend on the biggest.",[1243,7994,7995],{},"Drop those three competitors into a tracker so their next launch comes to you.",[12,7997,7998],{},"Do that once and you'll know more about your competitors' paid strategy than most of them know about yours.",[5232,8000,8001],{},[12,8002,8003,8006,8007,8010,8011,1446],{},[19,8004,8005],{},"Further reading:"," for why some of these ads cost what they cost, see ",[31,8008,8009],{"href":1459},"How Ad Platforms Work",". For a swipe file with breakdowns, see ",[31,8012,8013],{"href":1607},"Best SaaS Ads in 2026",{"title":1462,"searchDepth":1463,"depth":1463,"links":8015},[8016,8017,8018,8019,8020,8021,8022,8023,8024,8025,8026,8027],{"id":7588,"depth":1463,"text":7589},{"id":7619,"depth":1463,"text":7620},{"id":7642,"depth":1463,"text":7643},{"id":7691,"depth":1463,"text":7692},{"id":7732,"depth":1463,"text":7733},{"id":7773,"depth":1463,"text":7774},{"id":7796,"depth":1463,"text":7797},{"id":7824,"depth":1463,"text":7825},{"id":7864,"depth":1463,"text":7865},{"id":7907,"depth":1463,"text":7908},{"id":1322,"depth":1463,"text":1323},{"id":7970,"depth":1463,"text":7971},"competitor-research","2026-07-22","Use the Google Ads Transparency Center to see any competitor's ads free, spot the ones that work with run dates, and estimate what they spend.",[8032,8034,8036,8038,8040,8043],{"question":7936,"answer":8033},"Yes. It is free, needs no Google Ads account and no login, and works in almost every country Google runs ads in. Only verified advertisers appear in it.",{"question":7942,"answer":8035},"Not their real spend, no. But an EU region shows an impressions range per ad, and that range converts into a minimum spend. A tracker like AdKit runs that math for you on every ad that has the data.",{"question":7948,"answer":8037},"Not in the Transparency Center, which holds the ads, not the search terms behind them. A keyword tool infers the paid terms from confirmed search-results data plus the ad copy, which is how you get volume and cost per click without their account.",{"question":7954,"answer":8039},"Yes, and this is the only place you can. Performance Max has no keywords, so keyword tools miss it entirely. Filter an advertiser to Display, YouTube, or Shopping to see the creatives feeding their Performance Max campaigns.",{"question":8041,"answer":8042},"How far back does the Google Ads Transparency Center go?","Google keeps commercial ads for about a year after they last ran, and political ads for up to seven. New ads take 48 to 72 hours to appear, so a campaign launched this morning will not be there yet.",{"question":7966,"answer":8044},"Both are public ad archives forced by regulation, but they index different things. Meta files ads under a Facebook or Instagram page, so anyone can run ads from a new page. Google files them under a verified legal entity tied to a domain, which makes advertisers harder to hide but leaves unverified ones invisible outside the EU and Türkiye.",{},"Find competitor Google ads that actually make money, free.","\u002Fresources\u002Fgoogle-ads-transparency-center",{"title":7565,"description":8030},"resources\u002Fgoogle-ads-transparency-center",[1557,8051,8052,8053,7560],"competitor research","ad library","transparency center","7mba3pqy1V-CTj4ec4C6ezeEBP5orXhr7Z0hxDjN73s",{"id":8056,"title":8009,"author":7,"body":8057,"breadcrumbLabel":7,"category":5830,"cover":1547,"createdAt":8613,"description":8614,"extension":1527,"faqs":7,"meta":8615,"navigation":1547,"noAiBadge":1547,"og":1547,"ogDescription":7,"ogIcon":7,"path":1459,"seo":8616,"slug":8617,"stem":8618,"tags":8619,"updatedAt":8620,"wip":1524,"__hash__":8621},"resources\u002Fresources\u002Fhow-ads-platforms-works.md",{"type":9,"value":8058,"toc":8603},[8059,8062,8065,8075,8085,8091,8108,8114,8120,8123,8126,8129,8133,8136,8142,8149,8152,8157,8163,8168,8171,8188,8195,8200,8203,8206,8211,8215,8226,8232,8238,8241,8247,8253,8261,8267,8272,8275,8281,8285,8292,8295,8298,8301,8305,8310,8313,8318,8340,8345,8368,8377,8380,8383,8387,8390,8410,8413,8420,8468,8473,8476,8480,8483,8486,8492,8495,8515,8524,8527,8530,8533,8536,8540,8543,8546,8551,8567,8572,8583,8588,8591,8594,8597],[12,8060,8061],{},"Many people think of ads as a \"Put $1, get $2 back\" machine. After all, you're paying for ads to get more sales, right?",[12,8063,8064],{},"Sure, that's YOUR goal, but it's not how it \"works\".",[12,8066,8067,8070,8071,8074],{},[19,8068,8069],{},"There are no guaranteed results",". In fact, most of the time, you will likely lose money on it, at first. (",[78,8072,8073],{},"And anyone pretending the opposite is trying to sell you a sketchy course",").",[12,8076,8077,8078],{},"Ads platforms don't print money magically: They only ",[19,8079,8080,8081,8084],{},"show your content to who they ",[78,8082,8083],{},"predict"," will convert.",[12,8086,8087,8088,8090],{},"The word ",[78,8089,8083],{}," is important, because modern platforms use AI algorithms to choose who will see your ads. Here is how it works (in a very simplified way):",[1240,8092,8093,8096,8099,8102,8105],{},[1243,8094,8095],{},"You create a campaign with a specific optimization goal (ex: signups).",[1243,8097,8098],{},"The platform shows your ads to people likely to signup.",[1243,8100,8101],{},"Some of those people signup, and the tracking sends this data back to the platform",[1243,8103,8104],{},"The platform's algorithm tries to find more people like the ones who just signed up",[1243,8106,8107],{},"It shows your ads to those new people, and optimizes further.",[12,8109,8110],{},[5038,8111],{"alt":8112,"src":8113},"Ads data loop","\u002Fimages\u002Fblog\u002Fhow-ads-platforms-works\u002Fads-data-loop.svg",[12,8115,8116,8117],{},"Of course, this is a very simplified version, there are many other factors, but the point is that usually ",[19,8118,8119],{},"the more data you have, the better the AI predictions will be, and the better your ads will perform.",[12,8121,8122],{},"This is why people usually say you need a high budget for your ads. But in reality, it's not about budget, it's about volume of data.",[12,8124,8125],{},"There are other ways to get more data without necessarily increasing the budget.",[12,8127,8128],{},"But first, we need to understand how do platforms choose when to show an ad to their users?",[53,8130,8132],{"id":8131},"audiences-targeting","Audiences & Targeting",[12,8134,8135],{},"Ad platforms have billions of users. In fact, you can reach almost anyone in the world if we combine all platforms together.",[12,8137,8138,8139],{},"But obviously, we don't want to target everyone, ",[19,8140,8141],{},"we want to show our ads only to our target audiences. And luckily for us, ad platforms have billions of data points about their users.",[12,8143,8144,8145,8148],{},"Platforms need that data to select content that it ",[78,8146,8147],{},"predicts"," will be relevant to this person, based on all their interests, and then show it in their feed.",[12,8150,8151],{},"Because of the massive amount of data, each user has a unique feed tailored to what they like.",[12,8153,8154],{},[19,8155,8156],{},"This is why social media are so addictive: they spend billions training AI models that find the perfect content for YOU",[12,8158,8159],{},[5038,8160],{"alt":8161,"src":8162},"Audiences and content","\u002Fimages\u002Fblog\u002Fhow-ads-platforms-works\u002Faudience-content.svg",[12,8164,8165],{},[19,8166,8167],{},"But this data isn't just for showing content: It's also used to let advertisers target precise audiences.",[12,8169,8170],{},"For example:",[4313,8172,8173,8176,8179,8182,8185],{},[1243,8174,8175],{},"On Meta, you could target men between 35 and 45 years old, who like fishing and survivalism, have kids, and read Tim Ferriss.",[1243,8177,8178],{},"On Google, you can target people searching \"How to create a landing page for my website\"",[1243,8180,8181],{},"On LinkedIn, you can target CEO of tech startups with 50+ employees.",[1243,8183,8184],{},"On Youtube, you can target people watching videos about entrepreneurship.",[1243,8186,8187],{},"On Reddit, you can target people who hang out in \"Work from home\" subreddits.",[12,8189,8190,8191,3762],{},"Every time one piece of content is shown to a user (whether it's organic content or ads), it's called an \"",[31,8192,8194],{"href":8193},"\u002Fglossary\u002Fimpressions","Impression",[12,8196,8197],{},[19,8198,8199],{},"Now, since most people are not scrolling or searching non stop all day long, the number of impressions available on each platform are scarce.",[12,8201,8202],{},"So platforms need to decide how to prioritize one content over another.",[12,8204,8205],{},"And since you're probably not the only one who wants to target those people, platforms need to decide how to prioritize one ad over another.",[12,8207,8208],{},[19,8209,8210],{},"So, how do platforms decide? By making advertisers bid against each other.",[53,8212,8214],{"id":8213},"the-auction-system","The auction system",[12,8216,8217,8218,8221,8222,8074],{},"If platforms were only filled with ads, people would just find an alternative and leave, meaning ",[19,8219,8220],{},"there are only so many Ad Impressions available on platforms to keep the user experience optimal"," (often called the ",[31,8223,8225],{"href":8224},"\u002Fglossary\u002Fadvertising-inventory","Advertising Inventory",[12,8227,8228,8229],{},"For advertisers, it means it's a zero-sum game: ",[19,8230,8231],{},"Every time someone sees your ad, they don't see your competitor's.",[12,8233,8234,8235],{},"It also means that ",[19,8236,8237],{},"the more competitors run ads for the same audience, the more expensive ads will usually become.",[12,8239,8240],{},"You're competing against other advertisers to reach each person in your target audience. The more demand there is for a \"person\", the more it will cost to target them.",[12,8242,8243,8244],{},"Of course, you can't target a specific person, instead, you target people inside an audience. The cost is expressed as ",[31,8245,8246],{"href":1357},"Cost Per 1000 impressions (CPM)",[12,8248,8249],{},[5038,8250],{"alt":8251,"src":8252},"Each person has different interests and advertisers compete to reach them","\u002Fimages\u002Fblog\u002Fhow-ads-platforms-works\u002Fauction-system-audience.svg",[12,8254,8255,8256,8260],{},"The winner is the one that can afford to bid the most in the auction. That's why maximizing your ",[31,8257,8259],{"href":8258},"\u002Fglossary\u002Flifetime-value","Lifetime Value"," is an absolute priority to run ads.",[8262,8263,8264],"note",{},[12,8265,8266],{},"Fun fact:\nIf you have a big budget, it's technically possible to drive competitors out of market by overbidding to the point where they lose money and shut down their ads. It will cost you a lot, but once everyone is out of business, the market is yours.",[5232,8268,8269],{},[12,8270,8271],{},"Wait so are you saying I need to spend thousands of dollar every day to be able to run ads?",[12,8273,8274],{},"Well, yes, you do need money, but there is a little plot twist that can allow you to run ads even with lower budgets:",[12,8276,8277,8280],{},[19,8278,8279],{},"The bidding system doesn't only take your budget in consideration, it's just one part of it."," There is another part that is often even more important than your budget...",[53,8282,8284],{"id":8283},"quality-score","Quality Score",[12,8286,8287],{},[19,8288,8289],{},[78,8290,8291],{},"\"The better your ads are, the cheaper it will be\"",[12,8293,8294],{},"This is a rule you find in most advertising platforms, and it's what can allow you to compete with bigger advertisers.",[12,8296,8297],{},"But how do platforms determine what a \"good ad\" is?",[12,8299,8300],{},"By using a \"Quality Score\".",[58,8302,8304],{"id":8303},"what-is-the-quality-score","What is the Quality Score?",[12,8306,8307],{},[19,8308,8309],{},"The Quality Score is a \"black box\" metric that determines how good the user experience your ad provides.",[12,8311,8312],{},"I specified \"Black Box\" because platforms don't share how it works (to avoid advertisers gaming the system). But they still give us a few hints. And often, it works similarly to how organic content is ranked.",[12,8314,8315],{},[19,8316,8317],{},"It considers things within the platform, like:",[4313,8319,8320,8323,8326,8337],{},[1243,8321,8322],{},"The engagement your ads generate (watch time, likes, comments, etc)",[1243,8324,8325],{},"Following the platform's compliance & rules",[1243,8327,8328,8329,4494,8333],{},"Avoid deceptive marketing tactics like ",[31,8330,8332],{"href":8331},"\u002Fglossary\u002Fclick-baiting","click",[31,8334,8336],{"href":8335},"\u002Fglossary\u002Fengagement-baiting","engagement baiting",[1243,8338,8339],{},"How \"good\" your ads are compared to other ads targeting the same audience (yes, quality score is relative)",[12,8341,8342],{},[19,8343,8344],{},"But also in your funnel and product experience, like:",[4313,8346,8347,8359,8362,8365],{},[1243,8348,8349,8350,8354,8355],{},"Landing page conversion rate, ",[31,8351,8353],{"href":8352},"\u002Fglossary\u002Fbounce-rate","bounce rate"," & ",[31,8356,8358],{"href":8357},"\u002Fglossary\u002Fdwell-time","dwell time",[1243,8360,8361],{},"Disruptive experience (ex: intrusive pop-ups, etc)",[1243,8363,8364],{},"Misleading products (ex: Product different than what you advertise on your landing page)",[1243,8366,8367],{},"Bad customer experience (ex: Not replying to emails, refunds, etc)",[12,8369,8370,8371,8376],{},"Platforms have a few different ways to track those things, but the most common ones are to use their built-in metrics (likes, comments, etc), the data they have about your website (using tracking pixels), as well as direct feedback from users (ex: ",[31,8372,8375],{"href":8373,"rel":8374},"https:\u002F\u002Fwww.facebook.com\u002Fbusiness\u002Fhelp\u002F108127923199330",[46],"Facebook Page Feedback",")",[12,8378,8379],{},"Ok great, but what's the point of having all this, don't they just care about maximizing profit anyway?",[12,8381,8382],{},"They do! And that's exactly why they use the Quality Score.",[58,8384,8386],{"id":8385},"why-do-platforms-use-quality-scores","Why do platforms use quality scores?",[12,8388,8389],{},"Platforms use those algorithms to balance between 3 priorities:",[4313,8391,8392,8398,8404],{},[1243,8393,8394,8397],{},[19,8395,8396],{},"Make the maximum amount of money for the platform:"," That's the \"final\" goal.",[1243,8399,8400,8403],{},[19,8401,8402],{},"Providing the best experience possible for users:"," More active users = More ads to sell = More money",[1243,8405,8406,8409],{},[19,8407,8408],{},"Give advertisers the best return on investment possible:"," ROI = Advertisers come back for more = More money",[12,8411,8412],{},"It's a very tight balance to maintain, because if you show too many ads, users will be annoyed and leave the platform. But if you don't show ads at all, you go bankrupt.",[12,8414,8415,8416,8419],{},"Here is a quick story to illustrate this. You don't ",[78,8417,8418],{},"have"," to read it but it gives you a good example of how platforms adapt.",[8421,8422,8425],"accordion",{"style":8423,"type":8424},"background-color:var(--ui-color-neutral-100); padding:0.25rem 1rem; border-radius:0.5rem","single",[8426,8427,8430,8433,8436,8439,8442,8445,8448,8451,8454,8457,8460,8463],"accordion-item",{"icon":8428,"label":8429},"fa6-solid:circle-question","Why Facebook switched priorities",[12,8431,8432],{},"Let's go back in time in 2004.",[12,8434,8435],{},"When Facebook started, they refused to have ads on the platform because ads are not \"cool\", and back then, the only thing that mattered was to be the coolest platform.",[12,8437,8438],{},"But having billions of users is expensive, so after years (and after they rekted all competition) and they launched their ad platforms. The priority switched to making money.",[12,8440,8441],{},"So naturally, every advertiser jumped in, and the platform got flooded with ads. But lots of low quality and shady ads too.",[12,8443,8444],{},"Can you guess what happened?",[12,8446,8447],{},"Eventually, many users started to associate the platform with low quality ads and scams, and worse: Started to leave the platform.",[12,8449,8450],{},"Fewer users = less impression inventory = less profit for Facebook. And big advertisers(eg. Coca Cola etc) did not want to be associated with shady ads.",[12,8452,8453],{},"So they had to find a solution. And their solution was to change their priorities:",[12,8455,8456],{},"Before, the #1 goal was to make money for Facebook, #2 was to make money for advertisers, and #3 was user experience.",[12,8458,8459],{},"But now, the #1 goal is to maximize user experience, #2 is to make money for Facebook, and #3 is to make money for advertisers.",[12,8461,8462],{},"For Meta (FB\u002FInstagram\u002Fetc), it happened around 2016, but this story can be applied to virtually every platform that ever existed. First they monetize by allowing anyone to make ads, then they become more strict.",[8262,8464,8465],{},[12,8466,8467],{},"This is why Facebook was so annoying with account bans. They don't want to risk losing users and damaging reputation due to potential shady advertisers.",[5232,8469,8470],{},[12,8471,8472],{},"\"Ok that's great but I don't care, just tell me how to get cheaper ads\"",[12,8474,8475],{},"Coming to it!",[58,8477,8479],{"id":8478},"why-you-should-care-about-quality-score","Why you should care about quality score",[12,8481,8482],{},"So, how does quality scores impact us? Well, simple: It's often half of how the auction system works!",[12,8484,8485],{},"Let's see an example with Facebook's auction system:",[12,8487,8488],{},[5038,8489],{"alt":8490,"src":8491},"Facebook Advertising Value and auction system","\u002Fimages\u002Fblog\u002Fhow-ads-platforms-works\u002Ffacebook-advertising-value.webp",[12,8493,8494],{},"As you can see in the image above, there are 3 components. Each focuses on a priority:",[4313,8496,8497,8503,8509],{},[1243,8498,8499,8502],{},[19,8500,8501],{},"The Advertiser's bid"," is here to maximize the amount of money Facebook makes.",[1243,8504,8505,8508],{},[19,8506,8507],{},"The Estimated Action Rate"," is here to make sure your ads are shown to people likely to convert. Platforms prefer to send the \"good traffic\" to landing pages and funnels that convert, because getting conversions means you'll probably come back and pay for more ads.",[1243,8510,8511,8514],{},[19,8512,8513],{},"The Consumer Experience\""," (Facebook's quality score) is here to make sure the users see content they like and stay on the platform. If users don't like your content, your ads will be more expensive to compensate, or simply not be shown.",[12,8516,8517,8518,8523],{},"I'm not making that up by the way, those examples ",[31,8519,8522],{"href":8520,"rel":8521},"https:\u002F\u002Fwww.facebook.com\u002Fbusiness\u002Fhelp\u002F430291176997542?id=561906377587030",[46],"directly comes from Meta's guidelines",", and most platforms use something similar.",[12,8525,8526],{},"But as you can see, the \"money\" part is just a small part of the equation (Only 25% according to the image).",[12,8528,8529],{},"The rest is how good your funnel is (25%) and how enjoyable your ads are for users (50%).",[12,8531,8532],{},"This is how you can compete with other advertisers. Most of them are lazy and don't want to put in the work.",[12,8534,8535],{},"They just throw money and hope it sticks. But if you're smart about it, you can spend less and still get good results.",[53,8537,8539],{"id":8538},"how-to-lower-your-ad-costs","How to lower your ad costs",[12,8541,8542],{},"So, based on this, you can see that one \"easy\" way to lower your costs is to maximize your quality score.",[12,8544,8545],{},"We've mentioned a lot of the things above, but let's make a recap:",[12,8547,8548],{},[19,8549,8550],{},"At the Ads level, you can:",[4313,8552,8553,8556,8561,8564],{},[1243,8554,8555],{},"Make content that's more valuable (Example: Higher production value, funny, story, educational, relatable, relevant)",[1243,8557,8558,8559],{},"Avoid ",[31,8560,2358],{"href":1310},[1243,8562,8563],{},"Avoid clickbaiting or deceptive practices.",[1243,8565,8566],{},"Answering comments under your ads",[12,8568,8569],{},[19,8570,8571],{},"At the Funnel level you can:",[4313,8573,8574,8577,8580],{},[1243,8575,8576],{},"Making sure you choose a conversion goal that you can actually get quickly (ex: Don't ask for purchases if users purchases 2 weeks later signing up, ask for signups instead).",[1243,8578,8579],{},"Congruency: Make sure your landing page matches your ads as much as possible (similar wording, branding colors, etc)",[1243,8581,8582],{},"Keep users engaged on the funnel (Making sure they don't bounce, for example by making an engaging onboarding, showing a video on the landing page, etc)",[8262,8584,8585],{},[12,8586,8587],{},"This is just a very quick TL:DR, I will make a post specifically about how to make good ads eventually",[12,8589,8590],{},"Now, I keep repeating it, but again, this article is a simplification.",[12,8592,8593],{},"Ads platforms are very complex and I suspect not even the platform's developers fully understand how they work (mainly due to the opaque nature of AI).",[12,8595,8596],{},"But hopefully this already gives you a better idea of how it works.",[12,8598,8599,8600],{},"If you still aren't sure if ads are the right fit for you, you can check ",[31,8601,8602],{"href":1455},"When to run ads for your SaaS",{"title":1462,"searchDepth":1463,"depth":1463,"links":8604},[8605,8606,8607,8612],{"id":8131,"depth":1463,"text":8132},{"id":8213,"depth":1463,"text":8214},{"id":8283,"depth":1463,"text":8284,"children":8608},[8609,8610,8611],{"id":8303,"depth":1468,"text":8304},{"id":8385,"depth":1468,"text":8386},{"id":8478,"depth":1468,"text":8479},{"id":8538,"depth":1463,"text":8539},"2025-09-02","Learn how ads platforms work behind the scenes. Understand bidding, quality scores, and the auction system to optimize your campaigns and reduce costs.",{},{"title":8009,"description":8614},"how-ads-platforms-works","resources\u002Fhow-ads-platforms-works",[4269,4270,2453],"2025-12-18","uJSHPIZyXNNRIkXiLZSsRMadKUOVDKTEyLzm03JqHWI",{"id":8623,"title":8624,"author":7,"body":8625,"breadcrumbLabel":9671,"category":9672,"cover":1547,"createdAt":9673,"description":9674,"extension":1527,"faqs":9675,"meta":9691,"navigation":1547,"noAiBadge":1524,"og":1547,"ogDescription":7,"ogIcon":7,"path":9692,"seo":9693,"slug":9694,"stem":9695,"tags":9696,"updatedAt":9700,"wip":1524,"__hash__":9701},"resources\u002Fresources\u002Fhow-to-install-meta-pixel\u002Findex.md","Install Meta Pixel in React, Next.js, Nuxt, or HTML",{"type":9,"value":8626,"toc":9658},[8627,8633,8636,8644,8647,8651,8654,8679,8686,8691,8695,8703,8718,8721,8764,8768,8815,8824,8831,8835,8907,8916,8920,8923,8989,9001,9009,9015,9551,9557,9572,9576,9582,9588,9592,9595,9620,9624,9655],[12,8628,8629,8630,8632],{},"The Meta Pixel (also called Facebook Pixel) is a JavaScript snippet that tracks what visitors do on your site and sends that data to Facebook. Once installed, you can measure ad performance, build ",[31,8631,1859],{"href":1858}," audiences from past visitors, and let Facebook optimize your campaigns toward real conversions.",[12,8634,8635],{},"Pick your framework below for a step-by-step guide. Most installs take under 5 minutes.",[8262,8637,8638],{},[12,8639,8640,8643],{},[19,8641,8642],{},"Install the pixel before you run ads."," It starts collecting visitor data immediately, so when you launch your first campaign you'll have a warm audience to target instead of starting from zero.",[4376,8645],{":items":8646},"[{\"id\":\"nuxt\",\"name\":\"Nuxt\",\"icon\":\"logos:nuxt-icon\",\"to\":\"\u002Fresources\u002Fhow-to-install-meta-pixel\u002Fnuxt\"},{\"id\":\"nextjs\",\"name\":\"Next.js\",\"icon\":\"logos:nextjs-icon\",\"to\":\"\u002Fresources\u002Fhow-to-install-meta-pixel\u002Fnextjs\"},{\"id\":\"react\",\"name\":\"React\",\"icon\":\"logos:react\",\"to\":\"\u002Fresources\u002Fhow-to-install-meta-pixel\u002Freact\"},{\"id\":\"vue\",\"name\":\"Vue\",\"icon\":\"logos:vue\",\"badge\":\"Soon\"},{\"id\":\"js\",\"name\":\"JavaScript\",\"icon\":\"logos:javascript\",\"to\":\"#javascript-installation\"},{\"id\":\"html\",\"name\":\"HTML\",\"icon\":\"logos:html-5\",\"to\":\"#manual-script-installation\"}]",[53,8648,8650],{"id":8649},"getting-your-pixel-id","Getting Your Pixel ID",[12,8652,8653],{},"Before installing, grab your Pixel ID from Facebook:",[1240,8655,8656,8665,8672],{},[1243,8657,8658,8659],{},"Go to ",[31,8660,8664],{"href":8661,"rel":8662,"target":8663},"https:\u002F\u002Fbusiness.facebook.com\u002Fevents_manager",[46],"\\_blank","Facebook Events Manager",[1243,8666,8667,8668,8671],{},"Click ",[19,8669,8670],{},"Data Sources"," → select your pixel (or create one)",[1243,8673,8674,8675,8678],{},"Copy the ",[19,8676,8677],{},"Pixel ID"," (15-16 digit number)",[12,8680,8681],{},[5038,8682],{"alt":8683,"src":8684,"width":8685},"Finding your Pixel ID in Facebook Events Manager","\u002Fimages\u002Fblog\u002Fhow-to-install-meta-pixel\u002Ffind-pixel-id.png",500,[8262,8687,8688],{},[12,8689,8690],{},"Facebook sometimes calls this \"Dataset ID\", it's the same thing.",[53,8692,8694],{"id":8693},"javascript-installation","JavaScript Installation",[12,8696,8697,8698,5514],{},"For any JavaScript project, I recommend using the ",[31,8699,8702],{"href":8700,"rel":8701,"target":8663},"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@adkit\u002Fmeta-pixel",[46],"Meta Pixel NPM package",[5086,8704,8706],{"className":6137,"code":8705,"language":6139,"meta":1462,"style":1462},"npm install @adkit\u002Fmeta-pixel\n",[4815,8707,8708],{"__ignoreMap":1462},[1081,8709,8710,8713,8715],{"class":6144,"line":6145},[1081,8711,8712],{"class":6148},"npm",[1081,8714,6153],{"class":6152},[1081,8716,8717],{"class":6152}," @adkit\u002Fmeta-pixel\n",[12,8719,8720],{},"Then initialize the pixel:",[5086,8722,8727],{"className":8723,"code":8724,"filename":8725,"language":8726,"meta":1462,"style":1462},"language-javascript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import META from '@adkit\u002Fmeta-pixel';\n\nMETA.init({\n    pixelIds: ['YOUR_PIXEL_ID'],\n    autoTrackPageView: true,\n    debug: true, \u002F\u002F Remove in production\n});\n","main.js","javascript",[4815,8728,8729,8734,8739,8744,8749,8754,8759],{"__ignoreMap":1462},[1081,8730,8731],{"class":6144,"line":6145},[1081,8732,8733],{},"import META from '@adkit\u002Fmeta-pixel';\n",[1081,8735,8736],{"class":6144,"line":1463},[1081,8737,8738],{"emptyLinePlaceholder":1547},"\n",[1081,8740,8741],{"class":6144,"line":1468},[1081,8742,8743],{},"META.init({\n",[1081,8745,8746],{"class":6144,"line":6397},[1081,8747,8748],{},"    pixelIds: ['YOUR_PIXEL_ID'],\n",[1081,8750,8751],{"class":6144,"line":6407},[1081,8752,8753],{},"    autoTrackPageView: true,\n",[1081,8755,8756],{"class":6144,"line":6421},[1081,8757,8758],{},"    debug: true, \u002F\u002F Remove in production\n",[1081,8760,8761],{"class":6144,"line":6579},[1081,8762,8763],{},"});\n",[58,8765,8767],{"id":8766},"tracking-events","Tracking Events",[5086,8769,8771],{"className":8723,"code":8770,"filename":8725,"language":8726,"meta":1462,"style":1462},"import META from '@adkit\u002Fmeta-pixel';\n\n\u002F\u002F Standard events\nMETA.track('ViewContent', { content_id: 'product-123' });\nMETA.track('AddToCart', { value: 29.99, currency: 'USD' });\nMETA.track('Purchase', { value: 99, currency: 'USD' });\n\n\u002F\u002F Custom events\nMETA.trackCustom('WatchedVideo', { video_id: 'abc' });\n",[4815,8772,8773,8777,8781,8786,8791,8796,8801,8805,8810],{"__ignoreMap":1462},[1081,8774,8775],{"class":6144,"line":6145},[1081,8776,8733],{},[1081,8778,8779],{"class":6144,"line":1463},[1081,8780,8738],{"emptyLinePlaceholder":1547},[1081,8782,8783],{"class":6144,"line":1468},[1081,8784,8785],{},"\u002F\u002F Standard events\n",[1081,8787,8788],{"class":6144,"line":6397},[1081,8789,8790],{},"META.track('ViewContent', { content_id: 'product-123' });\n",[1081,8792,8793],{"class":6144,"line":6407},[1081,8794,8795],{},"META.track('AddToCart', { value: 29.99, currency: 'USD' });\n",[1081,8797,8798],{"class":6144,"line":6421},[1081,8799,8800],{},"META.track('Purchase', { value: 99, currency: 'USD' });\n",[1081,8802,8803],{"class":6144,"line":6579},[1081,8804,8738],{"emptyLinePlaceholder":1547},[1081,8806,8807],{"class":6144,"line":6601},[1081,8808,8809],{},"\u002F\u002F Custom events\n",[1081,8811,8812],{"class":6144,"line":6621},[1081,8813,8814],{},"META.trackCustom('WatchedVideo', { video_id: 'abc' });\n",[12,8816,8817,8818,8823],{},"You can verify events are firing with the ",[31,8819,8822],{"href":8820,"rel":8821,"target":8663},"https:\u002F\u002Fchromewebstore.google.com\u002Fdetail\u002Fmeta-pixel-helper\u002Ffdgfkebogiimcoedlicjlajpkdmockpc",[46],"Meta Pixel Helper"," Chrome extension:",[12,8825,8826],{},[5038,8827],{"alt":8828,"src":8829,"width":8830},"ViewContent event with parameters in Meta Pixel Helper","\u002Fimages\u002Fblog\u002Fhow-to-install-meta-pixel\u002Fview-content-event-parameters.png",400,[58,8832,8834],{"id":8833},"available-standard-events","Available Standard Events",[4313,8836,8837,8842,8847,8852,8857,8862,8867,8872,8877,8882,8887,8892,8897,8902],{},[1243,8838,8839],{},[4815,8840,8841],{},"PageView",[1243,8843,8844],{},[4815,8845,8846],{},"ViewContent",[1243,8848,8849],{},[4815,8850,8851],{},"AddToCart",[1243,8853,8854],{},[4815,8855,8856],{},"AddToWishlist",[1243,8858,8859],{},[4815,8860,8861],{},"InitiateCheckout",[1243,8863,8864],{},[4815,8865,8866],{},"Purchase",[1243,8868,8869],{},[4815,8870,8871],{},"Lead",[1243,8873,8874],{},[4815,8875,8876],{},"CompleteRegistration",[1243,8878,8879],{},[4815,8880,8881],{},"Subscribe",[1243,8883,8884],{},[4815,8885,8886],{},"StartTrial",[1243,8888,8889],{},[4815,8890,8891],{},"Search",[1243,8893,8894],{},[4815,8895,8896],{},"Contact",[1243,8898,8899],{},[4815,8900,8901],{},"Donate",[1243,8903,8904],{},[4815,8905,8906],{},"Schedule",[12,8908,8909,8910,8915],{},"Use ",[31,8911,8914],{"href":8912,"rel":8913,"target":8663},"https:\u002F\u002Fdevelopers.facebook.com\u002Fdocs\u002Fmeta-pixel\u002Freference",[46],"standard events"," whenever possible. They work better for ad optimization than custom events.",[53,8917,8919],{"id":8918},"what-events-to-track-in-your-saas","What Events to Track in Your SaaS",[12,8921,8922],{},"For a typical SaaS funnel, track these events:",[4585,8924,8925,8935],{},[4588,8926,8927],{},[4591,8928,8929,8932],{},[4594,8930,8931],{},"Event",[4594,8933,8934],{},"When to Trigger",[4602,8936,8937,8946,8955,8964,8973],{},[4591,8938,8939,8943],{},[4607,8940,8941],{},[4815,8942,8846],{},[4607,8944,8945],{},"On page load of blogs, pricing or features page",[4591,8947,8948,8952],{},[4607,8949,8950],{},[4815,8951,8871],{},[4607,8953,8954],{},"On form submit (newsletter, lead magnet, waitlist)",[4591,8956,8957,8961],{},[4607,8958,8959],{},[4815,8960,8876],{},[4607,8962,8963],{},"After successful account creation",[4591,8965,8966,8970],{},[4607,8967,8968],{},[4815,8969,8886],{},[4607,8971,8972],{},"When user activates free trial",[4591,8974,8975,8982],{},[4607,8976,8977,8979,8980],{},[4815,8978,8881],{}," \u002F ",[4815,8981,8866],{},[4607,8983,8984,8985,8988],{},"On subscription success page (use ",[4815,8986,8987],{},"eventID"," for deduplication)",[12,8990,8991,8992,8995,8996,9000],{},"Focus on ",[19,8993,8994],{},"conversion events"," (Lead, StartTrial, Subscribe). These are what you'll optimize your ads for. Use the ",[31,8997,8999],{"href":8998},"\u002Ftools\u002Fconversion-rate-calculator","conversion rate calculator"," to set a baseline before your campaign starts.",[53,9002,9004,9005,9008],{"id":9003},"manual-script-installation","Manual ",[4815,9006,9007],{},"\u003Cscript>"," Installation",[12,9010,9011,9012,5514],{},"If you can't use npm, add this script directly to your HTML ",[4815,9013,9014],{},"\u003Chead>",[5086,9016,9021],{"className":9017,"code":9018,"filename":9019,"language":9020,"meta":1462,"style":1462},"language-html shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003C!-- Meta Pixel Code -->\n\u003Cscript>\n    !function(f,b,e,v,n,t,s)\n    {if(f.fbq)return;n=f.fbq=function(){n.callMethod?\n    n.callMethod.apply(n,arguments):n.queue.push(arguments)};\n    if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';\n    n.queue=[];t=b.createElement(e);t.async=!0;\n    t.src=v;s=b.getElementsByTagName(e)[0];\n    s.parentNode.insertBefore(t,s)}(window, document,'script',\n    'https:\u002F\u002Fconnect.facebook.net\u002Fen_US\u002Ffbevents.js');\n    fbq('init', 'YOUR_PIXEL_ID');\n    fbq('track', 'PageView');\n\u003C\u002Fscript>\n\u003Cnoscript>\u003Cimg height=\"1\" width=\"1\" style=\"display:none\" src=\"https:\u002F\u002Fwww.facebook.com\u002Ftr?id=998515319079495&ev=PageView&noscript=1\" \u002F>\u003C\u002Fnoscript>\n\u003C!-- End Meta Pixel Code -->\n","index.html","html",[4815,9022,9023,9029,9040,9088,9143,9191,9269,9316,9357,9403,9417,9445,9470,9479,9545],{"__ignoreMap":1462},[1081,9024,9025],{"class":6144,"line":6145},[1081,9026,9028],{"class":9027},"sHwdD","\u003C!-- Meta Pixel Code -->\n",[1081,9030,9031,9034,9037],{"class":6144,"line":1463},[1081,9032,9033],{"class":6288},"\u003C",[1081,9035,9036],{"class":6585},"script",[1081,9038,9039],{"class":6288},">\n",[1081,9041,9042,9045,9048,9051,9055,9057,9060,9062,9065,9067,9070,9072,9075,9077,9080,9082,9085],{"class":6144,"line":1468},[1081,9043,9044],{"class":6288},"    !",[1081,9046,9047],{"class":6467},"function",[1081,9049,9050],{"class":6288},"(",[1081,9052,9054],{"class":9053},"sHdIc","f",[1081,9056,6535],{"class":6288},[1081,9058,9059],{"class":9053},"b",[1081,9061,6535],{"class":6288},[1081,9063,9064],{"class":9053},"e",[1081,9066,6535],{"class":6288},[1081,9068,9069],{"class":9053},"v",[1081,9071,6535],{"class":6288},[1081,9073,9074],{"class":9053},"n",[1081,9076,6535],{"class":6288},[1081,9078,9079],{"class":9053},"t",[1081,9081,6535],{"class":6288},[1081,9083,9084],{"class":9053},"s",[1081,9086,9087],{"class":6288},")\n",[1081,9089,9090,9093,9097,9099,9101,9103,9106,9108,9111,9114,9116,9119,9121,9123,9126,9128,9130,9133,9135,9137,9140],{"class":6144,"line":6397},[1081,9091,9092],{"class":6288},"    {",[1081,9094,9096],{"class":9095},"s7zQu","if",[1081,9098,9050],{"class":6585},[1081,9100,9054],{"class":6204},[1081,9102,1446],{"class":6288},[1081,9104,9105],{"class":6204},"fbq",[1081,9107,8376],{"class":6585},[1081,9109,9110],{"class":9095},"return",[1081,9112,9113],{"class":6288},";",[1081,9115,9074],{"class":6204},[1081,9117,9118],{"class":6288},"=",[1081,9120,9054],{"class":6204},[1081,9122,1446],{"class":6288},[1081,9124,9105],{"class":9125},"s2Zo4",[1081,9127,9118],{"class":6288},[1081,9129,9047],{"class":6467},[1081,9131,9132],{"class":6288},"(){",[1081,9134,9074],{"class":6204},[1081,9136,1446],{"class":6288},[1081,9138,9139],{"class":6204},"callMethod",[1081,9141,9142],{"class":6288},"?\n",[1081,9144,9145,9148,9150,9152,9154,9157,9159,9161,9163,9166,9168,9170,9172,9174,9177,9179,9182,9184,9186,9188],{"class":6144,"line":6407},[1081,9146,9147],{"class":6204},"    n",[1081,9149,1446],{"class":6288},[1081,9151,9139],{"class":6204},[1081,9153,1446],{"class":6288},[1081,9155,9156],{"class":9125},"apply",[1081,9158,9050],{"class":6585},[1081,9160,9074],{"class":6204},[1081,9162,6535],{"class":6288},[1081,9164,9165],{"class":6204},"arguments",[1081,9167,8376],{"class":6585},[1081,9169,5514],{"class":6288},[1081,9171,9074],{"class":6204},[1081,9173,1446],{"class":6288},[1081,9175,9176],{"class":6204},"queue",[1081,9178,1446],{"class":6288},[1081,9180,9181],{"class":9125},"push",[1081,9183,9050],{"class":6585},[1081,9185,9165],{"class":6204},[1081,9187,8376],{"class":6585},[1081,9189,9190],{"class":6288},"};\n",[1081,9192,9193,9196,9198,9201,9203,9205,9208,9210,9212,9214,9216,9218,9220,9222,9224,9226,9228,9230,9232,9234,9236,9238,9241,9244,9247,9249,9251,9253,9256,9258,9261,9264,9266],{"class":6144,"line":6421},[1081,9194,9195],{"class":9095},"    if",[1081,9197,9050],{"class":6585},[1081,9199,9200],{"class":6288},"!",[1081,9202,9054],{"class":6204},[1081,9204,1446],{"class":6288},[1081,9206,9207],{"class":6204},"_fbq",[1081,9209,8376],{"class":6585},[1081,9211,9054],{"class":6204},[1081,9213,1446],{"class":6288},[1081,9215,9207],{"class":6204},[1081,9217,9118],{"class":6288},[1081,9219,9074],{"class":6204},[1081,9221,9113],{"class":6288},[1081,9223,9074],{"class":6204},[1081,9225,1446],{"class":6288},[1081,9227,9181],{"class":6204},[1081,9229,9118],{"class":6288},[1081,9231,9074],{"class":6204},[1081,9233,9113],{"class":6288},[1081,9235,9074],{"class":6204},[1081,9237,1446],{"class":6288},[1081,9239,9240],{"class":6204},"loaded",[1081,9242,9243],{"class":6288},"=!",[1081,9245,9246],{"class":6415},"0",[1081,9248,9113],{"class":6288},[1081,9250,9074],{"class":6204},[1081,9252,1446],{"class":6288},[1081,9254,9255],{"class":6204},"version",[1081,9257,9118],{"class":6288},[1081,9259,9260],{"class":6288},"'",[1081,9262,9263],{"class":6152},"2.0",[1081,9265,9260],{"class":6288},[1081,9267,9268],{"class":6288},";\n",[1081,9270,9271,9273,9275,9277,9279,9282,9284,9286,9288,9290,9292,9295,9297,9299,9301,9303,9305,9307,9310,9312,9314],{"class":6144,"line":6579},[1081,9272,9147],{"class":6204},[1081,9274,1446],{"class":6288},[1081,9276,9176],{"class":6204},[1081,9278,9118],{"class":6288},[1081,9280,9281],{"class":6585},"[]",[1081,9283,9113],{"class":6288},[1081,9285,9079],{"class":6204},[1081,9287,9118],{"class":6288},[1081,9289,9059],{"class":6204},[1081,9291,1446],{"class":6288},[1081,9293,9294],{"class":9125},"createElement",[1081,9296,9050],{"class":6585},[1081,9298,9064],{"class":6204},[1081,9300,8376],{"class":6585},[1081,9302,9113],{"class":6288},[1081,9304,9079],{"class":6204},[1081,9306,1446],{"class":6288},[1081,9308,9309],{"class":6204},"async",[1081,9311,9243],{"class":6288},[1081,9313,9246],{"class":6415},[1081,9315,9268],{"class":6288},[1081,9317,9318,9321,9323,9326,9328,9330,9332,9334,9336,9338,9340,9343,9345,9347,9350,9352,9355],{"class":6144,"line":6601},[1081,9319,9320],{"class":6204},"    t",[1081,9322,1446],{"class":6288},[1081,9324,9325],{"class":6204},"src",[1081,9327,9118],{"class":6288},[1081,9329,9069],{"class":6204},[1081,9331,9113],{"class":6288},[1081,9333,9084],{"class":6204},[1081,9335,9118],{"class":6288},[1081,9337,9059],{"class":6204},[1081,9339,1446],{"class":6288},[1081,9341,9342],{"class":9125},"getElementsByTagName",[1081,9344,9050],{"class":6585},[1081,9346,9064],{"class":6204},[1081,9348,9349],{"class":6585},")[",[1081,9351,9246],{"class":6415},[1081,9353,9354],{"class":6585},"]",[1081,9356,9268],{"class":6288},[1081,9358,9359,9362,9364,9367,9369,9372,9374,9376,9378,9380,9382,9385,9388,9390,9393,9395,9397,9399,9401],{"class":6144,"line":6621},[1081,9360,9361],{"class":6204},"    s",[1081,9363,1446],{"class":6288},[1081,9365,9366],{"class":6204},"parentNode",[1081,9368,1446],{"class":6288},[1081,9370,9371],{"class":9125},"insertBefore",[1081,9373,9050],{"class":6585},[1081,9375,9079],{"class":6204},[1081,9377,6535],{"class":6288},[1081,9379,9084],{"class":6204},[1081,9381,8376],{"class":6585},[1081,9383,9384],{"class":6288},"}",[1081,9386,9387],{"class":6204},"(window",[1081,9389,6535],{"class":6288},[1081,9391,9392],{"class":6204}," document",[1081,9394,6535],{"class":6288},[1081,9396,9260],{"class":6288},[1081,9398,9036],{"class":6152},[1081,9400,9260],{"class":6288},[1081,9402,6511],{"class":6288},[1081,9404,9405,9408,9411,9413,9415],{"class":6144,"line":6641},[1081,9406,9407],{"class":6288},"    '",[1081,9409,9410],{"class":6152},"https:\u002F\u002Fconnect.facebook.net\u002Fen_US\u002Ffbevents.js",[1081,9412,9260],{"class":6288},[1081,9414,8376],{"class":6204},[1081,9416,9268],{"class":6288},[1081,9418,9419,9422,9424,9426,9429,9431,9433,9436,9439,9441,9443],{"class":6144,"line":6659},[1081,9420,9421],{"class":9125},"    fbq",[1081,9423,9050],{"class":6204},[1081,9425,9260],{"class":6288},[1081,9427,9428],{"class":6152},"init",[1081,9430,9260],{"class":6288},[1081,9432,6535],{"class":6288},[1081,9434,9435],{"class":6288}," '",[1081,9437,9438],{"class":6152},"YOUR_PIXEL_ID",[1081,9440,9260],{"class":6288},[1081,9442,8376],{"class":6204},[1081,9444,9268],{"class":6288},[1081,9446,9447,9449,9451,9453,9456,9458,9460,9462,9464,9466,9468],{"class":6144,"line":6665},[1081,9448,9421],{"class":9125},[1081,9450,9050],{"class":6204},[1081,9452,9260],{"class":6288},[1081,9454,9455],{"class":6152},"track",[1081,9457,9260],{"class":6288},[1081,9459,6535],{"class":6288},[1081,9461,9435],{"class":6288},[1081,9463,8841],{"class":6152},[1081,9465,9260],{"class":6288},[1081,9467,8376],{"class":6204},[1081,9469,9268],{"class":6288},[1081,9471,9472,9475,9477],{"class":6144,"line":6671},[1081,9473,9474],{"class":6288},"\u003C\u002F",[1081,9476,9036],{"class":6585},[1081,9478,9039],{"class":6288},[1081,9480,9481,9483,9486,9489,9491,9494,9496,9498,9501,9503,9506,9508,9510,9512,9514,9517,9519,9521,9524,9526,9529,9531,9533,9536,9538,9541,9543],{"class":6144,"line":6677},[1081,9482,9033],{"class":6288},[1081,9484,9485],{"class":6585},"noscript",[1081,9487,9488],{"class":6288},">\u003C",[1081,9490,5038],{"class":6585},[1081,9492,9493],{"class":6467}," height",[1081,9495,9118],{"class":6288},[1081,9497,6471],{"class":6288},[1081,9499,9500],{"class":6152},"1",[1081,9502,6471],{"class":6288},[1081,9504,9505],{"class":6467}," width",[1081,9507,9118],{"class":6288},[1081,9509,6471],{"class":6288},[1081,9511,9500],{"class":6152},[1081,9513,6471],{"class":6288},[1081,9515,9516],{"class":6467}," style",[1081,9518,9118],{"class":6288},[1081,9520,6471],{"class":6288},[1081,9522,9523],{"class":6152},"display:none",[1081,9525,6471],{"class":6288},[1081,9527,9528],{"class":6467}," src",[1081,9530,9118],{"class":6288},[1081,9532,6471],{"class":6288},[1081,9534,9535],{"class":6152},"https:\u002F\u002Fwww.facebook.com\u002Ftr?id=998515319079495&ev=PageView&noscript=1",[1081,9537,6471],{"class":6288},[1081,9539,9540],{"class":6288}," \u002F>\u003C\u002F",[1081,9542,9485],{"class":6585},[1081,9544,9039],{"class":6288},[1081,9546,9548],{"class":6144,"line":9547},15,[1081,9549,9550],{"class":9027},"\u003C!-- End Meta Pixel Code -->\n",[12,9552,9553,9554,9556],{},"Replace ",[4815,9555,9438],{}," with your actual Pixel ID.",[9558,9559,9560],"warning",{},[12,9561,9562,9563,9566,9567,9571],{},"For single-page apps, you'll need to manually call ",[4815,9564,9565],{},"fbq('track', 'PageView')"," on route changes.\nThat's why I recommend using the ",[31,9568,9570],{"href":8700,"rel":9569,"target":8663},[46],"JavaScript NPM package"," package if possible.",[53,9573,9575],{"id":9574},"verify-your-installation","Verify Your Installation",[12,9577,2311,9578,9581],{},[31,9579,8822],{"href":8820,"rel":9580,"target":8663},[46]," Chrome extension to verify your pixel is firing correctly. It shows a green badge when pixels are detected on the page.",[12,9583,9584],{},[5038,9585],{"alt":9586,"src":9587,"width":8830},"Meta Pixel Helper showing detected pixel","\u002Fimages\u002Fblog\u002Fhow-to-install-meta-pixel\u002Fmeta-pixel-helper-debug.png",[53,9589,9591],{"id":9590},"next-steps","Next Steps",[12,9593,9594],{},"Once your pixel is installed:",[1240,9596,9597,9608,9614],{},[1243,9598,9599,9602,9603,9607],{},[19,9600,9601],{},"Create audiences"," in ",[31,9604,9606],{"href":8661,"rel":9605,"target":8663},[46],"Events Manager"," based on visitor behavior",[1243,9609,9610,9613],{},[19,9611,9612],{},"Set up conversions"," to track purchases, signups, or other goals",[1243,9615,9616,9619],{},[19,9617,9618],{},"Run optimized ads"," using your pixel events as optimization targets",[53,9621,9623],{"id":9622},"related-resources","Related Resources",[4313,9625,9626,9632,9638,9643,9649],{},[1243,9627,9628,9631],{},[31,9629,9630],{"href":1858},"What is Retargeting?"," — how Facebook uses your pixel data to show ads to past visitors",[1243,9633,9634,9637],{},[31,9635,9636],{"href":2253},"Conversion Rate Guide"," — understand what you're optimizing for before you spend",[1243,9639,9640,9642],{},[31,9641,1435],{"href":1434}," — figure out what return you need to make your ads profitable",[1243,9644,9645,9648],{},[31,9646,9647],{"href":1455},"When to Run Ads for SaaS"," — pixel data is only useful if you run the right campaigns at the right time",[1243,9650,9651,9654],{},[31,9652,9653],{"href":1459},"How Ads Platforms Work"," — understand the auction model Meta uses to serve your ads",[7509,9656,9657],{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":1462,"searchDepth":1463,"depth":1463,"links":9659},[9660,9661,9665,9666,9668,9669,9670],{"id":8649,"depth":1463,"text":8650},{"id":8693,"depth":1463,"text":8694,"children":9662},[9663,9664],{"id":8766,"depth":1468,"text":8767},{"id":8833,"depth":1468,"text":8834},{"id":8918,"depth":1463,"text":8919},{"id":9003,"depth":1463,"text":9667},"Manual \u003Cscript> Installation",{"id":9574,"depth":1463,"text":9575},{"id":9590,"depth":1463,"text":9591},{"id":9622,"depth":1463,"text":9623},"Pixel Installation","tracking-setup","2025-11-26","Step-by-step Meta Pixel (Facebook Pixel) install for React, Next.js, Nuxt, and plain HTML. Copy the code for your framework and you're done.",[9676,9679,9682,9685,9688],{"question":9677,"answer":9678},"How do I install the Facebook Pixel (Meta Pixel)?","Get your Pixel ID from Facebook Events Manager, then add the pixel code to your site. For React, Next.js, or Nuxt, use the @adkit\u002Fmeta-pixel npm package. For plain HTML, paste the base code into your \u003Chead> tag. The full steps depend on your framework -- use the guides above for copy-paste instructions.",{"question":9680,"answer":9681},"What is the Meta Pixel?","The Meta Pixel (formerly Facebook Pixel) is a piece of JavaScript code that tracks visitor actions on your website. It sends this data to Facebook so you can measure ad effectiveness, build targeted audiences, and optimize your campaigns.",{"question":9683,"answer":9684},"Is Meta Pixel free?","Yes, the Meta Pixel is completely free to use. You only pay when you run ads on Facebook or Instagram that use the pixel data for targeting or optimization.",{"question":9686,"answer":9687},"Should I install Meta Pixel before running ads?","Yes! Install the pixel as early as possible, even if you don't plan to run ads for months. The pixel collects visitor data immediately, so when you're ready to launch campaigns, you'll have a warm audience to target instead of starting from zero.",{"question":9689,"answer":9690},"What's the difference between Meta Pixel and Dataset?","They're the same thing. Facebook rebranded the Pixel to \"Dataset\" in some interfaces, but functionally they work identically. You may see both terms used interchangeably in Facebook Business Manager.",{},"\u002Fresources\u002Fhow-to-install-meta-pixel",{"title":8624,"description":9674},"how-to-install-meta-pixel","resources\u002Fhow-to-install-meta-pixel\u002Findex",[9697,9698,4270,2453,9699],"meta-pixel","facebook","analytics","2026-07-30","ZOfimBaVX6bl5OEDRo72s0TBRies3RzgXNuH6bHSMJI",{"id":9703,"title":9704,"author":7,"body":9705,"breadcrumbLabel":7,"category":9672,"cover":1547,"createdAt":10783,"description":10784,"extension":1527,"faqs":10785,"meta":10798,"navigation":1547,"noAiBadge":1524,"og":1547,"ogDescription":7,"ogIcon":7,"path":10799,"seo":10800,"slug":10801,"stem":10802,"tags":10803,"updatedAt":9700,"wip":1524,"__hash__":10805},"resources\u002Fresources\u002Fhow-to-install-meta-pixel\u002Fnextjs.md","How to Install Meta Pixel in Next.js",{"type":9,"value":9706,"toc":10767},[9707,9710,9714,9726,9730,9744,9747,9754,9921,9924,9928,9931,9947,9972,9974,9980,10166,10170,10350,10352,10354,10410,10415,10418,10421,10480,10486,10491,10495,10587,10591,10704,10706,10733,10737,10764],[12,9708,9709],{},"Installing Meta Pixel in Next.js takes about 2 minutes: install the package, add the component to your layout, done. PageView tracking on route changes is automatic.",[53,9711,9713],{"id":9712},"prerequisites","Prerequisites",[4313,9715,9716,9719],{},[1243,9717,9718],{},"Next.js 13+ with App Router",[1243,9720,9721,9722,8376],{},"A Meta Pixel ID (",[31,9723,9725],{"href":9724},"\u002Fresources\u002Fhow-to-install-meta-pixel#getting-your-pixel-id","how to get your Pixel ID",[53,9727,9729],{"id":9728},"installation","Installation",[5086,9731,9733],{"className":6137,"code":9732,"language":6139,"meta":1462,"style":1462},"npm install @adkit\u002Fmeta-pixel-next\n",[4815,9734,9735],{"__ignoreMap":1462},[1081,9736,9737,9739,9741],{"class":6144,"line":6145},[1081,9738,8712],{"class":6148},[1081,9740,6153],{"class":6152},[1081,9742,9743],{"class":6152}," @adkit\u002Fmeta-pixel-next\n",[53,9745,7302],{"id":9746},"setup",[12,9748,9749,9750,9753],{},"Add ",[4815,9751,9752],{},"MetaPixel"," to your root layout:",[5086,9755,9760],{"className":9756,"code":9757,"filename":9758,"language":9759,"meta":1462,"style":1462},"language-tsx shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { MetaPixel } from '@adkit\u002Fmeta-pixel-next';\n\nexport default function RootLayout({ children }: { children: React.ReactNode }) {\n    return (\n        \u003Chtml>\n            \u003Cbody>\n                \u003CMetaPixel pixelId=\"YOUR_PIXEL_ID\">{children}\u003C\u002FMetaPixel>\n            \u003C\u002Fbody>\n        \u003C\u002Fhtml>\n    );\n}\n","app\u002Flayout.tsx","tsx",[4815,9761,9762,9788,9792,9834,9842,9851,9861,9892,9901,9910,9917],{"__ignoreMap":1462},[1081,9763,9764,9767,9770,9773,9776,9779,9781,9784,9786],{"class":6144,"line":6145},[1081,9765,9766],{"class":9095},"import",[1081,9768,9769],{"class":6288}," {",[1081,9771,9772],{"class":6204}," MetaPixel",[1081,9774,9775],{"class":6288}," }",[1081,9777,9778],{"class":9095}," from",[1081,9780,9435],{"class":6288},[1081,9782,9783],{"class":6152},"@adkit\u002Fmeta-pixel-next",[1081,9785,9260],{"class":6288},[1081,9787,9268],{"class":6288},[1081,9789,9790],{"class":6144,"line":1463},[1081,9791,8738],{"emptyLinePlaceholder":1547},[1081,9793,9794,9797,9800,9803,9806,9809,9812,9815,9817,9819,9821,9824,9826,9829,9832],{"class":6144,"line":1468},[1081,9795,9796],{"class":9095},"export",[1081,9798,9799],{"class":9095}," default",[1081,9801,9802],{"class":6467}," function",[1081,9804,9805],{"class":9125}," RootLayout",[1081,9807,9808],{"class":6288},"({",[1081,9810,9811],{"class":9053}," children",[1081,9813,9814],{"class":6288}," }:",[1081,9816,9769],{"class":6288},[1081,9818,9811],{"class":6585},[1081,9820,5514],{"class":6288},[1081,9822,9823],{"class":6148}," React",[1081,9825,1446],{"class":6288},[1081,9827,9828],{"class":6148},"ReactNode",[1081,9830,9831],{"class":6288}," })",[1081,9833,6476],{"class":6288},[1081,9835,9836,9839],{"class":6144,"line":6397},[1081,9837,9838],{"class":9095},"    return",[1081,9840,9841],{"class":6585}," (\n",[1081,9843,9844,9847,9849],{"class":6144,"line":6407},[1081,9845,9846],{"class":6288},"        \u003C",[1081,9848,9020],{"class":6585},[1081,9850,9039],{"class":6288},[1081,9852,9853,9856,9859],{"class":6144,"line":6421},[1081,9854,9855],{"class":6288},"            \u003C",[1081,9857,9858],{"class":6585},"body",[1081,9860,9039],{"class":6288},[1081,9862,9863,9866,9868,9871,9873,9875,9877,9879,9882,9885,9888,9890],{"class":6144,"line":6579},[1081,9864,9865],{"class":6288},"                \u003C",[1081,9867,9752],{"class":6148},[1081,9869,9870],{"class":6467}," pixelId",[1081,9872,9118],{"class":6288},[1081,9874,6471],{"class":6288},[1081,9876,9438],{"class":6152},[1081,9878,6471],{"class":6288},[1081,9880,9881],{"class":6288},">{",[1081,9883,9884],{"class":6204},"children",[1081,9886,9887],{"class":6288},"}\u003C\u002F",[1081,9889,9752],{"class":6148},[1081,9891,9039],{"class":6288},[1081,9893,9894,9897,9899],{"class":6144,"line":6601},[1081,9895,9896],{"class":6288},"            \u003C\u002F",[1081,9898,9858],{"class":6585},[1081,9900,9039],{"class":6288},[1081,9902,9903,9906,9908],{"class":6144,"line":6621},[1081,9904,9905],{"class":6288},"        \u003C\u002F",[1081,9907,9020],{"class":6585},[1081,9909,9039],{"class":6288},[1081,9911,9912,9915],{"class":6144,"line":6641},[1081,9913,9914],{"class":6585},"    )",[1081,9916,9268],{"class":6288},[1081,9918,9919],{"class":6144,"line":6659},[1081,9920,6680],{"class":6288},[12,9922,9923],{},"That's it! PageView is now tracked automatically on every route change.",[58,9925,9927],{"id":9926},"using-environment-variables","Using Environment Variables",[12,9929,9930],{},"Instead of hardcoding your Pixel ID:",[5086,9932,9935],{"className":6137,"code":9933,"filename":9934,"language":6139,"meta":1462,"style":1462},"NEXT_PUBLIC_META_PIXEL_ID=123456789012345\n",".env.local",[4815,9936,9937],{"__ignoreMap":1462},[1081,9938,9939,9942,9944],{"class":6144,"line":6145},[1081,9940,9941],{"class":6204},"NEXT_PUBLIC_META_PIXEL_ID",[1081,9943,9118],{"class":6288},[1081,9945,9946],{"class":6152},"123456789012345\n",[5086,9948,9950],{"className":9756,"code":9949,"filename":9758,"language":9759,"meta":1462,"style":1462},"\u003CMetaPixel>{children}\u003C\u002FMetaPixel> \u002F\u002F Uses env var automatically\n",[4815,9951,9952],{"__ignoreMap":1462},[1081,9953,9954,9956,9958,9960,9962,9964,9966,9969],{"class":6144,"line":6145},[1081,9955,9033],{"class":6288},[1081,9957,9752],{"class":6148},[1081,9959,9881],{"class":6288},[1081,9961,9884],{"class":6204},[1081,9963,9887],{"class":6288},[1081,9965,9752],{"class":6148},[1081,9967,9968],{"class":6288},">",[1081,9970,9971],{"class":9027}," \u002F\u002F Uses env var automatically\n",[53,9973,8767],{"id":8766},[12,9975,2311,9976,9979],{},[4815,9977,9978],{},"useMetaPixel"," hook in any client component:",[5086,9981,9984],{"className":9756,"code":9982,"filename":9983,"language":9759,"meta":1462,"style":1462},"'use client';\n\nimport { useMetaPixel } from '@adkit\u002Fmeta-pixel-next';\n\nexport function CheckoutButton() {\n    const meta = useMetaPixel();\n\n    function handleClick() {\n        meta.track('InitiateCheckout', { value: 99, currency: 'USD' });\n    }\n\n    return \u003Cbutton onClick={handleClick}>Checkout\u003C\u002Fbutton>;\n}\n","components\u002Fcheckout-button.tsx",[4815,9985,9986,9997,10001,10022,10026,10040,10057,10061,10073,10122,10126,10130,10162],{"__ignoreMap":1462},[1081,9987,9988,9990,9993,9995],{"class":6144,"line":6145},[1081,9989,9260],{"class":6288},[1081,9991,9992],{"class":6152},"use client",[1081,9994,9260],{"class":6288},[1081,9996,9268],{"class":6288},[1081,9998,9999],{"class":6144,"line":1463},[1081,10000,8738],{"emptyLinePlaceholder":1547},[1081,10002,10003,10005,10007,10010,10012,10014,10016,10018,10020],{"class":6144,"line":1468},[1081,10004,9766],{"class":9095},[1081,10006,9769],{"class":6288},[1081,10008,10009],{"class":6204}," useMetaPixel",[1081,10011,9775],{"class":6288},[1081,10013,9778],{"class":9095},[1081,10015,9435],{"class":6288},[1081,10017,9783],{"class":6152},[1081,10019,9260],{"class":6288},[1081,10021,9268],{"class":6288},[1081,10023,10024],{"class":6144,"line":6397},[1081,10025,8738],{"emptyLinePlaceholder":1547},[1081,10027,10028,10030,10032,10035,10038],{"class":6144,"line":6407},[1081,10029,9796],{"class":9095},[1081,10031,9802],{"class":6467},[1081,10033,10034],{"class":9125}," CheckoutButton",[1081,10036,10037],{"class":6288},"()",[1081,10039,6476],{"class":6288},[1081,10041,10042,10045,10048,10051,10053,10055],{"class":6144,"line":6421},[1081,10043,10044],{"class":6467},"    const",[1081,10046,10047],{"class":6204}," meta",[1081,10049,10050],{"class":6288}," =",[1081,10052,10009],{"class":9125},[1081,10054,10037],{"class":6585},[1081,10056,9268],{"class":6288},[1081,10058,10059],{"class":6144,"line":6579},[1081,10060,8738],{"emptyLinePlaceholder":1547},[1081,10062,10063,10066,10069,10071],{"class":6144,"line":6601},[1081,10064,10065],{"class":6467},"    function",[1081,10067,10068],{"class":9125}," handleClick",[1081,10070,10037],{"class":6288},[1081,10072,6476],{"class":6288},[1081,10074,10075,10078,10080,10082,10084,10086,10088,10090,10092,10094,10097,10099,10102,10104,10107,10109,10111,10114,10116,10118,10120],{"class":6144,"line":6621},[1081,10076,10077],{"class":6204},"        meta",[1081,10079,1446],{"class":6288},[1081,10081,9455],{"class":9125},[1081,10083,9050],{"class":6585},[1081,10085,9260],{"class":6288},[1081,10087,8861],{"class":6152},[1081,10089,9260],{"class":6288},[1081,10091,6535],{"class":6288},[1081,10093,9769],{"class":6288},[1081,10095,10096],{"class":6585}," value",[1081,10098,5514],{"class":6288},[1081,10100,10101],{"class":6415}," 99",[1081,10103,6535],{"class":6288},[1081,10105,10106],{"class":6585}," currency",[1081,10108,5514],{"class":6288},[1081,10110,9435],{"class":6288},[1081,10112,10113],{"class":6152},"USD",[1081,10115,9260],{"class":6288},[1081,10117,9775],{"class":6288},[1081,10119,8376],{"class":6585},[1081,10121,9268],{"class":6288},[1081,10123,10124],{"class":6144,"line":6641},[1081,10125,6674],{"class":6288},[1081,10127,10128],{"class":6144,"line":6659},[1081,10129,8738],{"emptyLinePlaceholder":1547},[1081,10131,10132,10134,10137,10140,10143,10146,10149,10152,10155,10157,10159],{"class":6144,"line":6665},[1081,10133,9838],{"class":9095},[1081,10135,10136],{"class":6288}," \u003C",[1081,10138,10139],{"class":6585},"button",[1081,10141,10142],{"class":6467}," onClick",[1081,10144,10145],{"class":6288},"={",[1081,10147,10148],{"class":6204},"handleClick",[1081,10150,10151],{"class":6288},"}>",[1081,10153,10154],{"class":6204},"Checkout",[1081,10156,9474],{"class":6288},[1081,10158,10139],{"class":6585},[1081,10160,10161],{"class":6288},">;\n",[1081,10163,10164],{"class":6144,"line":6671},[1081,10165,6680],{"class":6288},[58,10167,10169],{"id":10168},"common-events","Common Events",[5086,10171,10173],{"className":9756,"code":10172,"language":9759,"meta":1462,"style":1462},"\u002F\u002F Purchase completed\nmeta.track('Purchase', { value: 99.99, currency: 'USD' });\n\n\u002F\u002F Lead captured\nmeta.track('Lead');\n\n\u002F\u002F Content viewed\nmeta.track('ViewContent', { content_id: 'pricing-page' });\n\n\u002F\u002F Custom events\nmeta.trackCustom('VideoWatched', { video_id: 'intro' });\n",[4815,10174,10175,10180,10226,10230,10235,10255,10259,10264,10302,10306,10310],{"__ignoreMap":1462},[1081,10176,10177],{"class":6144,"line":6145},[1081,10178,10179],{"class":9027},"\u002F\u002F Purchase completed\n",[1081,10181,10182,10185,10187,10189,10191,10193,10195,10197,10199,10201,10203,10205,10208,10210,10212,10214,10216,10218,10220,10222,10224],{"class":6144,"line":1463},[1081,10183,10184],{"class":6204},"meta",[1081,10186,1446],{"class":6288},[1081,10188,9455],{"class":9125},[1081,10190,9050],{"class":6204},[1081,10192,9260],{"class":6288},[1081,10194,8866],{"class":6152},[1081,10196,9260],{"class":6288},[1081,10198,6535],{"class":6288},[1081,10200,9769],{"class":6288},[1081,10202,10096],{"class":6585},[1081,10204,5514],{"class":6288},[1081,10206,10207],{"class":6415}," 99.99",[1081,10209,6535],{"class":6288},[1081,10211,10106],{"class":6585},[1081,10213,5514],{"class":6288},[1081,10215,9435],{"class":6288},[1081,10217,10113],{"class":6152},[1081,10219,9260],{"class":6288},[1081,10221,9775],{"class":6288},[1081,10223,8376],{"class":6204},[1081,10225,9268],{"class":6288},[1081,10227,10228],{"class":6144,"line":1468},[1081,10229,8738],{"emptyLinePlaceholder":1547},[1081,10231,10232],{"class":6144,"line":6397},[1081,10233,10234],{"class":9027},"\u002F\u002F Lead captured\n",[1081,10236,10237,10239,10241,10243,10245,10247,10249,10251,10253],{"class":6144,"line":6407},[1081,10238,10184],{"class":6204},[1081,10240,1446],{"class":6288},[1081,10242,9455],{"class":9125},[1081,10244,9050],{"class":6204},[1081,10246,9260],{"class":6288},[1081,10248,8871],{"class":6152},[1081,10250,9260],{"class":6288},[1081,10252,8376],{"class":6204},[1081,10254,9268],{"class":6288},[1081,10256,10257],{"class":6144,"line":6421},[1081,10258,8738],{"emptyLinePlaceholder":1547},[1081,10260,10261],{"class":6144,"line":6579},[1081,10262,10263],{"class":9027},"\u002F\u002F Content viewed\n",[1081,10265,10266,10268,10270,10272,10274,10276,10278,10280,10282,10284,10287,10289,10291,10294,10296,10298,10300],{"class":6144,"line":6601},[1081,10267,10184],{"class":6204},[1081,10269,1446],{"class":6288},[1081,10271,9455],{"class":9125},[1081,10273,9050],{"class":6204},[1081,10275,9260],{"class":6288},[1081,10277,8846],{"class":6152},[1081,10279,9260],{"class":6288},[1081,10281,6535],{"class":6288},[1081,10283,9769],{"class":6288},[1081,10285,10286],{"class":6585}," content_id",[1081,10288,5514],{"class":6288},[1081,10290,9435],{"class":6288},[1081,10292,10293],{"class":6152},"pricing-page",[1081,10295,9260],{"class":6288},[1081,10297,9775],{"class":6288},[1081,10299,8376],{"class":6204},[1081,10301,9268],{"class":6288},[1081,10303,10304],{"class":6144,"line":6621},[1081,10305,8738],{"emptyLinePlaceholder":1547},[1081,10307,10308],{"class":6144,"line":6641},[1081,10309,8809],{"class":9027},[1081,10311,10312,10314,10316,10319,10321,10323,10326,10328,10330,10332,10335,10337,10339,10342,10344,10346,10348],{"class":6144,"line":6659},[1081,10313,10184],{"class":6204},[1081,10315,1446],{"class":6288},[1081,10317,10318],{"class":9125},"trackCustom",[1081,10320,9050],{"class":6204},[1081,10322,9260],{"class":6288},[1081,10324,10325],{"class":6152},"VideoWatched",[1081,10327,9260],{"class":6288},[1081,10329,6535],{"class":6288},[1081,10331,9769],{"class":6288},[1081,10333,10334],{"class":6585}," video_id",[1081,10336,5514],{"class":6288},[1081,10338,9435],{"class":6288},[1081,10340,10341],{"class":6152},"intro",[1081,10343,9260],{"class":6288},[1081,10345,9775],{"class":6288},[1081,10347,8376],{"class":6204},[1081,10349,9268],{"class":6288},[53,10351,8919],{"id":8918},[12,10353,8922],{},[4585,10355,10356,10364],{},[4588,10357,10358],{},[4591,10359,10360,10362],{},[4594,10361,8931],{},[4594,10363,8934],{},[4602,10365,10366,10374,10382,10390,10398],{},[4591,10367,10368,10372],{},[4607,10369,10370],{},[4815,10371,8846],{},[4607,10373,8945],{},[4591,10375,10376,10380],{},[4607,10377,10378],{},[4815,10379,8871],{},[4607,10381,8954],{},[4591,10383,10384,10388],{},[4607,10385,10386],{},[4815,10387,8876],{},[4607,10389,8963],{},[4591,10391,10392,10396],{},[4607,10393,10394],{},[4815,10395,8886],{},[4607,10397,8972],{},[4591,10399,10400,10406],{},[4607,10401,10402,8979,10404],{},[4815,10403,8881],{},[4815,10405,8866],{},[4607,10407,8984,10408,8988],{},[4815,10409,8987],{},[12,10411,8991,10412,10414],{},[19,10413,8994],{}," (Lead, StartTrial, Subscribe). These are what you'll optimize your ads for.",[53,10416,6053],{"id":10417},"testing",[12,10419,10420],{},"Enable localhost tracking and debug mode:",[5086,10422,10424],{"className":9756,"code":10423,"filename":9758,"language":9759,"meta":1462,"style":1462},"\u003CMetaPixel pixelId=\"YOUR_PIXEL_ID\" enableLocalhost={true} debug={true}>\n    {children}\n\u003C\u002FMetaPixel>\n",[4815,10425,10426,10464,10472],{"__ignoreMap":1462},[1081,10427,10428,10430,10432,10434,10436,10438,10440,10442,10445,10447,10451,10454,10457,10459,10461],{"class":6144,"line":6145},[1081,10429,9033],{"class":6288},[1081,10431,9752],{"class":6148},[1081,10433,9870],{"class":6467},[1081,10435,9118],{"class":6288},[1081,10437,6471],{"class":6288},[1081,10439,9438],{"class":6152},[1081,10441,6471],{"class":6288},[1081,10443,10444],{"class":6467}," enableLocalhost",[1081,10446,10145],{"class":6288},[1081,10448,10450],{"class":10449},"sfNiH","true",[1081,10452,10453],{"class":6288},"} ",[1081,10455,10456],{"class":6467},"debug",[1081,10458,10145],{"class":6288},[1081,10460,10450],{"class":10449},[1081,10462,10463],{"class":6288},"}>\n",[1081,10465,10466,10468,10470],{"class":6144,"line":1463},[1081,10467,9092],{"class":6288},[1081,10469,9884],{"class":6204},[1081,10471,6680],{"class":6288},[1081,10473,10474,10476,10478],{"class":6144,"line":1468},[1081,10475,9474],{"class":6288},[1081,10477,9752],{"class":6148},[1081,10479,9039],{"class":6288},[12,10481,10482,10483,8823],{},"Verify with the ",[31,10484,8822],{"href":8820,"rel":10485,"target":8663},[46],[12,10487,10488],{},[5038,10489],{"alt":10490,"src":9587,"width":8830},"Meta Pixel Helper extension confirmation",[53,10492,10494],{"id":10493},"configuration-options","Configuration Options",[4585,10496,10497,10513],{},[4588,10498,10499],{},[4591,10500,10501,10504,10507,10510],{},[4594,10502,10503],{},"Prop",[4594,10505,10506],{},"Type",[4594,10508,10509],{},"Default",[4594,10511,10512],{},"Description",[4602,10514,10515,10532,10551,10569],{},[4591,10516,10517,10522,10527,10529],{},[4607,10518,10519],{},[4815,10520,10521],{},"pixelId",[4607,10523,10524],{},[4815,10525,10526],{},"string | string[]",[4607,10528,5261],{},[4607,10530,10531],{},"Your Pixel ID(s) or use env var",[4591,10533,10534,10538,10543,10548],{},[4607,10535,10536],{},[4815,10537,10456],{},[4607,10539,10540],{},[4815,10541,10542],{},"boolean",[4607,10544,10545],{},[4815,10546,10547],{},"false",[4607,10549,10550],{},"Enable console logging",[4591,10552,10553,10558,10562,10566],{},[4607,10554,10555],{},[4815,10556,10557],{},"enableLocalhost",[4607,10559,10560],{},[4815,10561,10542],{},[4607,10563,10564],{},[4815,10565,10547],{},[4607,10567,10568],{},"Enable tracking on localhost",[4591,10570,10571,10576,10580,10584],{},[4607,10572,10573],{},[4815,10574,10575],{},"trackPageViews",[4607,10577,10578],{},[4815,10579,10542],{},[4607,10581,10582],{},[4815,10583,10450],{},[4607,10585,10586],{},"Auto track PageView on route changes",[53,10588,10590],{"id":10589},"common-issues","Common Issues",[8421,10592,10593,10629,10651],{},[8426,10594,10597,10600],{"icon":10595,"label":10596},"fa6-solid:bug","Pixel not firing on localhost",[12,10598,10599],{},"Enable localhost in your component:",[5086,10601,10603],{"className":9756,"code":10602,"language":9759,"meta":1462,"style":1462},"\u003CMetaPixel pixelId=\"YOUR_PIXEL_ID\" enableLocalhost={true}>\n",[4815,10604,10605],{"__ignoreMap":1462},[1081,10606,10607,10609,10611,10613,10615,10617,10619,10621,10623,10625,10627],{"class":6144,"line":6145},[1081,10608,9033],{"class":6288},[1081,10610,9752],{"class":6148},[1081,10612,9870],{"class":6467},[1081,10614,9118],{"class":6288},[1081,10616,6471],{"class":6288},[1081,10618,9438],{"class":6152},[1081,10620,6471],{"class":6288},[1081,10622,10444],{"class":6467},[1081,10624,10145],{"class":6288},[1081,10626,10450],{"class":10449},[1081,10628,10463],{"class":6288},[8426,10630,10633],{"icon":10631,"label":10632},"fa6-solid:circle-exclamation","Events not showing in Facebook",[1240,10634,10635,10641,10648],{},[1243,10636,8909,10637,10640],{},[31,10638,8822],{"href":8820,"rel":10639,"target":8663},[46]," to verify events are firing",[1243,10642,10643,10644,10647],{},"Enable ",[4815,10645,10646],{},"debug={true}"," and check console",[1243,10649,10650],{},"Events can take up to 20 minutes to appear in Events Manager",[8426,10652,10655,10665],{"icon":10653,"label":10654},"fa6-solid:code","'use client' errors",[12,10656,10657,10658,10660,10661,10664],{},"The ",[4815,10659,9978],{}," hook only works in client components. Add ",[4815,10662,10663],{},"'use client'"," at the top of your file:",[5086,10666,10668],{"className":9756,"code":10667,"language":9759,"meta":1462,"style":1462},"'use client';\n\nimport { useMetaPixel } from '@adkit\u002Fmeta-pixel-next';\n",[4815,10669,10670,10680,10684],{"__ignoreMap":1462},[1081,10671,10672,10674,10676,10678],{"class":6144,"line":6145},[1081,10673,9260],{"class":6288},[1081,10675,9992],{"class":6152},[1081,10677,9260],{"class":6288},[1081,10679,9268],{"class":6288},[1081,10681,10682],{"class":6144,"line":1463},[1081,10683,8738],{"emptyLinePlaceholder":1547},[1081,10685,10686,10688,10690,10692,10694,10696,10698,10700,10702],{"class":6144,"line":1468},[1081,10687,9766],{"class":9095},[1081,10689,9769],{"class":6288},[1081,10691,10009],{"class":6204},[1081,10693,9775],{"class":6288},[1081,10695,9778],{"class":9095},[1081,10697,9435],{"class":6288},[1081,10699,9783],{"class":6152},[1081,10701,9260],{"class":6288},[1081,10703,9268],{"class":6288},[53,10705,9591],{"id":9590},[1240,10707,10708,10716,10725],{},[1243,10709,10710,10711,10715],{},"Set up ",[31,10712,8994],{"href":10713,"rel":10714,"target":8663},"https:\u002F\u002Fwww.facebook.com\u002Fbusiness\u002Fhelp\u002F2285373681655502",[46]," in Events Manager",[1243,10717,10718,10719,10724],{},"Create ",[31,10720,10723],{"href":10721,"rel":10722,"target":8663},"https:\u002F\u002Fwww.facebook.com\u002Fbusiness\u002Fhelp\u002F341425252616329",[46],"custom audiences"," based on pixel data",[1243,10726,10727,10728],{},"Use pixel events to ",[31,10729,10732],{"href":10730,"rel":10731,"target":8663},"https:\u002F\u002Fwww.facebook.com\u002Fbusiness\u002Fhelp\u002F430291176997542",[46],"optimize your ads",[53,10734,10736],{"id":10735},"resources","Resources",[4313,10738,10739,10746,10753,10759],{},[1243,10740,10741],{},[31,10742,10745],{"href":10743,"rel":10744,"target":8663},"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@adkit\u002Fmeta-pixel-next",[46],"@adkit\u002Fmeta-pixel-next on NPM",[1243,10747,10748],{},[31,10749,10752],{"href":10750,"rel":10751,"target":8663},"https:\u002F\u002Fdevelopers.facebook.com\u002Fdocs\u002Fmeta-pixel",[46],"Meta Pixel Documentation",[1243,10754,10755],{},[31,10756,10758],{"href":8912,"rel":10757,"target":8663},[46],"Standard Events Reference",[1243,10760,10761],{},[31,10762,10763],{"href":9692},"Back to all installation guides",[7509,10765,10766],{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":1462,"searchDepth":1463,"depth":1463,"links":10768},[10769,10770,10771,10774,10777,10778,10779,10780,10781,10782],{"id":9712,"depth":1463,"text":9713},{"id":9728,"depth":1463,"text":9729},{"id":9746,"depth":1463,"text":7302,"children":10772},[10773],{"id":9926,"depth":1468,"text":9927},{"id":8766,"depth":1463,"text":8767,"children":10775},[10776],{"id":10168,"depth":1468,"text":10169},{"id":8918,"depth":1463,"text":8919},{"id":10417,"depth":1463,"text":6053},{"id":10493,"depth":1463,"text":10494},{"id":10589,"depth":1463,"text":10590},{"id":9590,"depth":1463,"text":9591},{"id":10735,"depth":1463,"text":10736},"2025-12-04","Step-by-step guide to install Meta Pixel in Next.js with automatic PageView tracking on route changes. Works with App Router.",[10786,10789,10792,10795],{"question":10787,"answer":10788},"Does Meta Pixel work with Next.js App Router?","Yes, the @adkit\u002Fmeta-pixel-next package is built specifically for Next.js App Router and automatically tracks PageView on route changes.",{"question":10790,"answer":10791},"Why is Meta Pixel not firing on localhost?","By default, the pixel won't fire on localhost to avoid polluting your data. Add enableLocalhost={true} to your MetaPixel component to enable it during development.",{"question":10793,"answer":10794},"Do I need to manually track PageView on route changes?","No, the MetaPixel component automatically tracks PageView on every route change. Just wrap your app once and you're done.",{"question":10796,"answer":10797},"Can I use environment variables for my Pixel ID?","Yes, set NEXT_PUBLIC_META_PIXEL_ID in your .env.local file. The component will use it automatically if no pixelId prop is provided.",{},"\u002Fresources\u002Fhow-to-install-meta-pixel\u002Fnextjs",{"title":9704,"description":10784},"how-to-install-meta-pixel\u002Fnextjs","resources\u002Fhow-to-install-meta-pixel\u002Fnextjs",[10804,9697,9698,4270,2453],"nextjs","fcooQjRmA4mviayp0ogGUwhGrkc0cpcCDsCLuJWXOQQ",{"id":10807,"title":10808,"author":7,"body":10809,"breadcrumbLabel":7,"category":9672,"cover":1547,"createdAt":12917,"description":12918,"extension":1527,"faqs":12919,"meta":12931,"navigation":1547,"noAiBadge":1524,"og":1547,"ogDescription":7,"ogIcon":7,"path":12932,"seo":12933,"slug":12934,"stem":12935,"tags":12936,"updatedAt":9700,"wip":1524,"__hash__":12938},"resources\u002Fresources\u002Fhow-to-install-meta-pixel\u002Fnuxt.md","How to Install Meta Pixel in Nuxt",{"type":9,"value":10810,"toc":12892},[10811,10822,10826,10839,10846,10848,10851,10861,10865,10873,10939,10943,10947,10953,11000,11011,11015,11018,11095,11189,11192,11196,11200,11203,11266,11270,11273,11306,11310,11317,11321,11405,11409,11416,11580,11586,11591,11595,11601,11695,11705,11707,11709,11765,11769,11773,11776,11839,11842,11846,11849,12561,12565,12804,12808,12843,12845,12848,12865,12867,12889],[12,10812,10813,10814,10817,10818,10821],{},"Installing the Meta Pixel in Nuxt takes about 5 minutes: install the ",[4815,10815,10816],{},"@adkit\u002Fmeta-pixel-nuxt"," package, add your Pixel ID to ",[4815,10819,10820],{},"nuxt.config.ts",", and you're tracking.",[53,10823,10825],{"id":10824},"video-tutorial","Video Tutorial",[10827,10828,10830,10831],"div",{"style":10829},"position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; max-width: 100%; margin: 2rem 0;","\n  ",[10832,10833,10830],"iframe",{"style":10834,"src":10835,"title":10808,"frameBorder":9246,"allow":10836,"allowFullScreen":1547,"className":10837},"position: absolute; top: 0; left: 0; width: 100%; height: 100%;","https:\u002F\u002Fwww.youtube.com\u002Fembed\u002FCJf7f7-1vLs","accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",[10838],"rounded-lg",[12,10840,10841],{},[31,10842,10845],{"href":10843,"rel":10844,"target":8663},"https:\u002F\u002Fyoutu.be\u002FCJf7f7-1vLs",[46],"Watch on YouTube →",[53,10847,9713],{"id":9712},[12,10849,10850],{},"Before you start, make sure you have:",[4313,10852,10853,10856],{},[1243,10854,10855],{},"A Nuxt 3 or 4 application",[1243,10857,10858,10859,8376],{},"A Facebook\u002FMeta Pixel ID (",[31,10860,9725],{"href":9724},[53,10862,10864],{"id":10863},"how-to-install-the-package","How to Install the Package",[12,10866,10867,10868,5514],{},"The fastest way is using the ",[31,10869,10872],{"href":10870,"rel":10871,"target":8663},"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@adkit\u002Fmeta-pixel-nuxt",[46],"Meta Pixel Nuxt NPM package",[10874,10875,10876,10898,10911,10925],"code-group",{},[5086,10877,10880],{"className":6137,"code":10878,"filename":10879,"language":6139,"meta":1462,"style":1462},"npx nuxi module add @adkit\u002Fmeta-pixel-nuxt\n","npx (recommended)",[4815,10881,10882],{"__ignoreMap":1462},[1081,10883,10884,10887,10890,10893,10895],{"class":6144,"line":6145},[1081,10885,10886],{"class":6148},"npx",[1081,10888,10889],{"class":6152}," nuxi",[1081,10891,10892],{"class":6152}," module",[1081,10894,6370],{"class":6152},[1081,10896,10897],{"class":6152}," @adkit\u002Fmeta-pixel-nuxt\n",[5086,10899,10901],{"className":6137,"code":10900,"filename":8712,"language":6139,"meta":1462,"style":1462},"npm install @adkit\u002Fmeta-pixel-nuxt\n",[4815,10902,10903],{"__ignoreMap":1462},[1081,10904,10905,10907,10909],{"class":6144,"line":6145},[1081,10906,8712],{"class":6148},[1081,10908,6153],{"class":6152},[1081,10910,10897],{"class":6152},[5086,10912,10915],{"className":6137,"code":10913,"filename":10914,"language":6139,"meta":1462,"style":1462},"pnpm add @adkit\u002Fmeta-pixel-nuxt\n","pnpm",[4815,10916,10917],{"__ignoreMap":1462},[1081,10918,10919,10921,10923],{"class":6144,"line":6145},[1081,10920,10914],{"class":6148},[1081,10922,6370],{"class":6152},[1081,10924,10897],{"class":6152},[5086,10926,10929],{"className":6137,"code":10927,"filename":10928,"language":6139,"meta":1462,"style":1462},"yarn add @adkit\u002Fmeta-pixel-nuxt\n","yarn",[4815,10930,10931],{"__ignoreMap":1462},[1081,10932,10933,10935,10937],{"class":6144,"line":6145},[1081,10934,10928],{"class":6148},[1081,10936,6370],{"class":6152},[1081,10938,10897],{"class":6152},[53,10940,10942],{"id":10941},"how-to-configure-your-pixel-id","How to Configure Your Pixel ID",[58,10944,10946],{"id":10945},"step-1-add-the-module-to-your-nuxt-config","Step 1: Add the Module to Your Nuxt Config",[12,10948,10949,10950,10952],{},"If you installed manually with npm\u002Fpnpm\u002Fyarn, open your ",[4815,10951,10820],{}," and add the module:",[5086,10954,10958],{"className":10955,"code":10956,"language":10957,"meta":1462,"style":1462},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n    modules: ['@adkit\u002Fmeta-pixel-nuxt'],\n});\n","typescript",[4815,10959,10960,10973,10992],{"__ignoreMap":1462},[1081,10961,10962,10964,10966,10969,10971],{"class":6144,"line":6145},[1081,10963,9796],{"class":9095},[1081,10965,9799],{"class":9095},[1081,10967,10968],{"class":9125}," defineNuxtConfig",[1081,10970,9050],{"class":6204},[1081,10972,6459],{"class":6288},[1081,10974,10975,10978,10980,10982,10984,10986,10988,10990],{"class":6144,"line":1463},[1081,10976,10977],{"class":6585},"    modules",[1081,10979,5514],{"class":6288},[1081,10981,6525],{"class":6204},[1081,10983,9260],{"class":6288},[1081,10985,10816],{"class":6152},[1081,10987,9260],{"class":6288},[1081,10989,9354],{"class":6204},[1081,10991,6511],{"class":6288},[1081,10993,10994,10996,10998],{"class":6144,"line":1468},[1081,10995,9384],{"class":6288},[1081,10997,8376],{"class":6204},[1081,10999,9268],{"class":6288},[8262,11001,11002],{},[12,11003,11004,11005,11008,11009,1446],{},"If you used ",[4815,11006,11007],{},"npx nuxi module add",", the module is automatically added to your ",[4815,11010,10820],{},[58,11012,11014],{"id":11013},"step-2-add-your-pixel-id","Step 2: Add Your Pixel ID",[12,11016,11017],{},"Add your Pixel ID to the module configuration:",[5086,11019,11021],{"className":10955,"code":11020,"filename":10820,"language":10957,"meta":1462,"style":1462},"export default defineNuxtConfig({\n    modules: ['@adkit\u002Fmeta-pixel-nuxt'],\n    metaPixel: {\n        pixelIds: ['YOUR_PIXEL_ID_HERE'],\n    },\n});\n",[4815,11022,11023,11035,11053,11062,11082,11087],{"__ignoreMap":1462},[1081,11024,11025,11027,11029,11031,11033],{"class":6144,"line":6145},[1081,11026,9796],{"class":9095},[1081,11028,9799],{"class":9095},[1081,11030,10968],{"class":9125},[1081,11032,9050],{"class":6204},[1081,11034,6459],{"class":6288},[1081,11036,11037,11039,11041,11043,11045,11047,11049,11051],{"class":6144,"line":1463},[1081,11038,10977],{"class":6585},[1081,11040,5514],{"class":6288},[1081,11042,6525],{"class":6204},[1081,11044,9260],{"class":6288},[1081,11046,10816],{"class":6152},[1081,11048,9260],{"class":6288},[1081,11050,9354],{"class":6204},[1081,11052,6511],{"class":6288},[1081,11054,11055,11058,11060],{"class":6144,"line":1468},[1081,11056,11057],{"class":6585},"    metaPixel",[1081,11059,5514],{"class":6288},[1081,11061,6476],{"class":6288},[1081,11063,11064,11067,11069,11071,11073,11076,11078,11080],{"class":6144,"line":6397},[1081,11065,11066],{"class":6585},"        pixelIds",[1081,11068,5514],{"class":6288},[1081,11070,6525],{"class":6204},[1081,11072,9260],{"class":6288},[1081,11074,11075],{"class":6152},"YOUR_PIXEL_ID_HERE",[1081,11077,9260],{"class":6288},[1081,11079,9354],{"class":6204},[1081,11081,6511],{"class":6288},[1081,11083,11084],{"class":6144,"line":6407},[1081,11085,11086],{"class":6288},"    },\n",[1081,11088,11089,11091,11093],{"class":6144,"line":6421},[1081,11090,9384],{"class":6288},[1081,11092,8376],{"class":6204},[1081,11094,9268],{"class":6288},[11096,11097,11098,11139],"tabs",{},[11099,11100,11102,11105],"tabs-item",{"label":11101},"Single Pixel",[12,11103,11104],{},"For most cases, you'll have one pixel:",[5086,11106,11108],{"className":10955,"code":11107,"filename":10820,"language":10957,"meta":1462,"style":1462},"metaPixel: {\n    pixelIds: '123456789012345';\n}\n",[4815,11109,11110,11119,11135],{"__ignoreMap":1462},[1081,11111,11112,11115,11117],{"class":6144,"line":6145},[1081,11113,11114],{"class":6148},"metaPixel",[1081,11116,5514],{"class":6288},[1081,11118,6476],{"class":6288},[1081,11120,11121,11124,11126,11128,11131,11133],{"class":6144,"line":1463},[1081,11122,11123],{"class":6148},"    pixelIds",[1081,11125,5514],{"class":6288},[1081,11127,9435],{"class":6288},[1081,11129,11130],{"class":6152},"123456789012345",[1081,11132,9260],{"class":6288},[1081,11134,9268],{"class":6288},[1081,11136,11137],{"class":6144,"line":1468},[1081,11138,6680],{"class":6288},[11099,11140,11142,11145],{"label":11141},"Multiple Pixels",[12,11143,11144],{},"If you need to track multiple pixels, pass an array:",[5086,11146,11148],{"className":10955,"code":11147,"filename":10820,"language":10957,"meta":1462,"style":1462},"metaPixel: {\n    pixelIds: ['123456789012345', '987654321098765'];\n}\n",[4815,11149,11150,11158,11185],{"__ignoreMap":1462},[1081,11151,11152,11154,11156],{"class":6144,"line":6145},[1081,11153,11114],{"class":6148},[1081,11155,5514],{"class":6288},[1081,11157,6476],{"class":6288},[1081,11159,11160,11162,11164,11166,11168,11170,11172,11174,11176,11179,11181,11183],{"class":6144,"line":1463},[1081,11161,11123],{"class":6148},[1081,11163,5514],{"class":6288},[1081,11165,6525],{"class":6585},[1081,11167,9260],{"class":6288},[1081,11169,11130],{"class":6152},[1081,11171,9260],{"class":6288},[1081,11173,6535],{"class":6288},[1081,11175,9435],{"class":6288},[1081,11177,11178],{"class":6152},"987654321098765",[1081,11180,9260],{"class":6288},[1081,11182,9354],{"class":6585},[1081,11184,9268],{"class":6288},[1081,11186,11187],{"class":6144,"line":1468},[1081,11188,6680],{"class":6288},[12,11190,11191],{},"That's it! Your Meta Pixel is now installed and will automatically track page views.",[53,11193,11195],{"id":11194},"how-to-test-if-the-pixel-is-working","How to Test if the Pixel is Working",[58,11197,11199],{"id":11198},"enable-localhost-tracking","Enable Localhost Tracking",[12,11201,11202],{},"By default, the pixel won't fire on localhost to avoid polluting your data. To test during development:",[5086,11204,11206],{"className":10955,"code":11205,"filename":10820,"language":10957,"meta":1462,"style":1462},"metaPixel: {\n  pixelIds: ['YOUR_PIXEL_ID_HERE'],\n  enableLocalhost: true,  \u002F\u002F Enable for testing\n  debug: true             \u002F\u002F Show console logs\n}\n",[4815,11207,11208,11216,11235,11250,11262],{"__ignoreMap":1462},[1081,11209,11210,11212,11214],{"class":6144,"line":6145},[1081,11211,11114],{"class":6148},[1081,11213,5514],{"class":6288},[1081,11215,6476],{"class":6288},[1081,11217,11218,11221,11223,11225,11227,11229,11231,11233],{"class":6144,"line":1463},[1081,11219,11220],{"class":6148},"  pixelIds",[1081,11222,5514],{"class":6288},[1081,11224,6525],{"class":6585},[1081,11226,9260],{"class":6288},[1081,11228,11075],{"class":6152},[1081,11230,9260],{"class":6288},[1081,11232,9354],{"class":6585},[1081,11234,6511],{"class":6288},[1081,11236,11237,11240,11242,11245,11247],{"class":6144,"line":1468},[1081,11238,11239],{"class":6148},"  enableLocalhost",[1081,11241,5514],{"class":6288},[1081,11243,11244],{"class":10449}," true",[1081,11246,6535],{"class":6288},[1081,11248,11249],{"class":9027},"  \u002F\u002F Enable for testing\n",[1081,11251,11252,11255,11257,11259],{"class":6144,"line":6397},[1081,11253,11254],{"class":6148},"  debug",[1081,11256,5514],{"class":6288},[1081,11258,11244],{"class":10449},[1081,11260,11261],{"class":9027},"             \u002F\u002F Show console logs\n",[1081,11263,11264],{"class":6144,"line":6407},[1081,11265,6680],{"class":6288},[58,11267,11269],{"id":11268},"verify-installation","Verify Installation",[12,11271,11272],{},"There are two ways to verify your pixel is working:",[11096,11274,11275,11292],{},[11099,11276,11279,11286],{"label":11277,"icon":11278},"Browser Console","fa6-solid:terminal",[12,11280,11281,11282,11285],{},"If you enabled ",[4815,11283,11284],{},"debug: true",", check your browser console for Meta Pixel logs:",[12,11287,11288],{},[5038,11289],{"alt":11290,"src":11291,"width":8830},"Meta Pixel debug logs in console","\u002Fimages\u002Fblog\u002Fhow-to-install-meta-pixel\u002Fmeta-pixel-logs.png",[11099,11293,11295,11302],{"label":8822,"icon":11294},"fa6-brands:meta",[12,11296,11297,11298,11301],{},"Install the ",[31,11299,8822],{"href":8820,"rel":11300,"target":8663},[46]," Chrome extension. It will show a badge when pixels are detected:",[12,11303,11304],{},[5038,11305],{"alt":10490,"src":9587,"width":8830},[53,11307,11309],{"id":11308},"how-to-track-custom-events","How to Track Custom Events",[12,11311,11312,11313,11316],{},"The module provides a ",[4815,11314,11315],{},"useMetaPixel()"," composable for event tracking.",[58,11318,11320],{"id":11319},"basic-event-tracking","Basic Event Tracking",[5086,11322,11327],{"className":11323,"code":11324,"filename":11325,"language":11326,"meta":1462,"style":1462},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cscript setup lang=\"ts\">\nonMounted(() => {\n    useMetaPixel().track('ViewContent');\n});\n\u003C\u002Fscript>\n","pages\u002Findex.vue","vue",[4815,11328,11329,11352,11366,11389,11397],{"__ignoreMap":1462},[1081,11330,11331,11333,11335,11338,11341,11343,11345,11348,11350],{"class":6144,"line":6145},[1081,11332,9033],{"class":6288},[1081,11334,9036],{"class":6585},[1081,11336,11337],{"class":6467}," setup",[1081,11339,11340],{"class":6467}," lang",[1081,11342,9118],{"class":6288},[1081,11344,6471],{"class":6288},[1081,11346,11347],{"class":6152},"ts",[1081,11349,6471],{"class":6288},[1081,11351,9039],{"class":6288},[1081,11353,11354,11357,11359,11361,11364],{"class":6144,"line":1463},[1081,11355,11356],{"class":9125},"onMounted",[1081,11358,9050],{"class":6204},[1081,11360,10037],{"class":6288},[1081,11362,11363],{"class":6467}," =>",[1081,11365,6476],{"class":6288},[1081,11367,11368,11371,11373,11375,11377,11379,11381,11383,11385,11387],{"class":6144,"line":1468},[1081,11369,11370],{"class":9125},"    useMetaPixel",[1081,11372,10037],{"class":6585},[1081,11374,1446],{"class":6288},[1081,11376,9455],{"class":9125},[1081,11378,9050],{"class":6585},[1081,11380,9260],{"class":6288},[1081,11382,8846],{"class":6152},[1081,11384,9260],{"class":6288},[1081,11386,8376],{"class":6585},[1081,11388,9268],{"class":6288},[1081,11390,11391,11393,11395],{"class":6144,"line":6397},[1081,11392,9384],{"class":6288},[1081,11394,8376],{"class":6204},[1081,11396,9268],{"class":6288},[1081,11398,11399,11401,11403],{"class":6144,"line":6407},[1081,11400,9474],{"class":6288},[1081,11402,9036],{"class":6585},[1081,11404,9039],{"class":6288},[58,11406,11408],{"id":11407},"standard-events-with-parameters","Standard Events with Parameters",[12,11410,11411,11412,11415],{},"Facebook supports many ",[31,11413,8914],{"href":8912,"rel":11414,"target":8663},[46],". Pass parameters for richer data:",[5086,11417,11420],{"className":11323,"code":11418,"filename":11419,"language":11326,"meta":1462,"style":1462},"\u003Cscript setup lang=\"ts\">\nconst meta = useMetaPixel();\n\nonMounted(() => {\n    meta.track('ViewContent', { \n        content_id: 'product-123',\n        content_name: 'Premium Plan',\n        value: 99,\n        currency: 'USD'\n    });\n});\n\u003C\u002Fscript>\n","pages\u002Fproduct.vue",[4815,11421,11422,11442,11458,11462,11474,11498,11514,11530,11541,11555,11564,11572],{"__ignoreMap":1462},[1081,11423,11424,11426,11428,11430,11432,11434,11436,11438,11440],{"class":6144,"line":6145},[1081,11425,9033],{"class":6288},[1081,11427,9036],{"class":6585},[1081,11429,11337],{"class":6467},[1081,11431,11340],{"class":6467},[1081,11433,9118],{"class":6288},[1081,11435,6471],{"class":6288},[1081,11437,11347],{"class":6152},[1081,11439,6471],{"class":6288},[1081,11441,9039],{"class":6288},[1081,11443,11444,11447,11450,11452,11454,11456],{"class":6144,"line":1463},[1081,11445,11446],{"class":6467},"const",[1081,11448,11449],{"class":6204}," meta ",[1081,11451,9118],{"class":6288},[1081,11453,10009],{"class":9125},[1081,11455,10037],{"class":6204},[1081,11457,9268],{"class":6288},[1081,11459,11460],{"class":6144,"line":1468},[1081,11461,8738],{"emptyLinePlaceholder":1547},[1081,11463,11464,11466,11468,11470,11472],{"class":6144,"line":6397},[1081,11465,11356],{"class":9125},[1081,11467,9050],{"class":6204},[1081,11469,10037],{"class":6288},[1081,11471,11363],{"class":6467},[1081,11473,6476],{"class":6288},[1081,11475,11476,11479,11481,11483,11485,11487,11489,11491,11493,11495],{"class":6144,"line":6407},[1081,11477,11478],{"class":6204},"    meta",[1081,11480,1446],{"class":6288},[1081,11482,9455],{"class":9125},[1081,11484,9050],{"class":6585},[1081,11486,9260],{"class":6288},[1081,11488,8846],{"class":6152},[1081,11490,9260],{"class":6288},[1081,11492,6535],{"class":6288},[1081,11494,9769],{"class":6288},[1081,11496,11497],{"class":6585}," \n",[1081,11499,11500,11503,11505,11507,11510,11512],{"class":6144,"line":6421},[1081,11501,11502],{"class":6585},"        content_id",[1081,11504,5514],{"class":6288},[1081,11506,9435],{"class":6288},[1081,11508,11509],{"class":6152},"product-123",[1081,11511,9260],{"class":6288},[1081,11513,6511],{"class":6288},[1081,11515,11516,11519,11521,11523,11526,11528],{"class":6144,"line":6579},[1081,11517,11518],{"class":6585},"        content_name",[1081,11520,5514],{"class":6288},[1081,11522,9435],{"class":6288},[1081,11524,11525],{"class":6152},"Premium Plan",[1081,11527,9260],{"class":6288},[1081,11529,6511],{"class":6288},[1081,11531,11532,11535,11537,11539],{"class":6144,"line":6601},[1081,11533,11534],{"class":6585},"        value",[1081,11536,5514],{"class":6288},[1081,11538,10101],{"class":6415},[1081,11540,6511],{"class":6288},[1081,11542,11543,11546,11548,11550,11552],{"class":6144,"line":6621},[1081,11544,11545],{"class":6585},"        currency",[1081,11547,5514],{"class":6288},[1081,11549,9435],{"class":6288},[1081,11551,10113],{"class":6152},[1081,11553,11554],{"class":6288},"'\n",[1081,11556,11557,11560,11562],{"class":6144,"line":6641},[1081,11558,11559],{"class":6288},"    }",[1081,11561,8376],{"class":6585},[1081,11563,9268],{"class":6288},[1081,11565,11566,11568,11570],{"class":6144,"line":6659},[1081,11567,9384],{"class":6288},[1081,11569,8376],{"class":6204},[1081,11571,9268],{"class":6288},[1081,11573,11574,11576,11578],{"class":6144,"line":6665},[1081,11575,9474],{"class":6288},[1081,11577,9036],{"class":6585},[1081,11579,9039],{"class":6288},[12,11581,11582,11583,8823],{},"You should then see the following in the ",[31,11584,8822],{"href":8820,"rel":11585,"target":8663},[46],[12,11587,11588],{},[5038,11589],{"alt":11590,"src":8829,"width":8830},"Tracking ViewContent event with parameters",[58,11592,11594],{"id":11593},"custom-events","Custom Events",[12,11596,11597,11598,5514],{},"For events not in the standard list, use ",[4815,11599,11600],{},"trackCustom()",[5086,11602,11604],{"className":11323,"code":11603,"filename":11325,"language":11326,"meta":1462,"style":1462},"\u003Cscript setup lang=\"ts\">\nonMounted(() => {\n    useMetaPixel().trackCustom('custom_event', { custom_param: 'whatever_you_want' });\n});\n\u003C\u002Fscript>\n",[4815,11605,11606,11626,11638,11679,11687],{"__ignoreMap":1462},[1081,11607,11608,11610,11612,11614,11616,11618,11620,11622,11624],{"class":6144,"line":6145},[1081,11609,9033],{"class":6288},[1081,11611,9036],{"class":6585},[1081,11613,11337],{"class":6467},[1081,11615,11340],{"class":6467},[1081,11617,9118],{"class":6288},[1081,11619,6471],{"class":6288},[1081,11621,11347],{"class":6152},[1081,11623,6471],{"class":6288},[1081,11625,9039],{"class":6288},[1081,11627,11628,11630,11632,11634,11636],{"class":6144,"line":1463},[1081,11629,11356],{"class":9125},[1081,11631,9050],{"class":6204},[1081,11633,10037],{"class":6288},[1081,11635,11363],{"class":6467},[1081,11637,6476],{"class":6288},[1081,11639,11640,11642,11644,11646,11648,11650,11652,11655,11657,11659,11661,11664,11666,11668,11671,11673,11675,11677],{"class":6144,"line":1468},[1081,11641,11370],{"class":9125},[1081,11643,10037],{"class":6585},[1081,11645,1446],{"class":6288},[1081,11647,10318],{"class":9125},[1081,11649,9050],{"class":6585},[1081,11651,9260],{"class":6288},[1081,11653,11654],{"class":6152},"custom_event",[1081,11656,9260],{"class":6288},[1081,11658,6535],{"class":6288},[1081,11660,9769],{"class":6288},[1081,11662,11663],{"class":6585}," custom_param",[1081,11665,5514],{"class":6288},[1081,11667,9435],{"class":6288},[1081,11669,11670],{"class":6152},"whatever_you_want",[1081,11672,9260],{"class":6288},[1081,11674,9775],{"class":6288},[1081,11676,8376],{"class":6585},[1081,11678,9268],{"class":6288},[1081,11680,11681,11683,11685],{"class":6144,"line":6397},[1081,11682,9384],{"class":6288},[1081,11684,8376],{"class":6204},[1081,11686,9268],{"class":6288},[1081,11688,11689,11691,11693],{"class":6144,"line":6407},[1081,11690,9474],{"class":6288},[1081,11692,9036],{"class":6585},[1081,11694,9039],{"class":6288},[11696,11697,11698],"callout",{"type":9558},[12,11699,11700,11701,11704],{},"Custom events can't always be used for conversion optimization in Facebook Ads. Use ",[31,11702,8914],{"href":8912,"rel":11703,"target":8663},[46]," when possible.",[53,11706,8919],{"id":8918},[12,11708,8922],{},[4585,11710,11711,11719],{},[4588,11712,11713],{},[4591,11714,11715,11717],{},[4594,11716,8931],{},[4594,11718,8934],{},[4602,11720,11721,11729,11737,11745,11753],{},[4591,11722,11723,11727],{},[4607,11724,11725],{},[4815,11726,8846],{},[4607,11728,8945],{},[4591,11730,11731,11735],{},[4607,11732,11733],{},[4815,11734,8871],{},[4607,11736,8954],{},[4591,11738,11739,11743],{},[4607,11740,11741],{},[4815,11742,8876],{},[4607,11744,8963],{},[4591,11746,11747,11751],{},[4607,11748,11749],{},[4815,11750,8886],{},[4607,11752,8972],{},[4591,11754,11755,11761],{},[4607,11756,11757,8979,11759],{},[4815,11758,8881],{},[4815,11760,8866],{},[4607,11762,8984,11763,8988],{},[4815,11764,8987],{},[12,11766,8991,11767,10414],{},[19,11768,8994],{},[53,11770,11772],{"id":11771},"how-to-exclude-routes-from-tracking","How to Exclude Routes from Tracking",[12,11774,11775],{},"Prevent the pixel from loading on certain pages (like dashboards or admin areas):",[5086,11777,11779],{"className":10955,"code":11778,"filename":10820,"language":10957,"meta":1462,"style":1462},"metaPixel: {\n  pixelIds: ['YOUR_PIXEL_ID_HERE'],\n  excludeRoutes: ['\u002Fadmin', '\u002Fdashboard\u002F**']\n}\n",[4815,11780,11781,11789,11807,11835],{"__ignoreMap":1462},[1081,11782,11783,11785,11787],{"class":6144,"line":6145},[1081,11784,11114],{"class":6148},[1081,11786,5514],{"class":6288},[1081,11788,6476],{"class":6288},[1081,11790,11791,11793,11795,11797,11799,11801,11803,11805],{"class":6144,"line":1463},[1081,11792,11220],{"class":6148},[1081,11794,5514],{"class":6288},[1081,11796,6525],{"class":6585},[1081,11798,9260],{"class":6288},[1081,11800,11075],{"class":6152},[1081,11802,9260],{"class":6288},[1081,11804,9354],{"class":6585},[1081,11806,6511],{"class":6288},[1081,11808,11809,11812,11814,11816,11818,11821,11823,11825,11827,11830,11832],{"class":6144,"line":1468},[1081,11810,11811],{"class":6148},"  excludeRoutes",[1081,11813,5514],{"class":6288},[1081,11815,6525],{"class":6585},[1081,11817,9260],{"class":6288},[1081,11819,11820],{"class":6152},"\u002Fadmin",[1081,11822,9260],{"class":6288},[1081,11824,6535],{"class":6288},[1081,11826,9435],{"class":6288},[1081,11828,11829],{"class":6152},"\u002Fdashboard\u002F**",[1081,11831,9260],{"class":6288},[1081,11833,11834],{"class":6585},"]\n",[1081,11836,11837],{"class":6144,"line":6397},[1081,11838,6680],{"class":6288},[12,11840,11841],{},"The pixel won't initialize at all on excluded routes, keeping your analytics data clean.",[53,11843,11845],{"id":11844},"full-example","Full Example",[12,11847,11848],{},"Here's a complete project example with Meta Pixel:",[11850,11851,11853,11971,12206],"code-tree",{"default-value":11852},"app\u002Fpages\u002Findex.vue",[5086,11854,11856],{"className":10955,"code":11855,"filename":10820,"language":10957,"meta":1462,"style":1462},"export default defineNuxtConfig({\n    modules: ['@adkit\u002Fmeta-pixel-nuxt'],\n\n    metaPixel: {\n        pixelIds: ['YOUR_PIXEL_ID'],\n        enableLocalhost: true,\n        debug: true,\n        excludeRoutes: ['\u002Fdashboard\u002F**'],\n    },\n});\n",[4815,11857,11858,11870,11888,11892,11900,11918,11929,11940,11959,11963],{"__ignoreMap":1462},[1081,11859,11860,11862,11864,11866,11868],{"class":6144,"line":6145},[1081,11861,9796],{"class":9095},[1081,11863,9799],{"class":9095},[1081,11865,10968],{"class":9125},[1081,11867,9050],{"class":6204},[1081,11869,6459],{"class":6288},[1081,11871,11872,11874,11876,11878,11880,11882,11884,11886],{"class":6144,"line":1463},[1081,11873,10977],{"class":6585},[1081,11875,5514],{"class":6288},[1081,11877,6525],{"class":6204},[1081,11879,9260],{"class":6288},[1081,11881,10816],{"class":6152},[1081,11883,9260],{"class":6288},[1081,11885,9354],{"class":6204},[1081,11887,6511],{"class":6288},[1081,11889,11890],{"class":6144,"line":1468},[1081,11891,8738],{"emptyLinePlaceholder":1547},[1081,11893,11894,11896,11898],{"class":6144,"line":6397},[1081,11895,11057],{"class":6585},[1081,11897,5514],{"class":6288},[1081,11899,6476],{"class":6288},[1081,11901,11902,11904,11906,11908,11910,11912,11914,11916],{"class":6144,"line":6407},[1081,11903,11066],{"class":6585},[1081,11905,5514],{"class":6288},[1081,11907,6525],{"class":6204},[1081,11909,9260],{"class":6288},[1081,11911,9438],{"class":6152},[1081,11913,9260],{"class":6288},[1081,11915,9354],{"class":6204},[1081,11917,6511],{"class":6288},[1081,11919,11920,11923,11925,11927],{"class":6144,"line":6421},[1081,11921,11922],{"class":6585},"        enableLocalhost",[1081,11924,5514],{"class":6288},[1081,11926,11244],{"class":10449},[1081,11928,6511],{"class":6288},[1081,11930,11931,11934,11936,11938],{"class":6144,"line":6579},[1081,11932,11933],{"class":6585},"        debug",[1081,11935,5514],{"class":6288},[1081,11937,11244],{"class":10449},[1081,11939,6511],{"class":6288},[1081,11941,11942,11945,11947,11949,11951,11953,11955,11957],{"class":6144,"line":6601},[1081,11943,11944],{"class":6585},"        excludeRoutes",[1081,11946,5514],{"class":6288},[1081,11948,6525],{"class":6204},[1081,11950,9260],{"class":6288},[1081,11952,11829],{"class":6152},[1081,11954,9260],{"class":6288},[1081,11956,9354],{"class":6204},[1081,11958,6511],{"class":6288},[1081,11960,11961],{"class":6144,"line":6621},[1081,11962,11086],{"class":6288},[1081,11964,11965,11967,11969],{"class":6144,"line":6641},[1081,11966,9384],{"class":6288},[1081,11968,8376],{"class":6204},[1081,11970,9268],{"class":6288},[5086,11972,11974],{"className":11323,"code":11973,"filename":11852,"language":11326,"meta":1462,"style":1462},"\u003Ctemplate>\n    \u003Cdiv>\n        \u003Ch1>Welcome to Our App\u003C\u002Fh1>\n        \u003Cbutton @click=\"handleSignup\">Sign Up\u003C\u002Fbutton>\n    \u003C\u002Fdiv>\n\u003C\u002Ftemplate>\n\n\u003Cscript setup lang=\"ts\">\nconst meta = useMetaPixel();\n\nonMounted(() => {\n    meta.track('ViewContent', { content_id: 'homepage' });\n});\n\nfunction handleSignup() {\n    meta.track('Lead');\n}\n\u003C\u002Fscript>\n",[4815,11975,11976,11984,11993,12011,12040,12049,12057,12061,12081,12095,12099,12111,12148,12156,12160,12171,12192,12197],{"__ignoreMap":1462},[1081,11977,11978,11980,11982],{"class":6144,"line":6145},[1081,11979,9033],{"class":6288},[1081,11981,6130],{"class":6585},[1081,11983,9039],{"class":6288},[1081,11985,11986,11989,11991],{"class":6144,"line":1463},[1081,11987,11988],{"class":6288},"    \u003C",[1081,11990,10827],{"class":6585},[1081,11992,9039],{"class":6288},[1081,11994,11995,11997,12000,12002,12005,12007,12009],{"class":6144,"line":1468},[1081,11996,9846],{"class":6288},[1081,11998,11999],{"class":6585},"h1",[1081,12001,9968],{"class":6288},[1081,12003,12004],{"class":6204},"Welcome to Our App",[1081,12006,9474],{"class":6288},[1081,12008,11999],{"class":6585},[1081,12010,9039],{"class":6288},[1081,12012,12013,12015,12017,12020,12022,12024,12027,12029,12031,12034,12036,12038],{"class":6144,"line":6397},[1081,12014,9846],{"class":6288},[1081,12016,10139],{"class":6585},[1081,12018,12019],{"class":6467}," @click",[1081,12021,9118],{"class":6288},[1081,12023,6471],{"class":6288},[1081,12025,12026],{"class":6152},"handleSignup",[1081,12028,6471],{"class":6288},[1081,12030,9968],{"class":6288},[1081,12032,12033],{"class":6204},"Sign Up",[1081,12035,9474],{"class":6288},[1081,12037,10139],{"class":6585},[1081,12039,9039],{"class":6288},[1081,12041,12042,12045,12047],{"class":6144,"line":6407},[1081,12043,12044],{"class":6288},"    \u003C\u002F",[1081,12046,10827],{"class":6585},[1081,12048,9039],{"class":6288},[1081,12050,12051,12053,12055],{"class":6144,"line":6421},[1081,12052,9474],{"class":6288},[1081,12054,6130],{"class":6585},[1081,12056,9039],{"class":6288},[1081,12058,12059],{"class":6144,"line":6579},[1081,12060,8738],{"emptyLinePlaceholder":1547},[1081,12062,12063,12065,12067,12069,12071,12073,12075,12077,12079],{"class":6144,"line":6601},[1081,12064,9033],{"class":6288},[1081,12066,9036],{"class":6585},[1081,12068,11337],{"class":6467},[1081,12070,11340],{"class":6467},[1081,12072,9118],{"class":6288},[1081,12074,6471],{"class":6288},[1081,12076,11347],{"class":6152},[1081,12078,6471],{"class":6288},[1081,12080,9039],{"class":6288},[1081,12082,12083,12085,12087,12089,12091,12093],{"class":6144,"line":6621},[1081,12084,11446],{"class":6467},[1081,12086,11449],{"class":6204},[1081,12088,9118],{"class":6288},[1081,12090,10009],{"class":9125},[1081,12092,10037],{"class":6204},[1081,12094,9268],{"class":6288},[1081,12096,12097],{"class":6144,"line":6641},[1081,12098,8738],{"emptyLinePlaceholder":1547},[1081,12100,12101,12103,12105,12107,12109],{"class":6144,"line":6659},[1081,12102,11356],{"class":9125},[1081,12104,9050],{"class":6204},[1081,12106,10037],{"class":6288},[1081,12108,11363],{"class":6467},[1081,12110,6476],{"class":6288},[1081,12112,12113,12115,12117,12119,12121,12123,12125,12127,12129,12131,12133,12135,12137,12140,12142,12144,12146],{"class":6144,"line":6665},[1081,12114,11478],{"class":6204},[1081,12116,1446],{"class":6288},[1081,12118,9455],{"class":9125},[1081,12120,9050],{"class":6585},[1081,12122,9260],{"class":6288},[1081,12124,8846],{"class":6152},[1081,12126,9260],{"class":6288},[1081,12128,6535],{"class":6288},[1081,12130,9769],{"class":6288},[1081,12132,10286],{"class":6585},[1081,12134,5514],{"class":6288},[1081,12136,9435],{"class":6288},[1081,12138,12139],{"class":6152},"homepage",[1081,12141,9260],{"class":6288},[1081,12143,9775],{"class":6288},[1081,12145,8376],{"class":6585},[1081,12147,9268],{"class":6288},[1081,12149,12150,12152,12154],{"class":6144,"line":6671},[1081,12151,9384],{"class":6288},[1081,12153,8376],{"class":6204},[1081,12155,9268],{"class":6288},[1081,12157,12158],{"class":6144,"line":6677},[1081,12159,8738],{"emptyLinePlaceholder":1547},[1081,12161,12162,12164,12167,12169],{"class":6144,"line":9547},[1081,12163,9047],{"class":6467},[1081,12165,12166],{"class":9125}," handleSignup",[1081,12168,10037],{"class":6288},[1081,12170,6476],{"class":6288},[1081,12172,12174,12176,12178,12180,12182,12184,12186,12188,12190],{"class":6144,"line":12173},16,[1081,12175,11478],{"class":6204},[1081,12177,1446],{"class":6288},[1081,12179,9455],{"class":9125},[1081,12181,9050],{"class":6585},[1081,12183,9260],{"class":6288},[1081,12185,8871],{"class":6152},[1081,12187,9260],{"class":6288},[1081,12189,8376],{"class":6585},[1081,12191,9268],{"class":6288},[1081,12193,12195],{"class":6144,"line":12194},17,[1081,12196,6680],{"class":6288},[1081,12198,12200,12202,12204],{"class":6144,"line":12199},18,[1081,12201,9474],{"class":6288},[1081,12203,9036],{"class":6585},[1081,12205,9039],{"class":6288},[5086,12207,12210],{"className":11323,"code":12208,"filename":12209,"language":11326,"meta":1462,"style":1462},"\u003Ctemplate>\n    \u003Cdiv>\n        \u003Cdiv class=\"plan\">\n            \u003Ch2>Starter - $29\u003C\u002Fh2>\n            \u003Cbutton @click=\"openCheckout('starter')\">Select\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n        \u003Cdiv class=\"plan\">\n            \u003Ch2>Pro - $99\u003C\u002Fh2>\n            \u003Cbutton @click=\"openCheckout('pro')\">Select\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\u003C\u002Ftemplate>\n\n\u003Cscript setup lang=\"ts\">\nconst meta = useMetaPixel();\n\nonMounted(() => {\n    meta.track('ViewContent', { content_id: 'pricing' });\n});\n\nfunction openCheckout(plan: string) {\n    meta.track('InitiateCheckout', { content_id: plan });\n}\n\u003C\u002Fscript>\n","app\u002Fpages\u002Fpricing.vue",[4815,12211,12212,12220,12228,12248,12265,12293,12301,12319,12336,12363,12371,12379,12387,12391,12411,12425,12429,12441,12478,12487,12492,12513,12547,12552],{"__ignoreMap":1462},[1081,12213,12214,12216,12218],{"class":6144,"line":6145},[1081,12215,9033],{"class":6288},[1081,12217,6130],{"class":6585},[1081,12219,9039],{"class":6288},[1081,12221,12222,12224,12226],{"class":6144,"line":1463},[1081,12223,11988],{"class":6288},[1081,12225,10827],{"class":6585},[1081,12227,9039],{"class":6288},[1081,12229,12230,12232,12234,12237,12239,12241,12244,12246],{"class":6144,"line":1468},[1081,12231,9846],{"class":6288},[1081,12233,10827],{"class":6585},[1081,12235,12236],{"class":6467}," class",[1081,12238,9118],{"class":6288},[1081,12240,6471],{"class":6288},[1081,12242,12243],{"class":6152},"plan",[1081,12245,6471],{"class":6288},[1081,12247,9039],{"class":6288},[1081,12249,12250,12252,12254,12256,12259,12261,12263],{"class":6144,"line":6397},[1081,12251,9855],{"class":6288},[1081,12253,53],{"class":6585},[1081,12255,9968],{"class":6288},[1081,12257,12258],{"class":6204},"Starter - $29",[1081,12260,9474],{"class":6288},[1081,12262,53],{"class":6585},[1081,12264,9039],{"class":6288},[1081,12266,12267,12269,12271,12273,12275,12277,12280,12282,12284,12287,12289,12291],{"class":6144,"line":6407},[1081,12268,9855],{"class":6288},[1081,12270,10139],{"class":6585},[1081,12272,12019],{"class":6467},[1081,12274,9118],{"class":6288},[1081,12276,6471],{"class":6288},[1081,12278,12279],{"class":6152},"openCheckout('starter')",[1081,12281,6471],{"class":6288},[1081,12283,9968],{"class":6288},[1081,12285,12286],{"class":6204},"Select",[1081,12288,9474],{"class":6288},[1081,12290,10139],{"class":6585},[1081,12292,9039],{"class":6288},[1081,12294,12295,12297,12299],{"class":6144,"line":6421},[1081,12296,9905],{"class":6288},[1081,12298,10827],{"class":6585},[1081,12300,9039],{"class":6288},[1081,12302,12303,12305,12307,12309,12311,12313,12315,12317],{"class":6144,"line":6579},[1081,12304,9846],{"class":6288},[1081,12306,10827],{"class":6585},[1081,12308,12236],{"class":6467},[1081,12310,9118],{"class":6288},[1081,12312,6471],{"class":6288},[1081,12314,12243],{"class":6152},[1081,12316,6471],{"class":6288},[1081,12318,9039],{"class":6288},[1081,12320,12321,12323,12325,12327,12330,12332,12334],{"class":6144,"line":6601},[1081,12322,9855],{"class":6288},[1081,12324,53],{"class":6585},[1081,12326,9968],{"class":6288},[1081,12328,12329],{"class":6204},"Pro - $99",[1081,12331,9474],{"class":6288},[1081,12333,53],{"class":6585},[1081,12335,9039],{"class":6288},[1081,12337,12338,12340,12342,12344,12346,12348,12351,12353,12355,12357,12359,12361],{"class":6144,"line":6621},[1081,12339,9855],{"class":6288},[1081,12341,10139],{"class":6585},[1081,12343,12019],{"class":6467},[1081,12345,9118],{"class":6288},[1081,12347,6471],{"class":6288},[1081,12349,12350],{"class":6152},"openCheckout('pro')",[1081,12352,6471],{"class":6288},[1081,12354,9968],{"class":6288},[1081,12356,12286],{"class":6204},[1081,12358,9474],{"class":6288},[1081,12360,10139],{"class":6585},[1081,12362,9039],{"class":6288},[1081,12364,12365,12367,12369],{"class":6144,"line":6641},[1081,12366,9905],{"class":6288},[1081,12368,10827],{"class":6585},[1081,12370,9039],{"class":6288},[1081,12372,12373,12375,12377],{"class":6144,"line":6659},[1081,12374,12044],{"class":6288},[1081,12376,10827],{"class":6585},[1081,12378,9039],{"class":6288},[1081,12380,12381,12383,12385],{"class":6144,"line":6665},[1081,12382,9474],{"class":6288},[1081,12384,6130],{"class":6585},[1081,12386,9039],{"class":6288},[1081,12388,12389],{"class":6144,"line":6671},[1081,12390,8738],{"emptyLinePlaceholder":1547},[1081,12392,12393,12395,12397,12399,12401,12403,12405,12407,12409],{"class":6144,"line":6677},[1081,12394,9033],{"class":6288},[1081,12396,9036],{"class":6585},[1081,12398,11337],{"class":6467},[1081,12400,11340],{"class":6467},[1081,12402,9118],{"class":6288},[1081,12404,6471],{"class":6288},[1081,12406,11347],{"class":6152},[1081,12408,6471],{"class":6288},[1081,12410,9039],{"class":6288},[1081,12412,12413,12415,12417,12419,12421,12423],{"class":6144,"line":9547},[1081,12414,11446],{"class":6467},[1081,12416,11449],{"class":6204},[1081,12418,9118],{"class":6288},[1081,12420,10009],{"class":9125},[1081,12422,10037],{"class":6204},[1081,12424,9268],{"class":6288},[1081,12426,12427],{"class":6144,"line":12173},[1081,12428,8738],{"emptyLinePlaceholder":1547},[1081,12430,12431,12433,12435,12437,12439],{"class":6144,"line":12194},[1081,12432,11356],{"class":9125},[1081,12434,9050],{"class":6204},[1081,12436,10037],{"class":6288},[1081,12438,11363],{"class":6467},[1081,12440,6476],{"class":6288},[1081,12442,12443,12445,12447,12449,12451,12453,12455,12457,12459,12461,12463,12465,12467,12470,12472,12474,12476],{"class":6144,"line":12199},[1081,12444,11478],{"class":6204},[1081,12446,1446],{"class":6288},[1081,12448,9455],{"class":9125},[1081,12450,9050],{"class":6585},[1081,12452,9260],{"class":6288},[1081,12454,8846],{"class":6152},[1081,12456,9260],{"class":6288},[1081,12458,6535],{"class":6288},[1081,12460,9769],{"class":6288},[1081,12462,10286],{"class":6585},[1081,12464,5514],{"class":6288},[1081,12466,9435],{"class":6288},[1081,12468,12469],{"class":6152},"pricing",[1081,12471,9260],{"class":6288},[1081,12473,9775],{"class":6288},[1081,12475,8376],{"class":6585},[1081,12477,9268],{"class":6288},[1081,12479,12481,12483,12485],{"class":6144,"line":12480},19,[1081,12482,9384],{"class":6288},[1081,12484,8376],{"class":6204},[1081,12486,9268],{"class":6288},[1081,12488,12490],{"class":6144,"line":12489},20,[1081,12491,8738],{"emptyLinePlaceholder":1547},[1081,12493,12495,12497,12500,12502,12504,12506,12509,12511],{"class":6144,"line":12494},21,[1081,12496,9047],{"class":6467},[1081,12498,12499],{"class":9125}," openCheckout",[1081,12501,9050],{"class":6288},[1081,12503,12243],{"class":9053},[1081,12505,5514],{"class":6288},[1081,12507,12508],{"class":6148}," string",[1081,12510,8376],{"class":6288},[1081,12512,6476],{"class":6288},[1081,12514,12516,12518,12520,12522,12524,12526,12528,12530,12532,12534,12536,12538,12541,12543,12545],{"class":6144,"line":12515},22,[1081,12517,11478],{"class":6204},[1081,12519,1446],{"class":6288},[1081,12521,9455],{"class":9125},[1081,12523,9050],{"class":6585},[1081,12525,9260],{"class":6288},[1081,12527,8861],{"class":6152},[1081,12529,9260],{"class":6288},[1081,12531,6535],{"class":6288},[1081,12533,9769],{"class":6288},[1081,12535,10286],{"class":6585},[1081,12537,5514],{"class":6288},[1081,12539,12540],{"class":6204}," plan",[1081,12542,9775],{"class":6288},[1081,12544,8376],{"class":6585},[1081,12546,9268],{"class":6288},[1081,12548,12550],{"class":6144,"line":12549},23,[1081,12551,6680],{"class":6288},[1081,12553,12555,12557,12559],{"class":6144,"line":12554},24,[1081,12556,9474],{"class":6288},[1081,12558,9036],{"class":6585},[1081,12560,9039],{"class":6288},[53,12562,12564],{"id":12563},"common-issues-and-fixes","Common Issues and Fixes",[8421,12566,12567,12618,12647,12745],{},[8426,12568,12569,12572],{"icon":10595,"label":10596},[12,12570,12571],{},"Make sure you've enabled localhost in your config:",[5086,12573,12575],{"className":10955,"code":12574,"language":10957,"meta":1462,"style":1462},"metaPixel: {\n  pixelIds: ['YOUR_PIXEL_ID_HERE'],\n  enableLocalhost: true  \u002F\u002F Add this\n}\n",[4815,12576,12577,12585,12603,12614],{"__ignoreMap":1462},[1081,12578,12579,12581,12583],{"class":6144,"line":6145},[1081,12580,11114],{"class":6148},[1081,12582,5514],{"class":6288},[1081,12584,6476],{"class":6288},[1081,12586,12587,12589,12591,12593,12595,12597,12599,12601],{"class":6144,"line":1463},[1081,12588,11220],{"class":6148},[1081,12590,5514],{"class":6288},[1081,12592,6525],{"class":6585},[1081,12594,9260],{"class":6288},[1081,12596,11075],{"class":6152},[1081,12598,9260],{"class":6288},[1081,12600,9354],{"class":6585},[1081,12602,6511],{"class":6288},[1081,12604,12605,12607,12609,12611],{"class":6144,"line":1468},[1081,12606,11239],{"class":6148},[1081,12608,5514],{"class":6288},[1081,12610,11244],{"class":10449},[1081,12612,12613],{"class":9027},"  \u002F\u002F Add this\n",[1081,12615,12616],{"class":6144,"line":6397},[1081,12617,6680],{"class":6288},[8426,12619,12621],{"icon":10631,"label":12620},"No events showing in Facebook",[1240,12622,12623,12630,12635,12644],{},[1243,12624,12625,12626,12629],{},"Check the ",[31,12627,8822],{"href":8820,"rel":12628,"target":8663},[46]," Chrome extension shows your pixel is loaded",[1243,12631,10643,12632,12634],{},[4815,12633,11284],{}," and check console for errors",[1243,12636,12637,12638,12643],{},"Events can take ",[31,12639,12642],{"href":12640,"rel":12641,"target":8663},"https:\u002F\u002Fdevelopers.facebook.com\u002Fdocs\u002Fmeta-pixel\u002Fget-started",[46],"up to 20 minutes to appear"," in Facebook Events Manager",[1243,12645,12646],{},"Make sure you're looking at the correct pixel in Events Manager",[8426,12648,12650,12653],{"icon":10653,"label":12649},"TypeScript errors with event names",[12,12651,12652],{},"The module has full TypeScript support. Make sure you're using standard event names:",[5086,12654,12656],{"className":10955,"code":12655,"language":10957,"meta":1462,"style":1462},"\u002F\u002F ✅ Correct - standard event\nmeta.track('ViewContent');\n\n\u002F\u002F ❌ Wrong - will show TS error\nmeta.track('ViewPage'); \u002F\u002F Not a standard event\n\n\u002F\u002F ✅ Correct - use trackCustom for custom events\nmeta.trackCustom('ViewPage');\n",[4815,12657,12658,12663,12683,12687,12692,12716,12720,12725],{"__ignoreMap":1462},[1081,12659,12660],{"class":6144,"line":6145},[1081,12661,12662],{"class":9027},"\u002F\u002F ✅ Correct - standard event\n",[1081,12664,12665,12667,12669,12671,12673,12675,12677,12679,12681],{"class":6144,"line":1463},[1081,12666,10184],{"class":6204},[1081,12668,1446],{"class":6288},[1081,12670,9455],{"class":9125},[1081,12672,9050],{"class":6204},[1081,12674,9260],{"class":6288},[1081,12676,8846],{"class":6152},[1081,12678,9260],{"class":6288},[1081,12680,8376],{"class":6204},[1081,12682,9268],{"class":6288},[1081,12684,12685],{"class":6144,"line":1468},[1081,12686,8738],{"emptyLinePlaceholder":1547},[1081,12688,12689],{"class":6144,"line":6397},[1081,12690,12691],{"class":9027},"\u002F\u002F ❌ Wrong - will show TS error\n",[1081,12693,12694,12696,12698,12700,12702,12704,12707,12709,12711,12713],{"class":6144,"line":6407},[1081,12695,10184],{"class":6204},[1081,12697,1446],{"class":6288},[1081,12699,9455],{"class":9125},[1081,12701,9050],{"class":6204},[1081,12703,9260],{"class":6288},[1081,12705,12706],{"class":6152},"ViewPage",[1081,12708,9260],{"class":6288},[1081,12710,8376],{"class":6204},[1081,12712,9113],{"class":6288},[1081,12714,12715],{"class":9027}," \u002F\u002F Not a standard event\n",[1081,12717,12718],{"class":6144,"line":6421},[1081,12719,8738],{"emptyLinePlaceholder":1547},[1081,12721,12722],{"class":6144,"line":6579},[1081,12723,12724],{"class":9027},"\u002F\u002F ✅ Correct - use trackCustom for custom events\n",[1081,12726,12727,12729,12731,12733,12735,12737,12739,12741,12743],{"class":6144,"line":6601},[1081,12728,10184],{"class":6204},[1081,12730,1446],{"class":6288},[1081,12732,10318],{"class":9125},[1081,12734,9050],{"class":6204},[1081,12736,9260],{"class":6288},[1081,12738,12706],{"class":6152},[1081,12740,9260],{"class":6288},[1081,12742,8376],{"class":6204},[1081,12744,9268],{"class":6288},[8426,12746,12749,12752],{"icon":12747,"label":12748},"fa6-solid:copy","Multiple pixels not tracking",[12,12750,12751],{},"Verify the array syntax in your config:",[5086,12753,12755],{"className":10955,"code":12754,"language":10957,"meta":1462,"style":1462},"pixelIds: ['123456789012345', '987654321098765']; \u002F\u002F ✅ Correct\npixelIds: '123456789012345'; \u002F\u002F ❌ Wrong for multiple pixels\n",[4815,12756,12757,12787],{"__ignoreMap":1462},[1081,12758,12759,12762,12764,12766,12768,12770,12772,12774,12776,12778,12780,12782,12784],{"class":6144,"line":6145},[1081,12760,12761],{"class":6148},"pixelIds",[1081,12763,5514],{"class":6288},[1081,12765,6525],{"class":6204},[1081,12767,9260],{"class":6288},[1081,12769,11130],{"class":6152},[1081,12771,9260],{"class":6288},[1081,12773,6535],{"class":6288},[1081,12775,9435],{"class":6288},[1081,12777,11178],{"class":6152},[1081,12779,9260],{"class":6288},[1081,12781,9354],{"class":6204},[1081,12783,9113],{"class":6288},[1081,12785,12786],{"class":9027}," \u002F\u002F ✅ Correct\n",[1081,12788,12789,12791,12793,12795,12797,12799,12801],{"class":6144,"line":1463},[1081,12790,12761],{"class":6148},[1081,12792,5514],{"class":6288},[1081,12794,9435],{"class":6288},[1081,12796,11130],{"class":6152},[1081,12798,9260],{"class":6288},[1081,12800,9113],{"class":6288},[1081,12802,12803],{"class":9027}," \u002F\u002F ❌ Wrong for multiple pixels\n",[53,12805,12807],{"id":12806},"best-practices","Best Practices",[4313,12809,12810,12818,12824,12830,12836],{},[1243,12811,8909,12812,12817],{},[31,12813,12815],{"href":8912,"rel":12814,"target":8663},[46],[19,12816,8914],{}," whenever possible for better ad optimization",[1243,12819,9749,12820,12823],{},[19,12821,12822],{},"meaningful parameters"," to events (content_id, value, currency)",[1243,12825,12826,12829],{},[19,12827,12828],{},"Exclude internal routes"," (dashboard, admin) to keep data clean",[1243,12831,12832,12835],{},[19,12833,12834],{},"Disable debug in production"," to reduce console noise",[1243,12837,12838,12839,12842],{},"Track the ",[19,12840,12841],{},"full funnel",": ViewContent → AddToCart → InitiateCheckout → Purchase",[53,12844,9591],{"id":9590},[12,12846,12847],{},"Now that your pixel is installed:",[1240,12849,12850,12855,12860],{},[1243,12851,10710,12852,10715],{},[31,12853,8994],{"href":10713,"rel":12854,"target":8663},[46],[1243,12856,10718,12857,10724],{},[31,12858,10723],{"href":10721,"rel":12859,"target":8663},[46],[1243,12861,10727,12862],{},[31,12863,10732],{"href":10730,"rel":12864,"target":8663},[46],[53,12866,10736],{"id":10735},[4313,12868,12869,12875,12880,12885],{},[1243,12870,12871],{},[31,12872,12874],{"href":10870,"rel":12873,"target":8663},[46],"@adkit\u002Fmeta-pixel-nuxt on NPM",[1243,12876,12877],{},[31,12878,10752],{"href":10750,"rel":12879,"target":8663},[46],[1243,12881,12882],{},[31,12883,10758],{"href":8912,"rel":12884,"target":8663},[46],[1243,12886,12887],{},[31,12888,10763],{"href":9692},[7509,12890,12891],{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":1462,"searchDepth":1463,"depth":1463,"links":12893},[12894,12895,12896,12897,12901,12905,12910,12911,12912,12913,12914,12915,12916],{"id":10824,"depth":1463,"text":10825},{"id":9712,"depth":1463,"text":9713},{"id":10863,"depth":1463,"text":10864},{"id":10941,"depth":1463,"text":10942,"children":12898},[12899,12900],{"id":10945,"depth":1468,"text":10946},{"id":11013,"depth":1468,"text":11014},{"id":11194,"depth":1463,"text":11195,"children":12902},[12903,12904],{"id":11198,"depth":1468,"text":11199},{"id":11268,"depth":1468,"text":11269},{"id":11308,"depth":1463,"text":11309,"children":12906},[12907,12908,12909],{"id":11319,"depth":1468,"text":11320},{"id":11407,"depth":1468,"text":11408},{"id":11593,"depth":1468,"text":11594},{"id":8918,"depth":1463,"text":8919},{"id":11771,"depth":1463,"text":11772},{"id":11844,"depth":1463,"text":11845},{"id":12563,"depth":1463,"text":12564},{"id":12806,"depth":1463,"text":12807},{"id":9590,"depth":1463,"text":9591},{"id":10735,"depth":1463,"text":10736},"2025-11-28","Step-by-step guide to install and configure the Meta Pixel in your Nuxt 3 or 4 application with automatic page tracking and TypeScript support.",[12920,12922,12925,12928],{"question":10790,"answer":12921},"By default, the pixel won't fire on localhost to avoid polluting your data. Add enableLocalhost:true to your metaPixel config in nuxt.config.ts to enable it during development.",{"question":12923,"answer":12924},"Why are no events showing in Facebook Events Manager?","Events can take up to 20 minutes to appear in Facebook Events Manager. Check that Meta Pixel Helper shows your pixel is loaded, enable debug:true in your config, and verify you're looking at the correct pixel in Events Manager.",{"question":12926,"answer":12927},"How do I fix TypeScript errors with Meta Pixel event names?","The module has full TypeScript support with strict event name validation. Use standard events like ViewContent or Purchase with meta.track(). For custom events not in the standard list, use meta.trackCustom() instead.",{"question":12929,"answer":12930},"Why are multiple Meta Pixels not tracking?","Verify you're using array syntax in your config. Use pixelIds:['123456789012345', '987654321098765'] with an array, not a single string.",{},"\u002Fresources\u002Fhow-to-install-meta-pixel\u002Fnuxt",{"title":10808,"description":12918},"how-to-install-meta-pixel\u002Fnuxt","resources\u002Fhow-to-install-meta-pixel\u002Fnuxt",[12937,9697,9698,4270,2453],"nuxt","ReVwwGa05266cv-tL-w2gXFH4apEo9KDJZPQeeyA3_A",{"id":12940,"title":12941,"author":7,"body":12942,"breadcrumbLabel":7,"category":9672,"cover":1547,"createdAt":9673,"description":16016,"extension":1527,"faqs":16017,"meta":16030,"navigation":1547,"noAiBadge":1524,"og":1547,"ogDescription":7,"ogIcon":7,"path":16031,"seo":16032,"slug":16033,"stem":16034,"tags":16035,"updatedAt":9700,"wip":1524,"__hash__":16036},"resources\u002Fresources\u002Fhow-to-install-meta-pixel\u002Freact.md","How to Install Meta Pixel in React",{"type":9,"value":12943,"toc":15991},[12944,12951,12953,12955,12964,12966,12973,12987,12991,12998,13121,13127,13251,13254,13258,13261,13343,13349,13351,13354,13417,13419,13442,13446,13455,13459,13656,13660,13866,13876,13880,13884,14054,14060,14064,14068,14245,14247,14250,14320,14327,14329,14331,14387,14391,14393,14396,15569,15571,15909,15911,15945,15947,15964,15966,15988],[12,12945,12946,12947,12950],{},"Installing Meta Pixel in React takes about 5 minutes using the ",[4815,12948,12949],{},"@adkit\u002Fmeta-pixel-react"," package. It provides a simple hook-based API with full TypeScript support.",[53,12952,9713],{"id":9712},[12,12954,10850],{},[4313,12956,12957,12960],{},[1243,12958,12959],{},"A React 18+ application",[1243,12961,10858,12962,8376],{},[31,12963,9725],{"href":9724},[53,12965,10864],{"id":10863},[12,12967,11297,12968,12972],{},[31,12969,12949],{"href":12970,"rel":12971,"target":8663},"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@adkit\u002Fmeta-pixel-react",[46]," package:",[5086,12974,12976],{"className":6137,"code":12975,"language":6139,"meta":1462,"style":1462},"npm install @adkit\u002Fmeta-pixel-react\n",[4815,12977,12978],{"__ignoreMap":1462},[1081,12979,12980,12982,12984],{"class":6144,"line":6145},[1081,12981,8712],{"class":6148},[1081,12983,6153],{"class":6152},[1081,12985,12986],{"class":6152}," @adkit\u002Fmeta-pixel-react\n",[53,12988,12990],{"id":12989},"how-to-initialize-the-pixel","How to Initialize the Pixel",[12,12992,12993,12994,12997],{},"Wrap your app with ",[4815,12995,12996],{},"MetaPixelProvider"," to initialize the pixel:",[5086,12999,13002],{"className":9756,"code":13000,"filename":13001,"language":9759,"meta":1462,"style":1462},"import { MetaPixelProvider } from '@adkit\u002Fmeta-pixel-react';\n\nReactDOM.createRoot(document.getElementById('root')!).render(\n    \u003CMetaPixelProvider pixelIds=\"YOUR_PIXEL_ID\" debug={true}>\n        \u003CApp \u002F>\n    \u003C\u002FMetaPixelProvider>,\n);\n","main.tsx",[4815,13003,13004,13025,13029,13070,13096,13106,13115],{"__ignoreMap":1462},[1081,13005,13006,13008,13010,13013,13015,13017,13019,13021,13023],{"class":6144,"line":6145},[1081,13007,9766],{"class":9095},[1081,13009,9769],{"class":6288},[1081,13011,13012],{"class":6204}," MetaPixelProvider",[1081,13014,9775],{"class":6288},[1081,13016,9778],{"class":9095},[1081,13018,9435],{"class":6288},[1081,13020,12949],{"class":6152},[1081,13022,9260],{"class":6288},[1081,13024,9268],{"class":6288},[1081,13026,13027],{"class":6144,"line":1463},[1081,13028,8738],{"emptyLinePlaceholder":1547},[1081,13030,13031,13034,13036,13039,13042,13044,13047,13049,13051,13054,13056,13058,13060,13062,13064,13067],{"class":6144,"line":1468},[1081,13032,13033],{"class":6204},"ReactDOM",[1081,13035,1446],{"class":6288},[1081,13037,13038],{"class":9125},"createRoot",[1081,13040,13041],{"class":6204},"(document",[1081,13043,1446],{"class":6288},[1081,13045,13046],{"class":9125},"getElementById",[1081,13048,9050],{"class":6204},[1081,13050,9260],{"class":6288},[1081,13052,13053],{"class":6152},"root",[1081,13055,9260],{"class":6288},[1081,13057,8376],{"class":6204},[1081,13059,9200],{"class":6288},[1081,13061,8376],{"class":6204},[1081,13063,1446],{"class":6288},[1081,13065,13066],{"class":9125},"render",[1081,13068,13069],{"class":6204},"(\n",[1081,13071,13072,13074,13076,13079,13081,13083,13085,13087,13090,13092,13094],{"class":6144,"line":6397},[1081,13073,11988],{"class":6288},[1081,13075,12996],{"class":6148},[1081,13077,13078],{"class":6467}," pixelIds",[1081,13080,9118],{"class":6288},[1081,13082,6471],{"class":6288},[1081,13084,9438],{"class":6152},[1081,13086,6471],{"class":6288},[1081,13088,13089],{"class":6467}," debug",[1081,13091,10145],{"class":6288},[1081,13093,10450],{"class":10449},[1081,13095,10463],{"class":6288},[1081,13097,13098,13100,13103],{"class":6144,"line":6407},[1081,13099,9846],{"class":6288},[1081,13101,13102],{"class":6148},"App",[1081,13104,13105],{"class":6288}," \u002F>\n",[1081,13107,13108,13110,13112],{"class":6144,"line":6421},[1081,13109,12044],{"class":6288},[1081,13111,12996],{"class":6148},[1081,13113,13114],{"class":6288},">,\n",[1081,13116,13117,13119],{"class":6144,"line":6579},[1081,13118,8376],{"class":6204},[1081,13120,9268],{"class":6288},[12,13122,13123,13124,13126],{},"Then use the ",[4815,13125,9978],{}," hook anywhere in your app:",[5086,13128,13131],{"className":9756,"code":13129,"filename":13130,"language":9759,"meta":1462,"style":1462},"import { useMetaPixel } from '@adkit\u002Fmeta-pixel-react';\n\nfunction CheckoutButton() {\n    const meta = useMetaPixel();\n\n    function handleClick() {\n        meta.track('InitiateCheckout');\n    }\n\n    return \u003Cbutton onClick={handleClick}>Checkout\u003C\u002Fbutton>;\n}\n","components\u002FCheckoutButton.tsx",[4815,13132,13133,13153,13157,13167,13181,13185,13195,13215,13219,13223,13247],{"__ignoreMap":1462},[1081,13134,13135,13137,13139,13141,13143,13145,13147,13149,13151],{"class":6144,"line":6145},[1081,13136,9766],{"class":9095},[1081,13138,9769],{"class":6288},[1081,13140,10009],{"class":6204},[1081,13142,9775],{"class":6288},[1081,13144,9778],{"class":9095},[1081,13146,9435],{"class":6288},[1081,13148,12949],{"class":6152},[1081,13150,9260],{"class":6288},[1081,13152,9268],{"class":6288},[1081,13154,13155],{"class":6144,"line":1463},[1081,13156,8738],{"emptyLinePlaceholder":1547},[1081,13158,13159,13161,13163,13165],{"class":6144,"line":1468},[1081,13160,9047],{"class":6467},[1081,13162,10034],{"class":9125},[1081,13164,10037],{"class":6288},[1081,13166,6476],{"class":6288},[1081,13168,13169,13171,13173,13175,13177,13179],{"class":6144,"line":6397},[1081,13170,10044],{"class":6467},[1081,13172,10047],{"class":6204},[1081,13174,10050],{"class":6288},[1081,13176,10009],{"class":9125},[1081,13178,10037],{"class":6585},[1081,13180,9268],{"class":6288},[1081,13182,13183],{"class":6144,"line":6407},[1081,13184,8738],{"emptyLinePlaceholder":1547},[1081,13186,13187,13189,13191,13193],{"class":6144,"line":6421},[1081,13188,10065],{"class":6467},[1081,13190,10068],{"class":9125},[1081,13192,10037],{"class":6288},[1081,13194,6476],{"class":6288},[1081,13196,13197,13199,13201,13203,13205,13207,13209,13211,13213],{"class":6144,"line":6579},[1081,13198,10077],{"class":6204},[1081,13200,1446],{"class":6288},[1081,13202,9455],{"class":9125},[1081,13204,9050],{"class":6585},[1081,13206,9260],{"class":6288},[1081,13208,8861],{"class":6152},[1081,13210,9260],{"class":6288},[1081,13212,8376],{"class":6585},[1081,13214,9268],{"class":6288},[1081,13216,13217],{"class":6144,"line":6601},[1081,13218,6674],{"class":6288},[1081,13220,13221],{"class":6144,"line":6621},[1081,13222,8738],{"emptyLinePlaceholder":1547},[1081,13224,13225,13227,13229,13231,13233,13235,13237,13239,13241,13243,13245],{"class":6144,"line":6641},[1081,13226,9838],{"class":9095},[1081,13228,10136],{"class":6288},[1081,13230,10139],{"class":6585},[1081,13232,10142],{"class":6467},[1081,13234,10145],{"class":6288},[1081,13236,10148],{"class":6204},[1081,13238,10151],{"class":6288},[1081,13240,10154],{"class":6204},[1081,13242,9474],{"class":6288},[1081,13244,10139],{"class":6585},[1081,13246,10161],{"class":6288},[1081,13248,13249],{"class":6144,"line":6659},[1081,13250,6680],{"class":6288},[12,13252,13253],{},"That's it! Your pixel is now tracking page views automatically.",[58,13255,13257],{"id":13256},"alternative-standalone-hook","Alternative: Standalone Hook",[12,13259,13260],{},"If you prefer not to use a Provider, you can initialize directly with the hook:",[5086,13262,13265],{"className":9756,"code":13263,"filename":13264,"language":9759,"meta":1462,"style":1462},"import { useMetaPixel } from '@adkit\u002Fmeta-pixel-react';\n\nfunction App() {\n    useMetaPixel({ pixelIds: 'YOUR_PIXEL_ID' });\n    return \u003CYourApp \u002F>;\n}\n","App.tsx",[4815,13266,13267,13287,13291,13302,13327,13339],{"__ignoreMap":1462},[1081,13268,13269,13271,13273,13275,13277,13279,13281,13283,13285],{"class":6144,"line":6145},[1081,13270,9766],{"class":9095},[1081,13272,9769],{"class":6288},[1081,13274,10009],{"class":6204},[1081,13276,9775],{"class":6288},[1081,13278,9778],{"class":9095},[1081,13280,9435],{"class":6288},[1081,13282,12949],{"class":6152},[1081,13284,9260],{"class":6288},[1081,13286,9268],{"class":6288},[1081,13288,13289],{"class":6144,"line":1463},[1081,13290,8738],{"emptyLinePlaceholder":1547},[1081,13292,13293,13295,13298,13300],{"class":6144,"line":1468},[1081,13294,9047],{"class":6467},[1081,13296,13297],{"class":9125}," App",[1081,13299,10037],{"class":6288},[1081,13301,6476],{"class":6288},[1081,13303,13304,13306,13308,13311,13313,13315,13317,13319,13321,13323,13325],{"class":6144,"line":6397},[1081,13305,11370],{"class":9125},[1081,13307,9050],{"class":6585},[1081,13309,13310],{"class":6288},"{",[1081,13312,13078],{"class":6585},[1081,13314,5514],{"class":6288},[1081,13316,9435],{"class":6288},[1081,13318,9438],{"class":6152},[1081,13320,9260],{"class":6288},[1081,13322,9775],{"class":6288},[1081,13324,8376],{"class":6585},[1081,13326,9268],{"class":6288},[1081,13328,13329,13331,13333,13336],{"class":6144,"line":6407},[1081,13330,9838],{"class":9095},[1081,13332,10136],{"class":6288},[1081,13334,13335],{"class":6148},"YourApp",[1081,13337,13338],{"class":6288}," \u002F>;\n",[1081,13340,13341],{"class":6144,"line":6421},[1081,13342,6680],{"class":6288},[12,13344,13345,13346,13348],{},"Then use ",[4815,13347,11315],{}," without config in child components. It will use the already-initialized instance.",[53,13350,11195],{"id":11194},[12,13352,13353],{},"Enable localhost tracking and debug mode during development:",[5086,13355,13357],{"className":9756,"code":13356,"language":9759,"meta":1462,"style":1462},"useMetaPixel({\n    pixelIds: 'YOUR_PIXEL_ID',\n    enableLocalhost: true, \u002F\u002F Enable for testing\n    debug: true, \u002F\u002F Show console logs\n});\n",[4815,13358,13359,13367,13381,13395,13409],{"__ignoreMap":1462},[1081,13360,13361,13363,13365],{"class":6144,"line":6145},[1081,13362,9978],{"class":9125},[1081,13364,9050],{"class":6204},[1081,13366,6459],{"class":6288},[1081,13368,13369,13371,13373,13375,13377,13379],{"class":6144,"line":1463},[1081,13370,11123],{"class":6585},[1081,13372,5514],{"class":6288},[1081,13374,9435],{"class":6288},[1081,13376,9438],{"class":6152},[1081,13378,9260],{"class":6288},[1081,13380,6511],{"class":6288},[1081,13382,13383,13386,13388,13390,13392],{"class":6144,"line":1468},[1081,13384,13385],{"class":6585},"    enableLocalhost",[1081,13387,5514],{"class":6288},[1081,13389,11244],{"class":10449},[1081,13391,6535],{"class":6288},[1081,13393,13394],{"class":9027}," \u002F\u002F Enable for testing\n",[1081,13396,13397,13400,13402,13404,13406],{"class":6144,"line":6397},[1081,13398,13399],{"class":6585},"    debug",[1081,13401,5514],{"class":6288},[1081,13403,11244],{"class":10449},[1081,13405,6535],{"class":6288},[1081,13407,13408],{"class":9027}," \u002F\u002F Show console logs\n",[1081,13410,13411,13413,13415],{"class":6144,"line":6407},[1081,13412,9384],{"class":6288},[1081,13414,8376],{"class":6204},[1081,13416,9268],{"class":6288},[58,13418,11269],{"id":11268},[11096,13420,13421,13431],{},[11099,13422,13423,13427],{"icon":11278,"label":11277},[12,13424,11281,13425,11285],{},[4815,13426,11284],{},[12,13428,13429],{},[5038,13430],{"alt":11290,"src":11291,"width":8830},[11099,13432,13433,13438],{"icon":11294,"label":8822},[12,13434,11297,13435,11301],{},[31,13436,8822],{"href":8820,"rel":13437,"target":8663},[46],[12,13439,13440],{},[5038,13441],{"alt":10490,"src":9587,"width":8830},[53,13443,13445],{"id":13444},"how-to-track-pageview-in-spas","How to Track PageView in SPAs",[12,13447,13448,13449,3754,13451,13454],{},"React apps are Single Page Applications (SPAs), so the browser doesn't reload between pages. The pixel tracks ",[4815,13450,8841],{},[19,13452,13453],{},"once"," on initialization, but you need to track it manually on route changes.",[58,13456,13458],{"id":13457},"with-react-router","With React Router",[5086,13460,13462],{"className":9756,"code":13461,"filename":13264,"language":9759,"meta":1462,"style":1462},"import { useMetaPixel } from '@adkit\u002Fmeta-pixel-react';\nimport { useLocation } from 'react-router-dom';\nimport { useEffect } from 'react';\n\nfunction App() {\n    const meta = useMetaPixel();\n    const location = useLocation();\n\n    useEffect(() => {\n        meta.track('PageView');\n    }, [location.pathname]);\n\n    return \u003CRoutes>...\u003C\u002FRoutes>;\n}\n",[4815,13463,13464,13484,13506,13528,13532,13542,13556,13571,13575,13588,13608,13628,13632,13652],{"__ignoreMap":1462},[1081,13465,13466,13468,13470,13472,13474,13476,13478,13480,13482],{"class":6144,"line":6145},[1081,13467,9766],{"class":9095},[1081,13469,9769],{"class":6288},[1081,13471,10009],{"class":6204},[1081,13473,9775],{"class":6288},[1081,13475,9778],{"class":9095},[1081,13477,9435],{"class":6288},[1081,13479,12949],{"class":6152},[1081,13481,9260],{"class":6288},[1081,13483,9268],{"class":6288},[1081,13485,13486,13488,13490,13493,13495,13497,13499,13502,13504],{"class":6144,"line":1463},[1081,13487,9766],{"class":9095},[1081,13489,9769],{"class":6288},[1081,13491,13492],{"class":6204}," useLocation",[1081,13494,9775],{"class":6288},[1081,13496,9778],{"class":9095},[1081,13498,9435],{"class":6288},[1081,13500,13501],{"class":6152},"react-router-dom",[1081,13503,9260],{"class":6288},[1081,13505,9268],{"class":6288},[1081,13507,13508,13510,13512,13515,13517,13519,13521,13524,13526],{"class":6144,"line":1468},[1081,13509,9766],{"class":9095},[1081,13511,9769],{"class":6288},[1081,13513,13514],{"class":6204}," useEffect",[1081,13516,9775],{"class":6288},[1081,13518,9778],{"class":9095},[1081,13520,9435],{"class":6288},[1081,13522,13523],{"class":6152},"react",[1081,13525,9260],{"class":6288},[1081,13527,9268],{"class":6288},[1081,13529,13530],{"class":6144,"line":6397},[1081,13531,8738],{"emptyLinePlaceholder":1547},[1081,13533,13534,13536,13538,13540],{"class":6144,"line":6407},[1081,13535,9047],{"class":6467},[1081,13537,13297],{"class":9125},[1081,13539,10037],{"class":6288},[1081,13541,6476],{"class":6288},[1081,13543,13544,13546,13548,13550,13552,13554],{"class":6144,"line":6421},[1081,13545,10044],{"class":6467},[1081,13547,10047],{"class":6204},[1081,13549,10050],{"class":6288},[1081,13551,10009],{"class":9125},[1081,13553,10037],{"class":6585},[1081,13555,9268],{"class":6288},[1081,13557,13558,13560,13563,13565,13567,13569],{"class":6144,"line":6579},[1081,13559,10044],{"class":6467},[1081,13561,13562],{"class":6204}," location",[1081,13564,10050],{"class":6288},[1081,13566,13492],{"class":9125},[1081,13568,10037],{"class":6585},[1081,13570,9268],{"class":6288},[1081,13572,13573],{"class":6144,"line":6601},[1081,13574,8738],{"emptyLinePlaceholder":1547},[1081,13576,13577,13580,13582,13584,13586],{"class":6144,"line":6621},[1081,13578,13579],{"class":9125},"    useEffect",[1081,13581,9050],{"class":6585},[1081,13583,10037],{"class":6288},[1081,13585,11363],{"class":6467},[1081,13587,6476],{"class":6288},[1081,13589,13590,13592,13594,13596,13598,13600,13602,13604,13606],{"class":6144,"line":6641},[1081,13591,10077],{"class":6204},[1081,13593,1446],{"class":6288},[1081,13595,9455],{"class":9125},[1081,13597,9050],{"class":6585},[1081,13599,9260],{"class":6288},[1081,13601,8841],{"class":6152},[1081,13603,9260],{"class":6288},[1081,13605,8376],{"class":6585},[1081,13607,9268],{"class":6288},[1081,13609,13610,13613,13615,13618,13620,13623,13626],{"class":6144,"line":6659},[1081,13611,13612],{"class":6288},"    },",[1081,13614,6525],{"class":6585},[1081,13616,13617],{"class":6204},"location",[1081,13619,1446],{"class":6288},[1081,13621,13622],{"class":6204},"pathname",[1081,13624,13625],{"class":6585},"])",[1081,13627,9268],{"class":6288},[1081,13629,13630],{"class":6144,"line":6665},[1081,13631,8738],{"emptyLinePlaceholder":1547},[1081,13633,13634,13636,13638,13641,13643,13646,13648,13650],{"class":6144,"line":6671},[1081,13635,9838],{"class":9095},[1081,13637,10136],{"class":6288},[1081,13639,13640],{"class":6148},"Routes",[1081,13642,9968],{"class":6288},[1081,13644,13645],{"class":6204},"...",[1081,13647,9474],{"class":6288},[1081,13649,13640],{"class":6148},[1081,13651,10161],{"class":6288},[1081,13653,13654],{"class":6144,"line":6677},[1081,13655,6680],{"class":6288},[58,13657,13659],{"id":13658},"with-nextjs-app-router","With Next.js App Router",[5086,13661,13663],{"className":9756,"code":13662,"filename":9758,"language":9759,"meta":1462,"style":1462},"'use client';\n\nimport { useMetaPixel } from '@adkit\u002Fmeta-pixel-react';\nimport { usePathname } from 'next\u002Fnavigation';\nimport { useEffect } from 'react';\n\nexport default function RootLayout({ children }) {\n    const meta = useMetaPixel();\n    const pathname = usePathname();\n\n    useEffect(() => {\n        meta.track('PageView');\n    }, [pathname]);\n\n    return \u003Chtml>...\u003C\u002Fhtml>;\n}\n",[4815,13664,13665,13675,13679,13699,13721,13741,13745,13763,13777,13792,13796,13808,13828,13840,13844,13862],{"__ignoreMap":1462},[1081,13666,13667,13669,13671,13673],{"class":6144,"line":6145},[1081,13668,9260],{"class":6288},[1081,13670,9992],{"class":6152},[1081,13672,9260],{"class":6288},[1081,13674,9268],{"class":6288},[1081,13676,13677],{"class":6144,"line":1463},[1081,13678,8738],{"emptyLinePlaceholder":1547},[1081,13680,13681,13683,13685,13687,13689,13691,13693,13695,13697],{"class":6144,"line":1468},[1081,13682,9766],{"class":9095},[1081,13684,9769],{"class":6288},[1081,13686,10009],{"class":6204},[1081,13688,9775],{"class":6288},[1081,13690,9778],{"class":9095},[1081,13692,9435],{"class":6288},[1081,13694,12949],{"class":6152},[1081,13696,9260],{"class":6288},[1081,13698,9268],{"class":6288},[1081,13700,13701,13703,13705,13708,13710,13712,13714,13717,13719],{"class":6144,"line":6397},[1081,13702,9766],{"class":9095},[1081,13704,9769],{"class":6288},[1081,13706,13707],{"class":6204}," usePathname",[1081,13709,9775],{"class":6288},[1081,13711,9778],{"class":9095},[1081,13713,9435],{"class":6288},[1081,13715,13716],{"class":6152},"next\u002Fnavigation",[1081,13718,9260],{"class":6288},[1081,13720,9268],{"class":6288},[1081,13722,13723,13725,13727,13729,13731,13733,13735,13737,13739],{"class":6144,"line":6407},[1081,13724,9766],{"class":9095},[1081,13726,9769],{"class":6288},[1081,13728,13514],{"class":6204},[1081,13730,9775],{"class":6288},[1081,13732,9778],{"class":9095},[1081,13734,9435],{"class":6288},[1081,13736,13523],{"class":6152},[1081,13738,9260],{"class":6288},[1081,13740,9268],{"class":6288},[1081,13742,13743],{"class":6144,"line":6421},[1081,13744,8738],{"emptyLinePlaceholder":1547},[1081,13746,13747,13749,13751,13753,13755,13757,13759,13761],{"class":6144,"line":6579},[1081,13748,9796],{"class":9095},[1081,13750,9799],{"class":9095},[1081,13752,9802],{"class":6467},[1081,13754,9805],{"class":9125},[1081,13756,9808],{"class":6288},[1081,13758,9811],{"class":9053},[1081,13760,9831],{"class":6288},[1081,13762,6476],{"class":6288},[1081,13764,13765,13767,13769,13771,13773,13775],{"class":6144,"line":6601},[1081,13766,10044],{"class":6467},[1081,13768,10047],{"class":6204},[1081,13770,10050],{"class":6288},[1081,13772,10009],{"class":9125},[1081,13774,10037],{"class":6585},[1081,13776,9268],{"class":6288},[1081,13778,13779,13781,13784,13786,13788,13790],{"class":6144,"line":6621},[1081,13780,10044],{"class":6467},[1081,13782,13783],{"class":6204}," pathname",[1081,13785,10050],{"class":6288},[1081,13787,13707],{"class":9125},[1081,13789,10037],{"class":6585},[1081,13791,9268],{"class":6288},[1081,13793,13794],{"class":6144,"line":6641},[1081,13795,8738],{"emptyLinePlaceholder":1547},[1081,13797,13798,13800,13802,13804,13806],{"class":6144,"line":6659},[1081,13799,13579],{"class":9125},[1081,13801,9050],{"class":6585},[1081,13803,10037],{"class":6288},[1081,13805,11363],{"class":6467},[1081,13807,6476],{"class":6288},[1081,13809,13810,13812,13814,13816,13818,13820,13822,13824,13826],{"class":6144,"line":6665},[1081,13811,10077],{"class":6204},[1081,13813,1446],{"class":6288},[1081,13815,9455],{"class":9125},[1081,13817,9050],{"class":6585},[1081,13819,9260],{"class":6288},[1081,13821,8841],{"class":6152},[1081,13823,9260],{"class":6288},[1081,13825,8376],{"class":6585},[1081,13827,9268],{"class":6288},[1081,13829,13830,13832,13834,13836,13838],{"class":6144,"line":6671},[1081,13831,13612],{"class":6288},[1081,13833,6525],{"class":6585},[1081,13835,13622],{"class":6204},[1081,13837,13625],{"class":6585},[1081,13839,9268],{"class":6288},[1081,13841,13842],{"class":6144,"line":6677},[1081,13843,8738],{"emptyLinePlaceholder":1547},[1081,13845,13846,13848,13850,13852,13854,13856,13858,13860],{"class":6144,"line":9547},[1081,13847,9838],{"class":9095},[1081,13849,10136],{"class":6288},[1081,13851,9020],{"class":6585},[1081,13853,9968],{"class":6288},[1081,13855,13645],{"class":6204},[1081,13857,9474],{"class":6288},[1081,13859,9020],{"class":6585},[1081,13861,10161],{"class":6288},[1081,13863,13864],{"class":6144,"line":12173},[1081,13865,6680],{"class":6288},[11696,13867,13869],{"type":13868},"info",[12,13870,13871,13872,13875],{},"Set ",[4815,13873,13874],{},"autoTrackPageView: false"," if you want full control over when PageView fires.",[53,13877,13879],{"id":13878},"how-to-track-events","How to Track Events",[58,13881,13883],{"id":13882},"standard-events","Standard Events",[5086,13885,13887],{"className":9756,"code":13886,"language":9759,"meta":1462,"style":1462},"import { useMetaPixel } from '@adkit\u002Fmeta-pixel-react';\n\nfunction PricingPage() {\n    const meta = useMetaPixel();\n\n    function handlePurchase() {\n        meta.track('Purchase', { value: 99.99, currency: 'USD', content_ids: ['pro-plan'] });\n    }\n\n    return \u003Cbutton onClick={handlePurchase}>Buy Pro\u003C\u002Fbutton>;\n}\n",[4815,13888,13889,13909,13913,13924,13938,13942,13953,14016,14020,14024,14050],{"__ignoreMap":1462},[1081,13890,13891,13893,13895,13897,13899,13901,13903,13905,13907],{"class":6144,"line":6145},[1081,13892,9766],{"class":9095},[1081,13894,9769],{"class":6288},[1081,13896,10009],{"class":6204},[1081,13898,9775],{"class":6288},[1081,13900,9778],{"class":9095},[1081,13902,9435],{"class":6288},[1081,13904,12949],{"class":6152},[1081,13906,9260],{"class":6288},[1081,13908,9268],{"class":6288},[1081,13910,13911],{"class":6144,"line":1463},[1081,13912,8738],{"emptyLinePlaceholder":1547},[1081,13914,13915,13917,13920,13922],{"class":6144,"line":1468},[1081,13916,9047],{"class":6467},[1081,13918,13919],{"class":9125}," PricingPage",[1081,13921,10037],{"class":6288},[1081,13923,6476],{"class":6288},[1081,13925,13926,13928,13930,13932,13934,13936],{"class":6144,"line":6397},[1081,13927,10044],{"class":6467},[1081,13929,10047],{"class":6204},[1081,13931,10050],{"class":6288},[1081,13933,10009],{"class":9125},[1081,13935,10037],{"class":6585},[1081,13937,9268],{"class":6288},[1081,13939,13940],{"class":6144,"line":6407},[1081,13941,8738],{"emptyLinePlaceholder":1547},[1081,13943,13944,13946,13949,13951],{"class":6144,"line":6421},[1081,13945,10065],{"class":6467},[1081,13947,13948],{"class":9125}," handlePurchase",[1081,13950,10037],{"class":6288},[1081,13952,6476],{"class":6288},[1081,13954,13955,13957,13959,13961,13963,13965,13967,13969,13971,13973,13975,13977,13979,13981,13983,13985,13987,13989,13991,13993,13996,13998,14000,14002,14005,14007,14010,14012,14014],{"class":6144,"line":6579},[1081,13956,10077],{"class":6204},[1081,13958,1446],{"class":6288},[1081,13960,9455],{"class":9125},[1081,13962,9050],{"class":6585},[1081,13964,9260],{"class":6288},[1081,13966,8866],{"class":6152},[1081,13968,9260],{"class":6288},[1081,13970,6535],{"class":6288},[1081,13972,9769],{"class":6288},[1081,13974,10096],{"class":6585},[1081,13976,5514],{"class":6288},[1081,13978,10207],{"class":6415},[1081,13980,6535],{"class":6288},[1081,13982,10106],{"class":6585},[1081,13984,5514],{"class":6288},[1081,13986,9435],{"class":6288},[1081,13988,10113],{"class":6152},[1081,13990,9260],{"class":6288},[1081,13992,6535],{"class":6288},[1081,13994,13995],{"class":6585}," content_ids",[1081,13997,5514],{"class":6288},[1081,13999,6525],{"class":6585},[1081,14001,9260],{"class":6288},[1081,14003,14004],{"class":6152},"pro-plan",[1081,14006,9260],{"class":6288},[1081,14008,14009],{"class":6585},"] ",[1081,14011,9384],{"class":6288},[1081,14013,8376],{"class":6585},[1081,14015,9268],{"class":6288},[1081,14017,14018],{"class":6144,"line":6601},[1081,14019,6674],{"class":6288},[1081,14021,14022],{"class":6144,"line":6621},[1081,14023,8738],{"emptyLinePlaceholder":1547},[1081,14025,14026,14028,14030,14032,14034,14036,14039,14041,14044,14046,14048],{"class":6144,"line":6641},[1081,14027,9838],{"class":9095},[1081,14029,10136],{"class":6288},[1081,14031,10139],{"class":6585},[1081,14033,10142],{"class":6467},[1081,14035,10145],{"class":6288},[1081,14037,14038],{"class":6204},"handlePurchase",[1081,14040,10151],{"class":6288},[1081,14042,14043],{"class":6204},"Buy Pro",[1081,14045,9474],{"class":6288},[1081,14047,10139],{"class":6585},[1081,14049,10161],{"class":6288},[1081,14051,14052],{"class":6144,"line":6659},[1081,14053,6680],{"class":6288},[12,14055,14056,14057,8823],{},"You should see the event in the ",[31,14058,8822],{"href":8820,"rel":14059,"target":8663},[46],[12,14061,14062],{},[5038,14063],{"alt":11590,"src":8829,"width":8830},[58,14065,14067],{"id":14066},"track-on-page-load","Track on Page Load",[5086,14069,14071],{"className":9756,"code":14070,"language":9759,"meta":1462,"style":1462},"import { useMetaPixel } from '@adkit\u002Fmeta-pixel-react';\nimport { useEffect } from 'react';\n\nfunction BlogPost({ postId }: { postId: string }) {\n    const meta = useMetaPixel();\n\n    useEffect(() => {\n        meta.track('ViewContent', { content_id: postId });\n    }, [postId]);\n\n    return \u003Carticle>...\u003C\u002Farticle>;\n}\n",[4815,14072,14073,14093,14113,14117,14143,14157,14161,14173,14205,14218,14222,14241],{"__ignoreMap":1462},[1081,14074,14075,14077,14079,14081,14083,14085,14087,14089,14091],{"class":6144,"line":6145},[1081,14076,9766],{"class":9095},[1081,14078,9769],{"class":6288},[1081,14080,10009],{"class":6204},[1081,14082,9775],{"class":6288},[1081,14084,9778],{"class":9095},[1081,14086,9435],{"class":6288},[1081,14088,12949],{"class":6152},[1081,14090,9260],{"class":6288},[1081,14092,9268],{"class":6288},[1081,14094,14095,14097,14099,14101,14103,14105,14107,14109,14111],{"class":6144,"line":1463},[1081,14096,9766],{"class":9095},[1081,14098,9769],{"class":6288},[1081,14100,13514],{"class":6204},[1081,14102,9775],{"class":6288},[1081,14104,9778],{"class":9095},[1081,14106,9435],{"class":6288},[1081,14108,13523],{"class":6152},[1081,14110,9260],{"class":6288},[1081,14112,9268],{"class":6288},[1081,14114,14115],{"class":6144,"line":1468},[1081,14116,8738],{"emptyLinePlaceholder":1547},[1081,14118,14119,14121,14124,14126,14129,14131,14133,14135,14137,14139,14141],{"class":6144,"line":6397},[1081,14120,9047],{"class":6467},[1081,14122,14123],{"class":9125}," BlogPost",[1081,14125,9808],{"class":6288},[1081,14127,14128],{"class":9053}," postId",[1081,14130,9814],{"class":6288},[1081,14132,9769],{"class":6288},[1081,14134,14128],{"class":6585},[1081,14136,5514],{"class":6288},[1081,14138,12508],{"class":6148},[1081,14140,9831],{"class":6288},[1081,14142,6476],{"class":6288},[1081,14144,14145,14147,14149,14151,14153,14155],{"class":6144,"line":6407},[1081,14146,10044],{"class":6467},[1081,14148,10047],{"class":6204},[1081,14150,10050],{"class":6288},[1081,14152,10009],{"class":9125},[1081,14154,10037],{"class":6585},[1081,14156,9268],{"class":6288},[1081,14158,14159],{"class":6144,"line":6421},[1081,14160,8738],{"emptyLinePlaceholder":1547},[1081,14162,14163,14165,14167,14169,14171],{"class":6144,"line":6579},[1081,14164,13579],{"class":9125},[1081,14166,9050],{"class":6585},[1081,14168,10037],{"class":6288},[1081,14170,11363],{"class":6467},[1081,14172,6476],{"class":6288},[1081,14174,14175,14177,14179,14181,14183,14185,14187,14189,14191,14193,14195,14197,14199,14201,14203],{"class":6144,"line":6601},[1081,14176,10077],{"class":6204},[1081,14178,1446],{"class":6288},[1081,14180,9455],{"class":9125},[1081,14182,9050],{"class":6585},[1081,14184,9260],{"class":6288},[1081,14186,8846],{"class":6152},[1081,14188,9260],{"class":6288},[1081,14190,6535],{"class":6288},[1081,14192,9769],{"class":6288},[1081,14194,10286],{"class":6585},[1081,14196,5514],{"class":6288},[1081,14198,14128],{"class":6204},[1081,14200,9775],{"class":6288},[1081,14202,8376],{"class":6585},[1081,14204,9268],{"class":6288},[1081,14206,14207,14209,14211,14214,14216],{"class":6144,"line":6621},[1081,14208,13612],{"class":6288},[1081,14210,6525],{"class":6585},[1081,14212,14213],{"class":6204},"postId",[1081,14215,13625],{"class":6585},[1081,14217,9268],{"class":6288},[1081,14219,14220],{"class":6144,"line":6641},[1081,14221,8738],{"emptyLinePlaceholder":1547},[1081,14223,14224,14226,14228,14231,14233,14235,14237,14239],{"class":6144,"line":6659},[1081,14225,9838],{"class":9095},[1081,14227,10136],{"class":6288},[1081,14229,14230],{"class":6585},"article",[1081,14232,9968],{"class":6288},[1081,14234,13645],{"class":6204},[1081,14236,9474],{"class":6288},[1081,14238,14230],{"class":6585},[1081,14240,10161],{"class":6288},[1081,14242,14243],{"class":6144,"line":6665},[1081,14244,6680],{"class":6288},[58,14246,11594],{"id":11593},[12,14248,14249],{},"For events not in the standard list:",[5086,14251,14253],{"className":9756,"code":14252,"language":9759,"meta":1462,"style":1462},"const meta = useMetaPixel();\n\nmeta.trackCustom('VideoWatched', { video_id: 'intro-video', duration: 120 });\n",[4815,14254,14255,14269,14273],{"__ignoreMap":1462},[1081,14256,14257,14259,14261,14263,14265,14267],{"class":6144,"line":6145},[1081,14258,11446],{"class":6467},[1081,14260,11449],{"class":6204},[1081,14262,9118],{"class":6288},[1081,14264,10009],{"class":9125},[1081,14266,10037],{"class":6204},[1081,14268,9268],{"class":6288},[1081,14270,14271],{"class":6144,"line":1463},[1081,14272,8738],{"emptyLinePlaceholder":1547},[1081,14274,14275,14277,14279,14281,14283,14285,14287,14289,14291,14293,14295,14297,14299,14302,14304,14306,14309,14311,14314,14316,14318],{"class":6144,"line":1468},[1081,14276,10184],{"class":6204},[1081,14278,1446],{"class":6288},[1081,14280,10318],{"class":9125},[1081,14282,9050],{"class":6204},[1081,14284,9260],{"class":6288},[1081,14286,10325],{"class":6152},[1081,14288,9260],{"class":6288},[1081,14290,6535],{"class":6288},[1081,14292,9769],{"class":6288},[1081,14294,10334],{"class":6585},[1081,14296,5514],{"class":6288},[1081,14298,9435],{"class":6288},[1081,14300,14301],{"class":6152},"intro-video",[1081,14303,9260],{"class":6288},[1081,14305,6535],{"class":6288},[1081,14307,14308],{"class":6585}," duration",[1081,14310,5514],{"class":6288},[1081,14312,14313],{"class":6415}," 120",[1081,14315,9775],{"class":6288},[1081,14317,8376],{"class":6204},[1081,14319,9268],{"class":6288},[11696,14321,14322],{"type":9558},[12,14323,11700,14324,11704],{},[31,14325,8914],{"href":8912,"rel":14326,"target":8663},[46],[53,14328,8919],{"id":8918},[12,14330,8922],{},[4585,14332,14333,14341],{},[4588,14334,14335],{},[4591,14336,14337,14339],{},[4594,14338,8931],{},[4594,14340,8934],{},[4602,14342,14343,14351,14359,14367,14375],{},[4591,14344,14345,14349],{},[4607,14346,14347],{},[4815,14348,8846],{},[4607,14350,8945],{},[4591,14352,14353,14357],{},[4607,14354,14355],{},[4815,14356,8871],{},[4607,14358,8954],{},[4591,14360,14361,14365],{},[4607,14362,14363],{},[4815,14364,8876],{},[4607,14366,8963],{},[4591,14368,14369,14373],{},[4607,14370,14371],{},[4815,14372,8886],{},[4607,14374,8972],{},[4591,14376,14377,14383],{},[4607,14378,14379,8979,14381],{},[4815,14380,8881],{},[4815,14382,8866],{},[4607,14384,8984,14385,8988],{},[4815,14386,8987],{},[12,14388,8991,14389,10414],{},[19,14390,8994],{},[53,14392,11845],{"id":11844},[12,14394,14395],{},"Here's a complete React project structure with Meta Pixel:",[11850,14397,14399,14577,14885,15138],{"default-value":14398},"src\u002Fmain.tsx",[5086,14400,14402],{"className":9756,"code":14401,"filename":14398,"language":9759,"meta":1462,"style":1462},"import { MetaPixelProvider } from '@adkit\u002Fmeta-pixel-react';\nimport { BrowserRouter } from 'react-router-dom';\nimport ReactDOM from 'react-dom\u002Fclient';\nimport App from '.\u002FApp';\n\nReactDOM.createRoot(document.getElementById('root')!).render(\n    \u003CBrowserRouter>\n        \u003CMetaPixelProvider pixelIds=\"YOUR_PIXEL_ID\">\n            \u003CApp \u002F>\n        \u003C\u002FMetaPixelProvider>\n    \u003C\u002FBrowserRouter>,\n);\n",[4815,14403,14404,14424,14445,14464,14482,14486,14520,14529,14547,14555,14563,14571],{"__ignoreMap":1462},[1081,14405,14406,14408,14410,14412,14414,14416,14418,14420,14422],{"class":6144,"line":6145},[1081,14407,9766],{"class":9095},[1081,14409,9769],{"class":6288},[1081,14411,13012],{"class":6204},[1081,14413,9775],{"class":6288},[1081,14415,9778],{"class":9095},[1081,14417,9435],{"class":6288},[1081,14419,12949],{"class":6152},[1081,14421,9260],{"class":6288},[1081,14423,9268],{"class":6288},[1081,14425,14426,14428,14430,14433,14435,14437,14439,14441,14443],{"class":6144,"line":1463},[1081,14427,9766],{"class":9095},[1081,14429,9769],{"class":6288},[1081,14431,14432],{"class":6204}," BrowserRouter",[1081,14434,9775],{"class":6288},[1081,14436,9778],{"class":9095},[1081,14438,9435],{"class":6288},[1081,14440,13501],{"class":6152},[1081,14442,9260],{"class":6288},[1081,14444,9268],{"class":6288},[1081,14446,14447,14449,14452,14455,14457,14460,14462],{"class":6144,"line":1468},[1081,14448,9766],{"class":9095},[1081,14450,14451],{"class":6204}," ReactDOM ",[1081,14453,14454],{"class":9095},"from",[1081,14456,9435],{"class":6288},[1081,14458,14459],{"class":6152},"react-dom\u002Fclient",[1081,14461,9260],{"class":6288},[1081,14463,9268],{"class":6288},[1081,14465,14466,14468,14471,14473,14475,14478,14480],{"class":6144,"line":6397},[1081,14467,9766],{"class":9095},[1081,14469,14470],{"class":6204}," App ",[1081,14472,14454],{"class":9095},[1081,14474,9435],{"class":6288},[1081,14476,14477],{"class":6152},".\u002FApp",[1081,14479,9260],{"class":6288},[1081,14481,9268],{"class":6288},[1081,14483,14484],{"class":6144,"line":6407},[1081,14485,8738],{"emptyLinePlaceholder":1547},[1081,14487,14488,14490,14492,14494,14496,14498,14500,14502,14504,14506,14508,14510,14512,14514,14516,14518],{"class":6144,"line":6421},[1081,14489,13033],{"class":6204},[1081,14491,1446],{"class":6288},[1081,14493,13038],{"class":9125},[1081,14495,13041],{"class":6204},[1081,14497,1446],{"class":6288},[1081,14499,13046],{"class":9125},[1081,14501,9050],{"class":6204},[1081,14503,9260],{"class":6288},[1081,14505,13053],{"class":6152},[1081,14507,9260],{"class":6288},[1081,14509,8376],{"class":6204},[1081,14511,9200],{"class":6288},[1081,14513,8376],{"class":6204},[1081,14515,1446],{"class":6288},[1081,14517,13066],{"class":9125},[1081,14519,13069],{"class":6204},[1081,14521,14522,14524,14527],{"class":6144,"line":6579},[1081,14523,11988],{"class":6288},[1081,14525,14526],{"class":6148},"BrowserRouter",[1081,14528,9039],{"class":6288},[1081,14530,14531,14533,14535,14537,14539,14541,14543,14545],{"class":6144,"line":6601},[1081,14532,9846],{"class":6288},[1081,14534,12996],{"class":6148},[1081,14536,13078],{"class":6467},[1081,14538,9118],{"class":6288},[1081,14540,6471],{"class":6288},[1081,14542,9438],{"class":6152},[1081,14544,6471],{"class":6288},[1081,14546,9039],{"class":6288},[1081,14548,14549,14551,14553],{"class":6144,"line":6621},[1081,14550,9855],{"class":6288},[1081,14552,13102],{"class":6148},[1081,14554,13105],{"class":6288},[1081,14556,14557,14559,14561],{"class":6144,"line":6641},[1081,14558,9905],{"class":6288},[1081,14560,12996],{"class":6148},[1081,14562,9039],{"class":6288},[1081,14564,14565,14567,14569],{"class":6144,"line":6659},[1081,14566,12044],{"class":6288},[1081,14568,14526],{"class":6148},[1081,14570,13114],{"class":6288},[1081,14572,14573,14575],{"class":6144,"line":6665},[1081,14574,8376],{"class":6204},[1081,14576,9268],{"class":6288},[5086,14578,14581],{"className":9756,"code":14579,"filename":14580,"language":9759,"meta":1462,"style":1462},"import { useMetaPixel } from '@adkit\u002Fmeta-pixel-react';\nimport { Routes, Route, useLocation } from 'react-router-dom';\nimport { useEffect } from 'react';\nimport HomePage from '.\u002Fpages\u002FHomePage';\nimport PricingPage from '.\u002Fpages\u002FPricingPage';\n\nexport default function App() {\n    const meta = useMetaPixel();\n    const location = useLocation();\n\n    \u002F\u002F Track PageView on route change\n    useEffect(() => {\n        meta.track('PageView');\n    }, [location.pathname]);\n\n    return (\n        \u003CRoutes>\n            \u003CRoute path=\"\u002F\" element={\u003CHomePage \u002F>} \u002F>\n            \u003CRoute path=\"\u002Fpricing\" element={\u003CPricingPage \u002F>} \u002F>\n        \u003C\u002FRoutes>\n    );\n}\n","src\u002FApp.tsx",[4815,14582,14583,14603,14633,14653,14671,14689,14693,14707,14721,14735,14739,14744,14756,14776,14792,14796,14802,14810,14841,14867,14875,14881],{"__ignoreMap":1462},[1081,14584,14585,14587,14589,14591,14593,14595,14597,14599,14601],{"class":6144,"line":6145},[1081,14586,9766],{"class":9095},[1081,14588,9769],{"class":6288},[1081,14590,10009],{"class":6204},[1081,14592,9775],{"class":6288},[1081,14594,9778],{"class":9095},[1081,14596,9435],{"class":6288},[1081,14598,12949],{"class":6152},[1081,14600,9260],{"class":6288},[1081,14602,9268],{"class":6288},[1081,14604,14605,14607,14609,14612,14614,14617,14619,14621,14623,14625,14627,14629,14631],{"class":6144,"line":1463},[1081,14606,9766],{"class":9095},[1081,14608,9769],{"class":6288},[1081,14610,14611],{"class":6204}," Routes",[1081,14613,6535],{"class":6288},[1081,14615,14616],{"class":6204}," Route",[1081,14618,6535],{"class":6288},[1081,14620,13492],{"class":6204},[1081,14622,9775],{"class":6288},[1081,14624,9778],{"class":9095},[1081,14626,9435],{"class":6288},[1081,14628,13501],{"class":6152},[1081,14630,9260],{"class":6288},[1081,14632,9268],{"class":6288},[1081,14634,14635,14637,14639,14641,14643,14645,14647,14649,14651],{"class":6144,"line":1468},[1081,14636,9766],{"class":9095},[1081,14638,9769],{"class":6288},[1081,14640,13514],{"class":6204},[1081,14642,9775],{"class":6288},[1081,14644,9778],{"class":9095},[1081,14646,9435],{"class":6288},[1081,14648,13523],{"class":6152},[1081,14650,9260],{"class":6288},[1081,14652,9268],{"class":6288},[1081,14654,14655,14657,14660,14662,14664,14667,14669],{"class":6144,"line":6397},[1081,14656,9766],{"class":9095},[1081,14658,14659],{"class":6204}," HomePage ",[1081,14661,14454],{"class":9095},[1081,14663,9435],{"class":6288},[1081,14665,14666],{"class":6152},".\u002Fpages\u002FHomePage",[1081,14668,9260],{"class":6288},[1081,14670,9268],{"class":6288},[1081,14672,14673,14675,14678,14680,14682,14685,14687],{"class":6144,"line":6407},[1081,14674,9766],{"class":9095},[1081,14676,14677],{"class":6204}," PricingPage ",[1081,14679,14454],{"class":9095},[1081,14681,9435],{"class":6288},[1081,14683,14684],{"class":6152},".\u002Fpages\u002FPricingPage",[1081,14686,9260],{"class":6288},[1081,14688,9268],{"class":6288},[1081,14690,14691],{"class":6144,"line":6421},[1081,14692,8738],{"emptyLinePlaceholder":1547},[1081,14694,14695,14697,14699,14701,14703,14705],{"class":6144,"line":6579},[1081,14696,9796],{"class":9095},[1081,14698,9799],{"class":9095},[1081,14700,9802],{"class":6467},[1081,14702,13297],{"class":9125},[1081,14704,10037],{"class":6288},[1081,14706,6476],{"class":6288},[1081,14708,14709,14711,14713,14715,14717,14719],{"class":6144,"line":6601},[1081,14710,10044],{"class":6467},[1081,14712,10047],{"class":6204},[1081,14714,10050],{"class":6288},[1081,14716,10009],{"class":9125},[1081,14718,10037],{"class":6585},[1081,14720,9268],{"class":6288},[1081,14722,14723,14725,14727,14729,14731,14733],{"class":6144,"line":6621},[1081,14724,10044],{"class":6467},[1081,14726,13562],{"class":6204},[1081,14728,10050],{"class":6288},[1081,14730,13492],{"class":9125},[1081,14732,10037],{"class":6585},[1081,14734,9268],{"class":6288},[1081,14736,14737],{"class":6144,"line":6641},[1081,14738,8738],{"emptyLinePlaceholder":1547},[1081,14740,14741],{"class":6144,"line":6659},[1081,14742,14743],{"class":9027},"    \u002F\u002F Track PageView on route change\n",[1081,14745,14746,14748,14750,14752,14754],{"class":6144,"line":6665},[1081,14747,13579],{"class":9125},[1081,14749,9050],{"class":6585},[1081,14751,10037],{"class":6288},[1081,14753,11363],{"class":6467},[1081,14755,6476],{"class":6288},[1081,14757,14758,14760,14762,14764,14766,14768,14770,14772,14774],{"class":6144,"line":6671},[1081,14759,10077],{"class":6204},[1081,14761,1446],{"class":6288},[1081,14763,9455],{"class":9125},[1081,14765,9050],{"class":6585},[1081,14767,9260],{"class":6288},[1081,14769,8841],{"class":6152},[1081,14771,9260],{"class":6288},[1081,14773,8376],{"class":6585},[1081,14775,9268],{"class":6288},[1081,14777,14778,14780,14782,14784,14786,14788,14790],{"class":6144,"line":6677},[1081,14779,13612],{"class":6288},[1081,14781,6525],{"class":6585},[1081,14783,13617],{"class":6204},[1081,14785,1446],{"class":6288},[1081,14787,13622],{"class":6204},[1081,14789,13625],{"class":6585},[1081,14791,9268],{"class":6288},[1081,14793,14794],{"class":6144,"line":9547},[1081,14795,8738],{"emptyLinePlaceholder":1547},[1081,14797,14798,14800],{"class":6144,"line":12173},[1081,14799,9838],{"class":9095},[1081,14801,9841],{"class":6585},[1081,14803,14804,14806,14808],{"class":6144,"line":12194},[1081,14805,9846],{"class":6288},[1081,14807,13640],{"class":6148},[1081,14809,9039],{"class":6288},[1081,14811,14812,14814,14817,14820,14822,14824,14827,14829,14832,14835,14838],{"class":6144,"line":12199},[1081,14813,9855],{"class":6288},[1081,14815,14816],{"class":6148},"Route",[1081,14818,14819],{"class":6467}," path",[1081,14821,9118],{"class":6288},[1081,14823,6471],{"class":6288},[1081,14825,14826],{"class":6152},"\u002F",[1081,14828,6471],{"class":6288},[1081,14830,14831],{"class":6467}," element",[1081,14833,14834],{"class":6288},"={\u003C",[1081,14836,14837],{"class":6148},"HomePage",[1081,14839,14840],{"class":6288}," \u002F>} \u002F>\n",[1081,14842,14843,14845,14847,14849,14851,14853,14856,14858,14860,14862,14865],{"class":6144,"line":12480},[1081,14844,9855],{"class":6288},[1081,14846,14816],{"class":6148},[1081,14848,14819],{"class":6467},[1081,14850,9118],{"class":6288},[1081,14852,6471],{"class":6288},[1081,14854,14855],{"class":6152},"\u002Fpricing",[1081,14857,6471],{"class":6288},[1081,14859,14831],{"class":6467},[1081,14861,14834],{"class":6288},[1081,14863,14864],{"class":6148},"PricingPage",[1081,14866,14840],{"class":6288},[1081,14868,14869,14871,14873],{"class":6144,"line":12489},[1081,14870,9905],{"class":6288},[1081,14872,13640],{"class":6148},[1081,14874,9039],{"class":6288},[1081,14876,14877,14879],{"class":6144,"line":12494},[1081,14878,9914],{"class":6585},[1081,14880,9268],{"class":6288},[1081,14882,14883],{"class":6144,"line":12515},[1081,14884,6680],{"class":6288},[5086,14886,14889],{"className":9756,"code":14887,"filename":14888,"language":9759,"meta":1462,"style":1462},"import { useMetaPixel } from '@adkit\u002Fmeta-pixel-react';\nimport { useEffect } from 'react';\n\nexport default function HomePage() {\n    const meta = useMetaPixel();\n\n    useEffect(() => {\n        meta.track('ViewContent', { content_id: 'homepage' });\n    }, []);\n\n    function handleSignup() {\n        meta.track('Lead');\n    }\n\n    return (\n        \u003Cdiv>\n            \u003Ch1>Welcome\u003C\u002Fh1>\n            \u003Cbutton onClick={handleSignup}>Sign Up\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n    );\n}\n","src\u002Fpages\u002FHomePage.tsx",[4815,14890,14891,14911,14931,14935,14950,14964,14968,14980,15016,15025,15029,15039,15059,15063,15067,15073,15081,15098,15120,15128,15134],{"__ignoreMap":1462},[1081,14892,14893,14895,14897,14899,14901,14903,14905,14907,14909],{"class":6144,"line":6145},[1081,14894,9766],{"class":9095},[1081,14896,9769],{"class":6288},[1081,14898,10009],{"class":6204},[1081,14900,9775],{"class":6288},[1081,14902,9778],{"class":9095},[1081,14904,9435],{"class":6288},[1081,14906,12949],{"class":6152},[1081,14908,9260],{"class":6288},[1081,14910,9268],{"class":6288},[1081,14912,14913,14915,14917,14919,14921,14923,14925,14927,14929],{"class":6144,"line":1463},[1081,14914,9766],{"class":9095},[1081,14916,9769],{"class":6288},[1081,14918,13514],{"class":6204},[1081,14920,9775],{"class":6288},[1081,14922,9778],{"class":9095},[1081,14924,9435],{"class":6288},[1081,14926,13523],{"class":6152},[1081,14928,9260],{"class":6288},[1081,14930,9268],{"class":6288},[1081,14932,14933],{"class":6144,"line":1468},[1081,14934,8738],{"emptyLinePlaceholder":1547},[1081,14936,14937,14939,14941,14943,14946,14948],{"class":6144,"line":6397},[1081,14938,9796],{"class":9095},[1081,14940,9799],{"class":9095},[1081,14942,9802],{"class":6467},[1081,14944,14945],{"class":9125}," HomePage",[1081,14947,10037],{"class":6288},[1081,14949,6476],{"class":6288},[1081,14951,14952,14954,14956,14958,14960,14962],{"class":6144,"line":6407},[1081,14953,10044],{"class":6467},[1081,14955,10047],{"class":6204},[1081,14957,10050],{"class":6288},[1081,14959,10009],{"class":9125},[1081,14961,10037],{"class":6585},[1081,14963,9268],{"class":6288},[1081,14965,14966],{"class":6144,"line":6421},[1081,14967,8738],{"emptyLinePlaceholder":1547},[1081,14969,14970,14972,14974,14976,14978],{"class":6144,"line":6579},[1081,14971,13579],{"class":9125},[1081,14973,9050],{"class":6585},[1081,14975,10037],{"class":6288},[1081,14977,11363],{"class":6467},[1081,14979,6476],{"class":6288},[1081,14981,14982,14984,14986,14988,14990,14992,14994,14996,14998,15000,15002,15004,15006,15008,15010,15012,15014],{"class":6144,"line":6601},[1081,14983,10077],{"class":6204},[1081,14985,1446],{"class":6288},[1081,14987,9455],{"class":9125},[1081,14989,9050],{"class":6585},[1081,14991,9260],{"class":6288},[1081,14993,8846],{"class":6152},[1081,14995,9260],{"class":6288},[1081,14997,6535],{"class":6288},[1081,14999,9769],{"class":6288},[1081,15001,10286],{"class":6585},[1081,15003,5514],{"class":6288},[1081,15005,9435],{"class":6288},[1081,15007,12139],{"class":6152},[1081,15009,9260],{"class":6288},[1081,15011,9775],{"class":6288},[1081,15013,8376],{"class":6585},[1081,15015,9268],{"class":6288},[1081,15017,15018,15020,15023],{"class":6144,"line":6621},[1081,15019,13612],{"class":6288},[1081,15021,15022],{"class":6585}," [])",[1081,15024,9268],{"class":6288},[1081,15026,15027],{"class":6144,"line":6641},[1081,15028,8738],{"emptyLinePlaceholder":1547},[1081,15030,15031,15033,15035,15037],{"class":6144,"line":6659},[1081,15032,10065],{"class":6467},[1081,15034,12166],{"class":9125},[1081,15036,10037],{"class":6288},[1081,15038,6476],{"class":6288},[1081,15040,15041,15043,15045,15047,15049,15051,15053,15055,15057],{"class":6144,"line":6665},[1081,15042,10077],{"class":6204},[1081,15044,1446],{"class":6288},[1081,15046,9455],{"class":9125},[1081,15048,9050],{"class":6585},[1081,15050,9260],{"class":6288},[1081,15052,8871],{"class":6152},[1081,15054,9260],{"class":6288},[1081,15056,8376],{"class":6585},[1081,15058,9268],{"class":6288},[1081,15060,15061],{"class":6144,"line":6671},[1081,15062,6674],{"class":6288},[1081,15064,15065],{"class":6144,"line":6677},[1081,15066,8738],{"emptyLinePlaceholder":1547},[1081,15068,15069,15071],{"class":6144,"line":9547},[1081,15070,9838],{"class":9095},[1081,15072,9841],{"class":6585},[1081,15074,15075,15077,15079],{"class":6144,"line":12173},[1081,15076,9846],{"class":6288},[1081,15078,10827],{"class":6585},[1081,15080,9039],{"class":6288},[1081,15082,15083,15085,15087,15089,15092,15094,15096],{"class":6144,"line":12194},[1081,15084,9855],{"class":6288},[1081,15086,11999],{"class":6585},[1081,15088,9968],{"class":6288},[1081,15090,15091],{"class":6204},"Welcome",[1081,15093,9474],{"class":6288},[1081,15095,11999],{"class":6585},[1081,15097,9039],{"class":6288},[1081,15099,15100,15102,15104,15106,15108,15110,15112,15114,15116,15118],{"class":6144,"line":12199},[1081,15101,9855],{"class":6288},[1081,15103,10139],{"class":6585},[1081,15105,10142],{"class":6467},[1081,15107,10145],{"class":6288},[1081,15109,12026],{"class":6204},[1081,15111,10151],{"class":6288},[1081,15113,12033],{"class":6204},[1081,15115,9474],{"class":6288},[1081,15117,10139],{"class":6585},[1081,15119,9039],{"class":6288},[1081,15121,15122,15124,15126],{"class":6144,"line":12480},[1081,15123,9905],{"class":6288},[1081,15125,10827],{"class":6585},[1081,15127,9039],{"class":6288},[1081,15129,15130,15132],{"class":6144,"line":12489},[1081,15131,9914],{"class":6585},[1081,15133,9268],{"class":6288},[1081,15135,15136],{"class":6144,"line":12494},[1081,15137,6680],{"class":6288},[5086,15139,15142],{"className":9756,"code":15140,"filename":15141,"language":9759,"meta":1462,"style":1462},"import { useMetaPixel } from '@adkit\u002Fmeta-pixel-react';\nimport { useEffect } from 'react';\n\nexport default function PricingPage() {\n    const meta = useMetaPixel();\n\n    useEffect(() => {\n        meta.track('ViewContent', { content_id: 'pricing' });\n    }, []);\n\n    function handleCheckout(plan: string, price: number) {\n        meta.track('InitiateCheckout', { content_id: plan, value: price, currency: 'USD' });\n    }\n\n    return (\n        \u003Cdiv>\n            \u003Cdiv className=\"plan\">\n                \u003Ch2>Starter - $29\u003C\u002Fh2>\n                \u003Cbutton onClick={() => handleCheckout('starter', 29)}>Select\u003C\u002Fbutton>\n            \u003C\u002Fdiv>\n            \u003Cdiv className=\"plan\">\n                \u003Ch2>Pro - $99\u003C\u002Fh2>\n                \u003Cbutton onClick={() => handleCheckout('pro', 99)}>Select\u003C\u002Fbutton>\n            \u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n    );\n}\n","src\u002Fpages\u002FPricingPage.tsx",[4815,15143,15144,15164,15184,15188,15202,15216,15220,15232,15268,15276,15280,15309,15361,15365,15369,15375,15383,15402,15418,15459,15467,15485,15501,15540,15548,15557,15564],{"__ignoreMap":1462},[1081,15145,15146,15148,15150,15152,15154,15156,15158,15160,15162],{"class":6144,"line":6145},[1081,15147,9766],{"class":9095},[1081,15149,9769],{"class":6288},[1081,15151,10009],{"class":6204},[1081,15153,9775],{"class":6288},[1081,15155,9778],{"class":9095},[1081,15157,9435],{"class":6288},[1081,15159,12949],{"class":6152},[1081,15161,9260],{"class":6288},[1081,15163,9268],{"class":6288},[1081,15165,15166,15168,15170,15172,15174,15176,15178,15180,15182],{"class":6144,"line":1463},[1081,15167,9766],{"class":9095},[1081,15169,9769],{"class":6288},[1081,15171,13514],{"class":6204},[1081,15173,9775],{"class":6288},[1081,15175,9778],{"class":9095},[1081,15177,9435],{"class":6288},[1081,15179,13523],{"class":6152},[1081,15181,9260],{"class":6288},[1081,15183,9268],{"class":6288},[1081,15185,15186],{"class":6144,"line":1468},[1081,15187,8738],{"emptyLinePlaceholder":1547},[1081,15189,15190,15192,15194,15196,15198,15200],{"class":6144,"line":6397},[1081,15191,9796],{"class":9095},[1081,15193,9799],{"class":9095},[1081,15195,9802],{"class":6467},[1081,15197,13919],{"class":9125},[1081,15199,10037],{"class":6288},[1081,15201,6476],{"class":6288},[1081,15203,15204,15206,15208,15210,15212,15214],{"class":6144,"line":6407},[1081,15205,10044],{"class":6467},[1081,15207,10047],{"class":6204},[1081,15209,10050],{"class":6288},[1081,15211,10009],{"class":9125},[1081,15213,10037],{"class":6585},[1081,15215,9268],{"class":6288},[1081,15217,15218],{"class":6144,"line":6421},[1081,15219,8738],{"emptyLinePlaceholder":1547},[1081,15221,15222,15224,15226,15228,15230],{"class":6144,"line":6579},[1081,15223,13579],{"class":9125},[1081,15225,9050],{"class":6585},[1081,15227,10037],{"class":6288},[1081,15229,11363],{"class":6467},[1081,15231,6476],{"class":6288},[1081,15233,15234,15236,15238,15240,15242,15244,15246,15248,15250,15252,15254,15256,15258,15260,15262,15264,15266],{"class":6144,"line":6601},[1081,15235,10077],{"class":6204},[1081,15237,1446],{"class":6288},[1081,15239,9455],{"class":9125},[1081,15241,9050],{"class":6585},[1081,15243,9260],{"class":6288},[1081,15245,8846],{"class":6152},[1081,15247,9260],{"class":6288},[1081,15249,6535],{"class":6288},[1081,15251,9769],{"class":6288},[1081,15253,10286],{"class":6585},[1081,15255,5514],{"class":6288},[1081,15257,9435],{"class":6288},[1081,15259,12469],{"class":6152},[1081,15261,9260],{"class":6288},[1081,15263,9775],{"class":6288},[1081,15265,8376],{"class":6585},[1081,15267,9268],{"class":6288},[1081,15269,15270,15272,15274],{"class":6144,"line":6621},[1081,15271,13612],{"class":6288},[1081,15273,15022],{"class":6585},[1081,15275,9268],{"class":6288},[1081,15277,15278],{"class":6144,"line":6641},[1081,15279,8738],{"emptyLinePlaceholder":1547},[1081,15281,15282,15284,15287,15289,15291,15293,15295,15297,15300,15302,15305,15307],{"class":6144,"line":6659},[1081,15283,10065],{"class":6467},[1081,15285,15286],{"class":9125}," handleCheckout",[1081,15288,9050],{"class":6288},[1081,15290,12243],{"class":9053},[1081,15292,5514],{"class":6288},[1081,15294,12508],{"class":6148},[1081,15296,6535],{"class":6288},[1081,15298,15299],{"class":9053}," price",[1081,15301,5514],{"class":6288},[1081,15303,15304],{"class":6148}," number",[1081,15306,8376],{"class":6288},[1081,15308,6476],{"class":6288},[1081,15310,15311,15313,15315,15317,15319,15321,15323,15325,15327,15329,15331,15333,15335,15337,15339,15341,15343,15345,15347,15349,15351,15353,15355,15357,15359],{"class":6144,"line":6665},[1081,15312,10077],{"class":6204},[1081,15314,1446],{"class":6288},[1081,15316,9455],{"class":9125},[1081,15318,9050],{"class":6585},[1081,15320,9260],{"class":6288},[1081,15322,8861],{"class":6152},[1081,15324,9260],{"class":6288},[1081,15326,6535],{"class":6288},[1081,15328,9769],{"class":6288},[1081,15330,10286],{"class":6585},[1081,15332,5514],{"class":6288},[1081,15334,12540],{"class":6204},[1081,15336,6535],{"class":6288},[1081,15338,10096],{"class":6585},[1081,15340,5514],{"class":6288},[1081,15342,15299],{"class":6204},[1081,15344,6535],{"class":6288},[1081,15346,10106],{"class":6585},[1081,15348,5514],{"class":6288},[1081,15350,9435],{"class":6288},[1081,15352,10113],{"class":6152},[1081,15354,9260],{"class":6288},[1081,15356,9775],{"class":6288},[1081,15358,8376],{"class":6585},[1081,15360,9268],{"class":6288},[1081,15362,15363],{"class":6144,"line":6671},[1081,15364,6674],{"class":6288},[1081,15366,15367],{"class":6144,"line":6677},[1081,15368,8738],{"emptyLinePlaceholder":1547},[1081,15370,15371,15373],{"class":6144,"line":9547},[1081,15372,9838],{"class":9095},[1081,15374,9841],{"class":6585},[1081,15376,15377,15379,15381],{"class":6144,"line":12173},[1081,15378,9846],{"class":6288},[1081,15380,10827],{"class":6585},[1081,15382,9039],{"class":6288},[1081,15384,15385,15387,15389,15392,15394,15396,15398,15400],{"class":6144,"line":12194},[1081,15386,9855],{"class":6288},[1081,15388,10827],{"class":6585},[1081,15390,15391],{"class":6467}," className",[1081,15393,9118],{"class":6288},[1081,15395,6471],{"class":6288},[1081,15397,12243],{"class":6152},[1081,15399,6471],{"class":6288},[1081,15401,9039],{"class":6288},[1081,15403,15404,15406,15408,15410,15412,15414,15416],{"class":6144,"line":12199},[1081,15405,9865],{"class":6288},[1081,15407,53],{"class":6585},[1081,15409,9968],{"class":6288},[1081,15411,12258],{"class":6204},[1081,15413,9474],{"class":6288},[1081,15415,53],{"class":6585},[1081,15417,9039],{"class":6288},[1081,15419,15420,15422,15424,15426,15429,15431,15433,15435,15437,15440,15442,15444,15447,15449,15451,15453,15455,15457],{"class":6144,"line":12480},[1081,15421,9865],{"class":6288},[1081,15423,10139],{"class":6585},[1081,15425,10142],{"class":6467},[1081,15427,15428],{"class":6288},"={()",[1081,15430,11363],{"class":6467},[1081,15432,15286],{"class":9125},[1081,15434,9050],{"class":6204},[1081,15436,9260],{"class":6288},[1081,15438,15439],{"class":6152},"starter",[1081,15441,9260],{"class":6288},[1081,15443,6535],{"class":6288},[1081,15445,15446],{"class":6415}," 29",[1081,15448,8376],{"class":6204},[1081,15450,10151],{"class":6288},[1081,15452,12286],{"class":6204},[1081,15454,9474],{"class":6288},[1081,15456,10139],{"class":6585},[1081,15458,9039],{"class":6288},[1081,15460,15461,15463,15465],{"class":6144,"line":12489},[1081,15462,9896],{"class":6288},[1081,15464,10827],{"class":6585},[1081,15466,9039],{"class":6288},[1081,15468,15469,15471,15473,15475,15477,15479,15481,15483],{"class":6144,"line":12494},[1081,15470,9855],{"class":6288},[1081,15472,10827],{"class":6585},[1081,15474,15391],{"class":6467},[1081,15476,9118],{"class":6288},[1081,15478,6471],{"class":6288},[1081,15480,12243],{"class":6152},[1081,15482,6471],{"class":6288},[1081,15484,9039],{"class":6288},[1081,15486,15487,15489,15491,15493,15495,15497,15499],{"class":6144,"line":12515},[1081,15488,9865],{"class":6288},[1081,15490,53],{"class":6585},[1081,15492,9968],{"class":6288},[1081,15494,12329],{"class":6204},[1081,15496,9474],{"class":6288},[1081,15498,53],{"class":6585},[1081,15500,9039],{"class":6288},[1081,15502,15503,15505,15507,15509,15511,15513,15515,15517,15519,15522,15524,15526,15528,15530,15532,15534,15536,15538],{"class":6144,"line":12549},[1081,15504,9865],{"class":6288},[1081,15506,10139],{"class":6585},[1081,15508,10142],{"class":6467},[1081,15510,15428],{"class":6288},[1081,15512,11363],{"class":6467},[1081,15514,15286],{"class":9125},[1081,15516,9050],{"class":6204},[1081,15518,9260],{"class":6288},[1081,15520,15521],{"class":6152},"pro",[1081,15523,9260],{"class":6288},[1081,15525,6535],{"class":6288},[1081,15527,10101],{"class":6415},[1081,15529,8376],{"class":6204},[1081,15531,10151],{"class":6288},[1081,15533,12286],{"class":6204},[1081,15535,9474],{"class":6288},[1081,15537,10139],{"class":6585},[1081,15539,9039],{"class":6288},[1081,15541,15542,15544,15546],{"class":6144,"line":12554},[1081,15543,9896],{"class":6288},[1081,15545,10827],{"class":6585},[1081,15547,9039],{"class":6288},[1081,15549,15551,15553,15555],{"class":6144,"line":15550},25,[1081,15552,9905],{"class":6288},[1081,15554,10827],{"class":6585},[1081,15556,9039],{"class":6288},[1081,15558,15560,15562],{"class":6144,"line":15559},26,[1081,15561,9914],{"class":6585},[1081,15563,9268],{"class":6288},[1081,15565,15567],{"class":6144,"line":15566},27,[1081,15568,6680],{"class":6288},[53,15570,12564],{"id":12563},[8421,15572,15573,15623,15689,15782],{},[8426,15574,15575,15578],{"icon":10595,"label":10596},[12,15576,15577],{},"Enable localhost in your config:",[5086,15579,15581],{"className":9756,"code":15580,"language":9759,"meta":1462,"style":1462},"useMetaPixel({\n    pixelIds: 'YOUR_PIXEL_ID',\n    enableLocalhost: true,\n});\n",[4815,15582,15583,15591,15605,15615],{"__ignoreMap":1462},[1081,15584,15585,15587,15589],{"class":6144,"line":6145},[1081,15586,9978],{"class":9125},[1081,15588,9050],{"class":6204},[1081,15590,6459],{"class":6288},[1081,15592,15593,15595,15597,15599,15601,15603],{"class":6144,"line":1463},[1081,15594,11123],{"class":6585},[1081,15596,5514],{"class":6288},[1081,15598,9435],{"class":6288},[1081,15600,9438],{"class":6152},[1081,15602,9260],{"class":6288},[1081,15604,6511],{"class":6288},[1081,15606,15607,15609,15611,15613],{"class":6144,"line":1468},[1081,15608,13385],{"class":6585},[1081,15610,5514],{"class":6288},[1081,15612,11244],{"class":10449},[1081,15614,6511],{"class":6288},[1081,15616,15617,15619,15621],{"class":6144,"line":6397},[1081,15618,9384],{"class":6288},[1081,15620,8376],{"class":6204},[1081,15622,9268],{"class":6288},[8426,15624,15626,15632],{"icon":12747,"label":15625},"Events firing multiple times",[12,15627,15628,15629,15631],{},"Make sure you're not initializing the pixel multiple times. Only call ",[4815,15630,9978],{}," with config once at your app root:",[5086,15633,15635],{"className":9756,"code":15634,"language":9759,"meta":1462,"style":1462},"\u002F\u002F ✅ Root component - with config\nuseMetaPixel({ pixelIds: 'YOUR_PIXEL_ID' });\n\n\u002F\u002F ✅ Child components - no config\nconst meta = useMetaPixel();\n",[4815,15636,15637,15642,15666,15670,15675],{"__ignoreMap":1462},[1081,15638,15639],{"class":6144,"line":6145},[1081,15640,15641],{"class":9027},"\u002F\u002F ✅ Root component - with config\n",[1081,15643,15644,15646,15648,15650,15652,15654,15656,15658,15660,15662,15664],{"class":6144,"line":1463},[1081,15645,9978],{"class":9125},[1081,15647,9050],{"class":6204},[1081,15649,13310],{"class":6288},[1081,15651,13078],{"class":6585},[1081,15653,5514],{"class":6288},[1081,15655,9435],{"class":6288},[1081,15657,9438],{"class":6152},[1081,15659,9260],{"class":6288},[1081,15661,9775],{"class":6288},[1081,15663,8376],{"class":6204},[1081,15665,9268],{"class":6288},[1081,15667,15668],{"class":6144,"line":1468},[1081,15669,8738],{"emptyLinePlaceholder":1547},[1081,15671,15672],{"class":6144,"line":6397},[1081,15673,15674],{"class":9027},"\u002F\u002F ✅ Child components - no config\n",[1081,15676,15677,15679,15681,15683,15685,15687],{"class":6144,"line":6407},[1081,15678,11446],{"class":6467},[1081,15680,11449],{"class":6204},[1081,15682,9118],{"class":6288},[1081,15684,10009],{"class":9125},[1081,15686,10037],{"class":6204},[1081,15688,9268],{"class":6288},[8426,15690,15691,15694],{"icon":10653,"label":12649},[12,15692,15693],{},"The package has strict TypeScript types. Use standard event names:",[5086,15695,15697],{"className":9756,"code":15696,"language":9759,"meta":1462,"style":1462},"\u002F\u002F ✅ Correct\nmeta.track('ViewContent');\n\n\u002F\u002F ❌ Wrong - not a standard event\nmeta.track('ViewPage');\n\n\u002F\u002F ✅ For custom events, use trackCustom\nmeta.trackCustom('ViewPage');\n",[4815,15698,15699,15704,15724,15728,15733,15753,15757,15762],{"__ignoreMap":1462},[1081,15700,15701],{"class":6144,"line":6145},[1081,15702,15703],{"class":9027},"\u002F\u002F ✅ Correct\n",[1081,15705,15706,15708,15710,15712,15714,15716,15718,15720,15722],{"class":6144,"line":1463},[1081,15707,10184],{"class":6204},[1081,15709,1446],{"class":6288},[1081,15711,9455],{"class":9125},[1081,15713,9050],{"class":6204},[1081,15715,9260],{"class":6288},[1081,15717,8846],{"class":6152},[1081,15719,9260],{"class":6288},[1081,15721,8376],{"class":6204},[1081,15723,9268],{"class":6288},[1081,15725,15726],{"class":6144,"line":1468},[1081,15727,8738],{"emptyLinePlaceholder":1547},[1081,15729,15730],{"class":6144,"line":6397},[1081,15731,15732],{"class":9027},"\u002F\u002F ❌ Wrong - not a standard event\n",[1081,15734,15735,15737,15739,15741,15743,15745,15747,15749,15751],{"class":6144,"line":6407},[1081,15736,10184],{"class":6204},[1081,15738,1446],{"class":6288},[1081,15740,9455],{"class":9125},[1081,15742,9050],{"class":6204},[1081,15744,9260],{"class":6288},[1081,15746,12706],{"class":6152},[1081,15748,9260],{"class":6288},[1081,15750,8376],{"class":6204},[1081,15752,9268],{"class":6288},[1081,15754,15755],{"class":6144,"line":6421},[1081,15756,8738],{"emptyLinePlaceholder":1547},[1081,15758,15759],{"class":6144,"line":6579},[1081,15760,15761],{"class":9027},"\u002F\u002F ✅ For custom events, use trackCustom\n",[1081,15763,15764,15766,15768,15770,15772,15774,15776,15778,15780],{"class":6144,"line":6601},[1081,15765,10184],{"class":6204},[1081,15767,1446],{"class":6288},[1081,15769,10318],{"class":9125},[1081,15771,9050],{"class":6204},[1081,15773,9260],{"class":6288},[1081,15775,12706],{"class":6152},[1081,15777,9260],{"class":6288},[1081,15779,8376],{"class":6204},[1081,15781,9268],{"class":6288},[8426,15783,15786,15792,15904],{"icon":15784,"label":15785},"fa6-solid:gear","Can't use hooks or Provider at root level",[12,15787,15788,15789,5514],{},"For edge cases where you can't use hooks or wrap your app, use ",[4815,15790,15791],{},"initMetaPixel",[5086,15793,15795],{"className":9756,"code":15794,"filename":13001,"language":9759,"meta":1462,"style":1462},"import { initMetaPixel, useMetaPixel } from '@adkit\u002Fmeta-pixel-react';\n\n\u002F\u002F Initialize before rendering\ninitMetaPixel({ pixelIds: 'YOUR_PIXEL_ID' });\n\nReactDOM.createRoot(document.getElementById('root')!).render(\u003CApp \u002F>);\n",[4815,15796,15797,15822,15826,15831,15855,15859],{"__ignoreMap":1462},[1081,15798,15799,15801,15803,15806,15808,15810,15812,15814,15816,15818,15820],{"class":6144,"line":6145},[1081,15800,9766],{"class":9095},[1081,15802,9769],{"class":6288},[1081,15804,15805],{"class":6204}," initMetaPixel",[1081,15807,6535],{"class":6288},[1081,15809,10009],{"class":6204},[1081,15811,9775],{"class":6288},[1081,15813,9778],{"class":9095},[1081,15815,9435],{"class":6288},[1081,15817,12949],{"class":6152},[1081,15819,9260],{"class":6288},[1081,15821,9268],{"class":6288},[1081,15823,15824],{"class":6144,"line":1463},[1081,15825,8738],{"emptyLinePlaceholder":1547},[1081,15827,15828],{"class":6144,"line":1468},[1081,15829,15830],{"class":9027},"\u002F\u002F Initialize before rendering\n",[1081,15832,15833,15835,15837,15839,15841,15843,15845,15847,15849,15851,15853],{"class":6144,"line":6397},[1081,15834,15791],{"class":9125},[1081,15836,9050],{"class":6204},[1081,15838,13310],{"class":6288},[1081,15840,13078],{"class":6585},[1081,15842,5514],{"class":6288},[1081,15844,9435],{"class":6288},[1081,15846,9438],{"class":6152},[1081,15848,9260],{"class":6288},[1081,15850,9775],{"class":6288},[1081,15852,8376],{"class":6204},[1081,15854,9268],{"class":6288},[1081,15856,15857],{"class":6144,"line":6407},[1081,15858,8738],{"emptyLinePlaceholder":1547},[1081,15860,15861,15863,15865,15867,15869,15871,15873,15875,15877,15879,15881,15883,15885,15887,15889,15891,15893,15895,15897,15900,15902],{"class":6144,"line":6421},[1081,15862,13033],{"class":6204},[1081,15864,1446],{"class":6288},[1081,15866,13038],{"class":9125},[1081,15868,13041],{"class":6204},[1081,15870,1446],{"class":6288},[1081,15872,13046],{"class":9125},[1081,15874,9050],{"class":6204},[1081,15876,9260],{"class":6288},[1081,15878,13053],{"class":6152},[1081,15880,9260],{"class":6288},[1081,15882,8376],{"class":6204},[1081,15884,9200],{"class":6288},[1081,15886,8376],{"class":6204},[1081,15888,1446],{"class":6288},[1081,15890,13066],{"class":9125},[1081,15892,9050],{"class":6204},[1081,15894,9033],{"class":6288},[1081,15896,13102],{"class":6148},[1081,15898,15899],{"class":6288}," \u002F>",[1081,15901,8376],{"class":6204},[1081,15903,9268],{"class":6288},[12,15905,13345,15906,15908],{},[4815,15907,11315],{}," normally in your components.",[53,15910,12807],{"id":12806},[4313,15912,15913,15920,15928,15934,15939],{},[1243,15914,12993,15915,3754,15917,15919],{},[4815,15916,12996],{},[19,15918,13453],{}," at the root",[1243,15921,8909,15922,15927],{},[31,15923,15925],{"href":8912,"rel":15924,"target":8663},[46],[19,15926,8914],{}," for better ad optimization",[1243,15929,15930,15931,15933],{},"Track ",[19,15932,8846],{}," on page\u002Froute changes",[1243,15935,9749,15936,15938],{},[19,15937,12822],{}," (content_id, value, currency)",[1243,15940,15941,15944],{},[19,15942,15943],{},"Disable debug"," in production",[53,15946,9591],{"id":9590},[1240,15948,15949,15954,15959],{},[1243,15950,10710,15951,10715],{},[31,15952,8994],{"href":10713,"rel":15953,"target":8663},[46],[1243,15955,10718,15956,10724],{},[31,15957,10723],{"href":10721,"rel":15958,"target":8663},[46],[1243,15960,10727,15961],{},[31,15962,10732],{"href":10730,"rel":15963,"target":8663},[46],[53,15965,10736],{"id":10735},[4313,15967,15968,15974,15979,15984],{},[1243,15969,15970],{},[31,15971,15973],{"href":12970,"rel":15972,"target":8663},[46],"@adkit\u002Fmeta-pixel-react on NPM",[1243,15975,15976],{},[31,15977,10752],{"href":10750,"rel":15978,"target":8663},[46],[1243,15980,15981],{},[31,15982,10758],{"href":8912,"rel":15983,"target":8663},[46],[1243,15985,15986],{},[31,15987,10763],{"href":9692},[7509,15989,15990],{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":1462,"searchDepth":1463,"depth":1463,"links":15992},[15993,15994,15995,15998,16001,16005,16010,16011,16012,16013,16014,16015],{"id":9712,"depth":1463,"text":9713},{"id":10863,"depth":1463,"text":10864},{"id":12989,"depth":1463,"text":12990,"children":15996},[15997],{"id":13256,"depth":1468,"text":13257},{"id":11194,"depth":1463,"text":11195,"children":15999},[16000],{"id":11268,"depth":1468,"text":11269},{"id":13444,"depth":1463,"text":13445,"children":16002},[16003,16004],{"id":13457,"depth":1468,"text":13458},{"id":13658,"depth":1468,"text":13659},{"id":13878,"depth":1463,"text":13879,"children":16006},[16007,16008,16009],{"id":13882,"depth":1468,"text":13883},{"id":14066,"depth":1468,"text":14067},{"id":11593,"depth":1468,"text":11594},{"id":8918,"depth":1463,"text":8919},{"id":11844,"depth":1463,"text":11845},{"id":12563,"depth":1463,"text":12564},{"id":12806,"depth":1463,"text":12807},{"id":9590,"depth":1463,"text":9591},{"id":10735,"depth":1463,"text":10736},"Step-by-step guide to install and configure the Meta Pixel in your React application with hooks, TypeScript support, and multiple integration patterns.",[16018,16021,16024,16027],{"question":16019,"answer":16020},"Do I need to use a Provider for Meta Pixel in React?","We recommend using MetaPixelProvider as it follows React conventions. Alternatively, you can use the standalone hook approach by calling useMetaPixel with config once at your app root.",{"question":16022,"answer":16023},"Why is Meta Pixel not firing on localhost in React?","By default, the pixel won't fire on localhost to avoid polluting your data. Add enableLocalhost:true to your config to enable it during development.",{"question":16025,"answer":16026},"How do I track page views in a React SPA?","The package automatically tracks PageView on initialization when autoTrackPageView is true (default). For subsequent route changes, call meta.track('PageView') in your router's navigation handler or use a useEffect in your layout component.",{"question":16028,"answer":16029},"Can I use Meta Pixel with Next.js?","Yes! We have a dedicated Next.js package with automatic PageView tracking on route changes. See our Next.js installation guide for the easiest setup.",{},"\u002Fresources\u002Fhow-to-install-meta-pixel\u002Freact",{"title":12941,"description":16016},"how-to-install-meta-pixel\u002Freact","resources\u002Fhow-to-install-meta-pixel\u002Freact",[13523,9697,9698,4270,2453],"MX73FmvV2sEyrLoJiGXghOUgAMqtbW7uDwxX321NGog",{"id":16038,"title":16039,"author":7,"body":16040,"breadcrumbLabel":7,"category":4776,"cover":1524,"createdAt":17390,"description":17391,"extension":1527,"faqs":17392,"meta":17417,"navigation":1547,"noAiBadge":1524,"og":1524,"ogDescription":17418,"ogIcon":7,"path":5794,"seo":17419,"slug":17420,"stem":17420,"tags":17421,"updatedAt":17422,"wip":1524,"__hash__":17423},"resources\u002Fresources\u002Fmeta-ads-mcp-setup.md","How to Set Up the Meta Ads MCP in 3 Steps",{"type":9,"value":16041,"toc":17371},[16042,16058,16066,16070,16083,16315,16319,16322,16331,16334,16340,16363,16369,16380,16390,16394,16397,16400,16406,16422,16425,16429,16452,16455,16458,16466,16470,16477,16497,16503,16506,16511,16531,16534,16539,16554,16557,16562,16577,16585,16590,16605,16611,16614,16619,16639,16647,16650,16654,16998,17002,17005,17009,17018,17024,17027,17030,17033,17040,17046,17050,17053,17059,17067,17070,17076,17083,17087,17090,17096,17100,17103,17111,17119,17121,17142,17150,17171,17190,17205,17221,17236,17253,17282,17293,17296,17302,17307,17316,17318,17368],[5232,16043,16044],{},[12,16045,16046,16048,16049,16052,16053,16057],{},[19,16047,4281],{}," Paste ",[4815,16050,16051],{},"https:\u002F\u002Fmcp.facebook.com\u002Fads"," into your AI tool's MCP settings, authorize with Meta, done. Free, ~15 minutes, works with Claude, ChatGPT, Cursor, and any MCP client. No API keys needed. But this gives your AI full write access to your live ad account: budget changes, targeting edits, campaign creation. No undo, no draft mode, no confirmation screen. Read the ",[31,16054,16056],{"href":16055},"#before-you-trust-it","limitations"," before you connect.",[12,16059,16060,16061,16065],{},"Meta's official ",[31,16062,16064],{"href":16063},"\u002Fglossary\u002Fmodel-context-protocol","MCP"," server gives AI agents direct access to your ad account to analyze and launch campaigns. It includes 29 tools, is free, and is being rolled out gradually. Here is how to install it.",[53,16067,16069],{"id":16068},"_1-add-the-mcp-server","1. Add the MCP Server",[12,16071,16072,16073,16077,16078,16082],{},"You need a ",[31,16074,16076],{"href":16075},"\u002Fglossary\u002Fbusiness-manager","Meta Business Manager"," account with admin access, and a paid AI tool that supports MCP connectors (Claude Pro\u002FMax, ChatGPT Plus, Cursor Pro, etc.). No developer account, no API token, no app registration. ",[31,16079,16081],{"href":16080},"#src-4","Meta's own announcement"," says \"no developer credentials, API setup, or coding required.\"",[6344,16084,16085,16132,16190,16232,16248,16285],{"default":6346},[6130,16086,16087,16105,16111,16117],{"v-slot:claude":1462},[12,16088,16089,16090,16095,16096,16099,16100,16104],{},"Open ",[31,16091,16094],{"href":16092,"rel":16093},"https:\u002F\u002Fclaude.ai\u002Fcustomize\u002Fconnectors",[46],"Settings > Connectors"," and click the ",[19,16097,16098],{},"+"," button. See ",[31,16101,16103],{"href":16102},"#src-5","Anthropic's MCP connectors documentation"," for details.",[12,16106,16107],{},[5038,16108],{"alt":16109,"src":16110},"Claude Settings showing the Connectors panel with arrows pointing to the Connectors nav item and the + button","\u002Fimages\u002Fblog\u002Fmcp-setup\u002Fclaude-connectors.png",[12,16112,16113,16114,5514],{},"Fill in the fields and click ",[19,16115,16116],{},"Add",[4313,16118,16119,16125],{},[1243,16120,16121,3754,16123],{},[19,16122,4922],{},[4815,16124,4565],{},[1243,16126,16127,3754,16130],{},[19,16128,16129],{},"Remote MCP server URL:",[4815,16131,16051],{},[6130,16133,16134,16158,16164,16169],{"v-slot:chatgpt":1462},[12,16135,16089,16136,16140,16141,16144,16145,16148,16149,16152,16153,16157],{},[31,16137,16094],{"href":16138,"rel":16139},"https:\u002F\u002Fchatgpt.com\u002F#settings\u002FConnectors",[46],". If you don't see ",[19,16142,16143],{},"Create app",", go to ",[19,16146,16147],{},"Advanced settings"," first and enable ",[19,16150,16151],{},"Developer mode",". ",[31,16154,16156],{"href":16155},"#src-6","OpenAI's connectors documentation"," has more on managing remote MCP servers.",[12,16159,16160],{},[5038,16161],{"alt":16162,"src":16163},"ChatGPT Settings showing Apps panel with arrows pointing to Apps nav, Advanced settings, and Create app button","\u002Fimages\u002Fblog\u002Fmcp-setup\u002Fchatgpt-apps-settings.png",[12,16165,8667,16166,16168],{},[19,16167,16143],{}," and fill in:",[4313,16170,16171,16177,16184],{},[1243,16172,16173,3754,16175],{},[19,16174,4922],{},[4815,16176,4565],{},[1243,16178,16179,3754,16182],{},[19,16180,16181],{},"MCP Server URL:",[4815,16183,16051],{},[1243,16185,16186,16189],{},[19,16187,16188],{},"Authentication:"," OAuth",[6130,16191,16192,16200,16211],{"v-slot:cursor":1462},[12,16193,16194,16195,16199],{},"One-click install: ",[31,16196,16198],{"href":16197},"cursor:\u002F\u002Fanysphere.cursor-deeplink\u002Fmcp\u002Finstall?name=Meta%20Ads&config=eyJ1cmwiOiJodHRwczovL21jcC5mYWNlYm9vay5jb20vYWRzIn0=","Add Meta Ads MCP to Cursor",". This handles the URL and transport type automatically, skip to step 2.",[12,16201,16202,16203,16152,16206,16210],{},"Or manually: go to ",[19,16204,16205],{},"Settings > MCP Servers > Add New Server",[31,16207,16209],{"href":16208},"#src-7","Cursor's MCP setup guide"," covers additional options.",[4313,16212,16213,16219,16225],{},[1243,16214,16215,3754,16217],{},[19,16216,4922],{},[4815,16218,4565],{},[1243,16220,16221,16224],{},[19,16222,16223],{},"Type:"," Streamable HTTP (not SSE or stdio)",[1243,16226,16227,3754,16230],{},[19,16228,16229],{},"Server URL:",[4815,16231,16051],{},[6130,16233,16234,16240],{"v-slot:openclaw":1462},[12,16235,16236,16237,1446],{},"In your dashboard, go to ",[19,16238,16239],{},"Settings > MCP Connections > Add Server",[4313,16241,16242],{},[1243,16243,16244,3754,16246],{},[19,16245,16229],{},[4815,16247,16051],{},[6130,16249,16250],{"v-slot:codex":1462},[5086,16251,16253],{"className":6137,"code":16252,"language":6139,"meta":1462,"style":1462},"codex mcp add --name \"Meta Ads\" --url https:\u002F\u002Fmcp.facebook.com\u002Fads --transport streamable-http\n",[4815,16254,16255],{"__ignoreMap":1462},[1081,16256,16257,16260,16262,16264,16267,16269,16271,16273,16276,16279,16282],{"class":6144,"line":6145},[1081,16258,16259],{"class":6148},"codex",[1081,16261,6367],{"class":6152},[1081,16263,6370],{"class":6152},[1081,16265,16266],{"class":6152}," --name",[1081,16268,6504],{"class":6288},[1081,16270,4394],{"class":6152},[1081,16272,6471],{"class":6288},[1081,16274,16275],{"class":6152}," --url",[1081,16277,16278],{"class":6152}," https:\u002F\u002Fmcp.facebook.com\u002Fads",[1081,16280,16281],{"class":6152}," --transport",[1081,16283,16284],{"class":6152}," streamable-http\n",[6130,16286,16287,16307],{"v-slot:other":1462},[12,16288,16289,16290,1436,16292,16295,16296,16299,16300,4494,16303,16306],{},"Look for an ",[19,16291,16064],{},[19,16293,16294],{},"Connectors",", or ",[19,16297,16298],{},"Connected Apps"," section in your AI tool's settings. It may also be called ",[19,16301,16302],{},"Tool Servers",[19,16304,16305],{},"External Connections",". If your tool supports MCP but you can't find the setting, check the MCP client directory or its documentation for \"MCP server\" or \"remote tool server\" setup.",[4313,16308,16309],{},[1243,16310,16311,3754,16313],{},[19,16312,16229],{},[4815,16314,16051],{},[53,16316,16318],{"id":16317},"_2-authorize-your-account","2. Authorize Your Account",[12,16320,16321],{},"Your AI agent should then open Meta's authorization screen in a new browser window.",[12,16323,8667,16324,16326,16327,16330],{},[19,16325,6234],{},", then select ",[19,16328,16329],{},"Opt in for current business only"," and pick the Business Managers you want to use.",[12,16332,16333],{},"This limits the AI to one Business Manager instead of every account tied to your personal profile.",[12,16335,16336,16337,5514],{},"Meta auto-grants four permission scopes. Just review and click ",[19,16338,16339],{},"Save",[4313,16341,16342,16347,16352,16357],{},[1243,16343,16344],{},[19,16345,16346],{},"Manage your product catalogues",[1243,16348,16349],{},[19,16350,16351],{},"Manage ads for ad accounts that you have access to",[1243,16353,16354],{},[19,16355,16356],{},"Access your Facebook ads and related stats",[1243,16358,16359,16362],{},[19,16360,16361],{},"Manage your business"," (the selected Business Manager portfolio)",[12,16364,16365],{},[5038,16366],{"alt":16367,"src":16368},"Meta OAuth permissions review screen showing four auto-granted scopes","\u002Fimages\u002Fblog\u002Fmcp-setup\u002Fmeta-oauth-permissions.png",[12,16370,16371,16372,16375,16376,16379],{},"If you're using ",[19,16373,16374],{},"Claude Code"," (the terminal CLI, not claude.ai), this step might fail with a ",[4815,16377,16378],{},"redirect_uris are not registered for this client"," error. Meta hasn't whitelisted Claude Code's callback URLs yet.",[12,16381,8909,16382,16386,16387,16104],{},[31,16383,16385],{"href":3091,"rel":16384},[46],"claude.ai"," (the web version) instead. See ",[31,16388,7335],{"href":16389},"#oauth-redirect-error-in-claude-code",[53,16391,16393],{"id":16392},"_3-verify-the-connection","3. Verify the Connection",[12,16395,16396],{},"Ask your AI agent something simple (ex \"What ad accounts do I have access to?\" or \"Audit my ad account.\")",[12,16398,16399],{},"If it pulls your account data, you're good to go 🥳",[12,16401,16402],{},[5038,16403],{"alt":16404,"src":16405},"Claude responding to \"Audit my ad account\" with account metrics including spend, impressions, clicks, CTR, and CPC","\u002Fimages\u002Fblog\u002Fmcp-setup\u002Fverify-connection.png",[5232,16407,16408],{},[12,16409,16410,16413,16414,16417,16418,16421],{},[19,16411,16412],{},"NOTE:"," If your account shows ",[4815,16415,16416],{},"is_ads_mcp_enabled: false",", that account hasn't been enabled yet. Meta is rolling out access account-by-account, US and higher-spend accounts first. See ",[31,16419,7335],{"href":16420},"#is_ads_mcp_enabled-false"," below.",[12,16423,16424],{},"Three steps, no API keys, no developer account. Your AI agent can now read and write to your entire ad account.",[53,16426,16428],{"id":16427},"prompt-examples-and-tool-reference","Prompt Examples and Tool Reference",[12,16430,16431,16432,16435,16436,16439,16440,16443,16444,16447,16448,16451],{},"The MCP loads 29 tools into your AI agent, organized in five categories: ",[19,16433,16434],{},"Campaign Management"," (5), ",[19,16437,16438],{},"Product Catalog"," (10), ",[19,16441,16442],{},"Assets"," (3), ",[19,16445,16446],{},"Diagnostics"," (4), and ",[19,16449,16450],{},"Insights"," (7).",[12,16453,16454],{},"Most of the value is in Insights and Diagnostics. These are read-only: they pull data, compare metrics, and flag problems without touching anything. Campaign Management is the write side, where the AI can create, edit, and pause campaigns on your live account.",[12,16456,16457],{},"\"How are my ads doing?\" gets a vague summary. Prompts with time ranges, metrics, and thresholds get actionable numbers.",[5232,16459,16460],{},[12,16461,16462,16465],{},[19,16463,16464],{},"Pro Tip:"," Always include a date range, specific metrics, and a threshold in your prompts. \"Show ads where CPA exceeded $30 in the last 7 days\" beats \"which ads are underperforming?\" every time.",[58,16467,16469],{"id":16468},"prompt-examples","Prompt Examples",[12,16471,16472],{},[19,16473,16474,16475,5514],{},"Spot ",[31,16476,2358],{"href":1310},[5086,16478,16480],{"className":7140,"code":16479,"language":7142,"meta":1462,"style":1462},"Show me every ad running for more than 14 days where CTR dropped\nmore than 20% compared to its first week. Include current frequency\nfor each.\n",[4815,16481,16482,16487,16492],{"__ignoreMap":1462},[1081,16483,16484],{"class":6144,"line":6145},[1081,16485,16486],{},"Show me every ad running for more than 14 days where CTR dropped\n",[1081,16488,16489],{"class":6144,"line":1463},[1081,16490,16491],{},"more than 20% compared to its first week. Include current frequency\n",[1081,16493,16494],{"class":6144,"line":1468},[1081,16495,16496],{},"for each.\n",[12,16498,16499],{},[5038,16500],{"alt":16501,"src":16502},"Claude response showing a table of ads with first-week CTR, recent CTR, percentage drop, and current frequency","\u002Fimages\u002Fblog\u002Fmcp-setup\u002Fprompt-creative-fatigue.png",[12,16504,16505],{},"In Ads Manager, finding these means exporting data and cross-referencing frequency manually. The AI scans every ad and flags the dying ones.",[12,16507,16508],{},[19,16509,16510],{},"Find where your budget is leaking:",[5086,16512,16514],{"className":7140,"code":16513,"language":7142,"meta":1462,"style":1462},"Break down all active campaigns by placement. Show spend and cost\nper conversion for Facebook Feed, Instagram Stories, Instagram Reels,\nand Audience Network separately.\n",[4815,16515,16516,16521,16526],{"__ignoreMap":1462},[1081,16517,16518],{"class":6144,"line":6145},[1081,16519,16520],{},"Break down all active campaigns by placement. Show spend and cost\n",[1081,16522,16523],{"class":6144,"line":1463},[1081,16524,16525],{},"per conversion for Facebook Feed, Instagram Stories, Instagram Reels,\n",[1081,16527,16528],{"class":6144,"line":1468},[1081,16529,16530],{},"and Audience Network separately.\n",[12,16532,16533],{},"In Ads Manager you'd open each campaign, click Breakdown > Placement, and compare manually. This does it across your entire account in one pass.",[12,16535,16536],{},[19,16537,16538],{},"Check if your tracking is broken:",[5086,16540,16542],{"className":7140,"code":16541,"language":7142,"meta":1462,"style":1462},"Check my Meta Pixel health and event match quality. Are all standard\nevents firing? What's my match quality rating?\n",[4815,16543,16544,16549],{"__ignoreMap":1462},[1081,16545,16546],{"class":6144,"line":6145},[1081,16547,16548],{},"Check my Meta Pixel health and event match quality. Are all standard\n",[1081,16550,16551],{"class":6144,"line":1463},[1081,16552,16553],{},"events firing? What's my match quality rating?\n",[12,16555,16556],{},"Broken tracking means you optimize toward bad data for weeks. This check is buried 5 clicks deep in Events Manager.",[12,16558,16559],{},[19,16560,16561],{},"Monday morning comparison:",[5086,16563,16565],{"className":7140,"code":16564,"language":7142,"meta":1462,"style":1462},"Compare my account performance this week vs. last week. Total spend,\nconversions, CPA, and ROAS. Flag anything that changed more than 20%.\n",[4815,16566,16567,16572],{"__ignoreMap":1462},[1081,16568,16569],{"class":6144,"line":6145},[1081,16570,16571],{},"Compare my account performance this week vs. last week. Total spend,\n",[1081,16573,16574],{"class":6144,"line":1463},[1081,16575,16576],{},"conversions, CPA, and ROAS. Flag anything that changed more than 20%.\n",[12,16578,16579,16580,16582,16583,1446],{},"Instead of switching date ranges and squinting at numbers, you get a side-by-side with changes flagged. Model the ",[31,16581,1591],{"href":1590}," impact with the ",[31,16584,4493],{"href":1434},[12,16586,16587],{},[19,16588,16589],{},"Find ad sets burning money:",[5086,16591,16593],{"className":7140,"code":16592,"language":7142,"meta":1462,"style":1462},"Which active ad sets have spent more than $50 in the last 7 days\nwith zero conversions? Show targeting and total spend for each.\n",[4815,16594,16595,16600],{"__ignoreMap":1462},[1081,16596,16597],{"class":6144,"line":6145},[1081,16598,16599],{},"Which active ad sets have spent more than $50 in the last 7 days\n",[1081,16601,16602],{"class":6144,"line":1463},[1081,16603,16604],{},"with zero conversions? Show targeting and total spend for each.\n",[12,16606,16607],{},[5038,16608],{"alt":16609,"src":16610},"Claude response showing ad sets with $50+ spend and zero conversions, with targeting and spend breakdown","\u002Fimages\u002Fblog\u002Fmcp-setup\u002Fprompt-burning-money.png",[12,16612,16613],{},"The kind of waste you don't catch until month-end reporting. Kill these, or fix the landing page.",[12,16615,16616],{},[19,16617,16618],{},"Run a full health check:",[5086,16620,16622],{"className":7140,"code":16621,"language":7142,"meta":1462,"style":1462},"Quick audit: any active campaigns with zero impressions this week,\nad sets with frequency above 4, disapproved ads, and total account\nspend vs. yesterday.\n",[4815,16623,16624,16629,16634],{"__ignoreMap":1462},[1081,16625,16626],{"class":6144,"line":6145},[1081,16627,16628],{},"Quick audit: any active campaigns with zero impressions this week,\n",[1081,16630,16631],{"class":6144,"line":1463},[1081,16632,16633],{},"ad sets with frequency above 4, disapproved ads, and total account\n",[1081,16635,16636],{"class":6144,"line":1468},[1081,16637,16638],{},"spend vs. yesterday.\n",[12,16640,16641,16642,16646],{},"Four checks across separate Ads Manager screens, one prompt. Use the ",[31,16643,16645],{"href":16644},"\u002Ftools\u002Fads-profit-calculator","ads profit calculator"," to check if your spend-to-conversion ratio actually makes money.",[12,16648,16649],{},"Every prompt above is a read-only operation. The MCP handles reads well. The moment you ask it to create, edit, or pause something, every action hits your live account.",[58,16651,16653],{"id":16652},"all-29-tools","All 29 Tools",[7338,16655,16656,16659,16990],{},[7341,16657,16658],{},"View the full tool reference table (as of May 2026)",[4585,16660,16661,16674],{},[4588,16662,16663],{},[4591,16664,16665,16668,16671],{},[4594,16666,16667],{},"Category",[4594,16669,16670],{},"Tool",[4594,16672,16673],{},"What It Does",[4602,16675,16676,16688,16698,16708,16718,16728,16741,16751,16761,16771,16781,16791,16801,16811,16821,16831,16843,16853,16863,16879,16889,16899,16909,16930,16940,16950,16960,16970,16980],{},[4591,16677,16678,16682,16685],{},[4607,16679,16680],{},[19,16681,5399],{},[4607,16683,16684],{},"create_campaign",[4607,16686,16687],{},"Create a new campaign with objective, budget, schedule",[4591,16689,16690,16692,16695],{},[4607,16691],{},[4607,16693,16694],{},"create_ad_set",[4607,16696,16697],{},"Create an ad set with targeting, placement, optimization",[4591,16699,16700,16702,16705],{},[4607,16701],{},[4607,16703,16704],{},"create_ad",[4607,16706,16707],{},"Create an ad with creative, copy, CTA",[4591,16709,16710,16712,16715],{},[4607,16711],{},[4607,16713,16714],{},"edit_campaign",[4607,16716,16717],{},"Modify an existing campaign's settings",[4591,16719,16720,16722,16725],{},[4607,16721],{},[4607,16723,16724],{},"manage_campaign_status",[4607,16726,16727],{},"Pause, activate, or archive campaigns",[4591,16729,16730,16735,16738],{},[4607,16731,16732],{},[19,16733,16734],{},"Catalog",[4607,16736,16737],{},"create_catalog",[4607,16739,16740],{},"Create a new product catalog",[4591,16742,16743,16745,16748],{},[4607,16744],{},[4607,16746,16747],{},"add_products",[4607,16749,16750],{},"Add products to a catalog",[4591,16752,16753,16755,16758],{},[4607,16754],{},[4607,16756,16757],{},"update_products",[4607,16759,16760],{},"Update existing product information",[4591,16762,16763,16765,16768],{},[4607,16764],{},[4607,16766,16767],{},"delete_products",[4607,16769,16770],{},"Remove products from a catalog",[4591,16772,16773,16775,16778],{},[4607,16774],{},[4607,16776,16777],{},"get_catalog_issues",[4607,16779,16780],{},"Check for feed errors and warnings",[4591,16782,16783,16785,16788],{},[4607,16784],{},[4607,16786,16787],{},"get_product_sets",[4607,16789,16790],{},"List product sets and their filters",[4591,16792,16793,16795,16798],{},[4607,16794],{},[4607,16796,16797],{},"create_product_set",[4607,16799,16800],{},"Create filtered product groups",[4591,16802,16803,16805,16808],{},[4607,16804],{},[4607,16806,16807],{},"update_product_set",[4607,16809,16810],{},"Modify product set filters",[4591,16812,16813,16815,16818],{},[4607,16814],{},[4607,16816,16817],{},"get_catalog_permissions",[4607,16819,16820],{},"Check who has access",[4591,16822,16823,16825,16828],{},[4607,16824],{},[4607,16826,16827],{},"manage_catalog_permissions",[4607,16829,16830],{},"Grant or revoke catalog access",[4591,16832,16833,16837,16840],{},[4607,16834,16835],{},[19,16836,16442],{},[4607,16838,16839],{},"get_ad_accounts",[4607,16841,16842],{},"List all ad accounts you can access",[4591,16844,16845,16847,16850],{},[4607,16846],{},[4607,16848,16849],{},"get_pages",[4607,16851,16852],{},"List connected Facebook pages",[4591,16854,16855,16857,16860],{},[4607,16856],{},[4607,16858,16859],{},"get_business_assets",[4607,16861,16862],{},"List business portfolio assets",[4591,16864,16865,16869,16872],{},[4607,16866,16867],{},[19,16868,16446],{},[4607,16870,16871],{},"get_pixel_health",[4607,16873,16874,16875,16878],{},"Check ",[31,16876,16877],{"href":9692},"Meta Pixel"," event quality",[4591,16880,16881,16883,16886],{},[4607,16882],{},[4607,16884,16885],{},"get_event_match_quality",[4607,16887,16888],{},"View event match quality scores",[4591,16890,16891,16893,16896],{},[4607,16892],{},[4607,16894,16895],{},"get_capi_diagnostics",[4607,16897,16898],{},"Check Conversions API setup",[4591,16900,16901,16903,16906],{},[4607,16902],{},[4607,16904,16905],{},"get_dataset_issues",[4607,16907,16908],{},"Surface tracking problems",[4591,16910,16911,16915,16918],{},[4607,16912,16913],{},[19,16914,16450],{},[4607,16916,16917],{},"get_campaign_insights",[4607,16919,16920,16921,1436,16923,1436,16925,1436,16927,16929],{},"Pull ",[31,16922,1591],{"href":1590},[31,16924,2297],{"href":2296},[31,16926,2278],{"href":2277},[31,16928,2249],{"href":1357}," at campaign level",[4591,16931,16932,16934,16937],{},[4607,16933],{},[4607,16935,16936],{},"get_adset_insights",[4607,16938,16939],{},"Pull metrics at ad set level",[4591,16941,16942,16944,16947],{},[4607,16943],{},[4607,16945,16946],{},"get_ad_insights",[4607,16948,16949],{},"Pull metrics at individual ad level",[4591,16951,16952,16954,16957],{},[4607,16953],{},[4607,16955,16956],{},"get_account_insights",[4607,16958,16959],{},"Pull account-wide metrics",[4591,16961,16962,16964,16967],{},[4607,16963],{},[4607,16965,16966],{},"get_audience_insights",[4607,16968,16969],{},"Analyze audience performance",[4591,16971,16972,16974,16977],{},[4607,16973],{},[4607,16975,16976],{},"compare_campaigns",[4607,16978,16979],{},"Side-by-side campaign comparison",[4591,16981,16982,16984,16987],{},[4607,16983],{},[4607,16985,16986],{},"get_breakdown",[4607,16988,16989],{},"Break down metrics by age, gender, placement, etc.",[12,16991,16992,16993,16997],{},"Tool names and capabilities may change during beta. See ",[31,16994,16996],{"href":16995},"#src-2","Meta's official AI Connectors help page"," and Marketing API documentation for the latest reference.",[53,16999,17001],{"id":17000},"before-you-trust-it","Before You Trust It...",[12,17003,17004],{},"Good news: Reads work well.\nBad news: Writes have no safety net: every action hits your live account immediately.",[58,17006,17008],{"id":17007},"ai-agents-make-mistakes","AI Agents Make Mistakes",[12,17010,17011,17012,17017],{},"AI agents hallucinate, misinterpret prompts, and take actions you didn't ask for, and are notoriously unreliable: ",[31,17013,17016],{"href":17014,"rel":17015},"https:\u002F\u002Fnypost.com\u002F2026\u002F05\u002F02\u002Ftech\u002Fai-agent-goes-rogue-deletes-companys-entire-database\u002F",[46],"In May 2026, one deleted a company's entire database"," because it misunderstood the task.",[12,17019,17020],{},[5038,17021],{"alt":17022,"src":17023},"Tweet from @lifeof_jer: \"An AI Agent Just Destroyed Our Production Data. It Confessed in Writing.\" with 7.1M views","\u002Fimages\u002Fblog\u002Fmcp-setup\u002Fai-agent-destroyed-data.png",[12,17025,17026],{},"With Meta's MCP, every write action goes straight to your live account. If the AI changes a daily budget from $100 to $10,000, it's done.",[12,17028,17029],{},"Meta does pause all MCP-created campaigns as a safety measure, but edits to existing campaigns go live immediately, there is no \"draft\" like you normally have in the ads manager.",[12,17031,17032],{},"So if the AI's judgement was wrong, your account can get messy and your CPA increase without you noticing.",[12,17034,17035,17036,17039],{},"Tools like ",[31,17037,5889],{"href":17038},"\u002Ffeatures\u002Fads-mcp\u002F"," solve this with a draft layer: the AI proposes changes, you review them in a dashboard, nothing goes live until you approve.",[12,17041,17042],{},[5038,17043],{"alt":17044,"src":17045},"AdKit Agent Drafts screen showing pending campaign changes with approve and reject controls","\u002Fimages\u002Fblog\u002Fmcp-setup\u002Fadkit-draft-review.png",[58,17047,17049],{"id":17048},"the-more-you-use-it-the-worse-it-gets","The more you use it, the Worse It Gets",[12,17051,17052],{},"I asked Claude to audit my ad account using Meta Ads MCP. One question used 27% of the AI's working memory (often called \"context window\").",[12,17054,17055],{},[5038,17056],{"alt":17057,"src":17058},"After a single \"audit my account\" prompt, 27% of the AI's working memory is already used","\u002Fimages\u002Fblog\u002Fmcp-setup\u002Ftoken-overhead.png",[12,17060,17061,17062,1446],{},"Meta dumps everything into every response: settings, raw API fields, stuff you didn't ask for. A few more questions and you're past 50% working memory and ",[31,17063,17066],{"href":17064,"rel":17065},"https:\u002F\u002Farxiv.org\u002Fabs\u002F2502.05167",[46],"AI becomes exponentially dumber",[12,17068,17069],{},"It's usually not a big deal, but the problem is that it has write access to your ad account, with no guardrails.",[12,17071,17072,17075],{},[31,17073,17074],{"href":17038},"AdKit's MCP"," filters out the noise: 6 tools instead of 29, only the data the AI needs.",[5232,17077,17078],{},[12,17079,17080,17082],{},[19,17081,5238],{}," On Claude, toggle the connector off in Settings > Connectors between sessions. Auth persists, reconnects instantly.",[58,17084,17086],{"id":17085},"meta-only","Meta Only",[12,17088,17089],{},"The MCP covers Meta (Facebook and Instagram) ads. No Google Ads, no LinkedIn, no TikTok.",[12,17091,17092,17093,17095],{},"If you run ads across multiple platforms, you need separate tools for each. Google has an official Ads MCP, but it's read-only: no campaign creation or edits. ",[31,17094,17074],{"href":17038}," covers both Meta and Google Ads in one connection with 6 tools instead of 29, keeping context lean enough that your agent stays sharp.",[58,17097,17099],{"id":17098},"still-in-beta","Still in Beta",[12,17101,17102],{},"The MCP launched April 29, 2026. It's an open beta. Tools will change, things will break.",[12,17104,17105,17106,17110],{},"Rate limits sit at roughly 200 calls per hour per ad account, in line with ",[31,17107,17109],{"href":17108},"#src-3","Meta's Marketing API rate limiting policy",". Heavy analysis on large accounts hits that fast.",[12,17112,17113,17114,17116,17117,1446],{},"Not every account is enabled yet. Meta is rolling out access gradually, US and higher-spend accounts first. See ",[31,17115,7335],{"href":16420}," if yours shows ",[4815,17118,16416],{},[53,17120,7336],{"id":7335},[7338,17122,17123,17126,17132,17135],{},[7341,17124,17125],{},"\"is_ads_mcp_enabled: false\"",[12,17127,17128,17129,17131],{},"The most common issue right now. You authenticate fine, see your accounts listed, but some return ",[4815,17130,16416],{}," and the AI can't access their data.",[12,17133,17134],{},"Meta is enabling MCP access account-by-account. US accounts go first, higher-spend accounts are prioritized, and some regions (ANZ, parts of EU) are still waiting. There's no fix and no way to request early access.",[12,17136,17137,17138,17141],{},"You can use an external MCP in the meantime, like ",[31,17139,17140],{"href":4398},"Adkit's Meta MCP"," .",[7338,17143,17144,17147],{},[7341,17145,17146],{},"Free Plan Can't Add MCP",[12,17148,17149],{},"The \"Add custom connector\" option doesn't appear on free plans. You need Claude Pro or Max ($20+\u002Fmo), ChatGPT Plus, or another paid AI client with MCP support. This is a limitation of the AI tools, not Meta's server.",[7338,17151,17152,17155,17158],{},[7341,17153,17154],{},"\"Insufficient Permissions\" (Error 200)",[12,17156,17157],{},"Your token is missing one of the required scopes. This can happen if the OAuth flow was interrupted or if Meta changed the permission grant screen.",[12,17159,17160,17161,17166,17167,1446],{},"Fix: disconnect the MCP, reconnect, and complete the full OAuth flow again. You can verify your token's scopes with Meta's ",[31,17162,17165],{"href":17163,"rel":17164},"https:\u002F\u002Fdevelopers.facebook.com\u002Ftools\u002Fdebug\u002Faccesstoken\u002F",[46],"Access Token Debugger",". For a full list of error codes related to permissions, see the ",[31,17168,17170],{"href":17169},"#src-8","Marketing API error reference",[7338,17172,17173,17176,17179],{},[7341,17174,17175],{},"Rate Limit Exceeded (Error 4 \u002F 429)",[12,17177,17178],{},"Meta throttles at roughly 200 API calls per hour per ad account. AI agents that fire multiple parallel queries hit this fast, especially on accounts with many campaigns.",[12,17180,17181,17182,17185,17186,17189],{},"Fix: ask for smaller date ranges, fewer metrics per query, and avoid requesting everything at once. For custom tooling, check the ",[4815,17183,17184],{},"x-fb-ads-insights-throttle"," response header. ",[31,17187,17188],{"href":17108},"Meta's rate limiting documentation"," explains the throttle tiers in detail.",[7338,17191,17192,17195,17202],{},[7341,17193,17194],{},"Local File Uploads Fail",[12,17196,17197,17198,17201],{},"The MCP needs publicly accessible URLs for images and videos. Local file paths (",[4815,17199,17200],{},"\u002FUsers\u002Fyou\u002Fcreative.jpg","), private Google Drive links, and localhost URLs won't work.",[12,17203,17204],{},"Fix: upload creatives to a CDN or any public URL first, then reference that URL in your prompt.",[7338,17206,17207,17210,17218],{},[7341,17208,17209],{},"AI-Created Campaigns Are Always PAUSED",[12,17211,17212,17213,1446],{},"Not a bug. Meta forces all campaigns, ad sets, and ads created through the MCP to start paused. You activate them manually in ",[31,17214,17217],{"href":17215,"rel":17216},"https:\u002F\u002Fwww.facebook.com\u002Fbusiness\u002Ftools\u002Fads-manager",[46],"Ads Manager",[12,17219,17220],{},"This is a safety feature. It prevents the \"AI accidentally launched a $10,000\u002Fday campaign\" scenario.",[7338,17222,17223,17226,17233],{},[7341,17224,17225],{},"Answers Getting Worse Over a Session",[12,17227,17228,17229,1446],{},"Meta's MCP sends unfiltered API data with every response. After several questions, ",[31,17230,17232],{"href":17064,"rel":17231},[46],"AI performance can drop by half",[12,17234,17235],{},"Fix: disconnect the MCP between sessions. On Claude, toggle it off in Settings > Connectors. Auth persists.",[7338,17237,17238,17241,17247,17250],{},[7341,17239,17240],{},"OAuth Redirect Error in Claude Code",[5086,17242,17245],{"className":17243,"code":17244,"language":5091},[5089],"redirect_uris are not registered for this client\n",[4815,17246,17244],{"__ignoreMap":1462},[12,17248,17249],{},"Happens specifically in Claude Code (the terminal\u002FCLI version). Meta's OAuth doesn't have Claude Code's localhost callback URLs registered. Multiple GitHub issues filed and closed, no fix.",[12,17251,17252],{},"Workaround: use Claude.ai (the web version) instead of Claude Code for Meta Ads MCP.",[7338,17254,17255,17258,17265,17274],{},[7341,17256,17257],{},"\"Terms of Service Not Accepted\" (Error 100 \u002F 1815089)",[12,17259,17260,17261,17264],{},"A cryptic ",[4815,17262,17263],{},"VALIDATION"," error when creating lead generation campaigns. Meta requires separate acceptance of the Lead Ads Terms of Service.",[12,17266,17267,17268,17273],{},"Fix: go to ",[31,17269,17272],{"href":17270,"rel":17271},"https:\u002F\u002Fwww.facebook.com\u002Flegal\u002Fleadgen\u002Ftos\u002F",[46],"facebook.com\u002Flegal\u002Fleadgen\u002Ftos",", accept the TOS, then try again. Similar TOS gates may exist for custom audiences and other ad types.",[12,17275,17276,17277,1446],{},"Known bug: some accounts still get this error after accepting the TOS. Meta support has confirmed it can be an internal issue on their end. If accepting the TOS doesn't fix it, ",[31,17278,17281],{"href":17279,"rel":17280},"https:\u002F\u002Fwww.facebook.com\u002Fbusiness\u002Fhelp",[46],"contact Meta Business support",[7338,17283,17284,17287,17290],{},[7341,17285,17286],{},"Token Expired \u002F Silent Failures",[12,17288,17289],{},"Access tokens last roughly 60 days and don't auto-refresh in all clients. You'll be working normally, then tools start returning empty results or generic errors with no warning.",[12,17291,17292],{},"Fix: disconnect and reconnect the MCP to get a fresh token. Set yourself a reminder for 50 days.",[53,17294,17295],{"id":7446},"Final Thoughts",[12,17297,17298,17299,17301],{},"Start with read-only prompts: creative fatigue checks, placement breakdowns, pixel health. Keep write operations in Ads Manager for now, or use ",[31,17300,5889],{"href":17038}," to add a review layer before anything goes live.",[12,17303,17304,17305,1446],{},"If you also run Google Ads, check our ",[31,17306,4562],{"href":5888},[12,17308,17309,17310,4494,17313,1446],{},"Got questions about the setup? Ping me on ",[31,17311,7469],{"href":7467,"rel":17312},[46],[31,17314,7474],{"href":7472,"rel":17315},[46],[58,17317,7478],{"id":7477},[1240,17319,17320,17327,17334,17341,17348,17355,17362],{},[1243,17321,17322],{},[31,17323,17326],{"id":17324,"href":17325},"src-2","https:\u002F\u002Fwww.facebook.com\u002Fbusiness\u002Fhelp\u002F1456422242197840","Meta AI Connectors help page",[1243,17328,17329],{},[31,17330,17333],{"id":17331,"href":17332},"src-3","https:\u002F\u002Fdevelopers.facebook.com\u002Fdocs\u002Fmarketing-api\u002Foverview\u002Fauthorization#limits","Marketing API rate limiting",[1243,17335,17336],{},[31,17337,17340],{"id":17338,"href":17339},"src-4","https:\u002F\u002Fwww.facebook.com\u002Fbusiness\u002Fnews\u002Fmeta-ads-ai-connectors","Meta official announcement: AI Connectors",[1243,17342,17343],{},[31,17344,17347],{"id":17345,"href":17346},"src-5","https:\u002F\u002Fsupport.anthropic.com\u002Fen\u002Farticles\u002F11175166-how-can-i-connect-claude-to-external-tools-using-mcp","Anthropic MCP connectors documentation",[1243,17349,17350],{},[31,17351,17354],{"id":17352,"href":17353},"src-6","https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fguides\u002Ftools-remote-mcp","OpenAI connectors documentation",[1243,17356,17357],{},[31,17358,17361],{"id":17359,"href":17360},"src-7","https:\u002F\u002Fdocs.cursor.com\u002Fcontext\u002Fmodel-context-protocol","Cursor MCP setup guide",[1243,17363,17364],{},[31,17365,17170],{"id":17366,"href":17367},"src-8","https:\u002F\u002Fdevelopers.facebook.com\u002Fdocs\u002Fmarketing-api\u002Ferror-reference\u002F",[7509,17369,17370],{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}",{"title":1462,"searchDepth":1463,"depth":1463,"links":17372},[17373,17374,17375,17376,17380,17386,17387],{"id":16068,"depth":1463,"text":16069},{"id":16317,"depth":1463,"text":16318},{"id":16392,"depth":1463,"text":16393},{"id":16427,"depth":1463,"text":16428,"children":17377},[17378,17379],{"id":16468,"depth":1468,"text":16469},{"id":16652,"depth":1468,"text":16653},{"id":17000,"depth":1463,"text":17001,"children":17381},[17382,17383,17384,17385],{"id":17007,"depth":1468,"text":17008},{"id":17048,"depth":1468,"text":17049},{"id":17085,"depth":1468,"text":17086},{"id":17098,"depth":1468,"text":17099},{"id":7335,"depth":1463,"text":7336},{"id":7446,"depth":1463,"text":17295,"children":17388},[17389],{"id":7477,"depth":1468,"text":7478},"2026-05-08","Set up Meta's official Ads MCP in ~15 minutes. Free, no API keys, works with Claude, ChatGPT, and Cursor. Step-by-step with screenshots.",[17393,17396,17399,17402,17405,17408,17411,17414],{"question":17394,"answer":17395},"Is Meta Ads MCP free?","Yes, completely free. Meta provides the official MCP server at no cost. You do need a paid AI tool (Claude Pro at $20\u002Fmo, ChatGPT Plus, etc.) since free tiers don't support MCP connectors. But the server itself is free.",{"question":17397,"answer":17398},"Will using Meta Ads MCP get my account banned?","No. This is Meta's own official server, authorized and maintained by Meta. Unofficial third-party MCPs from 2025 caused account bans because they violated Meta's Terms of Service. The official MCP launched in April 2026 is fully sanctioned.",{"question":17400,"answer":17401},"Does Meta Ads MCP work with ChatGPT?","Yes. It works with any MCP-compatible AI client: Claude, ChatGPT, Cursor, Perplexity, and others. The setup process is nearly identical across all of them.",{"question":17403,"answer":17404},"Can Meta Ads MCP change my campaigns?","Yes. It has full read and write access. It can create campaigns, edit budgets, pause ads, and modify targeting. Every change hits your live account immediately. There is no draft mode or undo button.",{"question":17406,"answer":17407},"What's the difference between Meta Ads MCP and Meta Ads AI Connectors?","Same thing, different name. 'AI Connectors' is Meta's official branding. 'MCP' (Model Context Protocol) is the underlying technical standard. Most people search for 'Meta Ads MCP' so that's what this guide uses.",{"question":17409,"answer":17410},"Do I need a Meta Developer account?","No. The official MCP uses standard OAuth authentication. No developer account, no API tokens, no app registration. Those were only required for third-party MCP servers.",{"question":17412,"answer":17413},"How many ad accounts can I connect?","All ad accounts within your Business Manager portfolio. During the OAuth flow, you select which business portfolio to connect, and the MCP gets access to every ad account in that portfolio.",{"question":17415,"answer":17416},"Is my data safe?","Your data goes through Meta's own servers, not a third party. The MCP uses standard Meta OAuth with the same permissions model as any official Meta integration. You can revoke access anytime from Business Manager settings.",{},"29 tools. Free. No API keys.",{"title":16039,"description":17391},"resources\u002Fmeta-ads-mcp-setup",[1555,1554,4799,7559,4800,7560],"2026-05-11","wwUo-z0q7AWa0zd0szlDnTyRhnOXh9EuUj_qjJWeKmM",{"id":17425,"title":17426,"author":7,"body":17427,"breadcrumbLabel":7,"category":7335,"cover":1524,"createdAt":17805,"description":17806,"extension":1527,"faqs":17807,"meta":17821,"navigation":1547,"noAiBadge":1524,"og":1524,"ogDescription":7,"ogIcon":7,"path":17822,"seo":17823,"slug":17824,"stem":17824,"tags":17825,"updatedAt":7,"wip":1524,"__hash__":17828},"resources\u002Fresources\u002Ftroubleshooting\u002Ffacebook-ads-high-cpm.md","Why Is My Facebook CPM So High? 7 Causes and Fixes",{"type":9,"value":17428,"toc":17792},[17429,17434,17442,17446,17454,17474,17477,17481,17485,17491,17504,17509,17520,17524,17529,17541,17545,17559,17563,17568,17573,17577,17588,17592,17597,17601,17615,17619,17624,17628,17645,17649,17654,17663,17667,17678,17682,17687,17691,17705,17709,17712,17781],[12,17430,17431,17433],{},[31,17432,2249],{"href":1357}," (cost per 1,000 impressions) is one of the most important metrics in Facebook advertising. When it rises unexpectedly or stays consistently high, it directly inflates your cost per click and cost per acquisition, making campaigns less profitable or outright unprofitable.",[12,17435,17436,17437,17441],{},"Understanding what drives CPM on Meta's auction system is the first step to controlling it. If you want a quick guided diagnosis, use our ",[31,17438,17440],{"href":17439},"\u002Ftools\u002Fads-troubleshooter","Ads Troubleshooter"," to pinpoint the likely cause.",[53,17443,17445],{"id":17444},"how-facebook-cpm-is-determined","How Facebook CPM Is Determined",[12,17447,17448,17449,17453],{},"Meta's ad auction is a real-time competition. Every time a user opens their feed, ",[31,17450,17452],{"href":10730,"rel":17451},[46],"Meta runs an auction"," among all advertisers targeting that person. The winner pays a price determined by:",[4313,17455,17456,17462,17468],{},[1243,17457,17458,17461],{},[19,17459,17460],{},"Your bid"," (or Meta's estimate of what you'd bid, for automatic bidding)",[1243,17463,17464,17467],{},[19,17465,17466],{},"Your estimated action rate"," (how likely that person is to take the desired action)",[1243,17469,17470,17473],{},[19,17471,17472],{},"Your ad quality"," (how positively users engage with your ad)",[12,17475,17476],{},"CPM rises when you win auctions at higher prices. This happens when competition increases, your quality scores drop, or your targeting brings you into more expensive audience pools.",[53,17478,17480],{"id":17479},"_7-causes-of-high-facebook-cpm","7 Causes of High Facebook CPM",[58,17482,17484],{"id":17483},"_1-audience-too-small-or-saturated","1. Audience Too Small or Saturated",[12,17486,17487,17490],{},[19,17488,17489],{},"What it means",": You've exhausted your target audience. The ad frequency is high (people are seeing your ads 4-6+ times), and people who were going to click have already clicked. The remaining people in the audience are harder to reach, so Meta has to bid more aggressively to show to them.",[12,17492,17493,17496,17497,1342,17500,17503],{},[19,17494,17495],{},"Diagnosis",": Check ",[19,17498,17499],{},"Ad Set > Estimated Audience Size",[19,17501,17502],{},"Frequency"," in the ad reporting columns. Frequency above 3-4 on a short campaign, or above 8-10 over a month, signals saturation.",[12,17505,17506,5514],{},[19,17507,17508],{},"Fix",[4313,17510,17511,17514,17517],{},[1243,17512,17513],{},"Expand the audience (higher lookalike percentage, broader demographics, removed interest restrictions)",[1243,17515,17516],{},"Introduce new creative. Fresh ads reset frequency perception even to the same audience",[1243,17518,17519],{},"Pause the ad set and let the audience \"reset\" for 2-4 weeks before relaunching",[58,17521,17523],{"id":17522},"_2-low-ad-relevance-and-quality-score","2. Low Ad Relevance and Quality Score",[12,17525,17526,17528],{},[19,17527,17489],{},": Meta's systems have determined that your ad doesn't resonate well with the audience you're targeting. People are scrolling past it, hiding it, or not engaging. Meta penalizes low-quality ads with higher CPMs.",[12,17530,17531,17496,17533,17540],{},[19,17532,17495],{},[31,17534,17537],{"href":17535,"rel":17536},"https:\u002F\u002Fwww.facebook.com\u002Fbusiness\u002Fhelp\u002F403110480493160",[46],[19,17538,17539],{},"Ad Relevance Diagnostics"," in the Ads reporting columns: Quality Ranking, Engagement Rate Ranking, and Conversion Rate Ranking. \"Below Average\" on any of these is a signal.",[12,17542,17543,5514],{},[19,17544,17508],{},[4313,17546,17547,17550,17553,17556],{},[1243,17548,17549],{},"Refresh the creative: new hook, different format, different angle",[1243,17551,17552],{},"Test video vs. static. One typically outperforms the other for your specific audience",[1243,17554,17555],{},"Review comments on the ad. Negative comments or \"Report this ad\" actions drag down quality scores",[1243,17557,17558],{},"Ensure the ad's message matches the landing page (relevance across the funnel matters)",[58,17560,17562],{"id":17561},"_3-q4-and-seasonal-auction-competition","3. Q4 and Seasonal Auction Competition",[12,17564,17565,17567],{},[19,17566,17489],{},": October through December, CPMs across Meta rise significantly (sometimes 30-60% above average) because retail advertisers flood the platform for Black Friday, Cyber Monday, and Christmas. Even if you're not a retailer, you're competing in the same auctions.",[12,17569,17570,17572],{},[19,17571,17495],{},": Check if CPM increases correlated with October 1st or major retail holidays.",[12,17574,17575,5514],{},[19,17576,17508],{},[4313,17578,17579,17582,17585],{},[1243,17580,17581],{},"Budget for higher CPMs in Q4. Maintain the same budget but expect lower volume at the same ROAS",[1243,17583,17584],{},"Consider pulling back or reallocating budget during the peak week (the week of Black Friday), then resuming after retail advertisers reduce spend in January",[1243,17586,17587],{},"Build up strong audiences and creative before Q4. Higher quality scores give you more resilience against auction price increases",[58,17589,17591],{"id":17590},"_4-new-account-with-no-history","4. New Account With No History",[12,17593,17594,17596],{},[19,17595,17489],{},": Brand new ad accounts have no trust history with Meta. The algorithm doesn't know how your ads will perform, which makes it risk-averse about where it places them. This translates to higher CPMs while the account establishes its track record.",[12,17598,17599,5514],{},[19,17600,17508],{},[4313,17602,17603,17606,17609,17612],{},[1243,17604,17605],{},"Expect higher CPMs in the first 1-3 months. This is normal for new accounts",[1243,17607,17608],{},"Don't panic and constantly change campaigns; let the algorithm learn",[1243,17610,17611],{},"Start with lower-risk campaign objectives (link clicks or reach) before moving to conversion campaigns",[1243,17613,17614],{},"Small consistent spend is better than high-spend bursts for building account trust",[58,17616,17618],{"id":17617},"_5-broad-targeting-without-signal","5. Broad Targeting Without Signal",[12,17620,17621,17623],{},[19,17622,17489],{},": Running campaigns with very broad targeting (wide age range, many countries, no interests) without strong conversion signals can result in Meta targeting expensive-to-reach people because it doesn't have enough conversion data to find cheaper, higher-intent audiences.",[12,17625,17626,5514],{},[19,17627,17508],{},[4313,17629,17630,17639,17642],{},[1243,17631,17632,17633,17638],{},"Feed the algorithm more conversion data: install the pixel, send ",[31,17634,17637],{"href":17635,"rel":17636},"https:\u002F\u002Fdevelopers.facebook.com\u002Fdocs\u002Fmarketing-api\u002Fconversions-api",[46],"CAPI"," events, optimize for real conversions (not just clicks)",[1243,17640,17641],{},"Use Advantage+ audience features (Meta's AI audience expansion) with conversion-optimised objectives. Meta is good at finding efficient audiences when given freedom and sufficient conversion data",[1243,17643,17644],{},"Alternatively, narrow targeting to your known ICP for initial data collection, then expand once the algorithm has learned your best converters",[58,17646,17648],{"id":17647},"_6-creative-fatigue","6. Creative Fatigue",[12,17650,17651,17653],{},[19,17652,17489],{},": The same creative running for too long has been seen by most of your target audience. Click-through rates drop, engagement drops, and Meta's quality signals drop, resulting in higher CPMs and lower delivery.",[12,17655,17656,17658,17659,17662],{},[19,17657,17495],{},": Look at ad-level frequency and compare ",[31,17660,2278],{"href":17661},"\u002Ftools\u002Fctr-calculator"," at campaign start vs. current. A CTR drop of 30%+ is a strong signal of fatigue.",[12,17664,17665,5514],{},[19,17666,17508],{},[4313,17668,17669,17672,17675],{},[1243,17670,17671],{},"Rotate creatives every 3-4 weeks for most campaigns",[1243,17673,17674],{},"Build a creative testing pipeline. Always have new variants ready before the current ones fatigue",[1243,17676,17677],{},"Use A\u002FB tests to identify which creative variants perform best, so you know what to replace underperformers with",[58,17679,17681],{"id":17680},"_7-account-restrictions-limiting-delivery","7. Account Restrictions Limiting Delivery",[12,17683,17684,17686],{},[19,17685,17489],{},": Restrictions or policy warnings on your ad account can limit which auctions you can compete in, effectively reducing your bidding power and raising the effective CPM for the auctions you can access.",[12,17688,17689,5514],{},[19,17690,17508],{},[4313,17692,17693,17696,17699],{},[1243,17694,17695],{},"Check Account Quality in Meta Business Manager for any warnings or restrictions",[1243,17697,17698],{},"Resolve any outstanding policy issues",[1243,17700,17701,17702,17704],{},"Use our ",[31,17703,17440],{"href":17439}," to diagnose delivery restrictions",[53,17706,17708],{"id":17707},"what-a-normal-cpm-looks-like-by-industry","What a \"Normal\" CPM Looks Like By Industry",[12,17710,17711],{},"These are rough 2025 benchmarks across Meta (Facebook + Instagram):",[4585,17713,17714,17724],{},[4588,17715,17716],{},[4591,17717,17718,17721],{},[4594,17719,17720],{},"Industry",[4594,17722,17723],{},"Typical CPM Range",[4602,17725,17726,17734,17742,17750,17757,17765,17773],{},[4591,17727,17728,17731],{},[4607,17729,17730],{},"E-commerce (B2C)",[4607,17732,17733],{},"$8–18",[4591,17735,17736,17739],{},[4607,17737,17738],{},"SaaS and software",[4607,17740,17741],{},"$12–25",[4591,17743,17744,17747],{},[4607,17745,17746],{},"Finance and insurance",[4607,17748,17749],{},"$15–35",[4591,17751,17752,17755],{},[4607,17753,17754],{},"Healthcare",[4607,17756,17741],{},[4591,17758,17759,17762],{},[4607,17760,17761],{},"Education",[4607,17763,17764],{},"$8–15",[4591,17766,17767,17770],{},[4607,17768,17769],{},"Retargeting audiences",[4607,17771,17772],{},"$15–40",[4591,17774,17775,17778],{},[4607,17776,17777],{},"Q4 (all industries)",[4607,17779,17780],{},"+30–60% above baseline",[12,17782,17701,17783,17785,17786,17788,17789,17791],{},[31,17784,1341],{"href":1340}," to model your unit economics and understand what CPM you need to hit your target CPA. Remember that CPM is only one part of the equation. Your ",[31,17787,2254],{"href":2253}," and CTR determine whether a high CPM campaign is still profitable. For building high-converting audiences that reduce your effective CPM over time, see our guide on ",[31,17790,1859],{"href":1858}," and how custom and lookalike audiences work.",{"title":1462,"searchDepth":1463,"depth":1463,"links":17793},[17794,17795,17804],{"id":17444,"depth":1463,"text":17445},{"id":17479,"depth":1463,"text":17480,"children":17796},[17797,17798,17799,17800,17801,17802,17803],{"id":17483,"depth":1468,"text":17484},{"id":17522,"depth":1468,"text":17523},{"id":17561,"depth":1468,"text":17562},{"id":17590,"depth":1468,"text":17591},{"id":17617,"depth":1468,"text":17618},{"id":17647,"depth":1468,"text":17648},{"id":17680,"depth":1468,"text":17681},{"id":17707,"depth":1463,"text":17708},"2026-03-24","Facebook CPM spiked or consistently too high? Learn the 7 most common causes (audience saturation, low relevance score, Q4 competition) and how to fix each.",[17808,17813,17816],{"question":17809,"answer":17810},"What is a normal CPM for Facebook ads?",{"Average Facebook CPMs vary widely by industry, audience, and time of year":17811},{" Rough benchmarks as of 2025":17812},"B2C e-commerce and SaaS, $8-20 CPM. Finance and insurance, $15-35. Healthcare, $12-25. Retargeting audiences (custom audiences), $15-40 (higher CPM but much better conversion rate). Q4 (October-December) CPMs are typically 30-60% higher than the rest of the year due to auction competition from retail advertisers. Use AdKit's CPM Calculator to model your specific economics.",{"question":17814,"answer":17815},"Does a high CPM always mean my campaigns are performing poorly?","Not necessarily. CPM is a cost metric, not a performance metric. What matters is your cost per result (CPA). A $30 CPM campaign that converts well can be more profitable than a $10 CPM campaign with poor conversion rates. High CPM only becomes a problem when it raises your CPA above your acceptable threshold. Always evaluate CPM in the context of your CTR and conversion rate. The full funnel math determines profitability.",{"question":17817,"answer":17818},"Why did my Facebook CPM suddenly spike?",{"Common causes of sudden CPM spikes include seasonal competition increases (Q4, major holidays), an audience that's become saturated (you've reached most of the people in it), a significant reduction in ad relevance (low quality creative), or Meta's algorithm entering a new learning phase due to changes you made":17819},{" Check your audience frequency":17820},"if it's above 3-4, saturation is likely. Also check if the spike coincided with any campaign changes or seasonal calendar events.",{},"\u002Fresources\u002Ftroubleshooting\u002Ffacebook-ads-high-cpm",{"title":17426,"description":17806},"resources\u002Ftroubleshooting\u002Ffacebook-ads-high-cpm",[1554,1555,17826,17827],"cpm","optimization","wF6wpEEwL4KDJxeqmgMR3NMmBfkJNmCvZKUJghl8Ab8",{"id":17830,"title":17831,"author":7,"body":17832,"breadcrumbLabel":7,"category":7335,"cover":1524,"createdAt":18223,"description":18224,"extension":1527,"faqs":18225,"meta":18235,"navigation":1547,"noAiBadge":1524,"og":1524,"ogDescription":7,"ogIcon":7,"path":18236,"seo":18237,"slug":18238,"stem":18238,"tags":18239,"updatedAt":7,"wip":1524,"__hash__":18241},"resources\u002Fresources\u002Ftroubleshooting\u002Ffacebook-ads-not-delivering.md","Facebook Ads Not Delivering: 9 Reasons and How to Fix Them",{"type":9,"value":17833,"toc":18208},[17834,17840,17844,17847,17866,17869,17873,17877,17883,17889,17893,17907,17911,17916,17921,17925,17942,17946,17951,17956,17960,17980,17984,17989,17994,18004,18008,18013,18018,18022,18033,18037,18042,18053,18057,18071,18075,18080,18085,18089,18105,18109,18114,18119,18123,18131,18135,18140,18145,18149,18172,18176,18179,18205],[12,17835,17836,17837,17839],{},"\"Facebook ads not delivering\" covers a range of different problems: ads that literally won't serve at all, or campaigns that are technically running but getting far fewer impressions than expected. Not sure where to start? Our ",[31,17838,17440],{"href":17439}," walks you through the diagnosis step by step. Otherwise, diagnosis starts with checking the status of each level of the campaign hierarchy.",[53,17841,17843],{"id":17842},"check-the-campaign-hierarchy-first","Check the Campaign Hierarchy First",[12,17845,17846],{},"Facebook ads have three levels: Campaign > Ad Set > Ad. An issue at any level can stop delivery at all levels below it. Before diagnosing deeper issues, verify:",[4313,17848,17849,17855,17861],{},[1243,17850,17851,17852,17854],{},"Is the ",[19,17853,5399],{}," status \"Active\" (not \"Off,\" \"Paused,\" or \"Error\")?",[1243,17856,17851,17857,17860],{},[19,17858,17859],{},"Ad Set"," active with a live schedule and budget?",[1243,17862,17851,17863,17865],{},[19,17864,5429],{}," approved and active (not \"Disapproved,\" \"In Review,\" or \"Paused\")?",[12,17867,17868],{},"If any level is off or paused, that's your answer. If everything shows \"Active\" and you still have no delivery, proceed to the reasons below.",[53,17870,17872],{"id":17871},"_9-reasons-facebook-ads-stop-delivering","9 Reasons Facebook Ads Stop Delivering",[58,17874,17876],{"id":17875},"_1-audience-too-small","1. Audience Too Small",[12,17878,17879,17882],{},[19,17880,17881],{},"Symptoms",": Ad set status shows \"Active\" but delivery column shows very few or zero impressions. You may see a warning about audience size.",[12,17884,17885,17888],{},[19,17886,17887],{},"Cause",": The combination of targeting options (demographics, interests, custom audiences, exclusions, behaviors) has narrowed the audience below Meta's minimum for reliable delivery. Meta generally needs at least a few thousand people in an audience to deliver effectively.",[12,17890,17891,5514],{},[19,17892,17508],{},[4313,17894,17895,17898,17901,17904],{},[1243,17896,17897],{},"Widen the geographic targeting",[1243,17899,17900],{},"Remove overly restrictive interests or demographic filters",[1243,17902,17903],{},"Reduce exclusion lists",[1243,17905,17906],{},"Check the audience size estimate in the ad set targeting panel. Aim for at least 100,000+ for campaign stability, though smaller audiences can work for retargeting",[58,17908,17910],{"id":17909},"_2-bid-too-low-manual-bidding","2. Bid Too Low (Manual Bidding)",[12,17912,17913,17915],{},[19,17914,17881],{},": Low or zero impressions with no obvious targeting or approval issues.",[12,17917,17918,17920],{},[19,17919,17887],{},": If you're using manual bidding (cost cap, bid cap, or minimum ROAS), your bid may be too low to win auctions consistently. This is common with cost caps that are set too aggressively relative to market CPMs.",[12,17922,17923,5514],{},[19,17924,17508],{},[4313,17926,17927,17930,17933],{},[1243,17928,17929],{},"Switch to \"Advantage Campaign Budget\" or \"Lowest Cost\" bidding temporarily to check if the campaign can deliver at all",[1243,17931,17932],{},"If delivery improves, your cost cap was too restrictive. Adjust it upward incrementally.",[1243,17934,17935,17936,17938,17939,17941],{},"Check your ",[31,17937,2249],{"href":1357}," benchmarks for your industry and audience type. Your bid needs to be competitive. Use our ",[31,17940,1341],{"href":1340}," to estimate what you should expect to pay.",[58,17943,17945],{"id":17944},"_3-ad-disapproved","3. Ad Disapproved",[12,17947,17948,17950],{},[19,17949,17881],{},": \"Disapproved\" status on one or more ads in the ad set.",[12,17952,17953,17955],{},[19,17954,17887],{},": Meta's automated or manual review found a policy violation in your ad creative or landing page.",[12,17957,17958,5514],{},[19,17959,17508],{},[4313,17961,17962,17965,17974,17977],{},[1243,17963,17964],{},"Check the disapproval reason by clicking the \"Disapproved\" status badge",[1243,17966,17967,17968,17973],{},"Edit the ad to address the specific violation. Refer to ",[31,17969,17972],{"href":17970,"rel":17971},"https:\u002F\u002Fwww.facebook.com\u002Fbusiness\u002Fhelp\u002F204798856225114",[46],"Meta's Advertising Policies"," for the full list of rules",[1243,17975,17976],{},"Resubmit for review (editing and saving an ad automatically resubmits it)",[1243,17978,17979],{},"If you believe it's a false positive, use the \"Request Review\" option",[58,17981,17983],{"id":17982},"_4-ad-account-restricted","4. Ad Account Restricted",[12,17985,17986,17988],{},[19,17987,17881],{},": All campaigns show very limited or zero delivery. Account-level banner or warning visible in Ads Manager.",[12,17990,17991,17993],{},[19,17992,17887],{},": Your ad account has been restricted due to policy violations, payment issues, or unusual activity.",[12,17995,17996,17998,17999,1446],{},[19,17997,17508],{},": Check the notification in your Ad Account Quality page for specific violations. Appeal if you believe it's a mistake, or fix the flagged issues and request a review. You can also contact Meta directly via the ",[31,18000,18003],{"href":18001,"rel":18002},"https:\u002F\u002Fwww.facebook.com\u002Fbusiness\u002Fhelp\u002F",[46],"Meta Business Help Center",[58,18005,18007],{"id":18006},"_5-campaign-or-ad-set-is-turned-off","5. Campaign or Ad Set Is Turned Off",[12,18009,18010,18012],{},[19,18011,17881],{},": Status shows \"Off\" despite your intention to run the campaign.",[12,18014,18015,18017],{},[19,18016,17887],{},": Sounds obvious, but campaigns are often accidentally paused via bulk edits, scheduled rules, or when someone else on the account hits pause during review.",[12,18019,18020,5514],{},[19,18021,17508],{},[4313,18023,18024,18027,18030],{},[1243,18025,18026],{},"Check Campaign status toggle (not just Ad Set)",[1243,18028,18029],{},"Review Automated Rules in Ads Manager (a rule may be pausing campaigns based on performance thresholds)",[1243,18031,18032],{},"Check if there's an end date set on the campaign or ad set that has already passed",[58,18034,18036],{"id":18035},"_6-learning-phase-stalling","6. Learning Phase Stalling",[12,18038,18039,18041],{},[19,18040,17881],{},": Ad set has been in \"Learning\" status for more than 7 days with very low delivery.",[12,18043,18044,18046,18047,18052],{},[19,18045,17887],{},": Meta's algorithm needs approximately 50 optimization events per week to exit the ",[31,18048,18051],{"href":18049,"rel":18050},"https:\u002F\u002Fwww.facebook.com\u002Fbusiness\u002Fhelp\u002F112167992830700",[46],"learning phase",". If your budget is too low, your audience too small, or your optimization event too rare, the campaign stalls in learning.",[12,18054,18055,5514],{},[19,18056,17508],{},[4313,18058,18059,18062,18065,18068],{},[1243,18060,18061],{},"Increase daily budget so the algorithm can gather data faster",[1243,18063,18064],{},"Optimize for a higher-volume event (clicks, landing page views, or add-to-carts rather than purchases if purchase volume is low)",[1243,18066,18067],{},"Consolidate ad sets: fewer ad sets means more data per ad set and a faster exit from learning",[1243,18069,18070],{},"Avoid editing active campaigns, as every significant change resets the learning phase",[58,18072,18074],{"id":18073},"_7-payment-issue","7. Payment Issue",[12,18076,18077,18079],{},[19,18078,17881],{},": All campaigns suddenly stop delivering. Banner in Ads Manager about billing.",[12,18081,18082,18084],{},[19,18083,17887],{},": Payment method declined, credit limit reached, or billing threshold not paid.",[12,18086,18087,5514],{},[19,18088,17508],{},[4313,18090,18091,18096,18099,18102],{},[1243,18092,8658,18093],{},[19,18094,18095],{},"Billing > Payment Methods",[1243,18097,18098],{},"Update or add a new payment method",[1243,18100,18101],{},"Pay any outstanding balance",[1243,18103,18104],{},"Campaigns typically resume within a few hours after payment is processed",[58,18106,18108],{"id":18107},"_8-low-budget-for-the-optimization-event","8. Low Budget for the Optimization Event",[12,18110,18111,18113],{},[19,18112,17881],{},": Campaign in \"Learning limited\" or very sparse delivery despite a seemingly reasonable budget.",[12,18115,18116,18118],{},[19,18117,17887],{},": If you're optimizing for a rare event (e.g. purchase at $200 CPA) with a $20\u002Fday budget, Meta can only gather 1 conversion every 10 days. That's not enough data for the algorithm to learn.",[12,18120,18121,5514],{},[19,18122,17508],{},[4313,18124,18125,18128],{},[1243,18126,18127],{},"Set daily budget to at least 2-3x your target CPA (if you want $200 CPA, budget at least $400-600\u002Fday for the algorithm to have enough runway)",[1243,18129,18130],{},"Or switch to optimizing for an earlier funnel event (add-to-cart, initiate checkout) if your purchase volume is too low",[58,18132,18134],{"id":18133},"_9-ios-privacy-limiting-signals","9. iOS Privacy Limiting Signals",[12,18136,18137,18139],{},[19,18138,17881],{},": Campaigns that previously ran well start delivering less efficiently after iOS updates. Conversion volumes in reporting look lower than expected.",[12,18141,18142,18144],{},[19,18143,17887],{},": Apple's App Tracking Transparency (ATT) framework from iOS 14.5+ means many iPhone users have opted out of tracking. Meta receives fewer conversion signals from iOS users, which reduces the algorithm's ability to target effectively.",[12,18146,18147,5514],{},[19,18148,17508],{},[4313,18150,18151,18160,18163,18169],{},[1243,18152,10643,18153,18159],{},[19,18154,18155],{},[31,18156,18158],{"href":17635,"rel":18157},[46],"Conversions API (CAPI)"," for server-side event sending. This bypasses browser-based restrictions and gives Meta more complete data",[1243,18161,18162],{},"Verify your domain in Meta Business Manager (required for aggregated event measurement)",[1243,18164,18165,18166],{},"Prioritise your top 8 pixel events in ",[19,18167,18168],{},"Events Manager > Aggregated Event Measurement",[1243,18170,18171],{},"Accept that some delivery and attribution loss is permanent under current privacy changes",[53,18173,18175],{"id":18174},"quick-diagnosis-checklist","Quick Diagnosis Checklist",[12,18177,18178],{},"When your Facebook ads aren't delivering, check in this order:",[1240,18180,18181,18184,18187,18190,18193,18196,18199,18202],{},[1243,18182,18183],{},"All levels (campaign\u002Fad set\u002Fad) are \"Active\"?",[1243,18185,18186],{},"No disapproved ads?",[1243,18188,18189],{},"No account-level restrictions or billing issues?",[1243,18191,18192],{},"Audience size sufficient?",[1243,18194,18195],{},"Budget appropriate for the optimization event?",[1243,18197,18198],{},"Not stuck in learning phase with insufficient data?",[1243,18200,18201],{},"No automated rules pausing campaigns?",[1243,18203,18204],{},"CAPI set up for iOS signal recovery?",[12,18206,18207],{},"Most delivery issues resolve to one of these causes. Methodically checking each takes less than 10 minutes and surfaces the problem quickly.",{"title":1462,"searchDepth":1463,"depth":1463,"links":18209},[18210,18211,18222],{"id":17842,"depth":1463,"text":17843},{"id":17871,"depth":1463,"text":17872,"children":18212},[18213,18214,18215,18216,18217,18218,18219,18220,18221],{"id":17875,"depth":1468,"text":17876},{"id":17909,"depth":1468,"text":17910},{"id":17944,"depth":1468,"text":17945},{"id":17982,"depth":1468,"text":17983},{"id":18006,"depth":1468,"text":18007},{"id":18035,"depth":1468,"text":18036},{"id":18073,"depth":1468,"text":18074},{"id":18107,"depth":1468,"text":18108},{"id":18133,"depth":1468,"text":18134},{"id":18174,"depth":1463,"text":18175},"2026-03-22","Facebook ads not delivering or stuck in the Learning phase? This guide covers 9 common delivery issues and step-by-step fixes to get your campaigns running.",[18226,18229,18232],{"question":18227,"answer":18228},"How long should I wait before concluding my Facebook ads are not delivering?","For new campaigns, give it at least 24-48 hours. Meta's system needs time to enter the learning phase and start delivering. For campaigns that were delivering and suddenly stopped, investigate immediately. If an active campaign has had zero impressions for more than 48 hours despite being in \"Active\" status, something is wrong and needs diagnosis.",{"question":18230,"answer":18231},"What does 'Learning limited' mean on Facebook?","Learning limited",{"question":18233,"answer":18234},"Can a payment failure cause ads to stop delivering mid-campaign?","Yes. If your payment method fails (declined card, reached credit limit, expired card), Meta pauses all active campaigns immediately. You'll receive an email notification and a banner in Ads Manager. Update your payment method in Billing settings, pay any outstanding balance, and campaigns typically resume within a few hours.",{},"\u002Fresources\u002Ftroubleshooting\u002Ffacebook-ads-not-delivering",{"title":17831,"description":18224},"resources\u002Ftroubleshooting\u002Ffacebook-ads-not-delivering",[1554,1555,7335,18240],"delivery","3MYTt4gIjh-GRpIrNakKbFuL0BiLBvwfP9r2pHUEQc0",{"id":18243,"title":18244,"author":7,"body":18245,"breadcrumbLabel":7,"category":7335,"cover":1524,"createdAt":18601,"description":18602,"extension":1527,"faqs":18603,"meta":18617,"navigation":1547,"noAiBadge":1524,"og":1524,"ogDescription":7,"ogIcon":7,"path":18618,"seo":18619,"slug":18620,"stem":18620,"tags":18621,"updatedAt":7,"wip":1524,"__hash__":18623},"resources\u002Fresources\u002Ftroubleshooting\u002Fgoogle-ads-low-quality-score.md","Google Ads Low Quality Score: Causes and Fixes",{"type":9,"value":18246,"toc":18591},[18247,18256,18262,18268,18272,18276,18285,18288,18291,18311,18316,18358,18362,18372,18375,18380,18406,18410,18415,18421,18426,18464,18468,18474,18534,18537,18541,18567,18570,18574],[12,18248,18249,18250,18255],{},"Quality Score is Google's 1–10 rating of how relevant and useful your ads, keywords, and landing pages are to the person searching (",[31,18251,18254],{"href":18252,"rel":18253},"https:\u002F\u002Fsupport.google.com\u002Fgoogle-ads\u002Fanswer\u002F6167118",[46],"official docs","). It's not just a vanity metric. It directly affects how much you pay per click and where your ad appears.",[12,18257,18258,18261],{},[19,18259,18260],{},"The core mechanic",": Ad Rank = Max CPC bid × Quality Score × Expected Impact of Extensions. A Quality Score of 8 lets you outrank a competitor with a higher bid but lower quality. Conversely, a low Quality Score forces you to bid more to compete, or accept lower positions and reduced visibility.",[12,18263,18264,18265,18267],{},"Understanding Quality Score means understanding its three components, how each is measured, and what you can actually do to improve them. If you're troubleshooting a live campaign, the ",[31,18266,17440],{"href":17439}," can help you pinpoint the specific issue.",[53,18269,18271],{"id":18270},"the-3-components-of-quality-score","The 3 Components of Quality Score",[58,18273,18275],{"id":18274},"_1-expected-ctr","1. Expected CTR",[12,18277,18278,18281,18282,18284],{},[19,18279,18280],{},"What it measures",": How likely someone is to click your ad when it shows for a given keyword, relative to other ads. ",[31,18283,2278],{"href":2277}," is the key signal here.",[12,18286,18287],{},"Google calculates this based on historical performance data: how your ads have performed on this keyword and on similar keywords. It's a prediction of future click-through rate.",[12,18289,18290],{},"Status labels:",[4313,18292,18293,18299,18305],{},[1243,18294,18295,18298],{},[19,18296,18297],{},"Above average",": Your CTR is better than most ads targeting this keyword",[1243,18300,18301,18304],{},[19,18302,18303],{},"Average",": Similar to other ads",[1243,18306,18307,18310],{},[19,18308,18309],{},"Below average",": Lower than most competitors",[12,18312,18313],{},[19,18314,18315],{},"Specific fixes for Expected CTR:",[4313,18317,18318,18324,18334,18340,18352],{},[1243,18319,18320,18323],{},[19,18321,18322],{},"Match headlines to search intent."," If someone searches \"project management software for teams,\" your headline should say \"Project Management Software for Teams\", not a generic brand name.",[1243,18325,18326,18329,18330,18333],{},[19,18327,18328],{},"Include the keyword in your headline."," Dynamic keyword insertion (DKI) automates this: ",[4815,18331,18332],{},"{KeyWord:Project Management Software}"," adapts the headline to the search query. Use carefully (can look odd if queries are unusual).",[1243,18335,18336,18339],{},[19,18337,18338],{},"Make your CTA specific."," \"Get Free Trial\" outperforms \"Learn More\" for high-intent queries. \"Compare Plans\" is better for research-stage queries.",[1243,18341,18342,18345,18346,18351],{},[19,18343,18344],{},"Use ad extensions."," Sitelinks, callouts, and structured snippets increase the visible size of your ad, which generally improves CTR. See ",[31,18347,18350],{"href":18348,"rel":18349},"https:\u002F\u002Fsupport.google.com\u002Fgoogle-ads\u002Fanswer\u002F2375499",[46],"Google's guide to ad extensions"," for the full list of available formats.",[1243,18353,18354,18357],{},[19,18355,18356],{},"Pause poor performers."," If a keyword consistently delivers low CTR despite iteration, pause it. It drags down your average.",[58,18359,18361],{"id":18360},"_2-ad-relevance","2. Ad Relevance",[12,18363,18364,18366,18367,8074],{},[19,18365,18280],{},": How closely your ad copy matches the intent of the search query (",[31,18368,18371],{"href":18369,"rel":18370},"https:\u002F\u002Fsupport.google.com\u002Fgoogle-ads\u002Fanswer\u002F7050591",[46],"Google's guidance on ad relevance",[12,18373,18374],{},"Google wants to see that your ad actually addresses what the user searched for. Showing a generic brand ad to someone who searched for a very specific feature or use case gets penalized.",[12,18376,18377],{},[19,18378,18379],{},"Specific fixes for Ad Relevance:",[4313,18381,18382,18388,18394,18400],{},[1243,18383,18384,18387],{},[19,18385,18386],{},"Tighten keyword groups (ad groups)."," The most common cause of low ad relevance is an ad group with too many loosely related keywords. Each keyword in an ad group should be addressable by the same ad copy.",[1243,18389,18390,18393],{},[19,18391,18392],{},"Use Single Keyword Ad Groups (SKAGs) for high-value terms."," For your most important keywords, create an ad group with just that one keyword (or close variations) and write ad copy specifically for it. More work to maintain, but relevance scores jump significantly.",[1243,18395,18396,18399],{},[19,18397,18398],{},"Check which queries are actually triggering your ads."," In Search Terms report, if irrelevant queries are matching your keywords, add them as negative keywords. Irrelevant matches tank relevance signals.",[1243,18401,18402,18405],{},[19,18403,18404],{},"Responsive Search Ads",": make sure your headlines include the target keyword phrase or close variations. Include at least 2-3 headlines that directly address the keyword intent.",[58,18407,18409],{"id":18408},"_3-landing-page-experience","3. Landing Page Experience",[12,18411,18412,18414],{},[19,18413,18280],{},": How relevant, transparent, and user-friendly your landing page is for someone who clicks your ad.",[12,18416,18417,18418,18420],{},"Google uses its web crawlers plus engagement signals (bounce rate, time on page, ",[31,18419,2254],{"href":2253}," fed back via Google Tag) to evaluate the landing page experience.",[12,18422,18423],{},[19,18424,18425],{},"Specific fixes for Landing Page Experience:",[4313,18427,18428,18434,18440,18452,18458],{},[1243,18429,18430,18433],{},[19,18431,18432],{},"Match landing page content to ad copy."," If your ad says \"Free Trial for Project Management Teams,\" the landing page should open with exactly that, not your generic homepage.",[1243,18435,18436,18439],{},[19,18437,18438],{},"Remove interstitials and pop-ups on landing."," Pages that immediately show a full-screen pop-up before users can read the content get penalized.",[1243,18441,18442,18445,18446,18451],{},[19,18443,18444],{},"Improve page speed."," Google uses page speed as a factor. Use ",[31,18447,18450],{"href":18448,"rel":18449},"https:\u002F\u002Fpagespeed.web.dev\u002F",[46],"PageSpeed Insights"," to identify issues. LCP under 2.5 seconds is the target.",[1243,18453,18454,18457],{},[19,18455,18456],{},"Ensure mobile experience is good."," A disproportionate share of ad clicks happen on mobile. A landing page that's hard to use on mobile directly hurts Quality Score.",[1243,18459,18460,18463],{},[19,18461,18462],{},"Make offers clear."," If your landing page is vague about what the product does or what the user gets, it signals poor transparency. Be explicit about value, price, and what happens after they click the CTA.",[53,18465,18467],{"id":18466},"how-quality-score-affects-your-cpc","How Quality Score Affects Your CPC",[12,18469,18470,18471,18473],{},"The impact is significant. Here's a simplified example of how Quality Score changes what you pay per click. Use the ",[31,18472,1346],{"href":1345}," to model this for your own campaigns:",[4585,18475,18476,18491],{},[4588,18477,18478],{},[4591,18479,18480,18483,18486,18488],{},[4594,18481,18482],{},"Advertiser",[4594,18484,18485],{},"Max Bid",[4594,18487,8284],{},[4594,18489,18490],{},"Ad Rank",[4602,18492,18493,18507,18521],{},[4591,18494,18495,18498,18501,18504],{},[4607,18496,18497],{},"You",[4607,18499,18500],{},"$2.00",[4607,18502,18503],{},"8",[4607,18505,18506],{},"16",[4591,18508,18509,18512,18515,18518],{},[4607,18510,18511],{},"Competitor A",[4607,18513,18514],{},"$3.00",[4607,18516,18517],{},"5",[4607,18519,18520],{},"15",[4591,18522,18523,18526,18529,18532],{},[4607,18524,18525],{},"Competitor B",[4607,18527,18528],{},"$2.50",[4607,18530,18531],{},"6",[4607,18533,18520],{},[12,18535,18536],{},"In this scenario, you outrank advertisers bidding 50% more because your Quality Score is higher. And because the auction charges you just enough to beat the next competitor (divided by your Quality Score), your actual CPC will be well below your $2.00 max bid.",[53,18538,18540],{"id":18539},"realistic-improvement-timeline","Realistic Improvement Timeline",[4313,18542,18543,18549,18555,18561],{},[1243,18544,18545,18548],{},[19,18546,18547],{},"Week 1–2",": Fix ad copy and keyword grouping. Ad Relevance should start improving.",[1243,18550,18551,18554],{},[19,18552,18553],{},"Week 2–4",": Updated landing pages start accumulating data. Landing Page Experience begins to shift.",[1243,18556,18557,18560],{},[19,18558,18559],{},"Week 3–6",": Expected CTR adjusts as the new ads accumulate click data.",[1243,18562,18563,18566],{},[19,18564,18565],{},"Month 2–3",": Quality Scores stabilize at new levels.",[12,18568,18569],{},"Don't expect overnight changes. Quality Score is a lagging indicator: it reflects historical performance. The fixes you make today affect the score you see in 2–4 weeks.",[53,18571,18573],{"id":18572},"prevention-how-to-maintain-high-quality-scores","Prevention: How to Maintain High Quality Scores",[4313,18575,18576,18579,18582,18585,18588],{},[1243,18577,18578],{},"Build tight, specific ad groups from the start. Reorganizing later is much more work",[1243,18580,18581],{},"Use negative keyword lists aggressively to prevent irrelevant query matches",[1243,18583,18584],{},"Regularly review Search Terms reports to catch mismatched queries early",[1243,18586,18587],{},"Test ad copy variations systematically: always have 2–3 ad variants running per ad group to identify what drives higher CTR",[1243,18589,18590],{},"Keep landing pages fast and relevant. Every product\u002Foffer change should trigger a review of connected ad copy",{"title":1462,"searchDepth":1463,"depth":1463,"links":18592},[18593,18598,18599,18600],{"id":18270,"depth":1463,"text":18271,"children":18594},[18595,18596,18597],{"id":18274,"depth":1468,"text":18275},{"id":18360,"depth":1468,"text":18361},{"id":18408,"depth":1468,"text":18409},{"id":18466,"depth":1463,"text":18467},{"id":18539,"depth":1463,"text":18540},{"id":18572,"depth":1463,"text":18573},"2026-03-16","Low Quality Score costs you more per click and hurts ad position. Learn what causes low scores and how to fix CTR, ad relevance, and landing page experience.",[18604,18611,18614],{"question":18605,"answer":18606},"What Quality Score is considered good?",{"Quality Score is rated 1–10":18607},{" A score of 7 or above is considered good":18608},{" 8–10 means you're getting a discount on CPCs compared to competitors":18609},{" Scores of 4–6 are average":18610},"you're paying market rate. Scores of 1–3 mean you're paying a premium per click and your ads may show less frequently. Most well-managed accounts average 6–7 across their keywords.",{"question":18612,"answer":18613},"How fast does Quality Score update?","Quality Score updates continuously as your ads accumulate data, but you won't see rapid changes overnight. Expect 1–2 weeks to see meaningful movement after making changes to ad copy or landing pages, and 3–4 weeks for the score to stabilise at a new level. New keywords start with a default score of 6 and adjust as data comes in.",{"question":18615,"answer":18616},"Does Quality Score affect impression share?","Yes, but indirectly. Quality Score influences Ad Rank (your position in the auction), which in turn affects whether your ad wins the auction at all. Higher Ad Rank = more auctions won = higher impression share. A low Quality Score means you need to bid more to achieve the same Ad Rank as a competitor with a higher score. So low Quality Score effectively restricts your impression share unless you compensate with higher bids.",{},"\u002Fresources\u002Ftroubleshooting\u002Fgoogle-ads-low-quality-score",{"title":18244,"description":18602},"resources\u002Ftroubleshooting\u002Fgoogle-ads-low-quality-score",[1557,18622,17827],"quality score","YdtcgXY_AKQYdCdkpSklmhMOsaYgqSbwFm7j731m0yw",{"id":18625,"title":18626,"author":7,"body":18627,"breadcrumbLabel":7,"category":5830,"cover":1547,"createdAt":19353,"description":19354,"extension":1527,"faqs":7,"meta":19355,"navigation":1547,"noAiBadge":1524,"og":1547,"ogDescription":7,"ogIcon":7,"path":1455,"seo":19356,"slug":19357,"stem":19358,"tags":19359,"updatedAt":8620,"wip":1524,"__hash__":19360},"resources\u002Fresources\u002Fwhen-to-run-ads-for-saas.md","When to Run Ads for SaaS (and When Not To)",{"type":9,"value":18628,"toc":19337},[18629,18632,18639,18643,18649,18656,18661,18664,18676,18679,18686,18689,18695,18708,18714,18717,18720,18724,18727,18741,18747,18750,18754,18761,18800,18803,18808,18812,18820,18826,18836,18841,18844,18851,18855,18866,18873,18880,18890,18893,18896,18900,18903,18911,18922,18929,18935,18938,18945,18950,18953,18959,18962,18965,18972,18975,18978,18991,18994,18999,19002,19007,19015,19021,19024,19028,19031,19036,19039,19042,19048,19051,19054,19057,19061,19067,19070,19076,19083,19088,19093,19096,19099,19105,19108,19123,19131,19134,19145,19148,19151,19155,19158,19161,19179,19182,19188,19194,19197,19201,19204,19208,19211,19214,19219,19222,19225,19228,19232,19235,19238,19249,19255,19260,19264,19267,19270,19274,19277,19280,19283,19299,19305,19312,19315,19319,19322,19329],[12,18630,18631],{},"If you're reading this, you're probably wondering when is it the right time to launch ads for your SaaS (but really this applies for any product).",[12,18633,18634,18635,18638],{},"There are many type of ads, and while a good chunk of what you will find here can be applied everywhere, I'm going to specifically focus on ",[78,18636,18637],{},"online ads"," (Facebook Ads, Google Ads, Reddit Ads, LinkedIn Ads, etc)",[53,18640,18642],{"id":18641},"_1-you-want-volume-and-speed","1. You want Volume and Speed",[12,18644,18645,18648],{},[78,18646,18647],{},"Yes, this one is the obvious but I had to mention it."," 😅",[12,18650,18651,18652,18655],{},"Unlike ",[78,18653,18654],{},"\"free\""," marketing channels like SEO or organic content, ads will cost you some money. So, why pay for ads when you can get users for free?",[12,18657,18658],{},[19,18659,18660],{},"Let's say you are selling a $100 product, and you make $50 of profit per customer.",[12,18662,18663],{},"Let's compare 2 scenarios, one with full organic growth (A), and one where you run ads (B).",[4313,18665,18666,18671],{},[1243,18667,18668],{},[19,18669,18670],{},"Scenario A: 10 sales with $50 of profit = $500 total",[1243,18672,18673],{},[19,18674,18675],{},"Scenario B: 100 sales with $20 of profit = $2,000 total",[12,18677,18678],{},"Scenario A might gets you more profit in percentage, but Scenario B gets you more total profit.",[5232,18680,18681],{},[12,18682,18683],{},[19,18684,18685],{},"Basically, ads allow you to trade off profit (and speed) in exchange for volume.",[12,18687,18688],{},"If you prefer high-profit + slow growth, ads might not be the best fit for you.",[12,18690,18691,18692,18694],{},"Now, I mentioned \"free\" channels above. I specifically wrote ",[78,18693,18654],{},", because... it's not really free.",[12,18696,18697,18700,18701,18704,18705,18707],{},[19,18698,18699],{},"With organic channels like SEO or other, the cost is your time and energy."," You create content that platforms and people ",[78,18702,18703],{},"might"," like, and in return, they ",[78,18706,18703],{}," show your content to their audience. But the only way to see results is with time, you won't get millions impressions overnight.",[12,18709,18710,18713],{},[19,18711,18712],{},"With ads, you're leveraging someone else's audience to grow faster. What it costs you in money, it makes it up in time."," You pay money, and you get impressions immediately.",[12,18715,18716],{},"Instead of waiting for weeks or months to see if your new landing page converts better, ads gets you immediate data, in exchange of money.",[12,18718,18719],{},"But this also means... you need to have your finances in order",[53,18721,18723],{"id":18722},"_2-you-have-your-finances-in-order","2. You have your finances in order",[12,18725,18726],{},"There are 2 essential numbers when you run ads:",[4313,18728,18729,18735],{},[1243,18730,18731,18734],{},[19,18732,18733],{},"Your lifetime Value (LTV)",": How much revenue you make per customer",[1243,18736,18737,18740],{},[19,18738,18739],{},"Your Acquisition Cost (CAC)",": How much you spend to acquire a new customer",[12,18742,18743,18746],{},[19,18744,18745],{},"If your Lifetime Value is higher than your maximum Acquisition Cost, you ads are profitable"," and you can acquire new customers profitably.",[12,18748,18749],{},"So how do you calculate all that?",[58,18751,18753],{"id":18752},"lifetime-value-ltv","Lifetime Value (LTV)",[5232,18755,18756],{},[12,18757,10657,18758,18760],{},[19,18759,8259],{}," is the sum of all the money you make from a customer over the span of their relationship with your business.",[8421,18762,18763,18782],{"type":8424},[8426,18764,18766,18772],{"label":18765},"How to calculate LTV for Subscriptions",[12,18767,18768,18771],{},[19,18769,18770],{},"If you have a subscription",", you can calculate it by multiplying the average revenue per customer by the average number of months they stay subscribed.",[12,18773,18774,18775,18778,18779],{},"Example: ",[4815,18776,18777],{},"$10\u002Fmonth x 12 months"," = ",[4815,18780,18781],{},"$120 LTV",[8426,18783,18785,18791],{"label":18784},"How to calculate LTV for One-Time Payments",[12,18786,18787,18790],{},[19,18788,18789],{},"If you have one-time payment products",", it's the average revenue per customer, but you have to consider if they might buy other products from you.",[12,18792,18793,18794,18778,18797],{},"Example: $100 product, 10% of customers buy another product for $100 = ",[4815,18795,18796],{},"$100 + ($100 x 10%)",[4815,18798,18799],{},"$110 LTV",[12,18801,18802],{},"It might be hard to calculate if you're just starting out and don't have data about churn or extra purchases.",[12,18804,18805],{},[78,18806,18807],{},"When you lack the data, just try to make an educated guess, aiming on the pessimistic side just to be safe.",[58,18809,18811],{"id":18810},"customer-acquisition-cost-cac","Customer Acquisition Cost (CAC)",[5232,18813,18814],{},[12,18815,10657,18816,18819],{},[19,18817,18818],{},"Customer Acquisition Cost"," is the cost you can afford to spend to acquire a customer.",[12,18821,18822,18823,1446],{},"The acquisition cost itself it determined by your ads result, so you can't calculate it in advance, but you can calculate your ",[19,18824,18825],{},"Maximum Acquisition Cost",[12,18827,18828,18829,18835],{},"For this, ",[19,18830,18831,18832,18834],{},"take your ",[78,18833,8259],{}," and substract all the average operational costs per user"," (AI usage, hosting, etc).",[12,18837,18838],{},[19,18839,18840],{},"That's your Maximum Acquisition Cost.",[12,18842,18843],{},"If the cost of getting a new user via ads (or any kind of paid marketing) is below this amount, you make profit.",[12,18845,18846,18847,18850],{},"If you're exacty at this amount, you're ",[19,18848,18849],{},"breaking even",". If it's above, you are at a loss.",[12,18852,18853],{},[19,18854,8170],{},[12,18856,18857,18859,18860,18778,18863],{},[4815,18858,18781],{}," - ",[4815,18861,18862],{},"$10 Cost per user",[4815,18864,18865],{},"$110 Max Acquisition Cost",[12,18867,18868,18869,18872],{},"If your ads costs you ",[4815,18870,18871],{},"$109"," per new customer, then you make profit.",[12,18874,18875,18876,18879],{},"Of course, you don't want to make just $1 of profit per customer, so you need to define a ",[19,18877,18878],{},"Target Acquisition Cost",". But you have to stay realistic.",[18881,18882,18883],"tip",{},[12,18884,18885,18886,18889],{},"You can use our free ",[31,18887,18888],{"href":16644},"Ads Profit Calculator"," tool to test different scenarios with your LTV, conversion rate, and ad costs.",[12,18891,18892],{},"Keep it mind it's impossible to know the exact cost in advance, as it completely depends on your industry and your marketing strategy.",[12,18894,18895],{},"This brings us to our next point...",[58,18897,18899],{"id":18898},"managing-your-cashflow","Managing your Cashflow",[12,18901,18902],{},"Since it costs money, you also have to manage your cashflow, esspecially if you have a subscription model.",[12,18904,18905,18906],{},"Let's take one of my previous businesses as an example: ",[31,18907,18910],{"href":18908,"rel":18909},"https:\u002F\u002Ftalknotes.io",[46],"Talknotes",[12,18912,18913,18914,18917,18918,18921],{},"Talknotes had a ",[4815,18915,18916],{},"$12\u002Fmonth subscription",", and it costed me up to ",[4815,18919,18920],{},"$50"," to acquire a new paid user",[12,18923,18924,18925,18928],{},"That means that I was losing money upfront: ",[19,18926,18927],{},"$50 Acquisition Cost - $12 subscription = $38 loss"," per user upfront.",[12,18930,18931,18934],{},[78,18932,18933],{},"But... why would anyone want to lose money on ads?"," 🤨",[12,18936,18937],{},"Well, you aren't losing money. Not really. You're just delaying the revenues.",[12,18939,18940,18941,18944],{},"My lifetime value was something around ",[4815,18942,18943],{},"$80",", but since it was paid in monthly subscriptions, it took me a few months to make the money back.",[12,18946,18947],{},[19,18948,18949],{},"It means I was losing money upfront, to (maybe) make money over time. Exactly like an investment (because it is one!)",[12,18951,18952],{},"So, if your revenues are delayed, it means you need to have some cash available to make up for the upfront loss.",[12,18954,18955,18956],{},"But luckily, ",[19,18957,18958],{},"there is an easy way to mitigate this: Yearly details.",[12,18960,18961],{},"In truth, for Talknotes I was not losing any money upfront, I was actually making profit.",[12,18963,18964],{},"How?",[12,18966,18967,18968,18971],{},"Because ",[19,18969,18970],{},"I offered a cheaper yearly subscription to make up for the upfront loss."," The yearly option was at $60, close to a 60% discount from the monthly price, so it was an amazing deal for users.",[12,18973,18974],{},"Around half of the users went with the yearly deal. This mean that I was making a profit upfront, AND I still had the higher profit from monthly subscribers.",[12,18976,18977],{},"This allowed me to scale Talknotes from $1,500 MRR to over $7,000 in just a few months, before I sold it.",[12,18979,18980,3754,18983,18986,18987,18990],{},[19,18981,18982],{},"💰 Total profit:",[4815,18984,18985],{},"$200,000 exit"," + over ",[4815,18988,18989],{},"$40,000 profit"," (For $70k total sales)",[12,18992,18993],{},"Had I stayed with organic channels to maximize profit, I would never have been able to grow as fast as I did and sell it.\nAnd even if I decided to keep it and shut down all the ads, I would have kept making profit from the recuring subs as well as the natural organic growth (word of mouth, etc).",[8262,18995,18996],{},[12,18997,18998],{},"This is actually what the new buyer did, he shut down most of the ads, but the app kept growing while generating profit every month.",[12,19000,19001],{},"All that because I was fine losing money on the short term to maximize growth.",[12,19003,19004],{},[19,19005,19006],{},"So, consider what matter the most to you:",[4313,19008,19009,19012],{},[1243,19010,19011],{},"Maximizing profit at the cost of your time and energy (organic channels)",[1243,19013,19014],{},"Maximize growth at the cost of your profit (ads)",[12,19016,19017,19018],{},"But if you choose to maximize growth, ",[19,19019,19020],{},"make sure your finances are in order so you don't run out of cash and are forced to stop your ads.",[12,19022,19023],{},"But to have your finances in order, you need a good product & positioning...",[53,19025,19027],{"id":19026},"_3-you-have-a-proven-product-positioning","3. You have a proven product & positioning",[12,19029,19030],{},"Ok, not having both is not directly a problem, but if you launch ads and they don't work, you will have no idea if it's an issue with your ads, your landing page, or your product.",[12,19032,19033],{},[19,19034,19035],{},"When running ads, you want to reduce the amount of uncertainty as much as possible to figure out what to improve quickly.",[12,19037,19038],{},"Having 3 unknown variables (product + positioning + ads) is a recipe for disaster, because you won't be able to properly figure out what's working and what's not.",[12,19040,19041],{},"If you have no clicks, it could be your ad's design, it could be your messaging, or it could be your targeting. You will have no way of knowing.",[12,19043,19044,19047],{},[19,19045,19046],{},"That's why you often hear \"Ads don't work until you get Product-Market-Fit\"."," Because most people try, fail, and blame the ads instead of figuring out the root cause.",[12,19049,19050],{},"That being said, you can definitely run ads on \"unproven\" product if you know your audience for sure.",[12,19052,19053],{},"On a B2B startup I sold recently, I ran ads on Meta from day one because I had a very clear idea of the audience, their pain points and what made them click. I was able to grow it to $1300 MRR without any other marketing channel before selling it.",[12,19055,19056],{},"But I only managed to do it because I had a proper funnel...",[53,19058,19060],{"id":19059},"_4-you-have-a-good-funnel","4. You have a good Funnel",[12,19062,19063,19064],{},"Ok, now I want you to forget everything I mentioned above, because none of what we mentioned above matter if your funnel sucks. ",[19,19065,19066],{},"For a SaaS, your funnel IS the whole business.",[12,19068,19069],{},"If your funnel is broken, all the money and time you put into it will be wasted.",[12,19071,19072,19073],{},"This is even worst for ads, because ",[19,19074,19075],{},"ads platforms like Facebook or Google penalize you for not converting users they send you.",[12,19077,19078,19079,19082],{},"If your landing page sucks, platforms will see that they are sending traffic to a low quality page, which will lower your ",[19,19080,19081],{},"user experience score"," and predicted action rate.",[8262,19084,19085],{},[12,19086,19087],{},"User Experience Score is an internal metric often used by platforms, to determine the cost of your ads and many other things.",[12,19089,19090],{},[19,19091,19092],{},"This means that if you have a funnel that does not convert, your ads will be more expensive.",[12,19094,19095],{},"Now, here is the good thing: You have 100% control over your funnel. This is the only thing in the advertising process where you have absolute control over.",[12,19097,19098],{},"You can always improve your ads and targeting, but the result is still dictated by an algorithm, not you.",[12,19100,19101,19102],{},"On the other hand, ",[19,19103,19104],{},"you can improve your landing page at any time, the only thing dictating how good it performs is your copywriting skill.",[12,19106,19107],{},"It's much easier (and faster) to improve your landing page and funnel than making better ad creative.",[12,19109,19110,19111,19114,19115,19118,19119,19122],{},"Improving your landing page conversion rate from ",[4815,19112,19113],{},"0.5%"," to ",[4815,19116,19117],{},"1%"," means you get ",[19,19120,19121],{},"twice as many sales with the same amount of traffic."," That can be the difference between making a profit or not.",[18881,19124,19125],{},[12,19126,19127,19128,19130],{},"You can use the ",[31,19129,18888],{"href":16644}," to see how different conversion rates impact your profitability and how even a small improvement can make a huge difference!",[12,19132,19133],{},"There are many ways to improve your conversion rate, and this will be a whole article on its own, but the bottom line is:",[4313,19135,19136,19139,19142],{},[1243,19137,19138],{},"Algorithm will penalize you for not converting users they send you.",[1243,19140,19141],{},"Unlike ads, you have 100% control over your landing page and funnel",[1243,19143,19144],{},"Doubling your conversion rate means doubling your sales for the same amount of ad spend.",[12,19146,19147],{},"So, get your funnel in order!",[12,19149,19150],{},"But of course, a funnel only matters if there are people visiting it, which brings us to my last point...",[53,19152,19154],{"id":19153},"_5-audience-size-platform-match","5. Audience Size & Platform Match",[12,19156,19157],{},"Before running ads, you need to ensure your audience can actually be reached effectively by ad platforms.",[12,19159,19160],{},"There are 2 things that determine this:",[1240,19162,19163,19173],{},[1243,19164,19165,19168,19169,19172],{},[19,19166,19167],{},"Audience Size",": Your target market needs to be large enough for ad platforms to efficiently find and target them. Ultra-niche audiences (like \"",[78,19170,19171],{},"developers currently looking for a screenshot API","\") might struggle on certain platforms.",[1243,19174,19175,19178],{},[19,19176,19177],{},"Identifiability",": How easily can platforms identify your audience? Some audiences have clear behavioral signals (ex: People who got engaged), while others are virtually invisible until they actively search for a solution.",[12,19180,19181],{},"The key is to match your audience characteristics with the right platform type.",[12,19183,19184,19185,1446],{},"If your audience is ",[19,19186,19187],{},"small and only identifiable by their search intent, search-based platforms (Google Ads) will likely outperform interruption-based platforms (Facebook Ads)",[12,19189,19101,19190,19193],{},[19,19191,19192],{},"audiences with strong behavioral patterns work well on interuptions platforms",", because their algorithms can easily identify them.",[12,19195,19196],{},"We're almost done! But before wrapping up, I wanted to mention a few special cases.",[53,19198,19200],{"id":19199},"_6-special-cases","6. Special cases",[12,19202,19203],{},"There are some situations where the rules mentioned above don't necessarily applies, and where making an immediate profit is not the main goal.",[58,19205,19207],{"id":19206},"market-validation","Market Validation",[12,19209,19210],{},"Making a complete product takes lots of resources, and you sometimes would rather have some proof the market will want the product before building it.\nThis is when pre-orders, waitlists or other market pre-validation tactics can make sense.",[12,19212,19213],{},"There are usually 2 ways to do this:",[19215,19216,19218],"h4",{"id":19217},"waitlists","Waitlists:",[12,19220,19221],{},"Waitlists are the \"cheapest\" way to do this because you're optimizing for leads. You create a landing page explaining what the product is, mention it will be available soon and they can join the waitlist.",[12,19223,19224],{},"The problem with this approach is that it's not super qualified because most people will forget about you by the time you launch, so it only works if you actively contact users, send them updates and\u002For go on calls with them",[12,19226,19227],{},"So you're getting more volume but less quality",[19215,19229,19231],{"id":19230},"pre-orders","Pre-orders:",[12,19233,19234],{},"You create a landing page explaining what the product is, then let people pre-order it.",[12,19236,19237],{},"It's harder because:",[4313,19239,19240,19243,19246],{},[1243,19241,19242],{},"People don't have the product right away after they pay",[1243,19244,19245],{},"The product is new, and no-one likes to be first",[1243,19247,19248],{},"Ads are more expensive because there is no prior data to optimize for (and since you're optimiing for sales it's more competitive too)",[12,19250,19251,19252],{},"The way to counter-balance that is usually to offer a huge discount. But in any case, it will be hard to be profitable or break-even. ",[19,19253,19254],{},"Pre-orders should mainly be used to check if some people would pay for your product, not to make profit.",[8262,19256,19257],{},[12,19258,19259],{},"You can also mix both approach: Have a waitlist on the landing page, then send emails to people who join with a pre-order offer. This might allows you to break-even on the ads costs.",[19215,19261,19263],{"id":19262},"dummy-checkout","Dummy Checkout:",[12,19265,19266],{},"Another variant of pre-orders is the \"dummy order\". You make it look like the product is already available, but use a dummy checkout page to see if people enter their payment info and show them an error message after they click \"pay\".",[12,19268,19269],{},"This is also a good way to quickly see if people are willing to pay for the product.",[58,19271,19273],{"id":19272},"brand-awareness","Brand Awareness",[12,19275,19276],{},"Brand awareness ads can't be measured. You have no way to know if they work or not, at least for a while. So, what's the point of making them?",[12,19278,19279],{},"For you, reading this, there probably isn't, until you've exausted the pool of audience ready to buy. Which might take a while.",[12,19281,19282],{},"But for big corporations, it allows them to scale. There are only a handful of people who are going to buy your product at any given time. But there are millions of people who might need their product *at some point.*",[12,19284,19285,19286,19291,19292,19298],{},"Take a niche B2B SaaS like a screenshot API service like ",[31,19287,19290],{"href":19288,"rel":19289,"target":8663},"https:\u002F\u002Fscreenshotone.com\u002F",[46],"ScreenshotOne",". The audience ready to buy now is extremely specific: \"",[78,19293,19294,19295],{},"Developers that are building software that needs website screenshots, ",[19,19296,19297],{},"AND don't have a solution yet.","\" That's a really tiny portion of the market.",[12,19300,19301,19302],{},"But if you did Brand Awareness Ads you would focus on \"Developers that are building software\" in general, because ",[19,19303,19304],{},"maybe they could need a screenshot API one day. And when this time comes, if they are aware that your product exists, it will likely be the default option they go with.",[12,19306,19307,19308,19311],{},"So, you're basically ",[19,19309,19310],{},"betting on the fact that people will remember your product when they will need it."," This is why you get hammered all day long with ads, sponsorship and the rest. Those brands want to make sure they stay in the top of your mind.",[12,19313,19314],{},"Which is hard to measure and very expensive. That's why only big companies should do it.",[53,19316,19318],{"id":19317},"conclusion","Conclusion",[12,19320,19321],{},"That's about it! Hopefully this gives you a better idea of when to run ads for your SaaS.",[12,19323,19324,19325,9200],{},"If you have any questions or need more info, feel free to reach out to me on ",[31,19326,19328],{"href":7467,"rel":19327,"target":8663},[46],"Twitter",[12,19330,19331,19332,19336],{},"You can also check out our ",[31,19333,19335],{"href":19334},"\u002Ftools","Free Advertising Tools"," to help you calculate your ads profitability and more.",{"title":1462,"searchDepth":1463,"depth":1463,"links":19338},[19339,19340,19345,19346,19347,19348,19352],{"id":18641,"depth":1463,"text":18642},{"id":18722,"depth":1463,"text":18723,"children":19341},[19342,19343,19344],{"id":18752,"depth":1468,"text":18753},{"id":18810,"depth":1468,"text":18811},{"id":18898,"depth":1468,"text":18899},{"id":19026,"depth":1463,"text":19027},{"id":19059,"depth":1463,"text":19060},{"id":19153,"depth":1463,"text":19154},{"id":19199,"depth":1463,"text":19200,"children":19349},[19350,19351],{"id":19206,"depth":1468,"text":19207},{"id":19272,"depth":1468,"text":19273},{"id":19317,"depth":1463,"text":19318},"2025-08-15","Most SaaS founders start ads too early or too late. Here's how to know if you're ready: the signals to look for, the budget math, and what to check before spending a dollar.",{},{"title":18626,"description":19354},"when-to-run-ads-for-saas","resources\u002Fwhen-to-run-ads-for-saas",[4269,4270,2453],"8BXN67-pj-4prOHNYeyxlb-Niui1GcudvWp6SO9zG_k",1785934601604]