---
title: ToolRouter — Tool Detail
description: Detailed documentation for a ToolRouter tool including skills, parameters, and examples.
url: https://toolrouter.com/tools/submit-sitemap
---
# Submit Sitemap

Submit sitemaps and URLs to Google Search Console, IndexNow (Bing, Yandex, Naver, Seznam), and Brave Search. Parse sitemap.xml and submit in one call, request indexing for specific pages, check indexing status, or push URLs to Brave via browser automation.

- **Version:** 0.01
- **Categories:** marketing, search
- **Workflow:** submit_sitemap → submit_urls → submit_brave → submit_sitemap → check_indexing

## Skills (4)

### Submit Sitemap (`submit_sitemap`)

Fetches your /sitemap.xml, parses all URLs (handles sitemap indexes and Next.js dynamic sitemaps), and submits to Google Search Console + IndexNow (Bing, Yandex, Naver, Seznam). For Brave, use submit_brave separately.

**Parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `sitemap_url` | string | Yes | Full URL of the sitemap XML (e.g. https://example.com/sitemap.xml). The tool server CAN fetch any public URL — always pass it. |
| `google_site_url` | string | No | Google Search Console site URL (e.g. "sc-domain:example.com" or "https://example.com/"). Required for Google submission. |
| `indexnow_key` | string | No | IndexNow verification key. Generate one (e.g. openssl rand -hex 16) and host it at https://{domain}/{key}.txt. |
| `indexnow_host` | string | No | Domain for IndexNow submission. Auto-derived from sitemap URL if not provided. |
| `engines` | array | No | Which engines to submit to. Defaults to all: ["google", "indexnow"]. |

**Returns:** Per-engine submission results with success/skip/error status and URL counts

**Examples:**

*Submit sitemap to all engines:*

```json
{
  "sitemap_url": "https://example.com/sitemap.xml",
  "google_site_url": "sc-domain:example.com",
  "indexnow_key": "abc123def456"
}
```

*Submit only to IndexNow:*

```json
{
  "sitemap_url": "https://example.com/sitemap.xml",
  "indexnow_key": "abc123def456",
  "engines": [
    "indexnow"
  ]
}
```

### Submit URLs (`submit_urls`)

Submit individual URLs for indexing via Google Indexing API (URL_UPDATED notification, 200/day quota) and IndexNow (batch up to 10K URLs per request to Bing, Yandex, Naver, Seznam). Use for new or recently updated pages that need immediate indexing.

**Parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `urls` | array | Yes | Array of page URLs to submit for indexing |
| `google_site_url` | string | No | Google Search Console site URL. Required for Google Indexing API. |
| `indexnow_key` | string | No | IndexNow verification key. Must be hosted at https://{domain}/{key}.txt. |
| `indexnow_host` | string | No | Domain for IndexNow submission. Auto-derived from first URL if not provided. |
| `engines` | array | No | Which engines to submit to. Defaults to ["google", "indexnow"]. |

**Returns:** Per-URL submission results for each engine with success/error status

**Examples:**

*Submit specific URLs to all engines:*

```json
{
  "urls": [
    "https://example.com/new-page",
    "https://example.com/updated-page"
  ],
  "google_site_url": "sc-domain:example.com",
  "indexnow_key": "abc123def456"
}
```

*Submit URLs to IndexNow only:*

```json
{
  "urls": [
    "https://example.com/page1",
    "https://example.com/page2"
  ],
  "indexnow_key": "abc123def456",
  "engines": [
    "indexnow"
  ]
}
```

### Check Indexing Status (`check_indexing`)

Check URL indexing status via Google URL Inspection API (2000/day quota). Returns verdict (PASS/FAIL), coverage state, last crawl time, and crawl details for each URL.

**Parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `urls` | array | Yes | Array of URLs to check indexing status for |
| `google_site_url` | string | Yes | Google Search Console site URL (e.g. "sc-domain:example.com" or "https://example.com/") |

**Returns:** Per-URL indexing status with verdict, coverage state, last crawl time, and crawl details

**Examples:**

*Check indexing status for pages:*

```json
{
  "urls": [
    "https://example.com/page1",
    "https://example.com/page2"
  ],
  "google_site_url": "sc-domain:example.com"
}
```

### Submit to Brave Search (`submit_brave`)

Submit URLs to Brave Search via browser automation. Brave has no API — this skill opens a real browser, navigates to the Brave Search submit form, enters each URL, and clicks submit. No credentials needed. Runs on Steel Browser in production.

**Parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `urls` | array | Yes | Array of URLs to submit to Brave Search |

**Returns:** Per-URL submission results with success/error status

**Examples:**

*Submit URLs to Brave Search:*

```json
{
  "urls": [
    "https://example.com/",
    "https://example.com/about"
  ]
}
```

## Quick Start

```bash
# Via CLI
TOOLROUTER_API_KEY=tr_live_xxx npx -y toolrouter-mcp call submit-sitemap submit_sitemap --sitemap_url https://example.com/sitemap.xml --google_site_url sc-domain:example.com --indexnow_key abc123def456

# Via REST API
curl -H "Authorization: Bearer tr_live_xxx" \
     -d '{"tool":"submit-sitemap","skill":"submit_sitemap","input":{"sitemap_url":"https://example.com/sitemap.xml","google_site_url":"sc-domain:example.com","indexnow_key":"abc123def456"}}' \
     https://api.toolrouter.com/v1/tools/call
```

## Frequently Asked Questions

### What happens when I submit a sitemap?

`submit_sitemap` fetches your `/sitemap.xml`, parses the URLs, and submits them to Google Search Console and IndexNow.

### Do I need a separate call for new or updated pages?

Use `submit_urls` when you want immediate indexing for specific pages instead of the whole sitemap.

### How do I check whether Google indexed a page?

`check_indexing` uses Google URL Inspection results to show the current verdict, coverage state, and crawl timing.

### What do I need set up first?

Google requires a `google_search_console` credential. IndexNow needs an `indexnow_key` hosted at `https://domain/{key}.txt`. `submit_brave` handles Brave Search in a browser.

---

## Get Started with ToolRouter

**Already connected?** Call any tool with `use_tool({ tool, skill, input })`. Browse tools with `discover` or visit https://toolrouter.com/llms-full.txt

**New to ToolRouter?** Connect with one command (no API key needed — auto-provisions on first use):

```bash
# MCP (Claude Code, Codex CLI)
claude mcp add toolrouter -- npx -y toolrouter-mcp

# MCP (Cursor, Windsurf, Cline, VS Code, Gemini CLI, Claude Desktop)
{"mcpServers":{"toolrouter":{"command":"npx","args":["-y","toolrouter-mcp"]}}}

# Claude Chat / Claude Cowork / Claude Mobile — add as a connector:
# Settings → Connectors → Add custom connector → URL: https://api.toolrouter.com/mcp

# ChatGPT — add as an app:
# Settings → Apps → Advanced settings → enable Developer mode → Create app → MCP Server URL: https://api.toolrouter.com/mcp

# CLI (works instantly, no restart needed)
npx -y toolrouter-mcp tools                    # browse all tools
npx -y toolrouter-mcp search "seo"             # search by keyword
npx -y toolrouter-mcp call seo analyze_page --url https://example.com
```

Free tools work immediately. For paid tools, visit https://toolrouter.com/claim to add credits.

All platforms: https://toolrouter.com/connect | Full catalog: https://toolrouter.com/llms-full.txt | Docs: https://toolrouter.com/docs