# Google Search Console Bulk URL Indexer (`dumb_me/google-search-console-indexer-prod`) Actor

Submit multiple URLs for indexing in bulk through Google's Search Console API. Supports direct URL lists and submit up to 2000 URLs at once.

- **URL**: https://apify.com/dumb\_me/google-search-console-indexer-prod.md
- **Developed by:** [Ayush Jain](https://apify.com/dumb_me) (community)
- **Categories:** SEO tools, Integrations, Automation
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

### What does Google Search Console Bulk URL Indexer do?

**Google Search Console Bulk URL Indexer** automates the process of submitting multiple URLs for indexing through [Google's Indexing API](https://developers.google.com/search/apis/indexing-api/v3/quickstart). Instead of manually requesting each URL to be indexed one at a time via the Google Search Console interface, this Actor lets you **submit up to 2,000 URLs in a single run** — saving hours of repetitive work. Run it on the [Apify platform](https://apify.com) to get API access, scheduling, monitoring, and seamless integrations with tools like Zapier, Make, and Google Sheets.

### Why use Google Search Console Bulk URL Indexer?

- **Save time**: Submit hundreds of URLs for indexing in minutes instead of hours of manual work.
- **Automate content updates**: Schedule regular runs to keep newly published or updated pages indexed quickly.
- **Detailed results**: Get per-URL success/failure status pushed to an Apify Dataset you can download or integrate into your workflow.
- **Ideal for dynamic sites**: News websites, e-commerce stores, job boards, and blogs with frequent content updates benefit the most from fast re-indexing.

### Who should use this Actor?

- **Website owners and webmasters** who need to quickly index large numbers of new or updated pages.
- **SEO professionals** looking to improve search engine visibility by efficiently notifying Google of content changes.
- **Developers** who want to automate URL indexing as part of a CI/CD or content pipeline.

### How to use Google Search Console Bulk URL Indexer

1. **Set up the Google Searhc Console Indexing API** in [Google Cloud Console](https://console.cloud.google.com/):
   - Create a new project (or use an existing one).
   - Enable the **Web Search Indexing API** for your project.
   - Create a **Service Account** and download the JSON key file.

2. **Verify site ownership** in [Google Search Console](https://search.google.com/search-console):
   - Navigate to **Settings → Users and Permissions**.
   - Add the service account email (the `client_email` field from your JSON key) as a ** Owner**.

3. **Run the Actor on Apify**:
   - Go to the Actor's Input tab on Apify Console.
   - Paste your service account JSON into the **Service Account JSON** field.
   - Enter your URLs in the **URLs to Index** field (one per line).
   - Click **Start** and wait for results.

4. **Review the results** in the Output tab or download the dataset.

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `service_account` | String | Yes | Your Google service account JSON credentials as a string. |
| `urlsTxt` | String | Yes | Plain text list of URLs to index, one per line or space-separated. |

#### Example input

```json
{
    "service_account": "{\"type\": \"service_account\", \"project_id\": \"my-project\", \"private_key_id\": \"abc123\", \"private_key\": \"-----BEGIN PRIVATE KEY-----\\n...\\n-----END PRIVATE KEY-----\\n\", \"client_email\": \"my-sa@my-project.iam.gserviceaccount.com\", \"client_id\": \"123456789\", \"auth_uri\": \"https://accounts.google.com/o/oauth2/auth\", \"token_uri\": \"https://oauth2.googleapis.com/token\"}",
    "urlsTxt": "https://example.com/page1\nhttps://example.com/page2\nhttps://example.com/page3"
}
````

### Output

Results are pushed to the default Apify Dataset. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

#### Successful response

```json
{
    "url": "https://example.com/page1",
    "submitted": true,
    "success": true,
    "failureReason": "",
    "rawResponse": "{\"urlNotificationMetadata\": {\"url\": \"https://example.com/page1\", \"latestUpdate\": {\"type\": \"URL_UPDATED\", \"notifyTime\": \"2026-04-04T12:00:00Z\"}}}"
}
```

#### Failed response

```json
{
    "url": "https://example.com/page2",
    "submitted": true,
    "success": false,
    "failureReason": "429 {\"error\": {\"code\": 429, \"message\": \"Quota exceeded for quota metric 'Publish requests'\"}}",
    "rawResponse": "{\"error\": {\"code\": 429, \"message\": \"Quota exceeded for quota metric 'Publish requests'\"}}"
}
```

### Data table

| Field | Format | Description |
|-------|--------|-------------|
| `url` | Link | The URL that was submitted for indexing. |
| `submitted` | Boolean | Whether the request was sent to Google's API. |
| `success` | Boolean | Whether Google accepted the indexing request (HTTP 200). |
| `failureReason` | Text | Error details if the request failed; empty on success. |
| `rawResponse` | Text | The full raw response body from Google's API. |

### How much does it cost to use Google Search Console Bulk URL Indexer?

The Actor itself is lightweight and uses minimal compute resources. A typical run indexing 200 URLs completes in under a minute and costs fractions of a cent in Apify platform credits.

The main limitation is Google's Indexing API quota:

- **Default quota**: 200 publish requests per day.
- **Per-batch limit**: 100 URLs per batch (handled automatically by the Actor).
- **Increased quota**: You can [request a quota increase](https://console.cloud.google.com/apis/api/indexing.googleapis.com/quotas) for "Publish requests" and "Publish requests per day" in Google Cloud Console to submit more URLs.

### Tips and advanced options

- **Schedule regular runs**: Use Apify's scheduling feature to automatically re-index your site on a regular basis (e.g., daily or weekly).
- **Monitor quota usage**: Check the [Google Cloud Console quotas page](https://console.cloud.google.com/apis/api/indexing.googleapis.com/quotas) to track your daily usage and request increases if needed.
- **Large URL sets**: For sites with more than 200 URLs, request a quota increase first. The Actor processes URLs in batches of 100 with 10 concurrent requests for optimal throughput.

### Setting up the Google Search Console Indexing API

#### Step 1: Enable the API

1. Go to the [Google Cloud Console](https://console.cloud.google.com/).
2. Create a new project or select an existing one.
3. Navigate to **APIs & Services → Library**.
4. Search for **Web Search Indexing API** and enable it.

#### Step 2: Create a service account

1. Go to **APIs & Services → Credentials**.
2. Click **Create Credentials → Service Account**.
3. Give it a name and click **Done**.
4. Click on the service account, go to the **Keys** tab, and click **Add Key → Create new key → JSON**.
5. Download the JSON file — this is your `service_account` input.

#### Step 3: Add the service account to Search Console

1. Open [Google Search Console](https://search.google.com/search-console).
2. Select your property.
3. Go to **Settings → Users and Permissions**.
4. Click **Add User**.
5. Enter the `client_email` from your JSON key file (e.g., `my-sa@my-project.iam.gserviceaccount.com`).
6. Set the permission to **Owner** and confirm.

### FAQ, disclaimers, and support

#### Is it legal to use the Google Indexing API?

Yes. The Google Indexing API is an official Google product designed for notifying Google about new or updated URLs. This Actor simply automates the API calls. You must comply with [Google's Terms of Service](https://developers.google.com/search/apis/indexing-api/v3/reference) and only submit URLs from sites you own or are authorized to manage.

#### Does submitting a URL guarantee it will be indexed?

No. The Indexing API notifies Google that a URL has been updated, but Google still decides whether and when to crawl and index the page based on its own criteria.

#### What if I get quota errors?

The default Google quota is 200 publish requests per day. If you exceed this, you'll see `429 Quota exceeded` errors. Request a quota increase through the [Google Cloud Console](https://console.cloud.google.com/apis/api/indexing.googleapis.com/quotas).

#### Known limitations

- Google's default API quota is 200 URLs per day. Request an increase for larger volumes.
- The Indexing API works best for pages with structured data (e.g., `JobPosting`, `BroadcastEvent`), though it can be used for any URL.

#### Support

If you encounter issues or have feature requests, please open an issue in the [Issues tab](https://console.apify.com/actors) on Apify Console. For custom solutions or integrations, contact the developer through Apify.

# Actor input Schema

## `service_account` (type: `object`):

Your Google service account JSON credentials. Paste the contents of your service\_account.json file here. The service account must have Indexing API enabled and be added as an owner in Google Search Console.

## `urlsTxt` (type: `string`):

Plain text list of URLs to submit for indexing. One URL per line or space-separated.

## Actor input object example

```json
{}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("dumb_me/google-search-console-indexer-prod").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("dumb_me/google-search-console-indexer-prod").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call dumb_me/google-search-console-indexer-prod --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=dumb_me/google-search-console-indexer-prod",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Google Search Console Bulk URL Indexer",
        "description": "Submit multiple URLs for indexing in bulk through Google's Search Console API. Supports direct URL lists and submit up to 2000 URLs at once.",
        "version": "1.0",
        "x-build-id": "PUtKbNF0LRWMs4bV3"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/dumb_me~google-search-console-indexer-prod/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-dumb_me-google-search-console-indexer-prod",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/dumb_me~google-search-console-indexer-prod/runs": {
            "post": {
                "operationId": "runs-sync-dumb_me-google-search-console-indexer-prod",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/dumb_me~google-search-console-indexer-prod/run-sync": {
            "post": {
                "operationId": "run-sync-dumb_me-google-search-console-indexer-prod",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "service_account",
                    "urlsTxt"
                ],
                "properties": {
                    "service_account": {
                        "title": "Service Account JSON",
                        "type": "object",
                        "description": "Your Google service account JSON credentials. Paste the contents of your service_account.json file here. The service account must have Indexing API enabled and be added as an owner in Google Search Console."
                    },
                    "urlsTxt": {
                        "title": "URLs to Index",
                        "type": "string",
                        "description": "Plain text list of URLs to submit for indexing. One URL per line or space-separated."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
