Skip to main content

google-search-console-cli

CLI for Google Search Console using the official Google API Python client.

Highlights

  • Native OAuth login: no mandatory gcloud setup
  • pipx-friendly install (gsc available globally)
  • Site operations: list/get/add
  • Sitemap operations: list/get/submit/delete
  • URL inspection: manual index-status checks for specific pages
  • Analytics queries by date/query/page with Search Console filters
  • Output formats: table, json, csv
  • Diagnostics: gsc doctor

Install (Recommended)

Install with pipx so gsc is available globally on your PATH.

If you do not have pipx yet:

python3 -m pip install --user pipx
python3 -m pipx ensurepath

Restart your shell, then install:

pipx install google-search-console-cli

Verify:

gsc --version

Upgrade later:

pipx upgrade google-search-console-cli

Uninstall:

pipx uninstall google-search-console-cli

Install From Source

If you cloned this repository and want to run from source, use one of these options.

Option 1: Local virtualenv (best for development)

python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"

Fish shell activation:

. .venv/bin/activate.fish

Then run:

gsc --help

Option 2: Install from source with pipx (best for day-to-day CLI usage)

pipx install -e /absolute/path/to/google-search-console-cli

OAuth Setup (Recommended)

Create a Google OAuth client of type Desktop app, then run:

gsc auth login --client-secret /absolute/path/to/client_secret.json

Verify:

gsc auth whoami
gsc doctor

Optional: Set Default Site

gsc config set default-site sc-domain:example.com
gsc config get default-site

After this, you can omit --site in commands that need a property.

Usage

Sites

gsc site list
gsc site get --site sc-domain:example.com
gsc site add --site sc-domain:example.com

Sitemaps

gsc sitemap list --site sc-domain:example.com
gsc sitemap get --site sc-domain:example.com --feedpath https://example.com/sitemap.xml
gsc sitemap submit --site sc-domain:example.com --feedpath https://example.com/sitemap.xml
gsc sitemap delete --site sc-domain:example.com --feedpath https://example.com/sitemap.xml

URL Inspection

gsc url inspect --site sc-domain:example.com --url https://example.com/page

Get full response in JSON:

gsc url inspect \
  --site sc-domain:example.com \
  --url https://example.com/page \
  --output json

Analytics

gsc analytics query \
  --site sc-domain:example.com \
  --start-date 2026-01-01 \
  --end-date 2026-01-31 \
  --dimension date \
  --dimension query \
  --filter query:contains:brand \
  --filter device:equals:MOBILE

Save as CSV:

gsc analytics query \
  --site sc-domain:example.com \
  --start-date 2026-01-01 \
  --end-date 2026-01-31 \
  --dimension page \
  --output csv \
  --csv-path ./analytics.csv

Filter Syntax

Use repeatable filters in this format:

dimension:operator:expression

Supported filter dimensions:

  • country
  • device
  • page
  • query
  • searchAppearance

Supported operators:

  • contains
  • equals
  • notContains
  • notEquals
  • includingRegex
  • excludingRegex

Convenience Script (Repo Local)

If you cloned this repo and want one command setup:

./scripts/setup.sh /absolute/path/to/client_secret.json

Credentials and Config Paths

By default:

  • Credentials: ~/.config/gsc-cli/credentials.json
  • Config: ~/.config/gsc-cli/config.json

Override with env vars:

  • GSC_CREDENTIALS_FILE
  • GSC_APP_CONFIG_FILE
  • GSC_CONFIG_DIR

ADC Fallback (Optional)

If you prefer ADC via gcloud, the CLI still supports it:

gcloud auth application-default login \
  --client-id-file=/absolute/path/to/client_secret.json \
  --scopes=https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/webmasters

Notes

  • Use Search Console property formats like sc-domain:example.com or URL-prefix properties.
  • site add requires write scope (webmasters).
  • sitemap submit and sitemap delete require write scope (webmasters).
  • url inspect uses URL Inspection API for manual status checks only (no general "request indexing" endpoint in Search Console API).
  • analytics query --aggregation-type byProperty cannot be combined with page grouping/filtering.

Publishing

Trusted Publishing via GitHub Actions (Recommended)

This repo includes .github/workflows/publish.yml that:

  • builds sdist + wheel
  • publishes to PyPI using OpenID Connect (no API token needed in GitHub secrets)

To enable it:

  1. In PyPI, open project settings for google-search-console-cli.
  2. Add a Trusted Publisher with:
    • Owner: NmadeleiDev
    • Repository: google-search-console-cli
    • Workflow name: publish.yml
    • Environment name: pypi
  3. In GitHub, keep/create environment pypi (optional protection rules as you prefer).

Release flow:

  1. Bump version in pyproject.toml.
  2. Commit and push.
  3. Create and push a tag like v0.1.1:
git tag v0.1.1
git push origin v0.1.1

The workflow will publish automatically.

Manual Publishing (Fallback)

. .venv/bin/activate.fish
python -m build
python -m twine upload dist/*

Metadata

Release files for google-search-console-cli 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for google-search-console-cli 0.1.1
File Size Uploaded Provenance Actions
google_search_console_cli-0.1.1.tar.gz 16.0 kB With provenance Details for google_search_console_cli-0.1.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for google-search-console-cli 0.1.1
File Interpreter ABI Platform Actions
google_search_console_cli-0.1.1-py3-none-any.whl Python 3 none any Details for google_search_console_cli-0.1.1-py3-none-any.whl

Total release size: 30.4 kB

Release files / google_search_console_cli-0.1.1.tar.gz

Download URL google_search_console_cli-0.1.1.tar.gz
Size 16.0 kB
Tags Source
SHA-256 checksum
How to use checksums
d291504ae4dbf869017efdfee9f4aef4c9b7ed920d5f504df72a154680e4740d
BLAKE2b-256 checksum
How to use checksums
6a061b3ff18336c9a1fdb8cb01eccc29ae07968c7d57bee693958d63b5ef74d4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Feb 18, 2026.

Transparency log

Release files / google_search_console_cli-0.1.1-py3-none-any.whl

Download URL google_search_console_cli-0.1.1-py3-none-any.whl
Size 14.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
350fc81c3045c9333a4e29f7cc85721a005d98ff4da78adae0694c97fd01ca8e
BLAKE2b-256 checksum
How to use checksums
f3520092b34495e4c575ca8550293def4c2e90097a2dcc80635e6705afd7c5de
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Feb 18, 2026.

Transparency log

Security for google-search-console-cli 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for google_search_console_cli-0.1.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Feb 18, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page