The most comprehensive open-source collection of Google Ads Scripts on GitHub.
Automate bidding, monitor anomalies, generate reports, manage keywords, audit accounts, and more โ all from one repo.
Browse Scripts ยท Quick Start ยท Wiki ยท Contributing
This collection brings together 60+ production-tested Google Ads Scripts organized into 7 categories. Every script includes inline documentation, configurable settings, and Google Sheets integration where applicable.
| Category | Scripts | Description |
|---|---|---|
| Auditing | 2 | Full account health grading across 10+ dimensions |
| Analyzing | 2 | Ad copy length analysis, rotation performance |
| Bidding | 5 | Automated bid adjustments, scheduling, impression share optimization |
| Managing | 18 | Keyword management, labels, extensions, negative keyword conflict resolution |
| Monitoring | 18 | Anomaly detection, budget tracking, broken URLs, quality score alerts |
| Reporting | 12 | Search query mining, auction insights, heat maps, ad extension reports |
| Testing | 2 | A/B testing framework, ad rotation analysis |
Browse the scripts/ directory or use the catalog below. Each script is a standalone .js file.
1. Log into Google Ads โ Tools & Settings โ Bulk Actions โ Scripts
2. Click "+" to create a new script
3. Delete the default code
4. Copy-paste the entire script
5. Edit the CONFIG section at the top with your settings
6. Click "Authorize" when prompted
7. Click "Preview" to test โ then "Run" to execute
Most scripts are designed to run on a schedule:
- Monitoring scripts: Hourly or Daily
- Reporting scripts: Weekly or Monthly
- Managing scripts: Daily or Weekly
- Bidding scripts: Hourly
| Script | Lines | Description |
|---|---|---|
| account-grader.js | 7,826 | Comprehensive account audit scoring 10 categories (A-F grades) with email reports |
| account-grader-v2.js | โ | Enhanced version with additional checks |
| Script | Lines | Description |
|---|---|---|
| ad-copy-length-analysis.js | 205 | Analyzes character usage across your ad copy |
| ad-rotate-analysis-V2.js | 797 | Statistical analysis of ad rotation performance |
| Script | Lines | Description |
|---|---|---|
| impression-share-bid-automation.js | 696 | Auto-adjusts manual CPC bids to hit target impression share with safety limits โ |
| advanced-ad-scheduling.js | 338 | Granular bid adjustments by hour and day of week |
| average-position-bidding.js | 406 | Automated bidding toward target average position |
| extended-devices-locations-and-audiences-bidding.js | 473 | Multi-dimensional bid modifiers for devices, locations, and audiences |
| in-market-audiences-bidding.js | 251 | Bid optimization for in-market audience segments |
| Script | Lines | Description |
|---|---|---|
| negative-keyword-conflict-resolver.js | 794 | Finds and removes negative keywords blocking positive keywords โ |
| negative-keyword-blocker.js | 100 | Auto-blocks irrelevant search terms via exact match negatives โ |
| mcc-label-assigner.js | 153 | Bulk label assignment across MCC accounts from Google Sheets โ |
| symbol-remover.js | 347 | Strips trademark symbols (โข ยฎ โ ยฉ) from RSAs and PMax ads โ |
| budget-manager.js | 303 | Automated budget pacing and allocation |
| broad-match-keyword-aggregating.js | 215 | Aggregates broad match keyword performance |
| campaign-audience-copying.js | 231 | Copy audience lists between campaigns |
| copy-labels-between-keywords-and-ads.js | 553 | Sync labels across keywords and ads |
| copy-labels-between-levels.js | 491 | Copy labels across account hierarchy levels |
| duplicate-ad-detector.js | 310 | Find and flag duplicate ads across ad groups |
| dynamic-ad-extensions.js | 561 | Programmatically manage ad extensions |
| empty-ad-group-filler.js | 375 | Detect and populate empty ad groups |
| extension-and-list-copying.js | 239 | Copy extensions and lists between campaigns |
| grant-account-underspending-script.js | 199 | Google Ad Grants compliance and spend optimization |
| keywords-for-shopping.js | 259 | Generate keyword ideas from Shopping campaign data |
| label-your-keywords-with-organic-rank-data.js | 157 | Tag keywords with their organic search rankings |
| make-exact-match-exact.js | 302 | Add close variant negatives to enforce true exact match |
| make-phrase-match-exact.js | 294 | Enforce strict phrase match via negatives |
| shared-negative-list-copying.js | 206 | Copy shared negative keyword lists between accounts |
| Script | Lines | Description |
|---|---|---|
| anomaly-detection.js | 1,124 | Multi-metric anomaly detection with trend analysis and email alerts โ |
| impression-share-tracker.js | 505 | Weighted impression share aggregation matching Google Ads methodology โ |
| budget-projection.js | 126 | Month-end spend/conversion forecasting with budget recommendations โ |
| out-of-stock-scanner.js | 41 | Website crawler that logs out-of-stock items to Google Sheets โ |
| account-structure-checker.js | 142 | Validates account structure best practices |
| broken-destination-urls.js | 57 | Detects ads pointing to broken landing pages |
| budget-depletion-warner.js | 127 | Alerts when budgets are depleting too quickly |
| campaign-budget-overspend-monitoring.js | 375 | Tracks and alerts on budget overspend patterns |
| capacity-controller.js | 177 | Controls ad spend based on business capacity |
| change-in-campaign-spending-alert.js | 308 | Alerts on significant spend changes |
| check-for-empty-ad-groups.js | 392 | Identifies empty or underperforming ad groups |
| domain-name-checker.js | 252 | Validates domain names across ads |
| gmc-disapproval-checker.js | 148 | Monitors Google Merchant Center disapprovals |
| hourly-email-updates.js | 215 | Scheduled performance snapshot emails |
| international-ppc-currency-converter.js | 59 | Multi-currency reporting normalization |
| keyword-and-ad-copy-error-checker.js | 525 | Catches typos and errors in keywords and ad copy |
| landing-page-contents-checker.js | 171 | Monitors landing page content for changes |
| low-quality-score-alert.js | 197 | Alerts when quality scores drop below threshold |
| Script | Lines | Description |
|---|---|---|
| search-query-mining-tool.js | 685 | Mines search queries for keyword and negative opportunities |
| search-query-mining-with-quality-score.js | 1,134 | Enhanced mining with quality score integration |
| auction-insights.js | 1,382 | Comprehensive auction insights competitor analysis |
| heat-map-creation-tool.js | 396 | Hour/day performance heat maps in Google Sheets |
| heat-map-creation-tool-with-devices.js | 576 | Heat maps broken out by device type |
| ad-extensions-reporter.js | 419 | Extension performance reporting |
| ad-jective-analysis-tool.js | 612 | NLP-style analysis of ad copy word choices |
| associated-search-analysis.js | 571 | Related search term opportunity analysis |
| bid-strategy-monitor.js | 334 | Tracks bid strategy changes and performance |
| duplicate-query-checker.js | 197 | Finds queries matching multiple keywords |
| expanding-phrase-match-negatives.js | 366 | Reports on phrase match expansion opportunities |
| minichecker.js | 560 | Quick account health snapshot |
| Script | Lines | Description |
|---|---|---|
| ab-testing.js | 537 | Statistical A/B testing framework for ads |
| ad-rotate-analysis-V1.js | 619 | Ad rotation performance testing |
Scripts marked with โ are original scripts by John Williams / It All Started With A Idea
All scripts require:
- A Google Ads account (or MCC for MCC-level scripts)
- Access to Google Ads Scripts (Tools & Settings โ Bulk Actions โ Scripts)
- A Google account for Sheets integration (most scripts)
No external dependencies, APIs, or billing required.
google-ads-scripts/
โโโ README.md โ You are here
โโโ LICENSE โ GPL-2.0
โโโ CONTRIBUTING.md โ How to contribute
โโโ CODE_OF_CONDUCT.md โ Community standards
โโโ .gitignore
โโโ scripts/
โ โโโ analyzing/ โ Ad copy and rotation analysis
โ โโโ auditing/ โ Full account health audits
โ โโโ bidding/ โ Automated bid management
โ โโโ managing/ โ Keyword, label, and extension management
โ โโโ monitoring/ โ Alerts, anomaly detection, budget tracking
โ โโโ reporting/ โ Search queries, heat maps, auction insights
โ โโโ testing/ โ A/B testing frameworks
โโโ wiki/ โ Wiki source pages
โโโ docs/ โ Additional documentation
We welcome contributions! See CONTRIBUTING.md for guidelines.
Ways to contribute:
- Submit new scripts
- Report bugs or suggest improvements
- Improve documentation
- Add wiki pages for scripts
This repository is licensed under GPL-2.0. See LICENSE for full terms.
Attribution:
- Scripts marked with โ are original work by John Williams / It All Started With A Idea
- Community scripts originally published by Brainlabs Digital under GPL-2.0, included here with full attribution per license terms
- All modifications, organization, documentation, and wiki content by John Williams
- Website: itallstartedwithaidea.com
- AI-Powered Google Ads: googleadsagent.ai
- Substack: itallstartedwithaidea.substack.com
- LinkedIn: in/johnmichaelwilliams
- GitHub: @itallstartedwithaidea
It All Started With A Idea