Skip to content

Connect Botify to ChatGPT: Automate SEO Audits & Crawl Management

Learn how to connect Botify to ChatGPT using a managed MCP server. Automate SEO audits, crawl management, and complex BQL data queries with AI.

Riya Sethi Riya Sethi · · 9 min read
Connect Botify to ChatGPT: Automate SEO Audits & Crawl Management

If you need to connect Botify to ChatGPT to automate technical SEO audits, manage web crawls, or extract deep log file analytics, you need a Model Context Protocol (MCP) server. This server acts as the translation layer between ChatGPT's tool calls and Botify's REST APIs. If your team uses Claude instead, check out our guide on connecting Botify to Claude, or explore our architectural overview on connecting Botify to AI Agents for broader multi-agent setups.

Giving a Large Language Model (LLM) read and write access to an enterprise SEO platform like Botify is a massive engineering challenge. You have to handle deeply nested authentication architectures, map fluid data models to MCP tool definitions, and deal with highly specific rate limits. Every time an endpoint shifts or a custom field is added, you have to update your server code, redeploy, and test the integration.

This guide breaks down exactly how to use Truto to dynamically generate a secure, authenticated MCP server for Botify, connect it natively to ChatGPT, and execute complex technical SEO workflows using natural language.

The Engineering Reality of the Botify API

A custom MCP server is a self-hosted integration layer. While the open MCP standard provides a predictable way for models to discover tools, implementing it against Botify's massive enterprise architecture - or maintaining custom connectors for 100+ other platforms - is painful.

If you decide to build a custom MCP server for Botify, you own the entire API lifecycle. Here are the specific integration challenges that break standard CRUD assumptions when working with Botify:

The BQL (Botify Query Language) Complexity Botify does not just give you a flat list of URLs. To analyze crawl data, you must use Botify Query Language (BQL). BQL payloads are heavily nested JSON objects containing filters, aggs, and specific dimension declarations. Furthermore, the valid fields for a BQL query change dynamically based on the project's specific datamodel. If your MCP server doesn't first fetch the dynamic datamodel schema and perfectly translate it into JSON Schema for the LLM, ChatGPT will hallucinate invalid BQL queries and every request will fail with a 400 Bad Request.

Hierarchical State Management Almost every actionable endpoint in Botify is deeply nested. To get crawl statistics, the API requires the username, the project_slug, and the analysis_slug. LLMs are notorious for losing context in long conversations. If your custom server doesn't enforce these required parameters strictly via JSON schema validation, the LLM will drop the project_slug mid-conversation and the API calls will crash.

Asynchronous Exports and Job Polling Extracting large URL sets from Botify isn't a synchronous GET request. You must POST to create a CSV export job, store the resulting job_id, and then repeatedly poll the job status endpoint until it succeeds. Forcing an LLM to manage asynchronous polling states via MCP tool calls requires strict instruction sets - otherwise, the agent will assume the first HTTP 201 means the data is ready to download.

Rate Limits and 429 Errors Factual note on rate limits: Truto does not retry, throttle, or apply backoff on rate limit errors. When an upstream API like Botify returns an HTTP 429, Truto passes that error directly to the caller. Truto normalizes upstream rate limit info into standardized headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset) per the IETF spec. The caller - your agentic framework or ChatGPT itself - is responsible for handling retry/backoff logic. Do not build an integration expecting the middle tier to absorb these limits.

The Managed MCP Approach

Instead of forcing your engineering team to build, host, and maintain a custom Node.js or Python MCP server to handle BQL translation and nested slugs, you can use Truto.

Truto's MCP servers feature turns any connected Botify account into a fully compliant JSON-RPC 2.0 endpoint. Truto dynamically derives the tool definitions from the integration's resource schema. If Botify updates their API, Truto's definitions update automatically.

Here is how to generate your Botify MCP server and connect it to ChatGPT.

Step 1: Create the MCP Server

You can generate an MCP server for Botify using either the Truto UI or the API. Both methods output a secure, token-protected URL.

Method A: Via the Truto UI

  1. Log into your Truto dashboard and navigate to the integrated account page for your Botify connection.
  2. Click the MCP Servers tab.
  3. Click Create MCP Server.
  4. Select your configuration (e.g., allow read and write methods, set an expiration date if needed).
  5. Copy the generated MCP server URL (it will look like https://api.truto.one/mcp/abc123def456...).

Method B: Via the API You can programmatically generate MCP servers for your end-users by calling the Truto API. This validates that tools are available, stores the hashed token in Cloudflare KV for low-latency lookup, and returns the URL.

curl -X POST https://api.truto.one/integrated-account/{integrated_account_id}/mcp \
  -H "Authorization: Bearer YOUR_TRUTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Botify SEO Agent",
    "config": {
      "methods": ["read", "write", "custom"]
    }
  }'

