Campaign deployment framework for Google Ads and Sklik (Czech PPC platform) via API. Supports 10 campaign types with a brief-driven workflow: fill a Markdown brief, dry-run, then deploy.
| Type | Platform | Description |
|---|---|---|
| Search Standard | Google Ads | Responsive Search Ads (RSA) |
| Search DSA | Google Ads | Dynamic Search Ads |
| Performance Max | Google Ads | All Google channels (Search, Display, YouTube, Discover, Gmail, Maps) |
| Display | Google Ads | Responsive Display Ads in Google Display Network |
| Shopping | Google Ads | Product ads from Merchant Center feed |
| Video | Google Ads | YouTube video ads (in-stream, in-feed, shorts) |
| Demand Gen | Google Ads | YouTube, Discover, Gmail placements |
| Sklik Search | Sklik | Czech search ads |
| Sklik Context | Sklik | Czech display/context network |
| Sklik Retargeting | Sklik | Czech retargeting campaigns |
- Fill a brief — Each campaign type has a Markdown brief template in
briefs/. Fill in your campaign settings (budget, keywords, ad copy, targeting). - Dry run — The orchestrator parses the brief, injects values into the Python template, and runs in dry-run mode (validates everything without creating the campaign).
- Deploy — Run again with
--deployto create the campaign in Google Ads (always created PAUSED).
- Python 3.10+
google-adsPython SDK- Google Ads API developer token + OAuth credentials
- (For Sklik) Sklik API token
-
Clone the repo
git clone https://github.com/YOUR_USERNAME/google-ads-agent.git cd google-ads-agent -
Install dependencies
pip install google-ads
-
Configure API credentials
cp google-ads.yaml.example google-ads.yaml # Fill in developer_token, client_id, client_secret, refresh_token, login_customer_id -
Copy and fill a brief
cp briefs/search_standard_brief.md my_brief.md # Edit my_brief.md with your campaign settings -
Dry run (validates without creating anything)
python run_campaign.py --type search_standard --brief my_brief.md
-
Deploy (creates the campaign PAUSED)
python run_campaign.py --type search_standard --brief my_brief.md --deploy
| Variable | Required | Description |
|---|---|---|
google-ads.yaml |
Yes (Google Ads) | OAuth credentials file. Copy from google-ads.yaml.example and fill in developer_token, client_id, client_secret, refresh_token, login_customer_id. |
GOOGLE_ADS_YAML_PATH |
No | Override the default path to google-ads.yaml (defaults to project root). |
sklik.yaml |
Yes (Sklik) | Sklik API credentials file. Must contain drak_api_key. |
SKLIK_API_TOKEN |
No | Alternative way to pass the Sklik API token instead of sklik.yaml. |
python run_campaign.pyDisplays a menu to select campaign type, brief file, and run mode (dry-run / deploy).
# Dry run
python run_campaign.py --type search_standard --brief briefs/search_standard_brief.md
# Deploy (creates campaign PAUSED)
python run_campaign.py --type search_standard --brief briefs/search_standard_brief.md --deploygoogle-ads-agent/
├── run_campaign.py # Master orchestrator (interactive + CLI)
├── templates/ # Python templates for each campaign type
│ ├── search_standard.py
│ ├── search_dsa.py
│ ├── performance_max.py
│ ├── display.py
│ ├── shopping.py
│ ├── video.py
│ ├── demand_gen.py
│ ├── sklik_search.py
│ ├── sklik_context.py
│ └── sklik_retargeting.py
├── briefs/ # Markdown brief templates
│ ├── search_standard_brief.md
│ ├── performance_max_brief.md
│ └── ...
├── google-ads.yaml.example # API credentials template
└── README.md
Briefs are Markdown files with a table of configuration values. Section headers and some parameter names support both English and Czech (e.g., "Klicova slova" / "Keywords", "Reklamy" / "Ads") for backward compatibility.
# Search Standard Brief
| Parameter | Value |
|-----------|-------|
| CUSTOMER_ID | 1234567890 |
| CAMPAIGN_NAME | Spring Sale 2026 |
| BUDGET_AMOUNT_CZK | 500 |
| BIDDING_STRATEGY | maximize_conversions |
| KEYWORDS | running shoes, trail shoes, hiking boots |
| HEADLINES | Buy Running Shoes | Trail Shoes Sale | Free Shipping |
| DESCRIPTIONS | Wide selection of running shoes. | Order today, free shipping over $50. |The orchestrator parses these values and injects them into the template before execution. All campaigns are created PAUSED by default.
| Parameter | Value |
|-----------|-------|
| CAMPAIGN_NAME | Summer Shoes 2026 |
| BUDGET_AMOUNT_CZK | 300 |
| BIDDING_STRATEGY | maximize_conversions |
| KEYWORDS | running shoes, trail shoes, hiking boots |
| HEADLINES | Buy Running Shoes | Trail Shoes Sale | Free Shipping |
| DESCRIPTIONS | Wide selection of running shoes. | Order today, free shipping over 1500 CZK. || Parameter | Value |
|-----------|-------|
| CAMPAIGN_NAME | ProjectHub Q3 Leads |
| BUDGET_AMOUNT_CZK | 800 |
| BIDDING_STRATEGY | maximize_conversion_value |
| KEYWORDS | project management software, team collaboration tool, task tracker |
| HEADLINES | Try ProjectHub Free | Manage Projects Smarter | 14-Day Free Trial |
| DESCRIPTIONS | All-in-one project management for teams of 5-500. | Track tasks, deadlines, and budgets in one place. |- All campaigns created PAUSED (manual activation required)
- Dry-run mode validates everything without making API calls
- Budgets in CZK (auto-converted to micros)
- Full execution logs saved to
logs/ - EU compliance field set automatically
MIT