{
  "schemaVersion": "1.0",
  "item": {
    "slug": "google-ads",
    "name": "Google Ads",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/jdrhyne/google-ads",
    "canonicalUrl": "https://clawhub.ai/jdrhyne/google-ads",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/google-ads",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=google-ads",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "_meta.json",
      "references/api-setup.md",
      "references/browser-workflows.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/google-ads"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/google-ads",
    "agentPageUrl": "https://openagent3.xyz/skills/google-ads/agent",
    "manifestUrl": "https://openagent3.xyz/skills/google-ads/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/google-ads/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Google Ads Skill",
        "body": "Manage Google Ads accounts via API or browser automation."
      },
      {
        "title": "Mode Selection",
        "body": "Check which mode to use:\n\nAPI Mode - If user has google-ads.yaml configured or GOOGLE_ADS_* env vars\nBrowser Mode - If user says \"I don't have API access\" or just wants quick checks\n\n# Check for API config\nls ~/.google-ads.yaml 2>/dev/null || ls google-ads.yaml 2>/dev/null\n\nIf no config found, ask: \"Do you have Google Ads API credentials, or should I use browser automation?\""
      },
      {
        "title": "Browser Automation Mode (Universal)",
        "body": "Requirements: User logged into ads.google.com in browser"
      },
      {
        "title": "Setup",
        "body": "User opens ads.google.com and logs in\nUser clicks Clawdbot Browser Relay toolbar icon (badge ON)\nUse browser tool with profile=\"chrome\""
      },
      {
        "title": "Common Workflows",
        "body": "Get Campaign Performance\n\n1. Navigate to: ads.google.com/aw/campaigns\n2. Set date range (top right date picker)\n3. Snapshot the campaigns table\n4. Parse: Campaign, Status, Budget, Cost, Conversions, Cost/Conv\n\nFind Zero-Conversion Keywords (Wasted Spend)\n\n1. Navigate to: ads.google.com/aw/keywords\n2. Click \"Add filter\" → Conversions → Less than → 1\n3. Click \"Add filter\" → Cost → Greater than → [threshold, e.g., $500]\n4. Sort by Cost descending\n5. Snapshot table for analysis\n\nPause Keywords/Campaigns\n\n1. Navigate to keywords or campaigns view\n2. Check boxes for items to pause\n3. Click \"Edit\" dropdown → \"Pause\"\n4. Confirm action\n\nDownload Reports\n\n1. Navigate to desired view (campaigns, keywords, etc.)\n2. Click \"Download\" icon (top right of table)\n3. Select format (CSV recommended)\n4. File downloads to user's Downloads folder\n\nFor detailed browser selectors: See references/browser-workflows.md"
      },
      {
        "title": "API Mode (Power Users)",
        "body": "Requirements: Google Ads API developer token + OAuth credentials"
      },
      {
        "title": "Setup Check",
        "body": "# Verify google-ads SDK\npython -c \"from google.ads.googleads.client import GoogleAdsClient; print('OK')\"\n\n# Check config\ncat ~/.google-ads.yaml"
      },
      {
        "title": "Common Operations",
        "body": "Query Campaign Performance\n\nfrom google.ads.googleads.client import GoogleAdsClient\n\nclient = GoogleAdsClient.load_from_storage()\nga_service = client.get_service(\"GoogleAdsService\")\n\nquery = \"\"\"\n    SELECT campaign.name, campaign.status,\n           metrics.cost_micros, metrics.conversions,\n           metrics.cost_per_conversion\n    FROM campaign\n    WHERE segments.date DURING LAST_30_DAYS\n    ORDER BY metrics.cost_micros DESC\n\"\"\"\n\nresponse = ga_service.search(customer_id=CUSTOMER_ID, query=query)\n\nFind Zero-Conversion Keywords\n\nquery = \"\"\"\n    SELECT ad_group_criterion.keyword.text,\n           campaign.name, metrics.cost_micros\n    FROM keyword_view\n    WHERE metrics.conversions = 0\n      AND metrics.cost_micros > 500000000\n      AND segments.date DURING LAST_90_DAYS\n    ORDER BY metrics.cost_micros DESC\n\"\"\"\n\nPause Keywords\n\noperations = []\nfor keyword_id in keywords_to_pause:\n    operation = client.get_type(\"AdGroupCriterionOperation\")\n    operation.update.resource_name = f\"customers/{customer_id}/adGroupCriteria/{ad_group_id}~{keyword_id}\"\n    operation.update.status = client.enums.AdGroupCriterionStatusEnum.PAUSED\n    operations.append(operation)\n\nservice.mutate_ad_group_criteria(customer_id=customer_id, operations=operations)\n\nFor full API reference: See references/api-setup.md"
      },
      {
        "title": "Audit Checklist",
        "body": "Quick health check for any Google Ads account:\n\nCheckBrowser PathWhat to Look ForZero-conv keywordsKeywords → Filter: Conv<1, Cost>$500Wasted spendEmpty ad groupsAd Groups → Filter: Ads=0No creative runningPolicy violationsCampaigns → Status columnYellow warning iconsOptimization ScoreOverview page (top right)Below 70% = action neededConversion trackingTools → ConversionsInactive/no recent data"
      },
      {
        "title": "Output Formats",
        "body": "When reporting findings, use tables:\n\n## Campaign Performance (Last 30 Days)\n| Campaign | Cost | Conv | CPA | Status |\n|----------|------|------|-----|--------|\n| Branded  | $5K  | 50   | $100| ✅ Good |\n| SDK Web  | $10K | 2    | $5K | ❌ Pause |\n\n## Recommended Actions\n1. **PAUSE**: SDK Web campaign ($5K CPA)\n2. **INCREASE**: Branded budget (strong performer)"
      },
      {
        "title": "Browser Mode Issues",
        "body": "Can't see data: Check user is on correct account (top right account selector)\nSlow loading: Google Ads UI is heavy; wait for tables to fully load\nSession expired: User needs to re-login to ads.google.com"
      },
      {
        "title": "API Mode Issues",
        "body": "Authentication failed: Refresh OAuth token, check google-ads.yaml\nDeveloper token rejected: Ensure token is approved (not test mode)\nCustomer ID error: Use 10-digit ID without dashes"
      }
    ],
    "body": "Google Ads Skill\n\nManage Google Ads accounts via API or browser automation.\n\nMode Selection\n\nCheck which mode to use:\n\nAPI Mode - If user has google-ads.yaml configured or GOOGLE_ADS_* env vars\nBrowser Mode - If user says \"I don't have API access\" or just wants quick checks\n# Check for API config\nls ~/.google-ads.yaml 2>/dev/null || ls google-ads.yaml 2>/dev/null\n\n\nIf no config found, ask: \"Do you have Google Ads API credentials, or should I use browser automation?\"\n\nBrowser Automation Mode (Universal)\n\nRequirements: User logged into ads.google.com in browser\n\nSetup\nUser opens ads.google.com and logs in\nUser clicks Clawdbot Browser Relay toolbar icon (badge ON)\nUse browser tool with profile=\"chrome\"\nCommon Workflows\nGet Campaign Performance\n1. Navigate to: ads.google.com/aw/campaigns\n2. Set date range (top right date picker)\n3. Snapshot the campaigns table\n4. Parse: Campaign, Status, Budget, Cost, Conversions, Cost/Conv\n\nFind Zero-Conversion Keywords (Wasted Spend)\n1. Navigate to: ads.google.com/aw/keywords\n2. Click \"Add filter\" → Conversions → Less than → 1\n3. Click \"Add filter\" → Cost → Greater than → [threshold, e.g., $500]\n4. Sort by Cost descending\n5. Snapshot table for analysis\n\nPause Keywords/Campaigns\n1. Navigate to keywords or campaigns view\n2. Check boxes for items to pause\n3. Click \"Edit\" dropdown → \"Pause\"\n4. Confirm action\n\nDownload Reports\n1. Navigate to desired view (campaigns, keywords, etc.)\n2. Click \"Download\" icon (top right of table)\n3. Select format (CSV recommended)\n4. File downloads to user's Downloads folder\n\n\nFor detailed browser selectors: See references/browser-workflows.md\n\nAPI Mode (Power Users)\n\nRequirements: Google Ads API developer token + OAuth credentials\n\nSetup Check\n# Verify google-ads SDK\npython -c \"from google.ads.googleads.client import GoogleAdsClient; print('OK')\"\n\n# Check config\ncat ~/.google-ads.yaml\n\nCommon Operations\nQuery Campaign Performance\nfrom google.ads.googleads.client import GoogleAdsClient\n\nclient = GoogleAdsClient.load_from_storage()\nga_service = client.get_service(\"GoogleAdsService\")\n\nquery = \"\"\"\n    SELECT campaign.name, campaign.status,\n           metrics.cost_micros, metrics.conversions,\n           metrics.cost_per_conversion\n    FROM campaign\n    WHERE segments.date DURING LAST_30_DAYS\n    ORDER BY metrics.cost_micros DESC\n\"\"\"\n\nresponse = ga_service.search(customer_id=CUSTOMER_ID, query=query)\n\nFind Zero-Conversion Keywords\nquery = \"\"\"\n    SELECT ad_group_criterion.keyword.text,\n           campaign.name, metrics.cost_micros\n    FROM keyword_view\n    WHERE metrics.conversions = 0\n      AND metrics.cost_micros > 500000000\n      AND segments.date DURING LAST_90_DAYS\n    ORDER BY metrics.cost_micros DESC\n\"\"\"\n\nPause Keywords\noperations = []\nfor keyword_id in keywords_to_pause:\n    operation = client.get_type(\"AdGroupCriterionOperation\")\n    operation.update.resource_name = f\"customers/{customer_id}/adGroupCriteria/{ad_group_id}~{keyword_id}\"\n    operation.update.status = client.enums.AdGroupCriterionStatusEnum.PAUSED\n    operations.append(operation)\n\nservice.mutate_ad_group_criteria(customer_id=customer_id, operations=operations)\n\n\nFor full API reference: See references/api-setup.md\n\nAudit Checklist\n\nQuick health check for any Google Ads account:\n\nCheck\tBrowser Path\tWhat to Look For\nZero-conv keywords\tKeywords → Filter: Conv<1, Cost>$500\tWasted spend\nEmpty ad groups\tAd Groups → Filter: Ads=0\tNo creative running\nPolicy violations\tCampaigns → Status column\tYellow warning icons\nOptimization Score\tOverview page (top right)\tBelow 70% = action needed\nConversion tracking\tTools → Conversions\tInactive/no recent data\nOutput Formats\n\nWhen reporting findings, use tables:\n\n## Campaign Performance (Last 30 Days)\n| Campaign | Cost | Conv | CPA | Status |\n|----------|------|------|-----|--------|\n| Branded  | $5K  | 50   | $100| ✅ Good |\n| SDK Web  | $10K | 2    | $5K | ❌ Pause |\n\n## Recommended Actions\n1. **PAUSE**: SDK Web campaign ($5K CPA)\n2. **INCREASE**: Branded budget (strong performer)\n\nTroubleshooting\nBrowser Mode Issues\nCan't see data: Check user is on correct account (top right account selector)\nSlow loading: Google Ads UI is heavy; wait for tables to fully load\nSession expired: User needs to re-login to ads.google.com\nAPI Mode Issues\nAuthentication failed: Refresh OAuth token, check google-ads.yaml\nDeveloper token rejected: Ensure token is approved (not test mode)\nCustomer ID error: Use 10-digit ID without dashes"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/jdrhyne/google-ads",
    "publisherUrl": "https://clawhub.ai/jdrhyne/google-ads",
    "owner": "jdrhyne",
    "version": "1.1.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/google-ads",
    "downloadUrl": "https://openagent3.xyz/downloads/google-ads",
    "agentUrl": "https://openagent3.xyz/skills/google-ads/agent",
    "manifestUrl": "https://openagent3.xyz/skills/google-ads/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/google-ads/agent.md"
  }
}