שולח Gmail Alert כשמגיעים ל-X % מהתקציב החודשי. שנו EMAIL ו-THRESHOLD בלבד.
// Budget Alert Script — AdsAgency 2026
// שנו את הפרמטרים הבאים בלבד:
var EMAIL = 'your @email.com ' ;
var THRESHOLD_PCT = 80 ; // שלח Alert ב-80%
function main () {
var campaigns = AdsApp . campaigns ()
. withCondition ( "Status = ENABLED " ). get ();
while ( campaigns . hasNext ()) {
var c = campaigns . next ();
var budget = c . getBudget ();
var spent = c . getStatsFor ( "THIS_MONTH " ). getCost ();
var pct = ( spent / budget . getAmount ()) * 100 ;
if ( pct >= THRESHOLD_PCT ) {
MailApp . sendEmail ( EMAIL ,
'Budget Alert : ' + c . getName (),
'הגעתם ל-' + pct . toFixed ( 1 ) + '% מהתקציב' );
}
}
} // התקנה
1. Tools → Bulk Actions → Scripts → + New
2. הדביקו קוד. שנו EMAIL + THRESHOLD_PCT
3. Preview → בדקו Logs
4. Save → Frequency : Daily
Broken Links Checker
יומי קל 4 דק'
העתק קודבודק שכל Final URLs של מודעות עובדים (200 OK ). שולח Alert על קישורים שבורים (404/500).
// Broken Links Checker — AdsAgency 2026
var EMAIL = 'your @email.com ' ;
function main () {
var broken = [];
var ads = AdsApp . ads ()
. withCondition ( "Status = ENABLED " ). get ();
while ( ads . hasNext ()) {
var ad = ads . next ();
var url = ad . urls (). getFinalUrl ();
if (! url ) continue ;
var resp = UrlFetchApp . fetch ( url , {
muteHttpExceptions : true , followRedirects : true
});
if ( resp . getResponseCode () >= 400 ) {
broken . push ( url + ' (' + resp . getResponseCode () + ')' );
}
}
if ( broken . length > 0 ) {
MailApp . sendEmail ( EMAIL ,
' Broken Links Found ' ,
broken . join ( '\n ' ));
}
} // התקנה
1. העתיקו ושנו EMAIL
2. Preview — בודק URLs קיימים
3. Save → Frequency : Daily
4. ייתכן זמן ריצה ארוך — נורמלי
Pause Low QS Keywords
שבועי בינוני 5 דק'
העתק קודמשהה אוטומטית מילות מפתח עם QS נמוך מ-X שמוציאות יותר מ-Y ₪ ללא המרות.
// Pause Low QS Keywords — AdsAgency 2026
var MIN_QS = 4 ; // QS נמוך מ-4
var MIN_COST = 50 ; // הוציאו יותר מ-₪50
var DATE_RANGE = "LAST_30_DAYS " ;
function main () {
var kws = AdsApp . keywords ()
. withCondition ( "QualityScore < " + MIN_QS )
. withCondition ( "Status = ENABLED " )
. forDateRange ( DATE_RANGE ). get ();
while ( kws . hasNext ()) {
var kw = kws . next ();
var stats = kw . getStatsFor ( DATE_RANGE );
if ( stats . getCost () > MIN_COST &&
stats . getConversions () === 0 ) {
kw . pause ();
Logger . log ( 'Paused : ' + kw . getText ());
}
}
} // התקנה
1. שנו MIN_QS (ברירת מחדל: 4) ו-MIN_COST
2. Preview קודם — ראו אילו KWs ישוהו
3. השוו לרשימה — בדקו שהגיוני
4. Save → Frequency : Weekly
Weekly Performance Email
שבועי קל 4 דק'
העתק קודשולח דוח שבועי ב-Gmail עם CTR , CPC , Conversions , Cost לכל קמפיין.
// Weekly Performance Email — AdsAgency 2026
var EMAIL = 'your @email.com ' ;
var DATE_RANGE = "LAST_7_DAYS " ;
function main () {
var body = ' Weekly Google Ads Report \n \n ' ;
var campaigns = AdsApp . campaigns (). get ();
while ( campaigns . hasNext ()) {
var c = campaigns . next ();
var s = c . getStatsFor ( DATE_RANGE );
body += c . getName () + '\n '
+ ' Cost : ₪' + s . getCost (). toFixed ( 0 )
+ ' | CTR : ' + ( s . getCtr ()* 100 ). toFixed ( 1 ) + '%'
+ ' | Conv : ' + s . getConversions ()
+ '\n \n ' ;
}
MailApp . sendEmail ( EMAIL ,
' Google Ads Weekly Report ' , body );
} // התקנה
1. שנו EMAIL בלבד
2. Preview → ראו Gmail שנשלח
3. Save → Frequency : Weekly
4. יתאים לתזמן לראשון בבוקר
שולח Gmail כשה-CPA חורג מ-Target CPA שהגדרתם. לזיהוי מוקדם של בעיות.
// CPA Alert — AdsAgency 2026
var EMAIL = 'your @email.com ' ;
var MAX_CPA = 200 ; // שלח Alert אם CPA > ₪200
var MIN_CONV = 3 ; // רק אם יש 3+ המרות
function main () {
var campaigns = AdsApp . campaigns ()
. withCondition ( "Status = ENABLED " )
. forDateRange ( "LAST_7_DAYS " ). get ();
while ( campaigns . hasNext ()) {
var c = campaigns . next ();
var s = c . getStatsFor ( "LAST_7_DAYS " );
var conv = s . getConversions ();
if ( conv >= MIN_CONV ) {
var cpa = s . getCost () / conv ;
if ( cpa > MAX_CPA ) {
MailApp . sendEmail ( EMAIL ,
' CPA Alert : ' + c . getName (),
'CPA : ₪' + cpa . toFixed ( 0 ) +
' (Max : ₪' + MAX_CPA + ')' );
}
}
}
} // התקנה
1. שנו EMAIL , MAX_CPA , MIN_CONV
2. Preview
3. Save → Frequency : Daily
Pause Low Performers
שבועי בינוני 5 דק'
העתק קודמשהה מודעות עם CTR נמוך מאוד + עלות גבוהה ב-30 ימים האחרונים.
// Pause Low Performers — AdsAgency 2026
var MIN_CLICKS = 50 ; // לפחות 50 קליקים
var MAX_CTR = 0.01 ; // CTR נמוך מ-1%
var MIN_COST = 100 ; // הוציאו מעל ₪100
function main () {
var ads = AdsApp . ads ()
. withCondition ( "Status = ENABLED " )
. withCondition ( "Clicks > " + MIN_CLICKS )
. withCondition ( "Ctr < " + MAX_CTR )
. forDateRange ( "LAST_30_DAYS " ). get ();
while ( ads . hasNext ()) {
var ad = ads . next ();
if ( ad . getStatsFor ( "LAST_30_DAYS " )
. getCost () > MIN_COST ) {
ad . pause ();
Logger . log ( 'Paused Ad : ' + ad . getId ());
}
}
} // התקנה
1. שנו סף MIN_CLICKS , MAX_CTR , MIN_COST
2. Preview — חשוב מאוד! ראו מה ישוהה
3. Save → Frequency : Weekly
Quality Score Monitor
שבועי קל 4 דק'
העתק קודכותב ל-Google Sheets את QS של כל מילות מפתח פעמיים בשבוע לניתוח Trend .
// QS Monitor → Google Sheets
var SHEET_URL = 'YOUR_GOOGLE_SHEET_URL ' ;
function main () {
var sheet = SpreadsheetApp
. openByUrl ( SHEET_URL )
. getActiveSheet ();
var today = new Date ();
var kws = AdsApp . keywords ()
. withCondition ( "Status = ENABLED " ). get ();
while ( kws . hasNext ()) {
var kw = kws . next ();
sheet . appendRow ([
today ,
kw . getText (),
kw . getQualityScore (),
kw . getCampaign (). getName ()
]);
}
} // התקנה
1. צרו Google Sheet חדש
2. שנו SHEET_URL ל-URL של ה-Sheet
3. Preview → בדקו שכותב נכון
4. Save → Frequency : Weekly
Auto Pause Over Budget
שעתי קל 3 דק'
העתק קודמשהה אוטומטית קמפיינים שחרגו מ-תקציב חודשי מוגדר .
// Auto Pause Over Monthly Budget
var MONTHLY_BUDGET = 5000 ; // ₪5,000 תקציב חודשי
var EMAIL = 'your @email.com ' ;
function main () {
var campaigns = AdsApp . campaigns ()
. withCondition ( "Status = ENABLED " ). get ();
var totalSpent = 0 ;
while ( campaigns . hasNext ()) {
var c = campaigns . next ();
totalSpent += c . getStatsFor ( "THIS_MONTH " ). getCost ();
}
if ( totalSpent >= MONTHLY_BUDGET ) {
var all = AdsApp . campaigns ()
. withCondition ( "Status = ENABLED " ). get ();
while ( all . hasNext ()) {
all . next (). pause ();
}
MailApp . sendEmail ( EMAIL ,
' Budget Exhausted — Campaigns Paused ' ,
'Spent : ₪' + totalSpent . toFixed ( 0 ));
}
} // התקנה
1. שנו MONTHLY_BUDGET + EMAIL
2. Preview בזהירות — Script ישהה קמפיינים!
3. Save → Frequency : Hourly
Bid Adjustment by Hour
שעתי מתקדם 8 דק'
העתק קודמעלה/מוריד Bid אוטומטית לפי שעה — שעות שיא = Bid +, שעות שפל = Bid -.
// Bid Adjustment by Hour — AdsAgency
var CAMPAIGN_NAME = 'My Campaign ' ;
var PEAK_HOURS = [ 9 , 10 , 11 , 14 , 15 ];
var PEAK_MULT = 1.3 ; // +30% בשעות שיא
var OFF_MULT = 0.7 ; // -30% בשעות שפל
function main () {
var hour = new Date (). getHours ();
var mult = PEAK_HOURS . indexOf ( hour ) >= 0
? PEAK_MULT : OFF_MULT ;
var kws = AdsApp . keywords ()
. withCondition ( "CampaignName = '" + CAMPAIGN_NAME + "'" )
. withCondition ( "Status = ENABLED " ). get ();
while ( kws . hasNext ()) {
var kw = kws . next ();
var bid = kw . bidding (). getCpc ();
kw . bidding (). setCpc ( bid * mult );
}
} // התקנה
1. שנו CAMPAIGN_NAME לשם מדויק
2. הגדירו PEAK_HOURS לפי Hourly Report
3. Preview → בדקו Bid Changes
4. Save → Frequency : Hourly
Search Terms Exporter
שבועי קל 4 דק'
העתק קודמייצא Search Terms Report ל-Google Sheets אוטומטי. ראו מה מחפשים בפועל.
// Search Terms → Google Sheets
var SHEET_URL = 'YOUR_SHEET_URL ' ;
var MIN_COST = 10 ; // רק ביטויים עם עלות > ₪10
function main () {
var sheet = SpreadsheetApp
. openByUrl ( SHEET_URL )
. getActiveSheet ();
sheet . clearContents ();
sheet . appendRow ([ 'Date ' , 'Search Term ' , 'Clicks ' , 'Cost ' , 'Conv ' ]);
var report = AdsApp . report (
"SELECT Query , Clicks , Cost , Conversions " +
"FROM SEARCH_QUERY_PERFORMANCE_REPORT " +
"WHERE Cost > " + MIN_COST +
" DURING LAST_7_DAYS " );
var rows = report . rows ();
while ( rows . hasNext ()) {
var row = rows . next ();
sheet . appendRow ([
new Date (),
row [ 'Query ' ],
row [ 'Clicks ' ],
row [ 'Cost ' ],
row [ 'Conversions ' ]
]);
}
} // התקנה
1. צרו Google Sheet + שנו SHEET_URL
2. שנו MIN_COST
3. Preview → ראו Rows
4. Save → Frequency : Weekly
Label Low CTR Ads
שבועי קל 3 דק'
העתק קודמוסיף Label "LOW_CTR " למודעות עם CTR נמוך — לאיתור קל בממשק.
// Label Low CTR Ads — AdsAgency
var MAX_CTR = 0.02 ; // CTR < 2%
var MIN_IMPR = 100 ; // לפחות 100 חשיפות
var LABEL = 'LOW_CTR ' ;
function main () {
var label = AdsApp . labels ()
. withCondition ( "Name = '" + LABEL + "'" ). get ();
if (! label . hasNext ())
AdsApp . createLabel ( LABEL );
var ads = AdsApp . ads ()
. withCondition ( "Impressions > " + MIN_IMPR )
. withCondition ( "Ctr < " + MAX_CTR )
. forDateRange ( "LAST_30_DAYS " ). get ();
while ( ads . hasNext ()) {
ads . next (). applyLabel ( LABEL );
}
} // התקנה
1. שנו MAX_CTR , MIN_IMPR
2. Preview
3. Save → Frequency : Weekly
4. סרנו לפי Label LOW_CTR בממשק
Zero Impression Keywords
חודשי קל 3 דק'
העתק קודשולח רשימת מילות מפתח עם 0 חשיפות ב-30 יום — כנראה QS נמוך מדי או Bid נמוך.
// Zero Impression Keywords Report
var EMAIL = 'your @email.com ' ;
function main () {
var zeroKws = [];
var kws = AdsApp . keywords ()
. withCondition ( "Status = ENABLED " )
. withCondition ( "Impressions = 0" )
. forDateRange ( "LAST_30_DAYS " ). get ();
while ( kws . hasNext ()) {
var kw = kws . next ();
zeroKws . push (
kw . getText () + ' | QS : ' +
kw . getQualityScore () +
' | ' + kw . getCampaign (). getName ());
}
if ( zeroKws . length > 0 ) {
MailApp . sendEmail ( EMAIL ,
zeroKws . length + ' Zero Impression KWs ' ,
zeroKws . join ( '\n ' ));
}
} // התקנה
1. שנו EMAIL
2. Preview
3. Save → Frequency : Monthly