gum v1.2.0
gum adds Google Ads reporting, batch mutations, and offline conversion uploads.
Highlights
- Run GAQL queries with
googleads.googleAds.search. - Create, update, or remove resources with
googleads.googleAds.mutate. - Upload click conversions with
- Google Ads errors retain upstream details, request IDs, and field locations.
Every batch requires destructive confirmation, including validation runs.
googleads.conversionUploads.uploadClickConversions when the developer token is eligible for Google's offline upload service.
Install
curl -fsSL https://raw.githubusercontent.com/ehmo/gum/main/install.sh | GUM_VERSION=v1.2.0 bash
gum --version
gum doctorOr through the tap:
brew install ehmo/tap/gumUpgrade notes
Existing Google Ads credentials work with the new operations: BYO OAuth with the adwords scope, a developer token, and access to the customer account. See the Google Ads setup guide.
Use gum destructive for mutations and gum write --allow-write for conversion uploads. Supply the declared arguments at the top level; the new write operations reject body. Set validateOnly:true to validate a request without applying it. Mutations still require confirmation in that mode.
Added
googleads.googleAds.searchsupports GAQL queries, page tokens, andgoogleads.googleAds.mutateaccepts orderedmutateOperations, withgoogleads.conversionUploads.uploadClickConversionsaccepts up to 2,000
summary-row settings through Google Ads API v24.
validateOnly, partialFailure, and response-content options.
conversions per request and always sends partialFailure:true.
Changed
- Google Ads reads retain bounded retries for rate limits and server errors.
- Error messages include Google Ads error codes, field paths, and triggers
Writes are sent once. Check account state before resubmitting a write whose outcome is uncertain.
when the upstream response provides them.
Security
Mutations use the destructive risk class because they can permanently remove resources. Malformed boolean options and raw write bodies fail before an upstream request. The new operations use the existing adwords OAuth scope and server-side developer-token credential.
Known limitations
- Google restricts offline uploads for developer tokens without upload
- Inspect
partialFailureErroreven when a mutation or conversion upload - Google Ads fixes the search page size. Follow
nextPageToken, and narrow - The new operations were verified with local HTTP fixtures and dispatcher
- macOS release binaries are not notarized. Check with
- The tap formula is updated after release assets publish, so it can trail
requests between December 17, 2025 and June 15, 2026. An affected token receives CUSTOMER_NOT_ALLOWLISTED_FOR_THIS_FEATURE; Google directs new integrations to the Data Manager API. See the Google Ads setup guide.
returns HTTP 200. Successful rows can coexist with rejected rows.
the query or selected fields if a response exceeds gum's size limit.
tests. Live Google Ads calls were not exercised for this release.
spctl --assess --type execute --verbose gum. If Gatekeeper rejects the binary, clear its quarantine attribute with xattr -d com.apple.quarantine gum. The tap formula does this on install.
the tag briefly.
Token savings
Measured with the release fixtures using the published macOS ARM binary:
gum gain --fixture-replay --format=toon
gum gain --fixture-replay --format=json| Default format | Total calls | Total tokens in | Total tokens saved | Aggregate savings |
|---|---|---|---|---|
toon |
10 | 3,922 | 0 | 0 % |
json |
10 | 3,922 | -12 | 0.31 % overhead |
Reproducibility
git checkout v1.2.0
cd apps/gum
GOTOOLCHAIN=go1.26.7 CGO_ENABLED=0 go build -trimpath -ldflags='-s -w -X main.version=1.2.0' ./cmd/gum
sha256sum gum