Response:

{
  "id": "mcp_srv_9x8y7z",
  "name": "Botify SEO Agent",
  "config": { "methods": ["read", "write", "custom"] },
  "expires_at": null,
  "url": "https://api.truto.one/mcp/a1b2c3d4e5f67890"
}

Step 2: Connect the Server to ChatGPT

With the URL generated, you now connect it to your client.

Method A: Via the ChatGPT UI

  1. Open ChatGPT and navigate to Settings -> Apps -> Advanced settings.
  2. Enable Developer mode (MCP capabilities are behind this flag).
  3. Under MCP servers / Custom connectors, click to add a new server.
  4. Enter a name (e.g., "Botify SEO Ops").
  5. Paste the Truto MCP URL into the Server URL field.
  6. Save. ChatGPT will immediately perform the protocol handshake and list the discovered Botify tools.

Method B: Via Manual Config File If you are using a headless setup, Claude Desktop, or an agent framework like Cursor, you configure the connection using the standard SSE transport.

{
  "mcpServers": {
    "botify_seo": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-sse",
        "--url",
        "https://api.truto.one/mcp/a1b2c3d4e5f67890"
      ]
    }
  }
}

Hero Tools for Botify

Once connected, ChatGPT instantly inherits a powerful set of tools mapped directly from Botify's API documentation. Here are the core "hero" tools you will use to automate technical SEO.

list_all_botify_analyses

This tool retrieves all analyses (crawls) for a specific project. This is almost always the first tool ChatGPT must call to establish context, as it needs to extract the analysis_slug for downstream operations.

"Fetch all recent crawl analyses for my Botify project with the slug 'global-ecommerce' under the username 'seo-team'. I need the analysis slug for the most recently completed crawl."

list_all_botify_crawl_statistics

Retrieves global crawl statistics for an analysis. This exposes the high-level metrics required for immediate triage - total URLs crawled, depth distributions, and top-level HTTP status codes.

"Get the global crawl statistics for the analysis slug 'crawlv5-2026' in the 'global-ecommerce' project. Summarize the percentage of non-200 HTTP status codes."

list_all_botify_urls_datamodels

Because Botify data schemas are highly dynamic based on crawl settings, this tool fetches the active datamodel. The agent must use this to understand which fields are queryable before attempting to write a BQL query.

"Retrieve the URLs datamodel for the 'crawlv5-2026' analysis. Tell me the exact JSON field name used to query URLs that contain missing H1 tags."

get_single_botify_urls_agg_by_id

This is the workhorse tool. It executes BQL aggregation queries against the URLs collection. ChatGPT formulates the payload using dimensions and metrics derived from the datamodel tool, pushing massive data processing onto Botify's servers instead of pulling raw rows.

"Run an aggregation query on the 'crawlv5-2026' analysis to group all 404 URLs by their 'segment' dimension. Return the count of URLs in each segment."

list_all_botify_search_console_stats

Blends crawl data with real search performance. This tool fetches Google Search Console clicks and impressions per day for the specified analysis, allowing the LLM to cross-reference traffic drops with crawl errors.

"Fetch the Google Search Console stats for the 'crawlv5-2026' analysis. Are we seeing a correlation between impression drops and the dates the crawl ran?"

list_all_botify_sitemaps_reports

Retrieves the sitemaps report, providing global intelligence on sitemap indexes and invalid sitemap URLs found during the crawl. Critical for diagnosing indexation leaks.

"Get the sitemaps report for the 'crawlv5-2026' analysis. List all URLs found in the sitemap that returned a 404 or were blocked by robots.txt."

For the complete inventory of available Botify operations and schema requirements, view the Botify integration page.

Workflows in Action

Providing ChatGPT with isolated tools is useful, but the real power of MCP is chaining these operations into autonomous agentic workflows.

Workflow 1: SEO Audit Triage

When a new crawl finishes, SEO managers manually hunt for red flags. ChatGPT can automate this entire diagnostic run.

"Look up the latest completed analysis for project 'blog-network' under username 'seo-ops'. Get the global crawl statistics. If the percentage of 5xx errors is higher than 1%, fetch the sitemaps report to see if those 5xx errors are currently being submitted to Google."

  1. ChatGPT calls list_all_botify_analyses using the provided username and project slug to find the newest analysis_slug.
  2. ChatGPT calls list_all_botify_crawl_statistics to extract the global HTTP error distribution.
  3. Detecting >1% 5xx errors, ChatGPT conditionally calls list_all_botify_sitemaps_reports to cross-reference the errors against submitted sitemap URLs.
  4. The agent returns a synthesized Slack-ready summary warning the team of critical indexation risks.
