<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Roman | Ad Intel Lab</title>
    <description>The latest articles on DEV Community by Roman | Ad Intel Lab (@adintel_lab).</description>
    <link>https://dev.to/adintel_lab</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4189269%2F904f7328-30b2-45ce-83b1-1dd71de37269.png</url>
      <title>DEV Community: Roman | Ad Intel Lab</title>
      <link>https://dev.to/adintel_lab</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/adintel_lab"/>
    <language>en</language>
    <item>
      <title>NordVPN on Meta: 20 of 30 ad texts pitch antivirus; search wants coupons</title>
      <dc:creator>Roman | Ad Intel Lab</dc:creator>
      <pubDate>Mon, 02 Nov 2026 11:45:26 +0000</pubDate>
      <link>https://dev.to/adintel_lab/nordvpn-on-meta-20-of-30-ad-texts-pitch-antivirus-search-wants-coupons-2f7l</link>
      <guid>https://dev.to/adintel_lab/nordvpn-on-meta-20-of-30-ad-texts-pitch-antivirus-search-wants-coupons-2f7l</guid>
      <description>&lt;p&gt;In the NordVPN Meta ads I sampled, the word that keeps coming back is &lt;strong&gt;antivirus&lt;/strong&gt;: it appears in &lt;strong&gt;20 of 30&lt;/strong&gt; texts, often next to Shaquille O'Neal. The searches around the brand point elsewhere: &lt;strong&gt;6 of the top 10 related queries are about codes, coupons and discounts&lt;/strong&gt;, and none mentions antivirus.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sample frame
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Source&lt;/th&gt;
&lt;th&gt;Snapshot date&lt;/th&gt;
&lt;th&gt;Filters&lt;/th&gt;
&lt;th&gt;Ads collected&lt;/th&gt;
&lt;th&gt;Texts analysed&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Meta Ad Library&lt;/td&gt;
&lt;td&gt;2026-11-02&lt;/td&gt;
&lt;td&gt;page facebook.com/NordVPN, &lt;code&gt;activeStatus: active&lt;/code&gt;, no country or date filter&lt;/td&gt;
&lt;td&gt;105, all active&lt;/td&gt;
&lt;td&gt;first 30 bodies in library order, cut at 300 characters; 17 distinct&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google Ads Transparency Center&lt;/td&gt;
&lt;td&gt;2026-11-02&lt;/td&gt;
&lt;td&gt;domain &lt;code&gt;nordvpn.com&lt;/code&gt;, no country or date filter&lt;/td&gt;
&lt;td&gt;150&lt;/td&gt;
&lt;td&gt;headline decoded for 5 ads; copy not analysed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google Trends&lt;/td&gt;
&lt;td&gt;2026-11-02&lt;/td&gt;
&lt;td&gt;term "NordVPN", past 12 months&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;td&gt;top 10 and rising 10 related queries&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Meta shows a launch campaign for the antivirus feature; Google shows search text ads for the brand domain. So this compares those two campaigns, not Meta and Google as channels. The Meta export stopped at 105, under its cap of 150, so it is likely close to the page's full active set that day.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the 30 Meta texts mention
&lt;/h2&gt;

&lt;p&gt;Plain keyword rules; one text can match several.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Keyword rule&lt;/th&gt;
&lt;th&gt;Texts (of 30)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;"antivirus"&lt;/td&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;scam, phishing or malware&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"Shaq" (incl. Shaquille)&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"Black Friday"&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IP, privacy or "servers in"&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Saily or PriceMice&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;none of the above&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The two unmatched texts are one line, "Upgrade to better all-around online protection with NordVPN". Classic VPN vocabulary appears in 5 texts, and 4 of those are one repeated bullet list where the VPN comes second, after the antivirus.&lt;/p&gt;

&lt;h2&gt;
  
  
  The copy, verbatim
&lt;/h2&gt;

&lt;p&gt;The launch ads put the celebrity up front:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Some of you already knew. Now everybody does 💥 Shaq and Harry Mack shook up Times Square to deliver a big message: NordVPN now comes with a next-gen antivirus."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Some Shaq lines tie a daily annoyance to the feature:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Annoying ads? Pffff, @shaq’s got your back! Go big with NordVPN’s next-gen antivirus."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The Black Friday texts frame the deal season as a risk:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Black Friday is cybercriminals' favorite time of the year — rushed deal-hunting makes it easy to miss the signs of a fake site."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And one argues that the classic VPN promise isn't enough, from a brand with "VPN" in its name:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"If your protection stops at changing your IP, you’re still exposed to the threats that target other points of your data."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Across all 105 ads: 55 dynamic creative, 28 image, 18 video; "Learn more" on 77, "See details" on 8; Instagram as a placement on 94, Facebook on 93, Threads on 78.&lt;/p&gt;

&lt;h2&gt;
  
  
  A new Meta set, old Google ads
&lt;/h2&gt;

&lt;p&gt;The eight longest-running Meta ads started between October 8 and October 21, 2026; the top one shows 16 days active. Four of them started on October 8 with the "Times Square" and "grand stage" teaser copy.&lt;/p&gt;

&lt;p&gt;On Google, all 150 ads come from "nordvpn s.a." and 143 are text ads. The longest-shown was first shown on September 29, 2023 (1,069 days); the other seven of the top eight were first shown August 26–29, 2024, and all eight were still shown on November 2, 2026. The library left their headline and description empty, so I can't say whether they mention antivirus. Seven start dates within four days could be a batch upload or a quirk of the library's history.&lt;/p&gt;

&lt;h2&gt;
  
  
  What people search for
&lt;/h2&gt;

&lt;p&gt;Trends gives "NordVPN" an average interest of 19.6 over the year, a peak of 100 on August 30, 2026, and 8 now. Top related queries include "nordvpn code", "nordvpn discount", "nordvpn coupon" and "nordvpn promo". Five of the ten rising queries name Surfshark, such as "surfshark promo code". Trends gives no volumes, so this shows what people type, not how many.&lt;/p&gt;

&lt;p&gt;The Black Friday texts are where ads and searches meet most directly: "Up to 77% off + 3 extra months" sits in the same text as the antivirus.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this data can't tell you
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Thirty texts, one day.&lt;/strong&gt; Counts cover 30 bodies (17 distinct) cut at 300 characters; a later snapshot of such a new set could differ.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rough Meta dates.&lt;/strong&gt; Start dates and "days active" don't line up exactly (an ad started October 8 shows 15 days), so I read them as "October", not precise ages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No spend, no results, no Google copy.&lt;/strong&gt; Nothing here says how NordVPN splits its budget or whether the antivirus message works.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Three tests for your own launch
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Count your launch word in your live ads.&lt;/strong&gt; After shipping a feature, run the same keyword count over your active copy and decide whether that share is what you want.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pair the feature with why people search for you.&lt;/strong&gt; If your top queries are "code" and "discount", test feature plus offer in one line against a feature-only ad.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reread your oldest search ads after a repositioning.&lt;/strong&gt; If they date from 2023 or 2024, check they still describe what you sell.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Repeating this for a competitor
&lt;/h2&gt;

&lt;p&gt;I built these scrapers. The &lt;a href="https://apify.com/wakeful_outhouse/facebook-ads-library-scraper?utm_source=devto&amp;amp;utm_campaign=nordvpn" rel="noopener noreferrer"&gt;Facebook Ads Library Scraper&lt;/a&gt; takes a Facebook page URL and returns body text, CTA, format, placements and days active, and the &lt;a href="https://apify.com/wakeful_outhouse/google-trends-scraper?utm_source=devto&amp;amp;utm_campaign=nordvpn" rel="noopener noreferrer"&gt;Google Trends Scraper&lt;/a&gt; returns interest over time plus top and rising queries. Both are no-code forms with CSV or Excel export, free to try on the Apify free plan, and a run of a few hundred ads costs well under a dollar.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Not affiliated with NordVPN; all data is from public ad libraries.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If your product is named after its original feature, would you let a new feature take over most of your social copy, or keep the name's promise in every ad?&lt;/p&gt;

