<?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: Khas-Erdene Tsogtsaikhan</title>
    <description>The latest articles on DEV Community by Khas-Erdene Tsogtsaikhan (@khaserdene_tsogtsaikhan_).</description>
    <link>https://dev.to/khaserdene_tsogtsaikhan_</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3982753%2F8847fd16-7863-4ea5-be3d-5183e1808bbd.png</url>
      <title>DEV Community: Khas-Erdene Tsogtsaikhan</title>
      <link>https://dev.to/khaserdene_tsogtsaikhan_</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/khaserdene_tsogtsaikhan_"/>
    <language>en</language>
    <item>
      <title>How to Get Alerts When Competitors Launch New Google Ads Creatives</title>
      <dc:creator>Khas-Erdene Tsogtsaikhan</dc:creator>
      <pubDate>Sat, 13 Jun 2026 13:43:11 +0000</pubDate>
      <link>https://dev.to/khaserdene_tsogtsaikhan_/how-to-get-alerts-when-competitors-launch-new-google-ads-creatives-3107</link>
      <guid>https://dev.to/khaserdene_tsogtsaikhan_/how-to-get-alerts-when-competitors-launch-new-google-ads-creatives-3107</guid>
      <description>&lt;p&gt;Most teams do competitor ad research backwards.&lt;/p&gt;

&lt;p&gt;They manually open ad libraries when they remember to, scroll through creatives, save a few screenshots, and then forget to check again for weeks.&lt;/p&gt;

&lt;p&gt;That workflow is broken.&lt;/p&gt;

&lt;p&gt;The more useful workflow is not:&lt;/p&gt;

&lt;p&gt;“Let me browse every competitor ad manually.”&lt;/p&gt;

&lt;p&gt;It is:&lt;/p&gt;

&lt;p&gt;“Tell me when something new appears.”&lt;/p&gt;

&lt;p&gt;That is the idea behind this workflow: turning Google Ads Transparency Center into a scheduled competitor ad monitor that can alert you when new creatives show up.&lt;/p&gt;

&lt;p&gt;The problem: Google Ads Transparency Center is useful, but not an alert system&lt;br&gt;
Google Ads Transparency Center is one of the most useful free tools for competitor ad research.&lt;/p&gt;

&lt;p&gt;You can look up advertisers and see public creative information, including creative formats, first shown dates, last shown dates, and preview links.&lt;/p&gt;

&lt;p&gt;But it has one major limitation:&lt;/p&gt;

&lt;p&gt;It is built for manual lookup, not automated monitoring.&lt;/p&gt;

&lt;p&gt;That means if you are a PPC marketer, agency, founder, or growth team, you still have to manually check:&lt;/p&gt;

&lt;p&gt;Did this competitor launch new ads?&lt;br&gt;
Did they start testing more video creatives?&lt;br&gt;
Which creatives have stayed active for a long time?&lt;br&gt;
Did a batch of creatives disappear?&lt;br&gt;
Should my team review this campaign now?&lt;br&gt;
For a one-time audit, manual checking is fine.&lt;/p&gt;

&lt;p&gt;For ongoing competitor monitoring, it is a bad workflow.&lt;/p&gt;

&lt;p&gt;The better workflow&lt;br&gt;
The better workflow looks like this:&lt;/p&gt;

&lt;p&gt;Advertiser ID&lt;br&gt;
→ Scheduled Apify Actor&lt;br&gt;
→ Baseline comparison&lt;br&gt;
→ New creative detection&lt;br&gt;
→ Webhook alert&lt;br&gt;
→ Slack / n8n / Make / Clay / Discord&lt;br&gt;
Instead of checking competitors manually, you schedule a monitor.&lt;/p&gt;

&lt;p&gt;The first run creates a baseline.&lt;/p&gt;

&lt;p&gt;Future runs compare against that baseline.&lt;/p&gt;

&lt;p&gt;If new creatives appear, the workflow sends an alert.&lt;/p&gt;

&lt;p&gt;That is the key shift:&lt;/p&gt;

&lt;p&gt;You are not just scraping a dataset.&lt;/p&gt;

&lt;p&gt;You are creating a competitor ad signal.&lt;/p&gt;

&lt;p&gt;What this workflow detects&lt;br&gt;
This setup can help you track:&lt;/p&gt;

