generated: '2026-08-13' method: generated source: >- openapi/google-ads-api-v25-openapi.yml — every operationId referenced by every skill was grepped against the spec before the skill was written. Enriched from conventions/, errors/, rate-limits/, sandbox/ and data-model/. provider: Google Ads providerId: google-ads description: >- Packaged Agent Skills for the Google Ads API v25. Google publishes no AGENTS.md and no skills of its own — https://developers.google.com/llms.txt returns 404 — so these are API Evangelist generations grounded in the real operation surface. Each skill states its consequence class, because this is an API where a wrong call spends money. skill_count: 5 api_version: v25 spec: openapi/google-ads-api-v25-openapi.yml skills: - name: google-ads-report-performance file: skills/google-ads-report-performance.md consequence: read summary: >- Discover legal GAQL fields for a resource, then stream a performance report. The correct entry point for any agent new to this API. operations: - googleads_customers_listAccessibleCustomers - googleads_googleAdsFields_search - googleads_customers_googleAds_searchStream - googleads_customers_googleAds_search - name: google-ads-plan-keywords file: skills/google-ads-plan-keywords.md consequence: read summary: >- Keyword ideas, historical volume, forecast metrics and reach planning. Rate-limited to 1 QPS per customer. operations: - googleads_customers_generateKeywordIdeas - googleads_customers_generateKeywordHistoricalMetrics - googleads_customers_generateKeywordForecastMetrics - googleads_customers_generateReachForecast - googleads_listPlannableLocations - googleads_listPlannableProducts - name: google-ads-launch-search-campaign file: skills/google-ads-launch-search-campaign.md consequence: write human_in_the_loop: required summary: >- Budget → campaign → ad group → criteria → ad, with validateOnly first and temp ids to make the chain atomic. operations: - googleads_customers_campaignBudgets_mutate - googleads_customers_campaigns_mutate - googleads_customers_adGroups_mutate - googleads_customers_adGroupCriteria_mutate - googleads_customers_adGroupAds_mutate - googleads_customers_googleAds_mutate - name: google-ads-upload-offline-conversions file: skills/google-ads-upload-offline-conversions.md consequence: write handles_pii: true human_in_the_loop: recommended summary: >- Offline conversion uploads, adjustments, and customer-match user data jobs — with the normalise-then-hash and consent rules stated as preconditions. operations: - googleads_customers_uploadClickConversions - googleads_customers_uploadCallConversions - googleads_customers_uploadConversionAdjustments - googleads_customers_uploadUserData - googleads_customers_offlineUserDataJobs_create - googleads_customers_offlineUserDataJobs_addOperations - googleads_customers_offlineUserDataJobs_run - name: google-ads-bulk-mutate-batch-jobs file: skills/google-ads-bulk-mutate-batch-jobs.md consequence: write human_in_the_loop: required summary: >- Asynchronous bulk mutation above the 10,000-operation ceiling, including the listResults reconciliation step most integrations skip. operations: - googleads_customers_batchJobs_mutate - googleads_customers_batchJobs_addOperations - googleads_customers_batchJobs_run - googleads_customers_batchJobs_listResults - googleads_customers_operations_get shared_preconditions: - OAuth 2.0 access token with scope https://www.googleapis.com/auth/adwords - developer-token header with an access level appropriate to the target account - login-customer-id header when calling through a manager account - Money fields are int64 micros; divide by 1,000,000 - No idempotency key exists on this API — dedupe on the caller side cross_references: conventions: conventions/google-ads-conventions.yml errors: errors/google-ads-problem-types.yml rate_limits: rate-limits/google-ads-rate-limits.yml sandbox: sandbox/google-ads-sandbox.yml data_model: data-model/google-ads-data-model.yml mcp: mcp/google-ads-mcp.yml