google-ads — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited google-ads (Agent Skill) and scored it 96/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 1 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
A bulleted imperative like {match} tells the agent to never reveal, disclose, or mention something to the user. Used adversarially it can instruct the agent to hide its tool calls or lie about what it did — stripping the transparency a user relies on to trust the agent.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Strategic guide for building new Google Ads campaigns and reporting on existing accounts. Research first, consult intelligently, validate everything, and build with the granular resource tools in dependency order (budget → campaign → targeting → ad groups → ads / asset groups). The API has exactly one campaign create — google_ads_campaigns_create — and the campaign type is just advertising_channel_type; type-specific requirements are enforced by the tools' built-in validators, which return corrective errors. Reporting is GAQL-backed and evidence-first — dashboards are optional presentation surfaces.
If search("google_ads_accounts_list") does not find google_ads_accounts_list, stop and tell the user to enable Hyper MCP and connect Google Ads.
Every tool in this skill is named by its canonical tool name. Run it with the call your surface gives you:
| Surface | Find a tool | Run it |
|---|---|---|
| MCP client (Claude, Cursor, Codex, ChatGPT) | search("<what you want to do>"), then describe("<name>") | call("<name>", {...}) |
| Hyper CLI | hyperai search "<what you want to do>", then hyperai describe <name> | hyperai call <name> --json '{...}' |
If a tool is not found, its integration is not connected or not enabled for the workspace: stop and tell the user which integration to connect.
ad-creative-generation.meta-ads / tiktok-ads separately.Reads are GAQL (google_ads_gaql_query covers every resource). Writes are one tool per resource operation, named google_ads_<resource>_<create|update|remove>; create/update take (customer_id, body) where body is the bare resource object in snake_case.
| Tool | Purpose |
|---|---|
google_ads_accounts_list | Discover accessible accounts (and MCC sub-accounts). |
google_ads_gaql_query | Run a GAQL query (conversion actions, search terms, any resource). |
google_ads_campaign_budgets_create | Create the budget first (micros!). |
google_ads_campaigns_create / _update / _remove | The ONE campaign create — every advertising_channel_type (SEARCH, DISPLAY, PERFORMANCE_MAX, VIDEO, DEMAND_GEN, SHOPPING, MULTI_CHANNEL for App). |
google_ads_ad_groups_create / _update, google_ads_ad_groups_delete | Ad groups under a campaign. |
google_ads_ad_group_ads_create / _update / _remove | Ads (typed: responsive_search_ad, responsive_display_ad, video / demand-gen ad types). |
google_ads_keywords_create / _update / _delete / _list | Keywords (positive and negative). |
google_ads_locations_search, google_ads_location_targets_add | Resolve location names, target them. |
google_ads_image_assets_upload | Image assets — accepts file_id from the workspace file manager, image_url, or base64. |
google_ads_video_assets_link | Register a YouTube video ID as a video asset (the Ads API cannot host video files — videos must be on YouTube). |
google_ads_asset_groups_create | PMax asset group (atomic: text + image assets in one call). |
google_ads_conversion_actions_create, google_ads_user_lists_create, google_ads_bidding_strategies_create, google_ads_shared_sets_create, … | Full per-resource CRUD surface — same naming pattern. |
google_ads_request | Raw escape hatch for any uncovered endpoint. |
data_apps_build, data_apps_refresh | Optional dashboards / data apps for reports. |
BUDGETS IN MICROS: $50/day = 50,000,000 micros. Never pass dollar amounts directly.
ALWAYS START PAUSED: Create campaigns with status="PAUSED". Activate only after explicit user approval.SUMMARIZE BEFORE CREATE: Present the full build plan (budget, campaign settings, targeting, ad groups, ads/assets) and get explicit user approval before the first mutate. Create in dependency order and reference each created resource by the resource_name the mutate returns. The tools validate bodies against the real API schema (writable fields, enum values) plus channel-type rules and return corrective errors — fix and retry rather than guessing.NEVER INVENT: Don't assume URLs, budgets, or location IDs. Don't skip research. Don't invent keywords or copy — creative comes only from the actual site. Don't build without user buy-in.
GAQL GUARDRAILS: Never joinad_group_criterionwithsearch_term_view. Never query more than 5 sub-accounts in a single batch.
See references/constraints.md for the full constraint set.
All reference files live in `references/`. Read them atreferences/<file>(e.g.references/discovery.md). They are not in the same directory as this SKILL.md.
Every campaign build follows this sequence. Do not skip steps.
Full workflow: Initial Setup → Research (site + GAQL + market) → Analyze (goals, audience, keywords) → Consult (options + trade-offs) → Recommend (structure + bids) → Confirm (summary approved) → Create in dependency order (PAUSED) → Verify by GAQL → Activate (post-approval).
| The user wants to… | Read these files first |
|---|---|
| Create a Search or Display campaign | references/discovery.md → references/campaigns/search-display.md |
| Create a Performance Max campaign | references/discovery.md → references/campaigns/pmax.md |
| Add an asset group to an existing PMax campaign | references/campaigns/pmax.md |
| Create a Video, Demand Gen, Shopping, or App campaign | references/discovery.md → references/campaigns/other-types.md |
| Run a report / GAQL query / analyze performance (any kind) | references/reporting.md → the matching references/reports/*.md recipe |
| Account health snapshot / "how is the account doing?" | references/reporting.md → references/reports/account-overview.md |
| Diagnose conversion tracking | references/reporting.md → references/reports/conversion-tracking.md |
| Find wasteful search terms / negative keyword candidates | references/reporting.md → references/reports/search-terms-waste.md |
| Build a Google Ads dashboard or data app | references/reporting.md → matching report recipe's dashboard section |
| Work across an MCC / many sub-accounts | references/mcc.md → references/reporting.md |
| Goal not yet clear | references/discovery.md — discovery clarifies the goal |
Reporting responses follow references/report-template.md; keep claims tied to queried data per references/heuristics.md.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.