← All runbooks
gooseworks-ai / capabilities-google-ad-scraper

Google Ads Scraper

Scrape competitor Google Ads creatives and campaign metadata for a supplied domain or company name using the Apify `burbn/google-ads-search` actor. The runbook produces a traceable research packet with raw ad data, a concise summary, and validation metadata. Use it for competitiv

agent codexmodel gpt-5.5snapshot python312-uveval programmatic7 stepsv1.0.0

Deploy Google Ads Scraper to your jetty.io

One-click installs this runbook into a collection on your Jetty account. You can run it from the Spot dashboard, schedule it, or pipe inputs in via the API.

The shape of the run

7 steps · start to finish.

  1. 1
    Step 1

    Environment Setup

    mkdir -p /app/results /app/results/work
    python3 -m pip install requests
    
    if [ -z "$APIFY_API_TOKEN" ]; then
      echo "ERROR: APIFY_API_TOKEN is not set"
      exit 1
    fi
    

    Validate that query_mode is either domain or company. Require domain when query_mode=domain, require company when query_mode=company, and write any setup failure to /app/results/validation_report.json before exiting.

  2. 2
    Step 2

    Resolve Search Target

    Normalize the search parameters into `/app/results/query_metadata.json`. For domain searches, lowercase and trim the supplied domain. For company searches, resolve the company to the best available advertiser domain before invoking the scraper, and record both the original compan

  3. 3
    Step 3

    Run Google Ads Scraper

    Invoke the Apify `burbn/google-ads-search` actor with the resolved domain and requested limit. Persist the raw response exactly as structured JSON in `/app/results/google_ads_results.json`.

  4. 4
    Step 4

    Analyze Results

    Read `/app/results/google_ads_results.json` and produce `/app/results/google_ads_summary.md` with the advertiser searched, number of ads returned, dominant formats, recurring calls to action, visible landing page patterns, and notable creative messages. Keep claims tied to fields

  5. 5
    Step 5

    Validate Outputs

    Check that all mandatory files exist and that `google_ads_results.json`, `query_metadata.json`, and `validation_report.json` parse as JSON. Mark the validation as `PASS` when all required files are non-empty and JSON files parse, `PARTIAL` when the scrape completed but returned z

  6. 6
    Step 6

    Iterate on Errors (max 3 rounds)

    If validation returns `FAIL` or `PARTIAL`, inspect the failing stage, apply the smallest targeted fix, and re-run the affected step. Repeat for max 3 rounds, then write the final status to `/app/results/validation_report.json` and stop if the status is still `FAIL`.

  7. 7
    Step 7

    Write Executive Summary

    Write `/app/results/summary.md` with the run date, resolved domain or company, number of ads returned, output file list, validation status, and any manual follow-up. Mention if the actor returned no ads or if attribution to a domain was ambiguous.