Skip to main content

Google Ads Control CLI and Prompt

Project description

Google Ads API CLI and Prompt

Features:

  • A command line tool for executing GAQL queries against the Google Ads API. Like psql for the Google Ads API.
  • A command line tool for managing Google Ads resources. Like kubectl for the Google Ads API.
  • Centralized configuration with (soon) multiple config file management
  • Automatically update refresh token
  • Simple Python API with Pandas integration

Google Ads Interface for humans.

Installation

pip install adsctl

Getting started

Requirements:

  • All the requirements to use the Google Ads API including Ads Developer Token and OAuth2 credentials
  • See Google Ads API Quickstart for more details.

This project manages it's own configuration files. To create the configuration file run:

adsctl config

# Open the location of the config files
adsctl config explore

Open the generated config file and fill it with your credentials: Dev Token, Client ID, Client Secret and Customer ID. Don't add the refresh_token.

To login and get a refresh token:

adsctl auth <path-to-secret.json>

The token is saved automatically in the configuration file.

GAQL Prompt

An interactive shell for executing GAQL queries against the Google Ads API.

$ gaql

>>> SELECT campaign.id, campaign.name FROM campaign ORDER BY campaign.id
+----+-----------------------------+---------+-------------+
|    | resourceName                | name    |          id |
|----+-----------------------------+---------+-------------|
|  0 | customers/XXX/campaigns/YYY | name1   | 10000000000 |
|  1 | customers/XXX/campaigns/YYY | name2   | 10000000000 |
|  2 | customers/XXX/campaigns/YYY | name3   | 10000000000 |
+----+-----------------------------+---------+-------------+

By default adsctl prints it in "table" format but you can control the output format with the -o flag:

# Print the plain protobuf response
$ gaql -o plain

# Print a CSV response
$ gaql -o csv

You can also run a single commands and save the output to a file in the specified format:

$ gaql -c 'SELECT campaign.id, campaign.name FROM campaign ORDER BY campaign.id' -o csv > my-query.csv

This assumes only table is returned but in more complex queries that include other resources or when using metrics or segments multiple tables are created. On those cases use the -o csv-files flag to save each table to a different file based on the table name.

$ gaql -c 'SELECT campaign.id, campaign.name FROM campaign ORDER BY campaign.id' -o csv-files

$ ls
campaign.csv

CLI

Campaign Management

Status management

adsctl campaign -i <campaign-id> status enabled
adsctl campaign -i <campaign-id> status paused

Update budget

adsctl campaign -i <campaign-id> budget <amount>

Config

adsctl config show

Programmatic API

You can also use the Python API to easily execute GAQL queries and get the results as a Python dict or pandas DataFrame.

import adsctl as ads

# Read config file and create client
google_ads = ads.GoogleAds()

# Execute GAQL query
get_campaigns_query = """
SELECT campaign.name,
  campaign_budget.amount_micros,
  campaign.status,
  campaign.optimization_score,
  campaign.advertising_channel_type,
  metrics.clicks,
  metrics.impressions,
  metrics.ctr,
  metrics.average_cpc,
  metrics.cost_micros,
  campaign.bidding_strategy_type
FROM campaign
WHERE segments.date DURING LAST_7_DAYS
  AND campaign.status != 'REMOVED'
"""

tables = adsctl.query(get_campaigns_query)

# Print Pandas DataFrames
for table_name, table in tables.items():
    print(table_name)
    print(table, "\n")
campaign
                                 resourceName   status  ...                      name optimizationScore
0  customers/XXXXXXXXXX/campaigns/YYYYYYYYYYY  ENABLED  ...               my-campaign          0.839904
[1 rows x 6 columns]

metrics
  clicks costMicros       ctr    averageCpc impressions
0    210    6730050  0.011457  32047.857143       18330

campaignBudget
                                       resourceName amountMicros
0  customers/XXXXXXXXXX/campaignBudgets/ZZZZZZZZZZZ      1000000

Or just directly make a search_stream request:

stream = app.search_stream(query)

for batch in stream:
    for row in batch.results:
        ...

Disclaimer

This is not an official Google product.

This repository is maintained by a Googler but is not a supported Google product. Code and issues here are answered by maintainers and other community members on GitHub on a best-effort basis.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

adsctl-0.2.0.tar.gz (23.6 kB view details)

Uploaded Source

Built Distribution

adsctl-0.2.0-py3-none-any.whl (22.2 kB view details)

Uploaded Python 3

File details

Details for the file adsctl-0.2.0.tar.gz.

File metadata

  • Download URL: adsctl-0.2.0.tar.gz
  • Upload date:
  • Size: 23.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-httpx/0.23.3

File hashes

Hashes for adsctl-0.2.0.tar.gz
Algorithm Hash digest
SHA256 20164a6ea6f0b57223d318b30c632d983f7bff3a727b63e62e8676449bfcc36f
MD5 dc88eb00c04088ad410f400062d64257
BLAKE2b-256 8373d8fdb0e95fe9b0e4ab2b84581a34b418386368f4cfbb664fc9b7f5f0b107

See more details on using hashes here.

Provenance

File details

Details for the file adsctl-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: adsctl-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 22.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-httpx/0.23.3

File hashes

Hashes for adsctl-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a31b74a98fc47b5beb13e53f2cf1e6d73ceef41159c3e49a392b2d66aeea8342
MD5 b421e13a4dca237f91a03ee18f5019da
BLAKE2b-256 512ee263e74bf061cd55ee1736d9c9f8d9e56427314f94d12f75c0721f836fc3

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page