</description>
      <category>marketing</category>
      <category>saas</category>
      <category>growth</category>
      <category>analytics</category>
    </item>
    <item>
      <title>Grammarly ads by channel: AI in 27 of 30 LinkedIn texts, 0 of 30 on Meta</title>
      <dc:creator>Roman | Ad Intel Lab</dc:creator>
      <pubDate>Fri, 30 Oct 2026 12:26:35 +0000</pubDate>
      <link>https://dev.to/adintel_lab/grammarly-ads-by-channel-ai-in-27-of-30-linkedin-texts-0-of-30-on-meta-2l3o</link>
      <guid>https://dev.to/adintel_lab/grammarly-ads-by-channel-ai-in-27-of-30-linkedin-texts-0-of-30-on-meta-2l3o</guid>
      <description>&lt;p&gt;The searches around Grammarly are mostly about AI. I wanted to see whether its ads use the same word, so I ran one regular expression over what my collector kept on October 30, 2026: Meta and LinkedIn ad texts, decoded Google headlines and Google Trends queries.&lt;/p&gt;

&lt;p&gt;The split is sharp. &lt;strong&gt;27 of 30 LinkedIn ad texts mention AI. 0 of 30 Meta ad texts do.&lt;/strong&gt; On the search side, 7 of the 10 rising queries are about AI humanizers or AI detectors.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources and what the collector keeps
&lt;/h2&gt;

&lt;p&gt;Four public sources, one run each:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Meta Ad Library&lt;/strong&gt;, the Grammarly Facebook page: 150 ads, all 150 active.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LinkedIn Ad Library&lt;/strong&gt;, company name "Grammarly", capped at 50 ads. All 50 come from the Grammarly page.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Ads Transparency Center&lt;/strong&gt;, domain &lt;code&gt;grammarly.com&lt;/code&gt;: 150 ads, every one of them from an advertiser entity named Superhuman Platform Inc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Trends&lt;/strong&gt;, the term "Grammarly" over 12 months: top and rising related queries.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Aggregates (formats, CTAs) cover all ads. For text, the collector keeps 30 Meta bodies, 30 LinkedIn texts (cut at 300 characters) and 30 decoded Google headlines.&lt;/p&gt;

&lt;h2&gt;
  
  
  The script
&lt;/h2&gt;