&lt;p&gt;New Google Ads creatives from a competitor&lt;br&gt;
Creative format changes, such as new video or image ads&lt;br&gt;
First shown and last shown timestamps&lt;br&gt;
Ad longevity in days&lt;br&gt;
Newly seen creatives since the previous run&lt;br&gt;
Removed creative counts&lt;br&gt;
Preview URLs and ad detail URLs&lt;br&gt;
LLM-ready summaries for analysis workflows&lt;br&gt;
The most useful signal is usually not the full archive.&lt;/p&gt;

&lt;p&gt;It is what changed.&lt;/p&gt;

&lt;p&gt;Who this is useful for&lt;br&gt;
This workflow is useful for:&lt;/p&gt;

&lt;p&gt;PPC agencies monitoring client competitors&lt;br&gt;
DTC brands watching creative testing patterns&lt;br&gt;
SaaS growth teams tracking competitor campaigns&lt;br&gt;
Marketing operations teams building alert systems&lt;br&gt;
Competitive intelligence teams building internal dashboards&lt;br&gt;
Automation builders using n8n, Make, Zapier, Clay, or Slack&lt;br&gt;
If you already check Google Ads Transparency Center manually, this workflow replaces that repetitive habit with an automated alert.&lt;/p&gt;

&lt;p&gt;Step 1: Find the advertiser ID&lt;br&gt;
First, open Google Ads Transparency Center and search for the advertiser you want to monitor.&lt;/p&gt;

&lt;p&gt;When you open an advertiser page, the URL contains an advertiser ID.&lt;/p&gt;

&lt;p&gt;It looks like this:&lt;/p&gt;

&lt;p&gt;AR07085335169422327809&lt;br&gt;
That advertiser ID is the input for the monitor.&lt;/p&gt;

&lt;p&gt;For example, if you want to monitor Apple’s public Google Ads Transparency creatives, you can use:&lt;/p&gt;

&lt;p&gt;AR07085335169422327809&lt;br&gt;
Step 2: Run the Actor once to create a baseline&lt;br&gt;
The first run creates the baseline.&lt;/p&gt;

&lt;p&gt;Example input:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "advertiserIds": ["AR07085335169422327809"],&lt;br&gt;
  "maxAdsPerAdvertiser": 40,&lt;br&gt;
  "minimumLongevityDays": 0,&lt;br&gt;
  "includePreviewUrls": true,&lt;br&gt;
  "monitorMode": true,&lt;br&gt;
  "notifyOnlyOnNew": true,&lt;br&gt;
  "debug": false&lt;br&gt;
}&lt;br&gt;
On the first monitor run, every creative is treated as already known.&lt;/p&gt;

&lt;p&gt;That means:&lt;/p&gt;

&lt;p&gt;previousCount = 0&lt;br&gt;
currentCount = 40&lt;br&gt;
newCount = 0&lt;br&gt;
This is intentional.&lt;/p&gt;

&lt;p&gt;The first run is the baseline. The next run is where change detection starts.&lt;/p&gt;

&lt;p&gt;Step 3: Enable monitor mode&lt;br&gt;
With monitorMode enabled, the Actor stores a per-advertiser baseline of creative IDs.&lt;/p&gt;

&lt;p&gt;On future runs, it compares the current creative IDs against the previous baseline.&lt;/p&gt;

&lt;p&gt;If a creative ID was not present before, the record gets:&lt;/p&gt;

&lt;p&gt;"isNewSinceLastRun": true&lt;br&gt;
The run summary also reports:&lt;/p&gt;

&lt;p&gt;previousCount&lt;br&gt;
currentCount&lt;br&gt;
newCount&lt;br&gt;
removedCount&lt;br&gt;
This is what turns the workflow from a one-time scraper into a competitor monitor.&lt;/p&gt;

&lt;p&gt;Step 4: Add a webhook URL&lt;br&gt;
To turn monitoring into alerts, add a webhook URL.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "advertiserIds": ["AR07085335169422327809"],&lt;br&gt;
  "maxAdsPerAdvertiser": 40,&lt;br&gt;
  "minimumLongevityDays": 0,&lt;br&gt;
  "includePreviewUrls": true,&lt;br&gt;
  "monitorMode": true,&lt;br&gt;
  "webhookUrl": "&lt;a href="https://your-webhook-url-here" rel="noopener noreferrer"&gt;https://your-webhook-url-here&lt;/a&gt;",&lt;br&gt;
  "notifyOnlyOnNew": true,&lt;br&gt;
  "debug": false&lt;br&gt;
}&lt;br&gt;
If notifyOnlyOnNew is true, the Actor sends a webhook only when new creatives appear.&lt;/p&gt;

&lt;p&gt;That keeps the workflow clean.&lt;/p&gt;

