> ## Documentation Index
> Fetch the complete documentation index at: https://docs.modulex.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Google Search Console Integration for AI Agents & Workflows

> Access Google Search Console data for search analytics and URL indexing

{/* Self-hosted logo — build-time vendored from modulex.json / Iconify (see scripts/lib/logo.js). */}

<img src="https://mintcdn.com/modulexaillc/zKB2qsP6Q61VNLfB/logos/google-search-console.svg?fit=max&auto=format&n=zKB2qsP6Q61VNLfB&q=85&s=f39ba6fecec60b68fe4bf6322a7925b8" alt="Google Search Console logo" width="72" height="72" data-path="logos/google-search-console.svg" />

## Overview

Add **Google Search Console** to any ModuleX agent or workflow. Access Google Search Console search analytics and URL indexing via the Search Console API (`searchconsole.googleapis.com`) and the Indexing API (`indexing.googleapis.com`).

<Info>
  **Categories**: Marketing & Advertising · SEO · Marketing · Developer Tools & Infrastructure · **Auth**: OAuth2 · **Actions**: 2
</Info>

## Authentication

### OAuth2 Authentication

Connect using Google OAuth (recommended)

#### Required Credentials

| Field         | Description                    | Required | Format |
| ------------- | ------------------------------ | -------- | ------ |
| Client ID     | Google OAuth App Client ID     | Yes      | `-`    |
| Client Secret | Google OAuth App Client Secret | Yes      | `-`    |

#### OAuth Configuration

* **Authorization URL**: `https://accounts.google.com/o/oauth2/v2/auth`
* **Token URL**: `https://oauth2.googleapis.com/token`
* **Scopes**: `https://www.googleapis.com/auth/webmasters.readonly`, `https://www.googleapis.com/auth/indexing`

## Available Actions

<AccordionGroup>
  <Accordion title="retrieve_site_performance_data — Fetches search analytics from Google Search Console for a verified site">
    ### Parameters

    <ResponseField name="site_url" type="string" required>
      The site URL as registered in Search Console (e.g. 'sc-domain:example.com' or '[https://example.com/](https://example.com/)')
    </ResponseField>

    <ResponseField name="start_date" type="string" required>
      Start date in YYYY-MM-DD format
    </ResponseField>

    <ResponseField name="end_date" type="string" required>
      End date in YYYY-MM-DD format
    </ResponseField>

    <ResponseField name="dimensions" type="array">
      Dimensions to group results by. Allowed values: country, device, page, query, searchAppearance, date
    </ResponseField>

    <ResponseField name="search_type" type="string">
      Type of search. Allowed values: web, image, video, news, googleNews, discover (Default: `web`)
    </ResponseField>

    <ResponseField name="aggregation_type" type="string">
      Aggregation type. Allowed values: auto, byPage
    </ResponseField>

    <ResponseField name="row_limit" type="integer">
      Maximum number of rows to return (Default: `10`)
    </ResponseField>

    <ResponseField name="start_row" type="integer">
      Start row for pagination (zero-based)
    </ResponseField>

    <ResponseField name="subdomain_filter" type="string">
      Filter results to a specific subdomain when using a domain property (e.g. '[https://subdomain.example.com](https://subdomain.example.com)')
    </ResponseField>

    <ResponseField name="filter_dimension" type="string">
      Dimension to filter by when subdomain\_filter is used. Allowed values: country, device, page, query (Default: `page`)
    </ResponseField>

    <ResponseField name="filter_operator" type="string">
      Filter operator. Allowed values: contains, equals, notContains, notEquals, includingRegex, excludingRegex (Default: `contains`)
    </ResponseField>

    <ResponseField name="advanced_dimension_filters" type="object">
      Custom dimension filter groups following the Search Console API structure (JSON object)
    </ResponseField>

    <ResponseField name="data_state" type="string">
      Data state to use. Allowed values: all, final (Default: `final`)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "$defs": {
        "SearchAnalyticsRow": {
          "additionalProperties": false,
          "description": "A single row from the Search Analytics response.",
          "properties": {
            "keys": {
              "items": {
                "type": "string"
              },
              "title": "Keys",
              "type": "array"
            },
            "clicks": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Clicks"
            },
            "impressions": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Impressions"
            },
            "ctr": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Ctr"
            },
            "position": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Position"
            }
          },
          "title": "SearchAnalyticsRow",
          "type": "object"
        }
      },
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "rows": {
          "items": {
            "$ref": "#/$defs/SearchAnalyticsRow"
          },
          "title": "Rows",
          "type": "array"
        },
        "response_aggregation_type": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Response Aggregation Type"
        }
      },
      "required": [
        "success"
      ],
      "title": "RetrieveSitePerformanceDataOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="submit_url_for_indexing — Sends a URL update notification to the Google Indexing API">
    ### Parameters

    <ResponseField name="site_url" type="string" required>
      The URL to submit for indexing (must be a canonical URL verified in Google Search Console)
    </ResponseField>

    <ResponseField name="notification_type" type="string">
      Type of notification. Allowed values: URL\_UPDATED (content updated), URL\_DELETED (page removed) (Default: `URL_UPDATED`)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "$defs": {
        "UrlNotificationMetadata": {
          "additionalProperties": false,
          "description": "Metadata returned after submitting a URL for indexing.",
          "properties": {
            "url": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Url"
            },
            "latest_update": {
              "anyOf": [
                {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "type": "object"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Latest Update"
            },
            "latest_remove": {
              "anyOf": [
                {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "type": "object"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Latest Remove"
            }
          },
          "title": "UrlNotificationMetadata",
          "type": "object"
        }
      },
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "url_notification_metadata": {
          "anyOf": [
            {
              "$ref": "#/$defs/UrlNotificationMetadata"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        }
      },
      "required": [
        "success"
      ],
      "title": "SubmitUrlForIndexingOutput",
      "type": "object"
    }
    ```
  </Accordion>
</AccordionGroup>

## Limits & Quotas

* **Search Analytics API**: 1,200 queries per minute per project (default quota).
* **Indexing API**: 200 publish requests per day per site property (standard quota).
* **Error model**: non-2xx responses are caught and returned as `success=False` + `error`
  rather than raising.

## Related integrations

<CardGroup cols={3}>
  <Card title="Ahrefs" href="/integrations/tools/ahrefs" />

  <Card title="Google Ad Manager" href="/integrations/tools/google-ad-manager" />

  <Card title="Google My Business" href="/integrations/tools/google-my-business" />
</CardGroup>

## Links

* [Google Search Console](https://search.google.com/search-console)