sequenceDiagram
    participant LLM as ChatGPT
    participant MCP as Truto MCP Server
    participant Upstream as Botify API

    LLM->>MCP: list_all_botify_analyses
    MCP->>Upstream: GET /analyses/seo-ops/blog-network
    Upstream-->>MCP: Analysis List
    MCP-->>LLM: analysis_slug: "crawl-run-12"
    
    LLM->>MCP: list_all_botify_crawl_statistics
    MCP->>Upstream: GET /crawl_stats/crawl-run-12
    Upstream-->>MCP: Stats (2.4% 5xx errors)
    MCP-->>LLM: 5xx threshold breached
    
    LLM->>MCP: list_all_botify_sitemaps_reports
    MCP->>Upstream: GET /sitemaps/crawl-run-12
    Upstream-->>MCP: Sitemap Data
    MCP-->>LLM: 42 sitemap URLs returning 5xx

Workflow 2: Investigating Traffic Drops via Dynamic BQL

When traffic dips, SEOs need to isolate specific page templates or segments. ChatGPT can inspect the data model, write the BQL, and execute the aggregation.

"Traffic dropped this week. Find the latest analysis for 'ecomm-main'. First, check the search console stats. Then, check the URLs datamodel for how segment fields are named. Finally, run an aggregation grouping URLs by segment where the HTTP status code is 404, so we know which template is broken."

  1. ChatGPT calls list_all_botify_analyses to establish the analysis_slug.
  2. ChatGPT calls list_all_botify_search_console_stats to verify the traffic drop dates.
  3. Crucially, ChatGPT calls list_all_botify_urls_datamodels to discover that segments in this specific configuration are queried using the key metadata.segments.type.
  4. ChatGPT formats a valid BQL payload and calls get_single_botify_urls_agg_by_id, filtering for http_code: 404 and aggregating by metadata.segments.type.
  5. The agent returns a list proving that the 'Product Pages' segment is driving the 404 spike.
flowchart TD
    A["Get Analysis Slug<br>(list_all_botify_analyses)"] --> B["Check GSC Stats<br>(search_console_stats)"]
    B --> C["Fetch Datamodel Schema<br>(list_all_botify_urls_datamodels)"]
    C --> D["Format Valid BQL Payload<br>(Using dynamic schema keys)"]
    D --> E["Execute BQL Aggregation<br>(get_single_botify_urls_agg_by_id)"]
    E --> F["Isolate Broken Segment"]

Security and Access Control

Giving an AI agent programmatic access to enterprise SEO architecture requires strict guardrails. Truto's MCP tokens are designed to enforce least-privilege principles at the API gateway layer.

  • Method Filtering: You can restrict an MCP server to only allow read operations. If a user prompts the LLM to "pause the current analysis" (botify_analyses_pause), the MCP server will reject the write request before it ever reaches Botify.
  • Tag Filtering: Limit the server to specific operational domains. For instance, you can expose only analytics tagged tools while blocking configuration tools, ensuring the LLM cannot alter project settings.
  • Time-to-Live (TTL): Servers can be generated with an expires_at timestamp. This is ideal for CI/CD automation where an agent is spun up to audit a staging environment and its access is automatically revoked an hour later via Cloudflare KV expiration.
  • Require API Token Auth: For internal enterprise deployments, possessing the MCP URL isn't enough. By setting require_api_token_auth: true, the client must also pass a valid Truto API token in the Authorization header, mapping the AI's actions to an authenticated corporate identity.

Architecting for Scale

Building an AI-driven SEO practice requires predictable infrastructure. Custom scripts that attempt to translate conversational requests into valid Botify Query Language will inherently fail at edge cases. By deploying a dynamic, schema-aware integration layer, your AI agents gain a deterministic interface into your SEO operations.

Using a managed MCP server removes the overhead of manual token rotation, webhook management, and endpoint translation. It guarantees that when Botify updates its datamodels, your ChatGPT workflows remain operational without engineering intervention.

FAQ

How do I handle Botify's rate limits when using ChatGPT?
Truto does not retry, throttle, or apply backoff on rate limit errors. If Botify returns an HTTP 429 error, Truto passes it to ChatGPT, normalizing the headers to IETF specs (ratelimit-limit, ratelimit-remaining, ratelimit-reset). Your AI framework is responsible for implementing retry logic.
Does ChatGPT understand Botify's BQL querying language?
Yes, but only if you provide the exact datamodel schemas. Truto's MCP server dynamically generates JSON schemas for Botify's endpoints, so ChatGPT knows exactly how to format BQL aggregation requests.
Can I restrict ChatGPT to read-only access in Botify?
Yes. When generating the Truto MCP server URL, you can pass a configuration object that restricts tools to read-only methods, preventing the LLM from triggering or modifying crawls.

More from our Blog