&lt;p&gt;No new ads?&lt;/p&gt;

&lt;p&gt;No alert.&lt;/p&gt;

&lt;p&gt;New creatives detected?&lt;/p&gt;

&lt;p&gt;Send the alert.&lt;/p&gt;

&lt;p&gt;Step 5: Send alerts to n8n, Slack, Make, Clay, or Discord&lt;br&gt;
The webhook payload can be sent anywhere:&lt;/p&gt;

&lt;p&gt;n8n&lt;br&gt;
Make&lt;br&gt;
Zapier&lt;br&gt;
Slack&lt;br&gt;
Discord&lt;br&gt;
Clay&lt;br&gt;
Airtable&lt;br&gt;
Notion&lt;br&gt;
Your own backend&lt;br&gt;
A simple n8n workflow could look like this:&lt;/p&gt;

&lt;p&gt;Webhook Trigger&lt;br&gt;
→ Check if newCount &amp;gt; 0&lt;br&gt;
→ Format message&lt;br&gt;
→ Send Slack alert&lt;br&gt;
A Slack alert might look like:&lt;/p&gt;

&lt;p&gt;🚨 New Google Ads creatives detected&lt;br&gt;
Advertiser: Apple&lt;br&gt;
New creatives: 3&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;VIDEO — 27 days longevity
Detail URL: [link]&lt;/li&gt;
&lt;li&gt;IMAGE — 12 days longevity
Detail URL: [link]
This is the workflow that matters.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Join The Writer's Circle event&lt;br&gt;
Not “download a CSV.”&lt;/p&gt;

&lt;p&gt;Not “remember to check again later.”&lt;/p&gt;

&lt;p&gt;Just:&lt;/p&gt;

&lt;p&gt;Competitor launched something new → your team gets notified.&lt;/p&gt;

&lt;p&gt;Example output fields&lt;br&gt;
Each creative record includes fields like:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "advertiserName": "Apple",&lt;br&gt;
  "advertiserId": "AR07085335169422327809",&lt;br&gt;
  "creativeId": "CR03420806151204241409",&lt;br&gt;
  "adFormat": "video",&lt;br&gt;
  "firstShown": "2026-05-18T04:19:25.000Z",&lt;br&gt;
  "lastShown": "2026-06-13T05:56:54.000Z",&lt;br&gt;
  "adLongevityDays": 27,&lt;br&gt;
  "isNewSinceLastRun": false,&lt;br&gt;
  "previewUrls": ["https://..."],&lt;br&gt;
  "adDetailUrl": "&lt;a href="https://adstransparency.google.com/advertiser/.." rel="noopener noreferrer"&gt;https://adstransparency.google.com/advertiser/..&lt;/a&gt;.",&lt;br&gt;
  "llmMarkdown": "### Apple creative...",&lt;br&gt;
  "dataComplete": true,&lt;br&gt;
  "errorMessage": null&lt;br&gt;
}&lt;br&gt;
The useful fields are:&lt;/p&gt;

&lt;p&gt;creativeId&lt;br&gt;
adFormat&lt;br&gt;
firstShown&lt;br&gt;
lastShown&lt;br&gt;
adLongevityDays&lt;br&gt;
isNewSinceLastRun&lt;br&gt;
previewUrls&lt;br&gt;
adDetailUrl&lt;br&gt;
llmMarkdown&lt;br&gt;
Why ad longevity matters&lt;br&gt;
The workflow also computes adLongevityDays.&lt;/p&gt;

&lt;p&gt;This is the number of days between when the creative was first shown and last shown.&lt;/p&gt;

&lt;p&gt;Long-running ads can be a useful signal because they show which creatives an advertiser kept active over time.&lt;/p&gt;

&lt;p&gt;This is not proof that an ad is profitable.&lt;/p&gt;

&lt;p&gt;But it is still a useful filter.&lt;/p&gt;

&lt;p&gt;For example, you may want to focus only on creatives that have been active for at least 30 days:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "minimumLongevityDays": 30&lt;br&gt;
}&lt;br&gt;
That helps reduce noise from short-lived tests.&lt;/p&gt;

&lt;p&gt;Why LLM-ready markdown is included&lt;br&gt;
A lot of marketing teams now use AI workflows for competitive research.&lt;/p&gt;

&lt;p&gt;That is why each record includes an llmMarkdown field.&lt;/p&gt;

&lt;p&gt;This makes it easier to send creative summaries into:&lt;/p&gt;