&lt;p&gt;A text counts as an AI mention if it contains "AI", humanizer, detector, GPTZero or Authorship (Grammarly's feature for showing how a text was written).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;

&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;promo/data/2026-10-30-grammarly.json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;encoding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;utf-8&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;AI&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;compile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;\bAI\b|humaniz|detector|gptzero|authorship&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;I&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;INTEGRITY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;compile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;integrity|authorship&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;I&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;EXISTING&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;compile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;already&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;I&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;texts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rx&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;texts&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;rx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;


&lt;span class="n"&gt;meta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;facebook&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;bodies&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;google&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;google&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;headlines&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;li&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;linkedin&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;texts&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;rising&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;trends&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;risingQueries&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
&lt;span class="n"&gt;top&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;trends&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;topQueries&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Trends top queries:    &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;top&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;AI&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; of &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;top&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; mention AI/detection&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Trends rising queries: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rising&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;AI&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; of &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rising&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; mention AI/detection&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;  ...about cancelling/subscription: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rising&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;compile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;subscription&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Google headlines kept: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;google&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;AI&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; of &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;google&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; mention AI&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Meta bodies kept:      &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;meta&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;AI&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; of &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;meta&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; mention AI (&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;meta&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; distinct)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;LinkedIn texts kept:   &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;li&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;AI&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; of &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;li&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; mention AI&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;  ...integrity/Authorship: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;li&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;INTEGRITY&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;  ...&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;already&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt; (existing customers): &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;li&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;EXISTING&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;  ...Message Ads (%FIRSTNAME%): &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;li&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;compile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;%FIRSTNAME%&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Google advertisers:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;google&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;advertisers&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output, pasted as-is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Trends top queries:    5 of 10 mention AI/detection
Trends rising queries: 7 of 10 mention AI/detection
  ...about cancelling/subscription: 3
Google headlines kept: 6 of 30 mention AI
Meta bodies kept:      0 of 30 mention AI (4 distinct)
LinkedIn texts kept:   27 of 30 mention AI
  ...integrity/Authorship: 16
  ...'already' (existing customers): 16
  ...Message Ads (%FIRSTNAME%): 8
Google advertisers: [['Superhuman Platform Inc.', 150]]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The search side
&lt;/h2&gt;

&lt;p&gt;The rising queries, as Trends returns them, include "grammarly humanizer" (+190%), "ai humanizer grammarly" (+160%), "turnitin ai detector" (+90%) and "is grammarly ai" (+70%). Half of the top queries are AI-related too, starting with "grammarly ai" and "ai detector grammarly".&lt;/p&gt;

&lt;p&gt;The other three rising queries are about money: "cancel grammarly subscription" (+190%), "how to cancel grammarly subscription" (+140%) and "grammarly subscription" (+130%). Interest in "Grammarly" averaged 64.6 over the year, peaked at 100 on November 2, 2025, and sits at 64 now, -25.6% over the period. Trends gives no volumes, so these are relative shifts in what people type.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Meta side: four lines, no AI
&lt;/h2&gt;

&lt;p&gt;The 30 Meta bodies boil down to 4 distinct texts, and none of them uses the word. The most repeated one is in Spanish:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Revisión en tiempo real de todo lo que escribes."&lt;br&gt;
(Real-time review of everything you write.)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The most repeated English one sells the mobile keyboard:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Don’t let incorrect word usage and grammar mistakes send mixed messages. Get writing suggestions for correctness, clarity, and vocabulary in every app as you type!"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Another frames it as a work problem:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Keep getting pinged? With Grammarly, you write clearer messages that cut through the clutter."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The buttons match the install pitch: across all 150 Meta ads, "Download" appears on 74 and "Install now" on 70. Formats split 78 image, 72 video.&lt;/p&gt;

&lt;h2&gt;
  
  
  The LinkedIn side: campuses and academic integrity
&lt;/h2&gt;

&lt;p&gt;The LinkedIn copy speaks to university IT and academic leaders, and AI sits in almost every text. 16 of the 30 mention academic integrity or Authorship, and 16 contain "already", meaning they address institutions that use Grammarly today:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"You’re already supporting your institution with Grammarly. See how Rowan-Cabarrus took the next step with Authorship, reducing academic integrity violations by 96% in one semester while improving developmental English pass rates."&lt;/p&gt;

&lt;p&gt;"How do you embrace AI without compromising academic integrity? Get a practical framework for setting expectations, building transparent policies, and aligning AI use with learning objectives."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The 96% is the ad's own claim; I haven't checked it. 8 of the 30 texts are Message Ads opening with "Hi %FIRSTNAME%"; across all 50 ads the formats are 23 single image, 15 message and 11 document. Two texts name "Superhuman Go for Higher Ed", which fits the advertiser name on Google.&lt;/p&gt;

&lt;p&gt;So search and LinkedIn meet on one topic from opposite directions: searches rise for tools that make AI text pass detectors, while the ads sell schools a way to see how a text was written.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this data can't tell you
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Small, truncated slices.&lt;/strong&gt; Each count comes from 30 texts (10 for Trends), not from all ads. The 30 Meta bodies repeat only 4 lines, so the Meta result rests on very little copy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google is mostly dark.&lt;/strong&gt; All eight longest-shown Google ads have empty headline and description fields and share a first-shown date of March 28, 2023, which looks like the edge of the library's history. I count AI mentions in the 30 decoded headlines (6 of 30) and draw nothing else from Google copy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No spend, no results, no EU details.&lt;/strong&gt; LinkedIn published dates, impressions and targeting for 0 of the 50 ads, so I can't say where or how long they ran. Nothing here shows budgets or which message works.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Running it on another brand
&lt;/h2&gt;

&lt;p&gt;I built these scrapers. The &lt;a href="https://apify.com/wakeful_outhouse/linkedin-ad-library-scraper?utm_source=devto&amp;amp;utm_campaign=grammarly" rel="noopener noreferrer"&gt;LinkedIn Ad Library Scraper&lt;/a&gt; takes a company name and returns ad text, format, CTA and advertiser, and the &lt;a href="https://apify.com/wakeful_outhouse/google-trends-scraper?utm_source=devto&amp;amp;utm_campaign=grammarly" rel="noopener noreferrer"&gt;Google Trends Scraper&lt;/a&gt; returns interest over time with top and rising queries, both as JSON or CSV you can feed to a script like the one above. They're free to try on the Apify free plan, and a run of a few hundred ads costs well under a dollar.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Not affiliated with Grammarly; all data is from public ad libraries.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;My regex counts "AI" as one topic, but "AI that writes for you" and "AI that checks who wrote it" are opposite pitches. How would you split them with a rule you could still audit, without hand-labelling?&lt;/p&gt;

</description>
      <category>webscraping</category>
      <category>python</category>
      <category>datascience</category>
      <category>saas</category>
    </item>
    <item>
      <title>Airbnb's 5 oldest live Meta ads all ask you to become a host</title>
      <dc:creator>Roman | Ad Intel Lab</dc:creator>
      <pubDate>Wed, 28 Oct 2026 08:24:43 +0000</pubDate>
      <link>https://dev.to/adintel_lab/airbnbs-5-oldest-live-meta-ads-all-ask-you-to-become-a-host-4boo</link>
      <guid>https://dev.to/adintel_lab/airbnbs-5-oldest-live-meta-ads-all-ask-you-to-become-a-host-4boo</guid>
      <description>&lt;p&gt;A marketplace advertises to two groups: people who buy and people who supply. Airbnb is the textbook case, so I checked which side shows up in its public ads.&lt;/p&gt;

&lt;p&gt;On October 28, 2026 I pulled &lt;strong&gt;150 active Airbnb ads from the Meta Ad Library&lt;/strong&gt;, plus 150 Google ads, 50 LinkedIn ads and a year of Google Trends data. Sorted by days active, the top five Meta ads don't sell stays. &lt;strong&gt;All five ask the viewer to become a host&lt;/strong&gt;, in Spanish or Portuguese, and have run for 157 to 161 days.&lt;/p&gt;

&lt;h2&gt;
  
  
  The eight longest-running Meta ads
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Days active&lt;/th&gt;
&lt;th&gt;Start date&lt;/th&gt;
&lt;th&gt;CTA&lt;/th&gt;
&lt;th&gt;What it asks&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;161&lt;/td&gt;
&lt;td&gt;2026-05-21&lt;/td&gt;
&lt;td&gt;Learn more&lt;/td&gt;
&lt;td&gt;Become a host (Spanish)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;161&lt;/td&gt;
&lt;td&gt;2026-05-21&lt;/td&gt;
&lt;td&gt;Learn more&lt;/td&gt;
&lt;td&gt;Become a host (Portuguese)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;161&lt;/td&gt;
&lt;td&gt;2026-05-21&lt;/td&gt;
&lt;td&gt;Learn more&lt;/td&gt;
&lt;td&gt;Become a host (Portuguese)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;157&lt;/td&gt;
&lt;td&gt;2026-05-22&lt;/td&gt;
&lt;td&gt;Learn more&lt;/td&gt;
&lt;td&gt;Become a host (Spanish)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;157&lt;/td&gt;
&lt;td&gt;2026-05-24&lt;/td&gt;
&lt;td&gt;Learn more&lt;/td&gt;
&lt;td&gt;Become a host (Portuguese)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;121&lt;/td&gt;
&lt;td&gt;2026-06-30&lt;/td&gt;
&lt;td&gt;Book now&lt;/td&gt;
&lt;td&gt;Catalog template&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;121&lt;/td&gt;
&lt;td&gt;2026-06-30&lt;/td&gt;
&lt;td&gt;Book now&lt;/td&gt;
&lt;td&gt;Catalog template&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;120&lt;/td&gt;
&lt;td&gt;2026-06-30&lt;/td&gt;
&lt;td&gt;Book now&lt;/td&gt;
&lt;td&gt;No text in the library&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;No single start date covers more than three of the eight, so this doesn't look like the edge of the library's window. Three distinct lines cover all five host ads:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"¿Te gustaría ser anfitrión?" / "Descubre cuánto podrías ganar en Airbnb con tu espacio."&lt;br&gt;
(Would you like to be a host? Find out how much you could earn on Airbnb with your space.)&lt;/p&gt;

&lt;p&gt;"Torne-se um anfitrião hoje" / "Anuncie seu espaço no Airbnb em poucos passos."&lt;br&gt;
(Become a host today. List your space on Airbnb in a few steps.)&lt;/p&gt;

&lt;p&gt;"Descubra o prazer de receber hóspedes" / "Receba hóspedes do mundo todo aqui Brasil com o Airbnb."&lt;br&gt;
(Discover the pleasure of hosting guests. Host guests from all over the world here in Brazil with Airbnb.)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The Spanish line leads with money, one Portuguese line with ease ("a few steps"), the other with the experience of hosting. All five use "Learn more".&lt;/p&gt;

&lt;h2&gt;
  
  
  Meanwhile, the guest copy rotates
&lt;/h2&gt;

&lt;p&gt;The collector also keeps the body text of the first 30 Meta ads. I sorted them with a plain keyword rule (host words first, then "app"). &lt;strong&gt;None of the 30 is a host ad.&lt;/strong&gt; 20 sell a stay and 10 push the app, in 17 distinct lines. The app copy is the shortest:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Tap. Pack. Go. It’s that simple with the app."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Brazil shows up on the guest side too: 9 of the 30 texts are in Portuguese and built around the "feriado", the public holiday:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"No feriado, reserve uma casa com piscina, churrasqueira e quintalzão pra família toda. Filhos pets inclusos."&lt;br&gt;
(For the holiday, book a house with a pool, a barbecue and a big yard for the whole family. Kids and pets included.)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So the export shows two layers: guest copy in many variations, and a few host ads live since May. The library shows which ads are still running, not why.&lt;/p&gt;

&lt;h2&gt;
  
  
  The rest of the account at a glance
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Meta&lt;/th&gt;
&lt;th&gt;Google&lt;/th&gt;
&lt;th&gt;LinkedIn&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Ads in sample&lt;/td&gt;
&lt;td&gt;150 (all active)&lt;/td&gt;
&lt;td&gt;150&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Main format&lt;/td&gt;
&lt;td&gt;Dynamic creative, 58&lt;/td&gt;
&lt;td&gt;Text, 145&lt;/td&gt;
&lt;td&gt;Single image, 34&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Top CTA&lt;/td&gt;
&lt;td&gt;Learn more, 72&lt;/td&gt;
&lt;td&gt;Book now, 1&lt;/td&gt;
&lt;td&gt;Thai "Learn more", 7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Second CTA&lt;/td&gt;
&lt;td&gt;Book now, 58&lt;/td&gt;
&lt;td&gt;Sign up, 1&lt;/td&gt;
&lt;td&gt;Learn more, 5&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;On Meta, Instagram is a placement for 142 of the 150 ads, Facebook for 95 and Threads for 31. Google decoded only two headlines out of 150 ads, "Forget screens" and "Try hosting", which is too few to read anything into.&lt;/p&gt;

&lt;p&gt;LinkedIn has one host-side ad among the four with EU details: "Ready for less guesswork and more guests?", announcing pricing tools for hosts, with 100k–150k impressions over 15 days. One of the 50 LinkedIn ads comes from a separate page, "Airbnb Host Community".&lt;/p&gt;

&lt;p&gt;Search has a host thread too. Google Trends gives "Airbnb" an average of 85.6 over 12 months, a peak of 100 on July 26, 2026, and 70 now (-5.2%). "airbnb host" is among the top related queries and rose +70%. Trends gives no volumes, so this shows what people type, not how many.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this data can't tell you
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A sample, and a narrow one.&lt;/strong&gt; 150 Meta ads and 30 body texts. The host ads I see are in Spanish and Portuguese only; Airbnb may run host campaigns in other languages that fell outside this export, and the Meta export doesn't give me countries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Days active isn't success.&lt;/strong&gt; An ad that has run 161 days may be cheap, always-on, or simply not reviewed. I have no spend, reach or sign-up numbers for any ad.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Thin Google and LinkedIn text.&lt;/strong&gt; Google decoded 2 headlines out of 150 ads, and LinkedIn publishes dates and impressions only for ads shown in the EU (4 of 50 here).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3 things to test this week
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Give your supply-side ad its own slot.&lt;/strong&gt; If you run a marketplace, try one long-lived seller or host ad in a separate set and leave it alone for a quarter.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test the three host motives against each other.&lt;/strong&gt; Earnings, effort ("a few steps") and experience ("the pleasure of hosting") answer different objections. Run one ad per motive with the same image.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sort a competitor's ads two ways.&lt;/strong&gt; Sort once by days active and once by how often a text repeats. If the lists name different audiences, treat that as a hypothesis for your own tests.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Doing this for your own competitor
&lt;/h2&gt;

&lt;p&gt;I built these scrapers. The &lt;a href="https://apify.com/wakeful_outhouse/facebook-ads-library-scraper?utm_source=devto&amp;amp;utm_campaign=airbnb" rel="noopener noreferrer"&gt;Facebook Ads Library Scraper&lt;/a&gt; takes a brand's Facebook page URL and returns ad text, CTA, format, placements and days active for every active ad, and the &lt;a href="https://apify.com/wakeful_outhouse/linkedin-ad-library-scraper?utm_source=devto&amp;amp;utm_campaign=airbnb" rel="noopener noreferrer"&gt;LinkedIn Ad Library Scraper&lt;/a&gt; does the same for a company name, with impressions and targeting for EU ads. Both are no-code forms with CSV or Excel export, free to try on the Apify free plan, and a run of a few hundred ads costs well under a dollar.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Not affiliated with Airbnb; all data is from public ad libraries.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you had one always-on ad for the supply side of your marketplace, would you lead with earnings, ease, or the experience itself?&lt;/p&gt;

</description>
      <category>marketing</category>
      <category>analytics</category>
      <category>growth</category>
      <category>ecommerce</category>
    </item>
    <item>
      <title>Only 1 of 28 decoded Duolingo Google headlines skips the English Test</title>
      <dc:creator>Roman | Ad Intel Lab</dc:creator>
      <pubDate>Mon, 26 Oct 2026 08:23:19 +0000</pubDate>
      <link>https://dev.to/adintel_lab/only-1-of-28-decoded-duolingo-google-headlines-skips-the-english-test-130</link>
      <guid>https://dev.to/adintel_lab/only-1-of-28-decoded-duolingo-google-headlines-skips-the-english-test-130</guid>
      <description>&lt;p&gt;Most people know Duolingo as the green owl that guilts you into a daily Spanish lesson. If you look only at its ads in the Google Ads Transparency Center, you'd meet a different product: an English proficiency exam for people applying to universities.&lt;/p&gt;

&lt;p&gt;I pulled &lt;strong&gt;150 Google ads&lt;/strong&gt; for &lt;code&gt;duolingo.com&lt;/code&gt; on October 26, 2026. The library decoded a headline for 28 of them. &lt;strong&gt;27 of those 28 headlines are about the Duolingo English Test (DET)&lt;/strong&gt;, the online exam that students send to schools. The one exception is "Try 1 Month For $0", which doesn't name a product at all. None of the 28 mentions learning a language in the app.&lt;/p&gt;

&lt;h2&gt;
  
  
  The headlines, counted
&lt;/h2&gt;

&lt;p&gt;I grouped the 28 decoded headlines by exact text:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Headline&lt;/th&gt;
&lt;th&gt;Ads&lt;/th&gt;
&lt;th&gt;Language&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Send to Every School for $0&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;English&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sin centros de examinación&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;Spanish&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Simulados grátis e ilimitados&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Portuguese&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Examen 70 % más económico&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Spanish&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;English Test for Modern Times: Fast, Efficient, Affordable&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;English&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fast &amp;amp; Flexible English Test&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;English&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Try 1 Month For $0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;English&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The Spanish lines translate as "No test centers" and "An exam 70% cheaper". The Portuguese one means "Free, unlimited practice tests". The count used a plain keyword rule (test, school, examen, examinación, simulados), and "Try 1 Month For $0" was the only headline it didn't match.&lt;/p&gt;

&lt;p&gt;Read together, the headlines work as a list of test-taker objections: the cost of sending scores, the trip to a test center, the price, and preparation. Each headline answers one, and the most common (11 ads) is about score reports.&lt;/p&gt;

&lt;h2&gt;
  
  
  The longer copy says the same thing
&lt;/h2&gt;

&lt;p&gt;The library also returned description text for two of the eight longest-shown Google ads, both videos:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Trusted by 475+ programs in Canada."&lt;/p&gt;

&lt;p&gt;"Study and work in Canada with DET – the smart, flexible &amp;amp; trusted English test."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So the two longer texts I can read are aimed at people heading to Canada for study or work, and they lead with institutional acceptance rather than price.&lt;/p&gt;

&lt;p&gt;The format mix on Google is 72 text ads, 43 video and 35 image. 42 ads link to a YouTube video. Of the 150 ads, 149 come from Duolingo Inc and 1 from Logicserve Digital Consultancy Services Pvt Ltd.&lt;/p&gt;

&lt;h2&gt;
  
  
  Search demand points the same way
&lt;/h2&gt;

&lt;p&gt;Google Trends for "Duolingo" over the past 12 months: average interest 71.1, a peak of 100 on February 22, 2026, and 72 now (-7.1% over the period). The interesting part is the top related queries:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;duolingo english&lt;/li&gt;
&lt;li&gt;duolingo test&lt;/li&gt;
&lt;li&gt;duolingo english test&lt;/li&gt;
&lt;li&gt;duolingo app&lt;/li&gt;
&lt;li&gt;duolingo price&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Two of the top three name the test outright, the first one could mean either, and "duolingo app" comes fourth. Trends ranks queries without giving volumes, so this shows what people type next to "Duolingo", not how many of them.&lt;/p&gt;

&lt;p&gt;Among rising queries, "taco bell duolingo hot sauce" is up +2,550%. It matches a one-day LinkedIn ad from October 2, 2026 about a Taco Bell partnership, 5k–10k impressions.&lt;/p&gt;

&lt;h2&gt;
  
  
  LinkedIn: hiring, partners, and educators
&lt;/h2&gt;

&lt;p&gt;LinkedIn returned 31 ads, 28 from the Duolingo page and 3 from Duolingo Licensing. The most common format is Single Image Ad (13), followed by Document Ad (6) and Video Ad (4). A large part of the copy is employer branding: engineering puzzles, product roles, a relocation offer to Pittsburgh. The test shows up again, aimed at teachers this time, in an ad that greets educators by first name:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"With demand for the Duolingo English Test (DET) surging, students need support more than ever. Are you ready to guide them?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Three German-language video ads are posts by individual creators tagged #LinkedInPartner and #DuolingoPartner. They promote adding a Duolingo Score to your LinkedIn profile as proof of language skills. Like the Google ads, they put the credential side of Duolingo up front.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this data can't tell you
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;28 headlines out of 150 ads.&lt;/strong&gt; The library left the headline empty for most ads, including all eight longest-shown ones. The other 122 ads could be about anything, including the app. The 27-of-28 figure describes the decoded slice, and I'm not drawing conclusions about Google copywriting beyond which product each headline names.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No dates worth reading into.&lt;/strong&gt; The eight longest-shown Google ads ran 169–182 days, and four of them were first shown on April 27, 2026. That looks like the edge of the library's window, so I'm not calling anything "long-running".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No spend, no results, EU-only LinkedIn details.&lt;/strong&gt; Nothing here tells you how Duolingo splits its budget or whether the DET ads work. App-install campaigns may run on channels I didn't pull. LinkedIn published dates and impressions for only 5 of the 31 ads (those shown in the EU).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3 things to test this week
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Write one headline per objection.&lt;/strong&gt; List the reasons people pick a competitor (price, travel, prep, sending results) and give each its own headline, the way the DET ads do, instead of one headline that tries to cover all of them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check what your brand's related queries are really about.&lt;/strong&gt; Pull Trends for your brand name and see whether one product line dominates the top queries. If it does, check whether your search ads say so.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Translate the objection, not the slogan.&lt;/strong&gt; "Sin centros de examinación" isn't a translation of any English headline in the sample. Test local headlines built on the objection that matters most in that market.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  How to repeat this for another brand
&lt;/h2&gt;

&lt;p&gt;I built these scrapers. The &lt;a href="https://apify.com/wakeful_outhouse/google-ads-transparency-scraper?utm_source=devto&amp;amp;utm_campaign=duolingo" rel="noopener noreferrer"&gt;Google Ads Transparency Scraper&lt;/a&gt; takes a domain and returns every ad's format, dates, advertiser entity and any decoded text, and the &lt;a href="https://apify.com/wakeful_outhouse/google-trends-scraper?utm_source=devto&amp;amp;utm_campaign=duolingo" rel="noopener noreferrer"&gt;Google Trends Scraper&lt;/a&gt; returns interest over time plus top and rising queries. Both are no-code forms with CSV or Excel export, free to try on the Apify free plan, and a run of a few hundred ads costs well under a dollar.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Not affiliated with Duolingo; all data is from public ad libraries.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If your brand has a famous free product and a less-known paid one, which would you put in your search ad headlines: the one people already know, or the one they pay for?&lt;/p&gt;

</description>
      <category>marketing</category>
      <category>growth</category>
      <category>saas</category>
      <category>datascience</category>
    </item>
    <item>
      <title>HelloFresh on LinkedIn: 21 of 30 ad texts pitch FMCG brands, not meal kits</title>
      <dc:creator>Roman | Ad Intel Lab</dc:creator>
      <pubDate>Fri, 23 Oct 2026 07:59:49 +0000</pubDate>
      <link>https://dev.to/adintel_lab/hellofresh-on-linkedin-21-of-30-ad-texts-pitch-fmcg-brands-not-meal-kits-1nn4</link>
      <guid>https://dev.to/adintel_lab/hellofresh-on-linkedin-21-of-30-ad-texts-pitch-fmcg-brands-not-meal-kits-1nn4</guid>
      <description>&lt;p&gt;I expected HelloFresh's LinkedIn ads to sell meal kits to office workers. The LinkedIn Ad Library shows something else. In the 30 ad texts I classified, &lt;strong&gt;21 are German-language pitches from HelloFresh Media to FMCG brands&lt;/strong&gt; (sampling, recipe sponsorship, newsletters), and &lt;strong&gt;the other 9 are English job ads&lt;/strong&gt;. Meal kits come up twice, and both times it's inside a recruiting ad.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the data was collected
&lt;/h2&gt;

&lt;p&gt;On October 23, 2026 I ran two scrapers against public sources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;LinkedIn Ad Library&lt;/strong&gt;, company name "HelloFresh", capped at 50 ads. All 50 came from the HelloFresh page itself.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Ads Transparency Center&lt;/strong&gt;, domain &lt;code&gt;hellofresh.com&lt;/code&gt;, capped at 150 ads.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The collector keeps aggregate counts for all ads, plus the first 300 characters of the first 30 LinkedIn ad texts. That 30-text slice is what the classifier sees.&lt;/p&gt;

&lt;p&gt;One property of LinkedIn's library shapes everything below. Start dates, impression ranges, countries and targeting are published &lt;strong&gt;only for ads shown in the EU&lt;/strong&gt;. Here that's 42 of the 50 ads, so every date or impression figure in this post describes those 42 ads only.&lt;/p&gt;

&lt;h2&gt;
  
  
  The classifier
&lt;/h2&gt;

&lt;p&gt;There's no model here, just a keyword rule I can rerun and audit. A text is a B2B media offer if it mentions FMCG, sampling, a product launch ("Produktlaunch") or Kantar. Otherwise it counts as recruiting if it mentions hiring, careers, jobs or HelloConnect (the name used in the customer-service job ads). Language is a crude check for common German function words.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;B2B&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;FMCG&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Sampling&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Produktlaunch&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Kantar&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;HIRING&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;hiring&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;career&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;job&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;HelloConnect&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Join the HelloFresh team&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;looking for a&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;bucket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;low&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;any&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;low&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;B2B&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;b2b_media_offer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;any&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;low&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;HIRING&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;recruiting&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;other&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;language&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;words&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt; &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;de&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;words&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;und&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;du&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;dein&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;wie&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;die&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;en&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The rest of the script loads the JSON, counts buckets, and checks which texts mention a meal kit. Output, pasted as-is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LinkedIn ads: 50, texts kept: 30, unique openings: 16
  b2b_media_offer  21
  recruiting       9
By bucket and language:
  b2b_media_offer  de 21
  recruiting       en 9
Texts containing 'meal kit' or 'meal-kit': 2 | all of them recruiting: True
CTAs: [['Mehr erfahren', 36], ['Apply', 11], ['Learn more', 2]]
Google advertisers: [['Grocery Delivery E-Services USA Inc.', 112], ['HelloFresh SE', 32]]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The "other" bucket is empty, so every text matched one of the two rules. The 30 texts boil down to 16 distinct openings, because the same copy runs in several ads with small headline changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the B2B ads actually say
&lt;/h2&gt;

&lt;p&gt;The German ads read like a media sales deck aimed at brand and trade marketers: product samples in the box, sponsored recipes, newsletter placements.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Dein nächster Produktlaunch verdient die richtige Kanalstrategie."&lt;br&gt;
(Your next product launch deserves the right channel strategy.)&lt;/p&gt;

&lt;p&gt;"Die falsche Kanalwahl kostet dich beim Produktlaunch mehr als nur Budget."&lt;br&gt;
(Picking the wrong channel costs you more than budget at a product launch.)&lt;/p&gt;

&lt;p&gt;"HelloFresh Media hat mit Sampling, Rezeptsponsoring &amp;amp; Newsletter die Kaufabsicht einer alkoholfreien Biermarke um +21% gesteigert – nachgewiesen durch Kantar."&lt;br&gt;
(HelloFresh Media raised purchase intent for a non-alcoholic beer brand by +21% with sampling, recipe sponsorship and newsletters, measured by Kantar.)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The +21% is the ad's own claim about a case study. I haven't checked it. The offer behind most of these ads is a free download: a "Produktlaunch-Leitfaden" (product launch guide) or the Kantar brand lift study. That fits the button: &lt;strong&gt;36 of the 50 ads use "Mehr erfahren"&lt;/strong&gt; (Learn more).&lt;/p&gt;

&lt;p&gt;Among the 42 EU-detailed ads, the two longest-running ads are B2B pitches that started on July 15, 2026 and ran 101 days through October 23. Each shows 10k–20k impressions. All 42 list Germany among their impression countries. Targeting categories are mostly Company (38) and Job (37), which is how LinkedIn advertisers reach people by employer and job title.&lt;/p&gt;

&lt;h2&gt;
  
  
  The recruiting side
&lt;/h2&gt;

&lt;p&gt;The 9 English texts are hiring ads, and 11 ads in the full set of 50 use the "Apply" button. One of the two that mention meal kits uses them as an employee perk:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"We offer Day-1 health insurance (including a zero-cost option!), regular pay increases, and up to 85% off HelloFresh meal kits."&lt;/p&gt;
&lt;h2&gt;
  
  
  A cross-check on Google
&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Google returned 150 ads: 115 text, 27 image, 8 video. Most of them (112) come from an entity called Grocery Delivery E-Services USA Inc., and 32 come from HelloFresh SE. The decoded headlines repeat the LinkedIn split on a small scale. 5 of the 8 that the collector kept are recruiting ("Join HelloFresh Poland", "Apply for HelloFresh Jobs", "Jobs at HelloFresh"…). The other 3 are consumer lines such as "America's #1 Meal Kit".&lt;/p&gt;

&lt;p&gt;I'm not drawing conclusions about Google ad copy or ad age. All 8 longest-running Google ads have empty headline and description fields, and 6 of them share a first-shown date of June 22, 2023. That pattern usually marks where the library's history begins, so it says little about the ads themselves.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this data can't tell you
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;30 texts, truncated.&lt;/strong&gt; The classifier sees the first 30 LinkedIn texts, cut at 300 characters, out of 50 ads. A different slice could change the 21/9 split, though the "other" bucket being empty suggests the two themes cover this account well.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;EU-only details.&lt;/strong&gt; Dates, impressions, countries and targeting describe 42 of 50 ads. LinkedIn doesn't publish them for the rest.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No spend, no results.&lt;/strong&gt; Impression ranges aren't budgets, and nothing here tells you whether the B2B campaign or the hiring ads work. Consumer meal-kit advertising may happen on channels I didn't look at.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Reproducing it
&lt;/h2&gt;

&lt;p&gt;I built these scrapers. The &lt;a href="https://apify.com/wakeful_outhouse/linkedin-ad-library-scraper?utm_source=devto&amp;amp;utm_campaign=hellofresh" rel="noopener noreferrer"&gt;LinkedIn Ad Library Scraper&lt;/a&gt; takes a company name and returns ad text, format, CTA and advertiser, plus dates, impressions and targeting for EU ads. The &lt;a href="https://apify.com/wakeful_outhouse/google-ads-transparency-scraper?utm_source=devto&amp;amp;utm_campaign=hellofresh" rel="noopener noreferrer"&gt;Google Ads Transparency Scraper&lt;/a&gt; does the same for a domain. Both export JSON or CSV that drops straight into a script like the one above. They're free to try on the Apify free plan, and a run of a couple hundred ads costs well under a dollar. The LinkedIn input for this post was just:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"companies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"HelloFresh"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"maxAdsPerQuery"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Not affiliated with HelloFresh; all data is from public ad libraries.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A keyword rule was enough for this account because the two themes don't overlap. Would you trust a rule like this on a messier advertiser, or at what point would you switch to labelling texts by hand?&lt;/p&gt;

</description>
      <category>webscraping</category>
      <category>python</category>
      <category>analytics</category>
      <category>automation</category>
    </item>
    <item>
      <title>23 of 30 Canva Meta ad texts were Indonesian. LinkedIn sells Enterprise</title>
      <dc:creator>Roman | Ad Intel Lab</dc:creator>
      <pubDate>Thu, 22 Oct 2026 00:29:17 +0000</pubDate>
      <link>https://dev.to/adintel_lab/23-of-30-canva-meta-ad-texts-were-indonesian-linkedin-sells-enterprise-2k4a</link>
      <guid>https://dev.to/adintel_lab/23-of-30-canva-meta-ad-texts-were-indonesian-linkedin-sells-enterprise-2k4a</guid>
      <description>&lt;p&gt;The public ad libraries show Canva speaking in two very different voices, and they barely overlap.&lt;/p&gt;

&lt;p&gt;On Meta, &lt;strong&gt;23 of the first 30 ad texts in my export are in Indonesian&lt;/strong&gt;, written for students, job seekers, teachers and people running a small shop. On LinkedIn, &lt;strong&gt;19 of 30 ad texts mention Canva Enterprise&lt;/strong&gt;, and 6 of them open by reminding the reader that Canva used to be a personal tool.&lt;/p&gt;

&lt;p&gt;I pulled the data on October 22, 2026 from the Meta Ad Library (150 active ads), the LinkedIn Ad Library (50 ads) and the Google Ads Transparency Center (150 ads). It's a sample, not Canva's whole account.&lt;/p&gt;

&lt;h2&gt;
  
  
  The three platforms side by side
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Meta&lt;/th&gt;
&lt;th&gt;LinkedIn&lt;/th&gt;
&lt;th&gt;Google&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Ads in sample&lt;/td&gt;
&lt;td&gt;150 (all active)&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;150&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Main format&lt;/td&gt;
&lt;td&gt;Dynamic creative, 81&lt;/td&gt;
&lt;td&gt;Single image, 44&lt;/td&gt;
&lt;td&gt;Text, 83&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Second format&lt;/td&gt;
&lt;td&gt;Video, 57&lt;/td&gt;
&lt;td&gt;Document, 5&lt;/td&gt;
&lt;td&gt;Video, 60&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Most common CTA&lt;/td&gt;
&lt;td&gt;Learn more, 126&lt;/td&gt;
&lt;td&gt;Learn more, 43&lt;/td&gt;
&lt;td&gt;Learn more, 25&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Language signal&lt;/td&gt;
&lt;td&gt;23 of 30 texts Indonesian&lt;/td&gt;
&lt;td&gt;English&lt;/td&gt;
&lt;td&gt;"登録" (Japanese "Sign up") on 22 ads&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;"Learn more" dominates everywhere, so the split shows up in the text.&lt;/p&gt;

&lt;h2&gt;
  
  
  Meta: one persona per ad, in Indonesian
&lt;/h2&gt;

&lt;p&gt;The 30 Meta texts collapse into 15 unique lines, because many ads reuse the same copy with different creatives. The Indonesian ones follow one pattern: name a specific person's problem as a question, then answer with "there's Canva".&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Punya usaha sampingan tapi nggak jago desain? Tenang, ada Canva!"&lt;br&gt;
(Got a side business but you're not good at design? Relax, there's Canva!)&lt;/p&gt;

&lt;p&gt;"Semester baru, tugas udah numpuk? Untung ada Canva!"&lt;br&gt;
(New semester, assignments piling up? Lucky there's Canva!)&lt;/p&gt;

&lt;p&gt;"Ganti spanduk warung biar tetap WOW? Pakai Magic Layers di Canva!"&lt;br&gt;
(Changing the banner of your warung, the small corner shop, so it still says WOW? Use Magic Layers in Canva!)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Other lines talk to job seekers, teachers who stay up late making materials, and people who keep saying yes to everyone else's work. The most repeated line, used 5 times among the 30, pushes Canva AI.&lt;/p&gt;

&lt;p&gt;The 7 English texts read differently. They are about work: "Last-minute marketing promos? We got you. Design on-brand every time with Brand Kit." appears 3 times, alongside Magic Resize and Style Match pitches.&lt;/p&gt;

&lt;h2&gt;
  
  
  The longest-running Meta ads are about work, not students
&lt;/h2&gt;

&lt;p&gt;Sorting the 150 Meta ads by days active gives a different picture from the text sample. The top 8 run for 28 to 39 days (the oldest started on September 13, 2026), and &lt;strong&gt;none of them is in Indonesian&lt;/strong&gt;. They are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Brand Kit ("Make work effortless.") twice,&lt;/li&gt;
&lt;li&gt;a Canva Enterprise ad, "Too many tools slow campaigns down… Contact us today for a demo.",&lt;/li&gt;
&lt;li&gt;an AI Sort ad about how Canva's own marketing team organizes ideas, twice,&lt;/li&gt;
&lt;li&gt;a Canva Enterprise customer story from Movement Gyms,&lt;/li&gt;
&lt;li&gt;two "Design School Courses" ads for teachers, about Canva Code and Learn Grid.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this sample the Indonesian consumer copy fills the volume, while English work and education ads top the "days active" list. That compares two lists; it says nothing about which ads perform better.&lt;/p&gt;

&lt;h2&gt;
  
  
  LinkedIn: selling Enterprise against Canva's own reputation
&lt;/h2&gt;

&lt;p&gt;All 50 LinkedIn ads come from the Canva page itself, no partners. The copy keeps returning to one idea: you know Canva as something casual, and that view is out of date.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What started out as a casual design app is now a full suite of creative productivity solutions. Request a demo for Canva Enterprise to learn more."&lt;/p&gt;

&lt;p&gt;"The platform you once used for your personal projects now gets your work done with the same ease and efficiency. Learn more about Canva Enterprise."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A third variant puts the old label in quotation marks, saying Canva Enterprise is more than "just a design app." Other lines lean on scale ("Scale to 40 markets without scaling your team") and social proof ("helping 95% of the Fortune 500"). One newer line ties the product to AI agents: "Your agent gets the brief. Canva gets the brand."&lt;/p&gt;

&lt;p&gt;LinkedIn shows dates, impressions and targeting only for ads that ran in the EU: 15 of the 50 here. Each of those 15 lists Audience, Company and Job targeting, and the 8 longest-running ones started on October 20, 2026 with 1k–5k impressions each, too fresh for any "long-running" angle.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this data can't tell you
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sample size.&lt;/strong&gt; The text analysis covers the first 30 Meta ad texts and 30 LinkedIn texts the collector keeps, out of 150 and 50 ads. A different slice could shift the 23-of-30 split.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Language is not location.&lt;/strong&gt; Indonesian copy strongly suggests an Indonesian-speaking audience, but the Meta library export doesn't give me countries, and I can't see spend, reach or conversions for any ad.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google text is mostly hidden.&lt;/strong&gt; All 8 longest-running Google ads have empty headline and description fields, so I'm not drawing copy conclusions from Google beyond the CTA label language.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3 things to test this week
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;One persona per ad, phrased as their problem.&lt;/strong&gt; Take your generic feature ad and write three versions that each name one person in one situation ("new semester", "side business", "shop banner"). Run them against the feature copy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Name the objection your upmarket buyer already has.&lt;/strong&gt; If people know your product from a free or personal tier, test B2B copy that says so in the first sentence, the way Canva's "casual design app" lines do.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compare your volume list with your "still running" list.&lt;/strong&gt; Export your own ads (or a competitor's), sort once by count of copies and once by days active, and see whether the same audience tops both.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  How to repeat this for another brand
&lt;/h2&gt;

&lt;p&gt;I built these scrapers. The &lt;a href="https://apify.com/wakeful_outhouse/facebook-ads-library-scraper?utm_source=devto&amp;amp;utm_campaign=canva" rel="noopener noreferrer"&gt;Facebook Ads Library Scraper&lt;/a&gt; takes a brand's Facebook page URL and returns ad text, CTA, format, platforms and days active; the &lt;a href="https://apify.com/wakeful_outhouse/linkedin-ad-library-scraper?utm_source=devto&amp;amp;utm_campaign=canva" rel="noopener noreferrer"&gt;LinkedIn Ad Library Scraper&lt;/a&gt; takes a company name and returns the copy, format and, for EU ads, impressions and targeting. Both are no-code forms with CSV or Excel export, free to try on the Apify free plan, and a run of a few hundred ads costs well under a dollar.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Not affiliated with Canva; all data is from public ad libraries.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you sell a product people first met as a free or personal tool, would you open your B2B ads by naming that reputation, or avoid mentioning it at all?&lt;/p&gt;

</description>
      <category>marketing</category>
      <category>saas</category>
      <category>analytics</category>
      <category>datascience</category>
    </item>
    <item>
      <title>Nike's longest-running Meta ads don't sell shoes. They sell the Nike App</title>
      <dc:creator>Roman | Ad Intel Lab</dc:creator>
      <pubDate>Sun, 18 Oct 2026 11:37:01 +0000</pubDate>
      <link>https://dev.to/adintel_lab/nikes-longest-running-meta-ads-dont-sell-shoes-they-sell-the-nike-app-3a4d</link>
      <guid>https://dev.to/adintel_lab/nikes-longest-running-meta-ads-dont-sell-shoes-they-sell-the-nike-app-3a4d</guid>
      <description>&lt;p&gt;Here's a number I didn't expect: &lt;strong&gt;38 of 150 active Nike ads on Meta use the "Install now" button.&lt;/strong&gt; Not "Shop now", not "Learn more". Install. And the three Nike ads that have been running the longest, 560, 542 and 390 days, are all app-install ads.&lt;/p&gt;

&lt;p&gt;I pulled 150 active Meta ads and 150 Google ads from Nike on October 18, 2026, using the public Meta Ad Library and Google Ads Transparency Center. It's a sample, not Nike's whole account (they run far more than 300 ads), but it's enough to see how the funnel is built. This time I focused on one thing: &lt;strong&gt;what each ad asks you to do.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The call-to-action split
&lt;/h2&gt;

&lt;p&gt;On Meta, the 150 ads break down like this:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;CTA&lt;/th&gt;
&lt;th&gt;Ads&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Shop now&lt;/td&gt;
&lt;td&gt;110&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Install now&lt;/td&gt;
&lt;td&gt;38&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Learn more&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Use app&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;So the funnel has basically two exits: buy a product now, or get the app. There's almost nothing in between, no "Learn more" content funnel and no lead forms.&lt;/p&gt;

&lt;p&gt;The "Shop now" side is what you'd expect from a retailer with a huge catalog: &lt;strong&gt;118 of the 150 ads are dynamic product ads&lt;/strong&gt; (DPA), where Meta fills a template with a specific product for each viewer. The rest are dynamic creative (13), video (10), single image (8) and one carousel. The product titles are real catalog items: "Nike Court Legacy Next Nature", "Nike Dunk Low SE", even "Sneaker LAB Hat Protector 50ml".&lt;/p&gt;

&lt;h2&gt;
  
  
  The app ads are the ones that never stop
&lt;/h2&gt;

&lt;p&gt;When I sorted by days active, the top of the list looked like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;"Cosmic Unity 3 Basketball Shoes"&lt;/strong&gt;, body: &lt;em&gt;"Bring sports more fully into your day with the Nike App."&lt;/em&gt; CTA: Install now. &lt;strong&gt;560 days&lt;/strong&gt;, live since April 7, 2025.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Calzado para hombre Nike Blazer Mid '77 SE"&lt;/strong&gt;, a Spanish-language ad that ends with &lt;em&gt;"¡Descárgala ahora!"&lt;/em&gt; (download it now). Install now. &lt;strong&gt;542 days&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"The Best of Nike - Personalized to You"&lt;/strong&gt;, same "Bring sports more fully into your day" line. Install now. &lt;strong&gt;390 days&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Notice the trick: the creative shows a shoe, but the button installs the app. The product is the hook; the app is the conversion.&lt;/p&gt;

&lt;p&gt;After those three, the long-runners switch to regional store ads: Nike.cl in Chile ("Creemos que el estilo es una forma de expresión…", 380 and 277 days) and Nike.sa in Saudi Arabia, in English and Arabic (278 days each).&lt;/p&gt;

&lt;p&gt;The app and membership message shows up all over the ad copy, not just the long-runners:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Compra desde la Nike App y encuentra novedades de sneakers con la última tecnología…" (buy from the Nike App and find the newest sneakers)&lt;/p&gt;

&lt;p&gt;"Hazte miembro Nike y obtén beneficios especiales…" (become a Nike member and get special benefits)&lt;/p&gt;

&lt;p&gt;"Celebra tu cumpleaños con Nike y obtén acceso a productos exclusivos…" (celebrate your birthday with Nike and get access to exclusive products)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Every one of these lines pushes toward an owned channel (app or member account) where Nike doesn't have to pay Meta for the next purchase.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the ads run
&lt;/h2&gt;

&lt;p&gt;Nike uses Meta's inventory far more widely than most brands I've looked at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Instagram: 150 of 150&lt;/li&gt;
&lt;li&gt;Facebook: 147&lt;/li&gt;
&lt;li&gt;Audience Network: 134&lt;/li&gt;
&lt;li&gt;Messenger: 88&lt;/li&gt;
&lt;li&gt;Threads: 71&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For comparison, Booking.com, which I looked at two days ago, had Audience Network on 20 of 150 ads and Threads on 1.&lt;/p&gt;

&lt;h2&gt;
  
  
  Google: older, quieter, mostly text
&lt;/h2&gt;

&lt;p&gt;On Google, the 150 ads are 125 text, 23 image and 2 video. The oldest are &lt;strong&gt;image ads first shown on October 25, 2021 and still live today: 1,807 days.&lt;/strong&gt; Seven of the eight longest-running Google ads are image ads.&lt;/p&gt;

&lt;p&gt;Most of them are run by regional entities: Nike Retail BV (93 ads), Nike, Inc. (25), Nike Global Trading B.V. Singapore Branch (19) and Nike Korea (4). Headlines we could decode are plain navigational ones like "Ga naar Nike" (Dutch: "Go to Nike") and "Nike Factory Store". On search, Nike is mostly defending its own name; the persuasion happens on Meta.&lt;/p&gt;

&lt;h2&gt;
  
  
  What people are actually searching for
&lt;/h2&gt;

&lt;p&gt;Google Trends for "Nike" over the past 12 months: average interest 68.3, peak 100 on April 12, 2026, currently 54 (-3.9 % over the period). The rising queries are all specific products: "nike mind 001", "nike mind slides", "nike mind 002" and "nike mind" are all marked &lt;strong&gt;Breakout&lt;/strong&gt;, followed by "nike pegasus 42" (+800 %), "nike vomero plus" (+650 %) and "nike revolution 8" (+550 %).&lt;/p&gt;

&lt;p&gt;None of those products appear among the eight longest-running Meta ads in my sample. That's not a criticism, it's how a catalog setup works: DPA ads pick products automatically, so the long-runners are the evergreen templates, not the hype launches. But if you're a smaller retailer selling Pegasus or Vomero, the gap between rising demand and evergreen ads is where your opening is.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a marketer can take from this
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Separate the "hook" from the "ask".&lt;/strong&gt; Nike shows a shoe and asks for an app install. Your creative and your CTA don't have to be about the same thing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Long-running ads point to the real goal.&lt;/strong&gt; Nike's longest-lived Meta ads all push the app. Whatever a competitor keeps paying for month after month is what they value most.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Owned channels beat rented ones.&lt;/strong&gt; Every customer moved into the app is a repeat purchase without ad spend.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  How to do this for your competitor
&lt;/h2&gt;

&lt;p&gt;Everything above came from two scrapers I built on Apify. No code needed: fill in the form, click Start, and export the table as CSV, Excel or JSON.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Meta ads&lt;/strong&gt; with the &lt;a href="https://apify.com/wakeful_outhouse/facebook-ads-library-scraper" rel="noopener noreferrer"&gt;Facebook Ads Library Scraper&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"queries"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"https://www.facebook.com/nike"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"activeStatus"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"active"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"maxAdsPerQuery"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;150&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then group the output by &lt;code&gt;ctaText&lt;/code&gt;. That one column tells you how the funnel is split between buying, installing and signing up. Sort by days active to find the long-runners.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Google ads&lt;/strong&gt; with the &lt;a href="https://apify.com/wakeful_outhouse/google-ads-transparency-scraper" rel="noopener noreferrer"&gt;Google Ads Transparency Scraper&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"queries"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"nike.com"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"maxAdsPerQuery"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;150&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You get format, first and last shown dates, total days shown and the advertiser entity for each ad.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Search demand&lt;/strong&gt; with the &lt;a href="https://apify.com/wakeful_outhouse/google-trends-scraper" rel="noopener noreferrer"&gt;Google Trends Scraper&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"searchTerms"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"Nike"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"timeRange"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"today 12-m"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Compare the rising queries with the products in the competitor's ads, and you'll see which demand they're not covering.&lt;/p&gt;




&lt;p&gt;All three are free to try on the Apify free plan, and a 300-ad export like this costs well under a dollar. &lt;em&gt;Which brand's ad funnel should I break down next? Tell me in the comments.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>marketing</category>
      <category>ecommerce</category>
      <category>growth</category>
      <category>webscraping</category>
    </item>
    <item>
      <title>What 300 live Booking.com ads reveal about their Google and Meta strategy</title>
      <dc:creator>Roman | Ad Intel Lab</dc:creator>
      <pubDate>Fri, 16 Oct 2026 16:30:34 +0000</pubDate>
      <link>https://dev.to/adintel_lab/what-300-live-bookingcom-ads-reveal-about-their-google-and-meta-strategy-78n</link>
      <guid>https://dev.to/adintel_lab/what-300-live-bookingcom-ads-reveal-about-their-google-and-meta-strategy-78n</guid>
      <description>&lt;p&gt;Booking.com spends more on performance marketing than almost any company in travel. You can't see their budget, but you can see their ads: Google and Meta both publish every ad an advertiser runs, in the Google Ads Transparency Center and the Meta Ad Library.&lt;/p&gt;

&lt;p&gt;The problem is that both sites show ads one by one. So I exported them. I pulled &lt;strong&gt;150 Google ads and 150 active Meta ads&lt;/strong&gt; from Booking.com on October 16, 2026 and looked at what they have in common. (It's a sample, not the full account: Booking.com has thousands of ads.)&lt;/p&gt;

&lt;p&gt;Here is what stood out.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Their Google text ads have been running for five years
&lt;/h2&gt;

&lt;p&gt;Every one of the 150 Google ads in the sample is a text ad, and the oldest ones were &lt;strong&gt;first shown on October 25, 2021 and were still live today: 1,818 days&lt;/strong&gt;. The top 8 longest-running ads are all in the 1,814–1,818 day range.&lt;/p&gt;

&lt;p&gt;That tells you something useful about search ads at this scale: once a text ad wins, Booking.com doesn't "refresh the creative" for the sake of it. It keeps it running for years and spends its testing budget elsewhere.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Takeaway:&lt;/strong&gt; if a competitor's search ad has been live for 3+ years, treat it as proven copy. Study its angle before you write your own.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. On Meta, catalog ads do the heavy lifting
&lt;/h2&gt;

&lt;p&gt;The Meta side looks completely different. Of the 150 active ads:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Format&lt;/th&gt;
&lt;th&gt;Ads&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Dynamic product ads (DPA, catalog)&lt;/td&gt;
&lt;td&gt;88&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dynamic creative (DCO)&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Single image&lt;/td&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Video&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Almost &lt;strong&gt;60 % are catalog ads&lt;/strong&gt;: one template that Meta fills with a property, a city and a price for each viewer. The copy is short and always about reducing risk:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"With free cancellation, you can stay flexible. Book the perfect stay with peace of mind."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The call to action is &lt;strong&gt;"Book now" on 100 of 150 ads&lt;/strong&gt;, "Learn more" on 34 and "Sign up" on 16.&lt;/p&gt;

&lt;p&gt;Placements: Facebook 150, Instagram 147, Messenger 23, Audience Network 20, Threads 1. In other words, Facebook + Instagram, and almost nothing else.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Takeaway:&lt;/strong&gt; for a big catalog, Booking.com lets the algorithm pick the product and keeps the message to a single objection handler: free cancellation.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. The longest-running Meta ads aren't for travelers
&lt;/h2&gt;

&lt;p&gt;This was the surprise. When I sorted the Meta ads by days active, the top 8 were &lt;strong&gt;not&lt;/strong&gt; consumer ads. They target property owners:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Toutes les réservations dont vous rêviez." (All the bookings you dreamed of), running 579 days.&lt;/li&gt;
&lt;li&gt;"Protección frente a reclamaciones de responsabilidad civil hasta 1.000.000€" (liability protection for hosts), 578 days.&lt;/li&gt;
&lt;li&gt;"Con la richiesta di prenotazione puoi scegliere come ricevere le prenotazioni" (choose how you accept bookings), 578 days.&lt;/li&gt;
&lt;li&gt;"Gagnez des revenus complémentaires" (earn extra income), 397 days.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They are in French, Spanish and Italian, all use "Learn more" and they've been live since March 2025. This is Booking.com's &lt;strong&gt;supply-side funnel&lt;/strong&gt;: a quiet, always-on campaign to sign up new hosts in Europe, while the consumer ads rotate much faster.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Takeaway:&lt;/strong&gt; when you research a marketplace, filter out the consumer ads and look at what stays live the longest. That's often the side of the business they care about most.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to do this for your competitor in 3 minutes
&lt;/h2&gt;

&lt;p&gt;I used two scrapers I built on Apify. Both are no-code (fill in a form and click Start), and the output goes to a table you can export as CSV, Excel or JSON.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Google ads&lt;/strong&gt; with the &lt;a href="https://apify.com/wakeful_outhouse/google-ads-transparency-scraper" rel="noopener noreferrer"&gt;Google Ads Transparency Scraper&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"queries"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"booking.com"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"maxAdsPerQuery"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;150&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You get each ad's format, first and last shown dates, total days shown, the preview and the decoded text, headline and YouTube ID wherever Google exposes them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Meta ads&lt;/strong&gt; with the &lt;a href="https://apify.com/wakeful_outhouse/facebook-ads-library-scraper" rel="noopener noreferrer"&gt;Facebook Ads Library Scraper&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"queries"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"https://www.facebook.com/bookingcom"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"activeStatus"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"active"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"maxAdsPerQuery"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;150&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You get ad text, CTA, format, platforms, start date, days active and the number of variants. Turn on &lt;code&gt;includeAdDetails&lt;/code&gt; to also get EU reach and an age and gender breakdown for ads shown in Europe.&lt;/p&gt;

&lt;p&gt;Then sort by days shown or days active. The ads at the top are the ones the advertiser keeps paying for, so they are the ones worth copying the &lt;em&gt;idea&lt;/em&gt; of.&lt;/p&gt;

&lt;p&gt;Two more tricks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add &lt;code&gt;monitorName&lt;/code&gt; to the input and schedule the run weekly. Each run returns &lt;strong&gt;only ads you haven't seen yet&lt;/strong&gt;, so you get a "what did my competitor launch this week" feed.&lt;/li&gt;
&lt;li&gt;Both tools charge per ad (from $0.60 per 1,000 on Meta) with no start fee, so a 300-ad export like this one costs well under a dollar. You can try them on the Apify free plan.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Have a brand you want me to break down next? Drop it in the comments.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>marketing</category>
      <category>advertising</category>
      <category>datascience</category>
      <category>startup</category>
    </item>
  </channel>
</rss>