&lt;p&gt;Clay&lt;br&gt;
n8n AI agents&lt;br&gt;
internal RAG tools&lt;br&gt;
Notion databases&lt;br&gt;
custom competitor intelligence dashboards&lt;br&gt;
Instead of writing custom formatting logic for every workflow, the record already includes a clean markdown summary.&lt;/p&gt;

&lt;p&gt;Important limitations&lt;br&gt;
This is a list-only MVP.&lt;/p&gt;

&lt;p&gt;It does not extract:&lt;/p&gt;

&lt;p&gt;ad copy&lt;br&gt;
headline text&lt;br&gt;
body text&lt;br&gt;
landing page URLs&lt;br&gt;
advertiser domains&lt;br&gt;
downloaded media assets&lt;br&gt;
Those fields are intentionally not promised.&lt;/p&gt;

&lt;p&gt;The goal of this version is to monitor public creative inventory and detect changes over time.&lt;/p&gt;

&lt;p&gt;It is not a full ad intelligence suite.&lt;/p&gt;

&lt;p&gt;It is not a Google Ads API replacement.&lt;/p&gt;

&lt;p&gt;It does not use browser rendering, stealth, CAPTCHA solving, or bypass logic.&lt;/p&gt;

&lt;p&gt;Why this matters for agencies&lt;br&gt;
For agencies, the value is not just “more data.”&lt;/p&gt;

&lt;p&gt;The value is repeatable monitoring.&lt;/p&gt;

&lt;p&gt;A PPC agency could create one scheduled monitor per client competitor and receive alerts whenever new creatives appear.&lt;/p&gt;

&lt;p&gt;That can support:&lt;/p&gt;

&lt;p&gt;competitor audits&lt;br&gt;
creative research&lt;br&gt;
client reporting&lt;br&gt;
campaign inspiration&lt;br&gt;
weekly strategy reviews&lt;br&gt;
sales enablement&lt;br&gt;
market movement tracking&lt;br&gt;
Instead of saying:&lt;/p&gt;

&lt;p&gt;“We checked their ads once last month.”&lt;/p&gt;

&lt;p&gt;You can say:&lt;/p&gt;

&lt;p&gt;“We monitor new competitor creatives every day.”&lt;/p&gt;

&lt;p&gt;That is a much stronger workflow.&lt;/p&gt;

&lt;p&gt;Example use cases&lt;br&gt;
PPC agency&lt;br&gt;
Monitor five competitors for each client and send a Slack alert when new creatives appear.&lt;/p&gt;

&lt;p&gt;DTC founder&lt;br&gt;
Track when similar brands launch new video ads or seasonal campaigns.&lt;/p&gt;

&lt;p&gt;SaaS growth team&lt;br&gt;
Watch competitor creative changes before major launches, pricing changes, or new positioning tests.&lt;/p&gt;

&lt;p&gt;Marketing ops team&lt;br&gt;
Push new creative metadata into Airtable, Notion, or a data warehouse.&lt;/p&gt;

&lt;p&gt;Clay user&lt;br&gt;
Use new competitor creatives as a GTM signal for outbound or account research.&lt;/p&gt;

&lt;p&gt;Final workflow&lt;br&gt;
The full workflow is simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Find the advertiser ID&lt;/li&gt;
&lt;li&gt;Run the Actor once to create a baseline&lt;/li&gt;
&lt;li&gt;Turn on monitorMode&lt;/li&gt;
&lt;li&gt;Add webhookUrl&lt;/li&gt;
&lt;li&gt;Schedule the Actor daily or weekly&lt;/li&gt;
&lt;li&gt;Get notified when new creatives appear
That is it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The goal is not to manually inspect ad libraries forever.&lt;/p&gt;

&lt;p&gt;The goal is to know when something changes.&lt;/p&gt;

&lt;p&gt;Try it&lt;br&gt;
I built this as an Apify Actor here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apify.com/opalescent_bird/google-ads-transparency-monitor" rel="noopener noreferrer"&gt;https://apify.com/opalescent_bird/google-ads-transparency-monitor&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you try it, I would especially like feedback on one question:&lt;/p&gt;

&lt;p&gt;Would this be more useful if the next feature was domain/name search, so you do not need to manually find advertiser IDs?&lt;/p&gt;

&lt;p&gt;Or is ad copy and landing page extraction the bigger missing piece?&lt;/p&gt;

</description>
      <category>apify</category>
      <category>productivity</category>
      <category>automation</category>
      <category>saas</category>
    </item>
  </channel>
</rss>
