> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to Semrush

The Semrush connector lets your AI agent act in each user's Semrush account. Each user connects their own Semrush API key once, and Scalekit sends it with every call, so your agent never handles credentials. It comes with 54 tools.

**Authentication:** API Key
**Categories:** Marketing, Analytics
**Tools:** 54: 35 read, 14 write, 5 destructive
**Users sign in with:** API key
**Built by:** Scalekit connector
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=SEMRUSH)

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the Semrush connection

   In **AgentKit > Connections**, create a Semrush connection. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

4. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   import { ScalekitClient } from '@scalekit-sdk/node'
   import 'dotenv/config'
   import { createInterface } from 'node:readline/promises'

   const scalekit = new ScalekitClient(
     process.env.SCALEKIT_ENVIRONMENT_URL,
     process.env.SCALEKIT_CLIENT_ID,
     process.env.SCALEKIT_CLIENT_SECRET,
   )
   const actions = scalekit.actions

   const connector = 'semrush'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize Semrush:', link)
   const rl = createInterface({ input: process.stdin, output: process.stdout })
   await rl.question('Press Enter after authorizing...')
   rl.close()

   // Make your first call
   const result = await actions.executeTool({
     connector,
     identifier,
     toolName: 'semrush_get_map_rank_limits',
     toolInput: {},
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "semrush"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize Semrush:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="semrush_get_map_rank_limits",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user opens the link once and enters their Semrush credentials there. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'semrush_compare_backlink_profiles',
  toolInput: {
    scope: 'ROOT_DOMAIN',
    urls: '<urls>',
  },
  connector: 'semrush',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="semrush_compare_backlink_profiles",
    tool_input={
        "scope": "ROOT_DOMAIN",
        "urls": "<urls>",
    },
    connection_name="semrush",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `semrush_compare_backlink_profiles`

Compare Backlink Profiles · Read-only

Compare backlink profiles of up to 10 targets side by side. Returns one row per target with authority score, backlinks, referring domains and follow links. Use it for a quick benchmark of known sites; use get_backlink_gap to find domains linking to some targets but not others. Costs 40 API units per returned row.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `scope` (`string`, required): Which part of the target to analyze: ROOT_DOMAIN, SUBDOMAIN, PAGE. ROOT_DOMAIN covers the whole domain and its subdomains; PAGE covers one exact URL. One of: `ROOT_DOMAIN`, `SUBDOMAIN`, `PAGE`.
- `urls` (`string`, required): Comma-separated list of up to 10 targets (domains, subdomains or pages) to compare, all analyzed with the same scope. Example: samplesite.com,othersite.com.
- `fields` (`string`, optional): Comma-separated names of the response fields to return; leave empty to return all fields. Example: score,backlinks_count,domains_count.

Example input: `{"scope":"ROOT_DOMAIN","urls":"<urls>"}`

### `semrush_get_authority_score_distribution`

Get Authority Score Distribution · Read-only

Get the distribution of a target's referring domains by authority score (0 to 100). Returns up to 101 rows of domain_score and domains_count, omitting scores with no domains. Use it to judge link quality; use list_referring_domains for the domains behind each score. Costs 1 API unit per returned row.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `scope` (`string`, required): Which part of the target to analyze: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE. ROOT_DOMAIN covers the whole domain and its subdomains; PAGE covers one exact URL. One of: `ROOT_DOMAIN`, `SUBDOMAIN`, `SUBFOLDER`, `PAGE`.
- `url` (`string`, required): Domain, subdomain, subfolder or full page URL to analyze, with or without protocol (max 2000 characters). It must match the chosen scope. Example: example.com.

Example input: `{"scope":"ROOT_DOMAIN","url":"<url>"}`

### `semrush_get_backlink_gap`

Get Backlink Gap · Read-only

Compare up to 6 targets by shared referring domains. Returns one row per referring domain with its backlink counts to each target in request order, matches_count, domain score, country and IP address. Use it to find link opportunities that competitors have and you lack; use compare_backlink_profiles for totals only. Costs 40 API units per returned row.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `scope` (`string`, required): Which part of the target to analyze: ROOT_DOMAIN, SUBDOMAIN, PAGE. ROOT_DOMAIN covers the whole domain and its subdomains; PAGE covers one exact URL. One of: `ROOT_DOMAIN`, `SUBDOMAIN`, `PAGE`.
- `urls` (`string`, required): Comma-separated list of up to 6 targets to compare, all analyzed with the same scope. Order matters: the backlinks_counts array in each row follows this order. Example: samplesite.com,othersite.com.
- `direction` (`string`, optional): Sort direction, ASC or DESC. The API default is DESC. One of: `ASC`, `DESC`.
- `filter` (`string`, optional): Advanced filter over the returned fields. Combine conditions with AND and OR, group with parentheses, and use LIKE or NOT LIKE with % as a wildcard. Strings take single or double quotes. Example: backlinks_counts[1] > 10 AND country = 'US'.
- `limit` (`integer`, optional): Maximum number of rows to return. The API default is 100. Each returned row is billed in API units, so keep it small when exploring.
- `offset` (`integer`, optional): Number of rows to skip, for paging through a long result. Combine with limit.
- `order_by` (`string`, optional): Response field to sort by, such as domain_score or backlinks_counts. Example: domain_score.

Example input: `{"scope":"ROOT_DOMAIN","urls":"<urls>"}`

### `semrush_get_backlinks_history`

Get Backlinks History · Read-only

Get monthly historical trends of authority score, backlinks, referring domains and follow links for a target. Returns one row per month with month_date, score, backlinks_count, domains_count and follows_count. Use it to chart growth over time; use get_backlinks_overview for the current snapshot. Costs 40 API units per returned row.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `scope` (`string`, required): Which part of the target to analyze: ROOT_DOMAIN, SUBDOMAIN, PAGE. ROOT_DOMAIN covers the whole domain and its subdomains; PAGE covers one exact URL. One of: `ROOT_DOMAIN`, `SUBDOMAIN`, `PAGE`.
- `url` (`string`, required): Domain, subdomain, subfolder or full page URL to analyze, with or without protocol (max 2000 characters). It must match the chosen scope. Example: example.com.
- `date_from` (`string`, optional): First month to include, formatted YYYY-MM. Defaults to the oldest available month. Example: 2024-01.
- `date_to` (`string`, optional): Last month to include, formatted YYYY-MM. Defaults to the current month. Example: 2024-12.
- `fields` (`string`, optional): Comma-separated names of the response fields to return; leave empty to return all fields. Example: score,backlinks_count,domains_count.
- `limit` (`integer`, optional): Maximum number of monthly rows to return. The API default is 12; it cannot exceed the history available for the target.

Example input: `{"scope":"ROOT_DOMAIN","url":"<url>"}`

### `semrush_get_backlinks_overview`

Get Backlinks Overview · Read-only

Get aggregated backlink metrics for a domain, subdomain, subfolder or page. Returns counts of backlinks, referring domains, IPs, follow, nofollow, sponsored, UGC, text, image, new and lost links, plus the authority score. Use it for a quick profile of one target; use list_backlinks for individual links or get_backlinks_history for monthly trends. Costs 45 API units per request.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `scope` (`string`, required): Which part of the target to analyze: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE. ROOT_DOMAIN covers the whole domain and its subdomains; PAGE covers one exact URL. One of: `ROOT_DOMAIN`, `SUBDOMAIN`, `SUBFOLDER`, `PAGE`.
- `url` (`string`, required): Domain, subdomain, subfolder or full page URL to analyze, with or without protocol (max 2000 characters). It must match the chosen scope. Example: example.com.
- `fields` (`string`, optional): Comma-separated names of the response fields to return; leave empty to return all fields. Example: backlinks_count,domains_count,score.

Example input: `{"scope":"ROOT_DOMAIN","url":"<url>"}`

### `semrush_get_gbp_metrics`

Get GBP Metrics · Read-only

Get Google Business Profile performance metrics (views, searches, website clicks, direction requests, call clicks) for 1 to 5 locations over a date range, aggregated daily, weekly or monthly and as period totals, plus the average GBP review rating. Locations must be connected to GBP. Pass at least one of aggregated_metrics or total_metrics.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `date_from` (`string`, required): Start date, YYYY-MM-DD, within the last 24 months. Example: 2024-01-01.
- `date_to` (`string`, required): End date, YYYY-MM-DD, within the last 24 months. Example: 2024-12-01.
- `location_ids` (`string`, required): Comma-separated IDs of 1 to 5 locations, from list_locations. Example: 1d21ceab55d740709311ec9b8a12c01e,2c32dfbc66e851820422fd9c9b23d12f.
- `aggregated_metrics` (`string`, optional): Comma-separated metrics to return per period: ALL_ACTION, MAPS_VIEWS, SEARCH_VIEWS, TOTAL_VIEWS, BUSINESS_IMPRESSIONS_MOBILE_SEARCH, BUSINESS_IMPRESSIONS_DESKTOP_SEARCH, BUSINESS_IMPRESSIONS_MOBILE_MAPS, BUSINESS_IMPRESSIONS_DESKTOP_MAPS, WEBSITE_CLICKS, BUSINESS_DIRECTION_REQUESTS, CALL_CLICKS. Example: MAPS_VIEWS,WEBSITE_CLICKS.
- `aggregation_mode` (`string`, optional): Period for aggregated_metrics: DAILY, WEEKLY or MONTHLY. The API default is DAILY. One of: `DAILY`, `WEEKLY`, `MONTHLY`.
- `total_metrics` (`string`, optional): Comma-separated metrics to return as totals for the whole range: TOTAL_VIEWS, TOTAL_MAPS_VIEWS, TOTAL_SEARCH_VIEWS, TOTAL_MOBILE_SEARCH_VIEWS, TOTAL_DESKTOP_SEARCH_VIEWS, TOTAL_MOBILE_MAPS_VIEWS, TOTAL_DESKTOP_MAPS_VIEWS, TOTAL_ACTION, TOTAL_WEBSITE_CLICKS_ACTION, TOTAL_BUSINESS_DIRECTION_REQUESTS_ACTION, TOTAL_CALL_CLICKS_ACTION. Example: TOTAL_VIEWS,TOTAL_WEBSITE_CLICKS_ACTION.

Example input: `{"date_from":"<date_from>","date_to":"<date_to>","location_ids":"<location_ids>"}`

### `semrush_get_keyword_metrics`

Get Keyword Metrics · Read-only

Get search metrics for one keyword in one country: monthly search volume, keyword difficulty, CPC in USD cents, competitive density, search intents, SERP features, number of results and a 12-month interest trend. Use it to size and compare keywords one at a time. Costs 20 API units per request.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `country` (`string`, required): Two-letter ISO 3166-1 country code of the Google database to use (the United Kingdom is UK, not GB). Example: US. One of: `AF`, `AL`, `DZ`, `AO`, `AR`, `AM`, `AU`, `AT`, `AZ`, `BS`, `BH`, `BD`, `BY`, `BE`, `BZ`, `BO`, `BA`, `BW`, `BR`, `BN`, `BG`, `KH`, `CM`, `CA`, `CV`, `CL`, `CO`, `CR`, `HR`, `CY`, `CZ`, `CD`, `DK`, `DO`, `EC`, `EG`, `SV`, `EE`, `ET`, `FI`, `FR`, `GE`, `DE`, `GH`, `GR`, `GT`, `GY`, `HT`, `HN`, `HK`, `HU`, `IS`, `IN`, `ID`, `IE`, `IL`, `IT`, `JM`, `JP`, `JO`, `KZ`, `KW`, `LV`, `LB`, `LY`, `LT`, `LU`, `MG`, `MY`, `MT`, `MU`, `MX`, `MD`, `MN`, `ME`, `MA`, `MZ`, `NA`, `NP`, `NL`, `NZ`, `NI`, `NG`, `NO`, `OM`, `PK`, `PA`, `PY`, `PE`, `PH`, `PL`, `PT`, `QA`, `RO`, `RU`, `SA`, `SN`, `RS`, `SG`, `SK`, `SI`, `ZA`, `KR`, `ES`, `LK`, `SE`, `CH`, `TW`, `TH`, `TT`, `TN`, `TR`, `UA`, `AE`, `UK`, `US`, `UY`, `VE`, `VN`, `ZM`, `ZW`.
- `keyword` (`string`, required): The keyword or phrase to analyze, 1 to 255 characters. Example: seo tools.
- `month` (`string`, optional): Monthly snapshot to return, formatted YYYY-MM, from 2012-01 up to the current month. The API default is the current month. Example: 2024-01.

Example input: `{"country":"AF","keyword":"<keyword>"}`

### `semrush_get_location`

Get Location · Read-only

Get one business location with its address, contact details, hours, categories, status (COMPLETED, PROCESSING or FAILED), frozen flag and any errors. Use it to confirm a create or update finished; use list_locations to find IDs.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `location_id` (`string`, required): 32-character hex ID of the Local location. Find it with list_locations. Example: 1d21ceab55d740709311ec9b8a12c01e.

Example input: `{"location_id":"<location_id>"}`

### `semrush_get_location_more_hour_types`

Get Location More Hour Types · Read-only

Get the extra hour types (such as DELIVERY, TAKEOUT, HAPPY_HOUR, SENIOR_HOURS) a location can set. Use the values as type in more_hours when updating the location. Applies only to locations connected to Google Business Profile.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `location_id` (`string`, required): 32-character hex ID of the Local location. Find it with list_locations. Example: 1d21ceab55d740709311ec9b8a12c01e.

Example input: `{"location_id":"<location_id>"}`

### `semrush_get_location_payment_options`

Get Location Payment Options · Read-only

Get the payment option identifiers available for a location, such as CASH, CREDIT_CARD, DEBIT_CARD and NFC_MOBILE_PAYMENTS. Use the values in payment_options when updating the location.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `location_id` (`string`, required): 32-character hex ID of the Local location. Find it with list_locations. Example: 1d21ceab55d740709311ec9b8a12c01e.

Example input: `{"location_id":"<location_id>"}`

### `semrush_get_map_rank_campaign`

Get Map Rank Campaign · Read-only

Get one Map Rank Tracker campaign: keywords, grid settings and points, collection schedule, report dates, business (cid and place IDs) and status. Use it to find the keyword IDs, cid and report dates needed by the heatmap, metrics and competitors tools.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `campaign_id` (`string`, required): ID of the Map Rank Tracker campaign, from list_map_rank_campaigns. Example: 382738af-b6ae-4002-b6f6-c4c907b2b024.

Example input: `{"campaign_id":"<campaign_id>"}`

### `semrush_get_map_rank_competitors`

Get Map Rank Competitors · Read-only

Get the campaign business and its top local competitors for one keyword and report date, with address, rating, review count, average position and share of voice, paged. An unknown report date returns no competitors. Does not use API units.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `campaign_id` (`string`, required): ID of the Map Rank Tracker campaign, from list_map_rank_campaigns. Example: 382738af-b6ae-4002-b6f6-c4c907b2b024.
- `keywordId` (`string`, required): ID of a campaign keyword, from list_map_rank_keywords. Example: 319565ed-b433-4195-82cb-4146253d3311.
- `reportDate` (`string`, required): Report timestamp in ISO 8601, exactly as listed in the campaign's reportDates. Example: 2024-07-05T12:39:22.611Z. An incorrect date returns an empty competitor list.
- `page` (`integer`, optional): Zero-based page index. The API default is 0.
- `size` (`integer`, optional): Number of items per page. The API default is 10.
- `sort` (`string`, optional): Sort as field,direction. Fields: averagePosition, name, rating, reviewNumber, shareOfVoice; directions ASC or DESC. The API default is averagePosition,ASC.

Example input: `{"campaign_id":"<campaign_id>","keywordId":"<keywordId>","reportDate":"<reportDate>"}`

### `semrush_get_map_rank_heatmap`

Get Map Rank Heatmap · Read-only

Get the heatmap for one campaign keyword on one report date: each grid point's coordinates, the business's rank there and the change from the previous report. Use get_map_rank_metrics for the trend over time. Does not use API units.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `campaign_id` (`string`, required): ID of the Map Rank Tracker campaign, from list_map_rank_campaigns. Example: 382738af-b6ae-4002-b6f6-c4c907b2b024.
- `keywordId` (`string`, required): ID of a campaign keyword, from list_map_rank_keywords. Example: 319565ed-b433-4195-82cb-4146253d3311.
- `reportDate` (`string`, required): Report timestamp in ISO 8601, exactly as listed in the campaign's reportDates. Example: 2024-07-05T12:39:22.611Z.
- `cid` (`string`, optional): Business ID (cid) from get_map_rank_campaign. Provide this or placeIds.
- `placeIds` (`string`, optional): Google place ID of the business from get_map_rank_campaign. Provide this or cid. Example: ChIJD61nCjmD4BQRhaNSCAIuSm4.

Example input: `{"campaign_id":"<campaign_id>","keywordId":"<keywordId>","reportDate":"<reportDate>"}`

### `semrush_get_map_rank_limits`

Get Map Rank Limits · Read-only

Get the account's Map Rank Tracker campaign slots and monthly credits: total, in use or spent, and available. Check it before create_map_rank_campaign or collect_map_rank_campaign. Does not use API units.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `semrush_get_map_rank_metrics`

Get Map Rank Metrics · Read-only

Get average position and share of voice over time for one campaign keyword, keyed by report timestamp. Use get_map_rank_heatmap for one report's per-point ranks. An unknown keywordId returns the defaults (average position 21, share of voice 0). Does not use API units.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `campaign_id` (`string`, required): ID of the Map Rank Tracker campaign, from list_map_rank_campaigns. Example: 382738af-b6ae-4002-b6f6-c4c907b2b024.
- `keywordId` (`string`, required): ID of a campaign keyword, from list_map_rank_keywords. Example: 319565ed-b433-4195-82cb-4146253d3311.
- `cid` (`string`, optional): Business ID (cid) from get_map_rank_campaign. Provide this or placeIds.
- `placeIds` (`string`, optional): Google place ID of the business from get_map_rank_campaign. Provide this or cid. Example: ChIJD61nCjmD4BQRhaNSCAIuSm4.

Example input: `{"campaign_id":"<campaign_id>","keywordId":"<keywordId>"}`

### `semrush_get_project`

Get Project · Read-only

Get the full details of one Semrush project: name, domain, owner, your permissions and attached tools. Use list_projects first if you do not know the project ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Numeric ID of the project (folder). Find it with list_projects or in the project URL on semrush.com/projects/<id>. Example: 643526670283248.

Example input: `{"project_id":643526670283248}`

### `semrush_get_review_auto_reply_config`

Get Review Auto-Reply Config · Read-only

Get the automatic review-reply settings of a location: whether positive and negative reviews get replies, the language strategy, reply tone and preferred language. Use update_review_auto_reply_config to change them.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `location_id` (`string`, required): 32-character hex ID of the Local location. Find it with list_locations. Example: 1d21ceab55d740709311ec9b8a12c01e.

Example input: `{"location_id":"<location_id>"}`

### `semrush_get_review_overview`

Get Review Overview · Read-only

Get review statistics for a location: total count, average rating, star distribution, unanswered count and auto-replied count. Use list_reviews for the reviews themselves.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `location_id` (`string`, required): 32-character hex ID of the Local location. Find it with list_locations. Example: 1d21ceab55d740709311ec9b8a12c01e.

Example input: `{"location_id":"<location_id>"}`

### `semrush_list_anchors`

List Anchors · Read-only

List the anchor texts used in backlinks to a target, with backlinks count, referring domain count and first and last seen dates per anchor. Use it to review anchor text distribution; use list_backlinks to see the individual links behind an anchor. Costs 40 API units per returned row.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `scope` (`string`, required): Which part of the target to analyze: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE. ROOT_DOMAIN covers the whole domain and its subdomains; PAGE covers one exact URL. One of: `ROOT_DOMAIN`, `SUBDOMAIN`, `SUBFOLDER`, `PAGE`.
- `url` (`string`, required): Domain, subdomain, subfolder or full page URL to analyze, with or without protocol (max 2000 characters). It must match the chosen scope. Example: example.com.
- `direction` (`string`, optional): Sort direction, ASC or DESC. The API default is DESC. One of: `ASC`, `DESC`.
- `fields` (`string`, optional): Comma-separated names of the response fields to return; leave empty to return all fields. Example: anchor,backlinks_count,domains_count.
- `filter` (`string`, optional): Advanced filter over the returned fields. Combine conditions with AND and OR, group with parentheses, and use LIKE or NOT LIKE with % as a wildcard. Strings take single or double quotes. Example: anchor LIKE '%sample%'.
- `limit` (`integer`, optional): Maximum number of rows to return. The API default is 100. Each returned row is billed in API units, so keep it small when exploring.
- `offset` (`integer`, optional): Number of rows to skip, for paging through a long result. Combine with limit.
- `order_by` (`string`, optional): Response field to sort by; it must be one of the returned fields. The API default is domains_count. Example: backlinks_count.

Example input: `{"scope":"ROOT_DOMAIN","url":"<url>"}`

### `semrush_list_backlink_competitors`

List Backlink Competitors · Read-only

List competitor domains for a target, ranked by overlap in referring domains. Returns each competitor domain, the number of referring domains it shares with the target, and a similarity score from 0 to 1. A pair is listed only if they share at least 5 referring domains. Use it to find link-building rivals; use compare_backlink_profiles to compare known domains. Costs 40 API units per returned row.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `domain` (`string`, required): Target domain to find backlink competitors for, without protocol. Example: example.com.
- `direction` (`string`, optional): Sort direction, ASC or DESC. The API default is DESC. One of: `ASC`, `DESC`.
- `fields` (`string`, optional): Comma-separated names of the response fields to return; leave empty to return all fields. Example: domain,common_refdomains,similarity.
- `limit` (`integer`, optional): Maximum number of rows to return. The API default is 100. Each returned row is billed in API units, so keep it small when exploring.
- `offset` (`integer`, optional): Number of rows to skip, for paging through a long result. Combine with limit.
- `order_by` (`string`, optional): Response field to sort by; it must be one of the returned fields. The API default is similarity. Example: common_refdomains.

Example input: `{"domain":"<domain>"}`

### `semrush_list_backlinks`

List Backlinks · Read-only

List individual backlinks pointing to a target, with source URL, anchor text, target URL, page and domain scores, link attributes (nofollow, sponsored, UGC, image, new, lost) and first and last seen dates. Use it to inspect specific links; use list_referring_domains for one row per linking domain or list_anchors to group by anchor text. Costs 45 API units per returned row.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `scope` (`string`, required): Which part of the target to analyze: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE. ROOT_DOMAIN covers the whole domain and its subdomains; PAGE covers one exact URL. One of: `ROOT_DOMAIN`, `SUBDOMAIN`, `SUBFOLDER`, `PAGE`.
- `url` (`string`, required): Domain, subdomain, subfolder or full page URL to analyze, with or without protocol (max 2000 characters). It must match the chosen scope. Example: example.com.
- `direction` (`string`, optional): Sort direction, ASC or DESC. The API default is DESC. One of: `ASC`, `DESC`.
- `fields` (`string`, optional): Comma-separated names of the response fields to return; leave empty to return all fields. Example: anchor,source_url,page_score.
- `filter` (`string`, optional): Advanced filter over the returned fields. Combine conditions with AND and OR, group with parentheses, and use LIKE or NOT LIKE with % as a wildcard. Strings take single or double quotes. Example: is_nofollow = true.
- `limit` (`integer`, optional): Maximum number of rows to return. The API default is 100. Each returned row is billed in API units, so keep it small when exploring.
- `offset` (`integer`, optional): Number of rows to skip, for paging through a long result. Combine with limit.
- `order_by` (`string`, optional): Response field to sort by; it must be one of the returned fields. The API default is page_score. Example: page_score.

Example input: `{"scope":"ROOT_DOMAIN","url":"<url>"}`

### `semrush_list_gbp_attributes`

List GBP Attributes · Read-only

List the Google Business Profile attributes available for one category, each with its allowed option IDs and labels. Use the chosen values in gbp_attributes when updating a location. Get the category ID from list_gbp_categories.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `country` (`string`, required): Two-letter ISO 3166-1 country code where the business is located. Example: US. One of: `US`, `AU`, `FR`, `DE`, `GB`, `CA`, `IN`, `ES`, `IT`, `NL`, `BR`, `AT`, `BE`, `DK`, `FI`, `NO`, `PL`, `SE`, `CH`, `JP`, `MX`, `IL`, `NZ`, `SG`, `ZA`, `TR`, `AE`, `HK`, `ID`, `VN`, `PK`, `CO`, `IE`, `BD`, `MY`, `SA`, `RO`, `CL`, `PH`, `PT`, `NG`, `GR`, `TH`, `AR`, `PE`, `KE`, `HU`, `CZ`, `RS`, `NP`, `LT`, `UA`, `BG`, `EC`, `CY`, `HR`, `EE`, `LV`, `IS`, `SK`, `SI`, `AM`, `AD`, `PY`, `GY`, `EG`, `MV`, `UY`, `SR`, `KH`, `BO`, `LA`, `MT`, `PA`, `PR`, `TN`, `DO`, `MN`, `GU`, `VE`, `ME`, `MP`, `AC`, `AG`, `AI`, `AL`, `AO`, `AS`, `AW`, `AX`, `AZ`, `BA`, `BB`, `BF`, `BH`, `BI`, `BJ`, `BL`, `BM`, `BN`, `BQ`, `BS`, `BT`, `BW`, `BY`, `BZ`, `CC`, `CD`, `CF`, `CG`, `CI`, `CK`, `CM`, `CR`, `CV`, `CW`, `CX`, `DJ`, `DM`, `DZ`, `EH`, `ER`, `ET`, `FJ`, `FK`, `FM`, `FO`, `GA`, `GD`, `GE`, `GF`, `GG`, `GH`, `GI`, `GL`, `GM`, `GN`, `GP`, `GQ`, `GT`, `GW`, `HN`, `HT`, `IM`, `IO`, `IQ`, `JE`, `JM`, `JO`, `KG`, `KI`, `KM`, `KN`, `KR`, `KW`, `KY`, `KZ`, `LB`, `LC`, `LI`, `LK`, `LR`, `LS`, `LU`, `LY`, `MA`, `MC`, `MD`, `MF`, `MG`, `MH`, `MK`, `ML`, `MM`, `MO`, `MQ`, `MR`, `MS`, `MU`, `MW`, `MZ`, `NA`, `NC`, `NE`, `NF`, `NI`, `NR`, `NU`, `OM`, `PF`, `PG`, `PM`, `PS`, `PW`, `QA`, `RE`, `RU`, `RW`, `SB`, `SC`, `SH`, `SJ`, `SL`, `SM`, `SN`, `SO`, `SS`, `ST`, `SV`, `SX`, `SZ`, `TC`, `TD`, `TG`, `TJ`, `TK`, `TL`, `TM`, `TO`, `TT`, `TV`, `TW`, `TZ`, `UG`, `UZ`, `VA`, `VC`, `VG`, `VI`, `VU`, `WF`, `WS`, `XK`, `YE`, `YT`, `ZM`, `ZW`.
- `gbp_category_id` (`string`, required): ID of the GBP category, from list_gbp_categories. Example: 0b72e1aef15b4b2ba01c8e40b4c49b86.

Example input: `{"country":"US","gbp_category_id":"<gbp_category_id>"}`

### `semrush_list_gbp_categories`

List GBP Categories · Read-only

List Google Business Profile categories available in a country, with ID, name, full path and parent ID. Use the IDs in gbp_category_ids when updating a location, and list_gbp_attributes for the attributes of one category. For Local directory categories use list_location_categories.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `country` (`string`, required): Two-letter ISO 3166-1 country code where the business is located. Example: US. One of: `US`, `AU`, `FR`, `DE`, `GB`, `CA`, `IN`, `ES`, `IT`, `NL`, `BR`, `AT`, `BE`, `DK`, `FI`, `NO`, `PL`, `SE`, `CH`, `JP`, `MX`, `IL`, `NZ`, `SG`, `ZA`, `TR`, `AE`, `HK`, `ID`, `VN`, `PK`, `CO`, `IE`, `BD`, `MY`, `SA`, `RO`, `CL`, `PH`, `PT`, `NG`, `GR`, `TH`, `AR`, `PE`, `KE`, `HU`, `CZ`, `RS`, `NP`, `LT`, `UA`, `BG`, `EC`, `CY`, `HR`, `EE`, `LV`, `IS`, `SK`, `SI`, `AM`, `AD`, `PY`, `GY`, `EG`, `MV`, `UY`, `SR`, `KH`, `BO`, `LA`, `MT`, `PA`, `PR`, `TN`, `DO`, `MN`, `GU`, `VE`, `ME`, `MP`, `AC`, `AG`, `AI`, `AL`, `AO`, `AS`, `AW`, `AX`, `AZ`, `BA`, `BB`, `BF`, `BH`, `BI`, `BJ`, `BL`, `BM`, `BN`, `BQ`, `BS`, `BT`, `BW`, `BY`, `BZ`, `CC`, `CD`, `CF`, `CG`, `CI`, `CK`, `CM`, `CR`, `CV`, `CW`, `CX`, `DJ`, `DM`, `DZ`, `EH`, `ER`, `ET`, `FJ`, `FK`, `FM`, `FO`, `GA`, `GD`, `GE`, `GF`, `GG`, `GH`, `GI`, `GL`, `GM`, `GN`, `GP`, `GQ`, `GT`, `GW`, `HN`, `HT`, `IM`, `IO`, `IQ`, `JE`, `JM`, `JO`, `KG`, `KI`, `KM`, `KN`, `KR`, `KW`, `KY`, `KZ`, `LB`, `LC`, `LI`, `LK`, `LR`, `LS`, `LU`, `LY`, `MA`, `MC`, `MD`, `MF`, `MG`, `MH`, `MK`, `ML`, `MM`, `MO`, `MQ`, `MR`, `MS`, `MU`, `MW`, `MZ`, `NA`, `NC`, `NE`, `NF`, `NI`, `NR`, `NU`, `OM`, `PF`, `PG`, `PM`, `PS`, `PW`, `QA`, `RE`, `RU`, `RW`, `SB`, `SC`, `SH`, `SJ`, `SL`, `SM`, `SN`, `SO`, `SS`, `ST`, `SV`, `SX`, `SZ`, `TC`, `TD`, `TG`, `TJ`, `TK`, `TL`, `TM`, `TO`, `TT`, `TV`, `TW`, `TZ`, `UG`, `UZ`, `VA`, `VC`, `VG`, `VI`, `VU`, `WF`, `WS`, `XK`, `YE`, `YT`, `ZM`, `ZW`.
- `limit` (`integer`, optional): Maximum number of categories to return per call. The API default is 1000 and the maximum is 1000.
- `offset` (`integer`, optional): Number of categories to skip, for paging. The API default is 0.

Example input: `{"country":"US"}`

### `semrush_list_gbp_posts`

List GBP Posts · Read-only

List Google Business Profile posts for 1 to 100 locations with status, text, images, publication or scheduled date and call to action. Filter by status. Locations must be connected to GBP.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `location_ids` (`string`, required): Comma-separated IDs of 1 to 100 locations, from list_locations. Example: 1d21ceab55d740709311ec9b8a12c01e,2f32dfbc66e851820422fd9c9b23d12f.
- `limit` (`integer`, optional): Maximum number of posts to return per call. The API default is 20 and the maximum is 50.
- `offset` (`integer`, optional): Number of posts to skip, for paging. The API default is 0.
- `status` (`string`, optional): Only return posts with this status: DRAFT, SCHEDULED, TO_SEND, SENDING, PUBLISHED or FAILED. Leave empty for all. One of: `DRAFT`, `SCHEDULED`, `TO_SEND`, `SENDING`, `PUBLISHED`, `FAILED`.

Example input: `{"location_ids":"<location_ids>"}`

### `semrush_list_indexed_pages`

List Indexed Pages · Read-only

List the pages of a target that have backlinks, with backlink and referring domain counts, outbound and internal link counts, response code and title. Use it to find which pages attract the most links; use list_backlinks for the links themselves. Costs 40 API units per returned row.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `scope` (`string`, required): Which part of the target to analyze: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE. ROOT_DOMAIN covers the whole domain and its subdomains; PAGE covers one exact URL. One of: `ROOT_DOMAIN`, `SUBDOMAIN`, `SUBFOLDER`, `PAGE`.
- `url` (`string`, required): Domain, subdomain, subfolder or full page URL to analyze, with or without protocol (max 2000 characters). It must match the chosen scope. Example: example.com.
- `direction` (`string`, optional): Sort direction, ASC or DESC. The API default is DESC. One of: `ASC`, `DESC`.
- `fields` (`string`, optional): Comma-separated names of the response fields to return; leave empty to return all fields. Example: source_url,backlinks_count,domains_count.
- `filter` (`string`, optional): Advanced filter over the returned fields. Combine conditions with AND and OR, group with parentheses, and use LIKE or NOT LIKE with % as a wildcard. Strings take single or double quotes. Example: backlinks_count > 100.
- `limit` (`integer`, optional): Maximum number of rows to return. The API default is 100. Each returned row is billed in API units, so keep it small when exploring.
- `offset` (`integer`, optional): Number of rows to skip, for paging through a long result. Combine with limit.
- `order_by` (`string`, optional): Response field to sort by; it must be one of the returned fields. The API default is domains_count. Example: backlinks_count.

Example input: `{"scope":"ROOT_DOMAIN","url":"<url>"}`

### `semrush_list_location_categories`

List Location Categories · Read-only

List the Local listing categories available in a country, with ID, name, full hierarchical path and parent ID. Use the IDs in category_ids when creating or updating a location. For Google Business Profile categories use list_gbp_categories instead.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `country` (`string`, required): Two-letter ISO 3166-1 country code of the supported countries. Example: US. One of: `US`, `AU`, `FR`, `DE`, `GB`, `CA`, `IN`, `ES`, `IT`, `NL`, `BR`, `AT`, `BE`, `DK`, `FI`, `NO`, `PL`, `SE`, `CH`, `JP`, `MX`, `IL`, `NZ`, `SG`, `ZA`, `TR`, `AE`, `HK`, `ID`, `VN`, `PK`, `CO`, `IE`, `BD`, `MY`, `SA`, `RO`, `CL`, `PH`, `PT`, `NG`, `GR`, `TH`, `AR`, `PE`, `KE`, `HU`, `CZ`, `RS`, `NP`, `LT`, `UA`, `BG`, `EC`, `CY`, `HR`, `EE`, `LV`, `IS`, `SK`, `SI`, `AM`, `AD`, `PY`, `GY`, `EG`, `MV`, `UY`, `SR`, `KH`, `BO`, `LA`, `MT`, `PA`, `PR`, `TN`, `DO`, `MN`, `GU`, `VE`, `ME`, `MP`.
- `limit` (`integer`, optional): Maximum number of categories to return per call. The API default is 1000 and the maximum is 1000.
- `offset` (`integer`, optional): Number of categories to skip, for paging. The API default is 0.

Example input: `{"country":"US"}`

### `semrush_list_location_images`

List Location Images · Read-only

List the images of a location with ID, type, URL, caption and creation date. Use it to find an image_id for update_location_image or delete_location_image.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `location_id` (`string`, required): 32-character hex ID of the Local location. Find it with list_locations. Example: 1d21ceab55d740709311ec9b8a12c01e.
- `image_types` (`string`, optional): Comma-separated image types to include: PHOTO, PROFILE, COVER. Leave empty for all. Example: PHOTO,COVER.
- `limit` (`integer`, optional): Maximum number of images to return per call. The API default is 50 and the maximum is 50.
- `offset` (`integer`, optional): Number of images to skip, for paging. The API default is 0.

Example input: `{"location_id":"<location_id>"}`

### `semrush_list_location_listings`

List Location Listings · Read-only

List the directory listings (Google Business Profile, Apple Maps, Yelp and others) for a location, with listing ID, name, status, whether it can be toggled and its public URL. Use it to find a listing_id for enable_listing or disable_listing. Errors for frozen locations.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `location_id` (`string`, required): 32-character hex ID of the Local location. Find it with list_locations. Example: 1d21ceab55d740709311ec9b8a12c01e.
- `listing_statuses` (`string`, optional): Comma-separated statuses to include: CONNECTED, SUBMITTED, UNAVAILABLE, DISCONNECTED, PROCESSING. Leave empty for all. Example: CONNECTED,PROCESSING.

Example input: `{"location_id":"<location_id>"}`

### `semrush_list_locations`

List Locations · Read-only

List the business locations on your account with the same fields as get_location. Filter by status or frozen state and page with limit and offset. Use it to find a location_id; use get_location for one location.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `frozen` (`boolean`, optional): true returns only frozen locations (overdue payment), false only non-frozen ones. Leave empty for both.
- `limit` (`integer`, optional): Maximum number of locations to return per call. The API default is 50 and the maximum is 50.
- `location_statuses` (`string`, optional): Comma-separated statuses to include: COMPLETED, PROCESSING, FAILED. Leave empty for all. Example: COMPLETED,FAILED.
- `offset` (`integer`, optional): Number of locations to skip, for paging. The API default is 0.

Example input: `{}`

### `semrush_list_map_rank_campaigns`

List Map Rank Campaigns · Read-only

List Map Rank Tracker campaigns with business, grid settings, keyword and point counts, average position and share of voice, and status, paged. Use it to find a campaign ID; use get_map_rank_campaign for full details. Does not use API units.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `onlyMarkedForRemoval` (`boolean`, optional): true returns only campaigns scheduled for deletion.
- `page` (`integer`, optional): Zero-based page index. The API default is 0.
- `query` (`string`, optional): Filter campaigns by name or business address, up to 255 characters. Example: pizza.
- `size` (`integer`, optional): Number of items per page. The API default is 10.
- `sort` (`string`, optional): Sort as field,direction. Fields: createdAt, businessName; directions ASC or DESC. The API default is createdAt,DESC.

Example input: `{}`

### `semrush_list_map_rank_keywords`

List Map Rank Keywords · Read-only

List a campaign's keywords with their ID, name and collection status for a report date. Use it to get the keywordId for get_map_rank_heatmap, get_map_rank_metrics or get_map_rank_competitors.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `campaign_id` (`string`, required): ID of the Map Rank Tracker campaign, from list_map_rank_campaigns. Example: 382738af-b6ae-4002-b6f6-c4c907b2b024.
- `reportDate` (`string`, optional): Report timestamp in ISO 8601, exactly as listed in the campaign's reportDates. Example: 2024-07-05T12:39:22.611Z. Defaults to the latest report.

Example input: `{"campaign_id":"<campaign_id>"}`

### `semrush_list_projects`

List Projects · Read-only

List the Semrush projects (folders) you can access, with project ID, name, domain, owner, your permissions and the tools attached such as site_audit or position_tracking. Use it to find a project ID; use get_project for one project. Requires the SEO Business subscription.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `limit` (`integer`, optional): Maximum number of projects to return. The API default is 100 and the maximum is 1000.
- `offset` (`integer`, optional): Number of projects to skip before returning results. The API default is 0.
- `scope` (`string`, optional): Which projects to return: OWN (owned by you, the API default), ALL (everything you can access), SHARED (shared with you) or CORPORATE (under your corporate account). One of: `OWN`, `ALL`, `SHARED`, `CORPORATE`.

Example input: `{}`

### `semrush_list_referring_domains`

List Referring Domains · Read-only

List the domains that link to a target, with backlink count, domain score, country, IP address, follow status, new or lost flags and first and last seen dates. Use it to see who links to a site; use list_backlinks for the individual links or list_referring_ips for IP addresses. Costs 40 API units per returned row.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `scope` (`string`, required): Which part of the target to analyze: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE. ROOT_DOMAIN covers the whole domain and its subdomains; PAGE covers one exact URL. One of: `ROOT_DOMAIN`, `SUBDOMAIN`, `SUBFOLDER`, `PAGE`.
- `url` (`string`, required): Domain, subdomain, subfolder or full page URL to analyze, with or without protocol (max 2000 characters). It must match the chosen scope. Example: example.com.
- `direction` (`string`, optional): Sort direction, ASC or DESC. The API default is DESC. One of: `ASC`, `DESC`.
- `fields` (`string`, optional): Comma-separated names of the response fields to return; leave empty to return all fields. Example: domain,backlinks_count,domain_score.
- `filter` (`string`, optional): Advanced filter over the returned fields. Combine conditions with AND and OR, group with parentheses, and use LIKE or NOT LIKE with % as a wildcard. Strings take single or double quotes. Example: domain_score > 50.
- `limit` (`integer`, optional): Maximum number of rows to return. The API default is 100. Each returned row is billed in API units, so keep it small when exploring.
- `offset` (`integer`, optional): Number of rows to skip, for paging through a long result. Combine with limit.
- `order_by` (`string`, optional): Response field to sort by; it must be one of the returned fields. The API default is backlinks_count. Example: domain_score.

Example input: `{"scope":"ROOT_DOMAIN","url":"<url>"}`

### `semrush_list_referring_ips`

List Referring IPs · Read-only

List the IP addresses of servers that host pages linking to a target, with backlink count, referring domain count, country and first and last seen dates. Use it to spot clustered link sources; use list_referring_domains for the linking domains themselves. Costs 20 API units per returned row.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `scope` (`string`, required): Which part of the target to analyze: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE. ROOT_DOMAIN covers the whole domain and its subdomains; PAGE covers one exact URL. One of: `ROOT_DOMAIN`, `SUBDOMAIN`, `SUBFOLDER`, `PAGE`.
- `url` (`string`, required): Domain, subdomain, subfolder or full page URL to analyze, with or without protocol (max 2000 characters). It must match the chosen scope. Example: example.com.
- `direction` (`string`, optional): Sort direction, ASC or DESC. The API default is DESC. One of: `ASC`, `DESC`.
- `fields` (`string`, optional): Comma-separated names of the response fields to return; leave empty to return all fields. Example: ip_address,domains_count,country.
- `filter` (`string`, optional): Advanced filter over the returned fields. Combine conditions with AND and OR, group with parentheses, and use LIKE or NOT LIKE with % as a wildcard. Strings take single or double quotes. Example: ip_address LIKE '192.168.1.%'.
- `limit` (`integer`, optional): Maximum number of rows to return. The API default is 100. Each returned row is billed in API units, so keep it small when exploring.
- `offset` (`integer`, optional): Number of rows to skip, for paging through a long result. Combine with limit.
- `order_by` (`string`, optional): Response field to sort by; it must be one of the returned fields. The API default is domains_count. Example: backlinks_count.

Example input: `{"scope":"ROOT_DOMAIN","url":"<url>"}`

### `semrush_list_reviews`

List Reviews · Read-only

List customer reviews for a location with title, text, star rating, author, publisher, link, reply capabilities and the owner's comments. Filter by rating or reply state. Use get_review_overview for counts only. The location must be connected to Google Business Profile and not frozen.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `location_id` (`string`, required): 32-character hex ID of the Local location. Find it with list_locations. Example: 1d21ceab55d740709311ec9b8a12c01e.
- `answered` (`boolean`, optional): true returns only reviews that have a reply, false only unanswered ones. Leave empty for both.
- `auto_replied` (`boolean`, optional): true returns only reviews answered by auto-reply, false only the rest. Leave empty for both.
- `limit` (`integer`, optional): Maximum number of reviews to return per call. The API default is 50 and the maximum is 250.
- `offset` (`integer`, optional): Number of reviews to skip, for paging. The API default is 0.
- `ratings` (`string`, optional): Comma-separated star ratings to include, from 0 (no rating) to 5. Example: 4,5.

Example input: `{"location_id":"<location_id>"}`

### `semrush_add_review_comment`

Add Review Comment · Write

Reply to a review. Returns the new comment. Check supports_reply on the review in list_reviews first, since not every publisher allows replies. Use update_review_comment to edit a reply later.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `content` (`string`, required): Text of the reply, at most 2000 characters. Example: Thank you for your feedback.
- `location_id` (`string`, required): 32-character hex ID of the Local location. Find it with list_locations. Example: 1d21ceab55d740709311ec9b8a12c01e. It must be the location the review belongs to.
- `review_id` (`string`, required): ID of the review, from list_reviews. Example: review-abc123.

Example input: `{"content":"<content>","location_id":"<location_id>","review_id":"<review_id>"}`

### `semrush_collect_map_rank_campaign`

Collect Map Rank Campaign · Write

Start a data collection run for a campaign now. Uses Map Rank Tracker credits equal to grid points times keywords, so check get_map_rank_limits first. Returns the report timestamp being collected; read results later with get_map_rank_heatmap.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `campaign_id` (`string`, required): ID of the Map Rank Tracker campaign, from list_map_rank_campaigns. Example: 382738af-b6ae-4002-b6f6-c4c907b2b024.
- `reportDate` (`string`, optional): Timestamp to give this report, in ISO 8601. The current server time is used when omitted. Example: 2026-02-25T17:30:00Z.

Example input: `{"campaign_id":"<campaign_id>"}`

### `semrush_create_location`

Create Location · Write

Create a business location in Semrush Local Listing Management. Returns the location with its location_id and status PROCESSING. Consumes one pre-paid Local Pro limit unless validate_only is true, and creation can take up to 7 days, so poll get_location for COMPLETED. Calls must run one at a time; a concurrent call returns 429.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `business_name` (`string`, required): Official public name of the business, up to 125 characters. Example: Delta Manor Apartments.
- `country` (`string`, required): Two-letter ISO 3166-1 country code where the business is located; only the countries supported by Local are accepted. Example: US. One of: `US`, `AU`, `FR`, `DE`, `GB`, `CA`, `IN`, `ES`, `IT`, `NL`, `BR`, `AT`, `BE`, `DK`, `FI`, `NO`, `PL`, `SE`, `CH`, `JP`, `MX`, `IL`, `NZ`, `SG`, `ZA`, `TR`, `AE`, `HK`, `ID`, `VN`, `PK`, `CO`, `IE`, `BD`, `MY`, `SA`, `RO`, `CL`, `PH`, `PT`, `NG`, `GR`, `TH`, `AR`, `PE`, `KE`, `HU`, `CZ`, `RS`, `NP`, `LT`, `UA`, `BG`, `EC`, `CY`, `HR`, `EE`, `LV`, `IS`, `SK`, `SI`, `AM`, `AD`, `PY`, `GY`, `EG`, `MV`, `UY`, `SR`, `KH`, `BO`, `LA`, `MT`, `PA`, `PR`, `TN`, `DO`, `MN`, `GU`, `VE`, `ME`, `MP`.
- `address_line_1` (`string`, optional): Street address with house number and street name, up to 190 characters. Example: 111 W Main St.
- `address_line_2` (`string`, optional): Supplemental address information such as suite or floor, up to 64 characters. Example: Second floor.
- `business_hours` (`object`, optional): Weekly opening hours as an object with keys monday_hours through sunday_hours, each a list of from and to ranges in HH:MM. An empty list means closed. Example: {"monday_hours": [{"from": "08:00", "to": "17:00"}]}.
- `category_ids` (`array`, optional): Up to 10 Local category IDs, the first being the primary category. Get valid IDs from list_location_categories. Example: ["b871306d44c145a0b781ed2cb3b19bf1"].
- `city` (`string`, optional): City or locality name, up to 64 characters. Example: Delta.
- `coordinates` (`object`, optional): Latitude and longitude of the business as an object. Example: {"latitude": 39.3522, "longitude": -112.5777}.
- `description` (`string`, optional): Description of the business and its services, 10 to 750 characters. Example: Welcome to our family-run apartment community.
- `featured_message` (`string`, optional): Short promotional message shown on the profile, up to 50 characters. Example: Call Today.
- `featured_message_url` (`string`, optional): Call-to-action link for the featured message, up to 255 characters. Example: https://www.example.com/offer.
- `gbp_attributes` (`array`, optional): Google Business Profile attributes as objects with id and the chosen option_id, both from list_gbp_attributes. Example: [{"id": "has_wheelchair_accessible_entrance", "option_id": "true"}].
- `gbp_category_ids` (`array`, optional): Up to 10 Google Business Profile category IDs, first is primary. Get valid IDs from list_gbp_categories. Example: ["46e6afbab7cd408bae8d392184a5627e"].
- `instagram_username` (`string`, optional): Instagram handle without @, up to 30 characters. Example: semrush.
- `more_hours` (`array`, optional): Extra hour types such as DELIVERY or TAKEOUT, as objects with type and hours (same shape as business_hours). Valid types come from get_location_more_hour_types. Example: [{"type": "DELIVERY", "hours": {"monday_hours": [{"from": "09:00", "to": "20:00"}]}}].
- `payment_options` (`array`, optional): Accepted payment methods; valid values come from get_location_payment_options. Example: ["CASH", "CREDIT_CARD"].
- `phone_number` (`string`, optional): Primary phone in international format. Example: +1 435 864 3376.
- `region` (`string`, optional): State, province or prefecture. Required for Canada, Australia, Brazil, India and the US; do not set it for other countries. Example: UT.
- `reopen_date` (`string`, optional): Future date (YYYY-MM-DD) when a temporarily closed location reopens. Example: 2026-12-01.
- `service_area_places` (`array`, optional): Areas the business serves, as objects with name and Google place_id. Required when suppress_address is true. Example: [{"name": "Delta, UT, USA", "place_id": "ChIJQRRb_PG0TIcRwoI8h4xTvTM"}].
- `special_hours` (`array`, optional): Date-specific hours as a list of objects with type (CLOSED, OPENED_ALL_DAY or RANGE), day (YYYY-MM-DD, unique per entry) and times (only for RANGE). Example: [{"type": "CLOSED", "day": "2026-12-25"}].
- `suppress_address` (`boolean`, optional): Set true to hide the street address from public listings; service_area_places must then be filled in.
- `twitter_username` (`string`, optional): X (Twitter) handle without @, up to 15 characters. Example: semrush.
- `validate_only` (`boolean`, optional): Set true to validate the request without applying any change or using up your Local Pro limit. Recommended before the first real call.
- `website_url` (`string`, optional): Business website; must start with https:// and be at most 255 characters. Example: https://www.example.com.
- `youtube_video` (`string`, optional): URL of a YouTube video about the business, up to 150 characters. Example: https://www.youtube.com/watch?v=ndJB4J951_k.
- `zip` (`string`, optional): Postal or ZIP code. Required for most supported countries. Example: 84624.

Example input: `{"business_name":"<business_name>","country":"US"}`

### `semrush_create_location_image`

Create Location Image · Write

Add an image to a location from base64 content. Returns the image ID, type, URL and caption. Use list_location_images to see existing images. Fails for frozen locations.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `content` (`string`, required): Base64-encoded image data in JPEG, JPG or PNG format, at most 4 MB.
- `location_id` (`string`, required): 32-character hex ID of the Local location. Find it with list_locations. Example: 1d21ceab55d740709311ec9b8a12c01e.
- `type` (`string`, required): Intended use: PHOTO (270x270 to 5000x5000 px), PROFILE (250x250 to 5000x5000 px) or COVER (480x270 to 2120x1192 px). One of: `PHOTO`, `PROFILE`, `COVER`.
- `description` (`string`, optional): Caption describing the image, up to 255 characters. Example: Front entrance of the store.

Example input: `{"content":"<content>","location_id":"<location_id>","type":"PHOTO"}`

### `semrush_create_map_rank_campaign`

Create Map Rank Campaign · Write

Create a Map Rank Tracker campaign for a Google business and keywords. By default it builds a 5x5 grid with a 1.5 km radius around the business; pass gridSettings or points (not both) to customize. Collection is manual unless collectingFrequency is set; use collect_map_rank_campaign to run it. Does not use API units.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `keywords` (`array`, required): 1 to 100 keywords to track, each up to 255 characters. Example: ["restaurant", "pizza near me"].
- `placeId` (`string`, required): Google Place ID of the business to track, found with Google's Place ID Finder. Example: ChIJ0WHHXq8H9YgRdNsk3gsXmxg.
- `collectingFrequency` (`object`, optional): Automatic collection schedule: frequency (WEEKLY or MONTHLY), interval (positive integer), positions (days: 1 to 7 for weekly, 1 to 28 for monthly), optional time (HH:mm, default 11:00) and enable (default false). Example: {"frequency": "MONTHLY", "interval": 1, "positions": [1], "time": "10:00", "enable": true}.
- `gridSettings` (`object`, optional): Custom grid, not allowed together with points. Needs template (5x5, 7x7, 9x9, 11x11, 13x13 or 15x15), unit (KM or MILES), distance (0.1 to 100, the radius to the grid edge) and an optional basePoint with lat and lng (defaults to the business). Example: {"template": "5x5", "unit": "KM", "distance": 1.5}.
- `name` (`string`, optional): Custom campaign name; the business name is used when omitted. Example: Demo Campaign.
- `points` (`array`, optional): Custom tracking points, not allowed together with gridSettings. Each has index, optional isEnabled (default true) and coordinates with lat and lng. Example: [{"index": 0, "coordinates": {"lat": 33.7609, "lng": -84.3113}}].

Example input: `{"keywords":["restaurant","pizza near me"],"placeId":"<placeId>"}`

### `semrush_create_project`

Create Project · Write

Create a Semrush project (folder) for a domain. Returns the new project with its assigned ID and permissions. Needs a read and write API key; fails once the account's project limit is reached.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `domain` (`string`, required): Domain of the new project without protocol. Example: example.com.
- `project_name` (`string`, required): Human-readable name for the project. These characters are not allowed: ~ ` ! # % ' ^ & * = [ ] \ / { } | " : < > ?. Example: My project.

Example input: `{"domain":"<domain>","project_name":"<project_name>"}`

### `semrush_disable_listing`

Disable Listing · Write

Disable a location listing so it stops being distributed. Works only on listings where controllable is true and status is CONNECTED, SUBMITTED or UNAVAILABLE. Use enable_listing to reverse it.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `listing_id` (`string`, required): ID of the listing, from list_location_listings. Example: b1c2d3e4f5a64789abcdef0123456789.

Example input: `{"listing_id":"<listing_id>"}`

### `semrush_enable_listing`

Enable Listing · Write

Enable a location listing that is currently disabled. Works only on listings where controllable is true and status is DISCONNECTED. Use disable_listing to reverse it.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `listing_id` (`string`, required): ID of the listing, from list_location_listings. Example: b1c2d3e4f5a64789abcdef0123456789.

Example input: `{"listing_id":"<listing_id>"}`

### `semrush_update_location`

Update Location · Write

Update fields of a business location. Only fields named in update_mask are changed, using the values you pass. Returns the updated location. Use get_location to read current values first; use create_location for a new location.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `location_id` (`string`, required): 32-character hex ID of the Local location. Find it with list_locations. Example: 1d21ceab55d740709311ec9b8a12c01e.
- `update_mask` (`string`, required): Comma-separated names of the fields to change; must be non-empty, and each name needs its value in the input. Allowed: business_name, address_line_1, address_line_2, city, zip, phone_number, category_ids, region, featured_message, featured_message_url, website_url, description, instagram_username, twitter_username, business_hours, special_hours, service_area_places, suppress_address, coordinates, youtube_video, reopen_date, payment_options, more_hours, gbp_category_ids, gbp_attributes. Example: business_name,address_line_1.
- `address_line_1` (`string`, optional): Street address with house number and street name, up to 190 characters. Example: 111 W Main St.
- `address_line_2` (`string`, optional): Supplemental address information such as suite or floor, up to 64 characters. Example: Second floor.
- `business_hours` (`object`, optional): Weekly opening hours as an object with keys monday_hours through sunday_hours, each a list of from and to ranges in HH:MM. An empty list means closed. Example: {"monday_hours": [{"from": "08:00", "to": "17:00"}]}.
- `business_name` (`string`, optional): Official public name of the business, up to 125 characters. Example: Delta Manor Apartments.
- `category_ids` (`array`, optional): Up to 10 Local category IDs, the first being the primary category. Get valid IDs from list_location_categories. Example: ["b871306d44c145a0b781ed2cb3b19bf1"].
- `city` (`string`, optional): City or locality name, up to 64 characters. Example: Delta.
- `coordinates` (`object`, optional): Latitude and longitude of the business as an object. Example: {"latitude": 39.3522, "longitude": -112.5777}.
- `description` (`string`, optional): Description of the business and its services, 10 to 750 characters. Example: Welcome to our family-run apartment community.
- `featured_message` (`string`, optional): Short promotional message shown on the profile, up to 50 characters. Example: Call Today.
- `featured_message_url` (`string`, optional): Call-to-action link for the featured message, up to 255 characters. Example: https://www.example.com/offer.
- `gbp_attributes` (`array`, optional): Google Business Profile attributes as objects with id and the chosen option_id, both from list_gbp_attributes. Example: [{"id": "has_wheelchair_accessible_entrance", "option_id": "true"}].
- `gbp_category_ids` (`array`, optional): Up to 10 Google Business Profile category IDs, first is primary. Get valid IDs from list_gbp_categories. Example: ["46e6afbab7cd408bae8d392184a5627e"].
- `instagram_username` (`string`, optional): Instagram handle without @, up to 30 characters. Example: semrush.
- `more_hours` (`array`, optional): Extra hour types such as DELIVERY or TAKEOUT, as objects with type and hours (same shape as business_hours). Valid types come from get_location_more_hour_types. Example: [{"type": "DELIVERY", "hours": {"monday_hours": [{"from": "09:00", "to": "20:00"}]}}].
- `payment_options` (`array`, optional): Accepted payment methods; valid values come from get_location_payment_options. Example: ["CASH", "CREDIT_CARD"].
- `phone_number` (`string`, optional): Primary phone in international format. Example: +1 435 864 3376.
- `region` (`string`, optional): State, province or prefecture. Required for Canada, Australia, Brazil, India and the US; do not set it for other countries. Example: UT.
- `reopen_date` (`string`, optional): Future date (YYYY-MM-DD) when a temporarily closed location reopens. Example: 2026-12-01.
- `service_area_places` (`array`, optional): Areas the business serves, as objects with name and Google place_id. Required when suppress_address is true. Example: [{"name": "Delta, UT, USA", "place_id": "ChIJQRRb_PG0TIcRwoI8h4xTvTM"}].
- `special_hours` (`array`, optional): Date-specific hours as a list of objects with type (CLOSED, OPENED_ALL_DAY or RANGE), day (YYYY-MM-DD, unique per entry) and times (only for RANGE). Example: [{"type": "CLOSED", "day": "2026-12-25"}].
- `suppress_address` (`boolean`, optional): Set true to hide the street address from public listings; service_area_places must then be filled in.
- `twitter_username` (`string`, optional): X (Twitter) handle without @, up to 15 characters. Example: semrush.
- `validate_only` (`boolean`, optional): Set true to validate the request without applying any change or using up your Local Pro limit. Recommended before the first real call.
- `website_url` (`string`, optional): Business website; must start with https:// and be at most 255 characters. Example: https://www.example.com.
- `youtube_video` (`string`, optional): URL of a YouTube video about the business, up to 150 characters. Example: https://www.youtube.com/watch?v=ndJB4J951_k.
- `zip` (`string`, optional): Postal or ZIP code. Required for most supported countries. Example: 84624.

Example input: `{"location_id":"<location_id>","update_mask":"<update_mask>"}`

### `semrush_update_location_image`

Update Location Image · Write

Change the caption of an existing location image. Returns the updated image. Use create_location_image to add a new one.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `image_id` (`string`, required): ID of the image, from list_location_images. Example: a1b2c3d4e5f64789abcdef0123456789.
- `description` (`string`, optional): New caption for the image, up to 255 characters. Example: Front entrance of our downtown location.

Example input: `{"image_id":"<image_id>"}`

### `semrush_update_map_rank_campaign`

Update Map Rank Campaign · Write

Partially update a Map Rank Tracker campaign: only the fields you pass change. Passing keywords replaces the whole keyword list; passing gridSettings or points (not both) redefines the tracking area. Returns the updated campaign. Does not use API units.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `campaign_id` (`string`, required): ID of the Map Rank Tracker campaign, from list_map_rank_campaigns. Example: 382738af-b6ae-4002-b6f6-c4c907b2b024.
- `collectingFrequency` (`object`, optional): New automatic collection schedule: frequency (WEEKLY or MONTHLY), interval, positions, time (HH:mm) and enable. Example: {"frequency": "WEEKLY", "interval": 1, "positions": [3], "time": "12:00", "enable": true}.
- `gridSettings` (`object`, optional): New grid, not allowed together with points: template (5x5 to 15x15), unit (KM or MILES), distance (0.1 to 100) and optional basePoint (defaults to the current base point). Example: {"template": "7x7", "unit": "KM", "distance": 2}.
- `keywords` (`array`, optional): Complete new keyword list of up to 100 keywords; it replaces the existing list. Example: ["restaurant", "cafe"].
- `name` (`string`, optional): New campaign name. Example: Updated Demo Campaign.
- `points` (`array`, optional): New custom tracking points that override the existing ones, not allowed together with gridSettings. Each has index, optional isEnabled and coordinates with lat and lng. Example: [{"index": 0, "coordinates": {"lat": 33.7609, "lng": -84.3113}}].

Example input: `{"campaign_id":"<campaign_id>"}`

### `semrush_update_project`

Update Project · Write

Rename a Semrush project. Only fields you pass change; the response is the updated project. Use create_project to add a project or delete_project to remove one.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Numeric ID of the project (folder). Find it with list_projects or in the project URL on semrush.com/projects/<id>. Example: 643526670283248.
- `project_name` (`string`, optional): New name for the project; leave empty to keep the current name. These characters are not allowed: ~ ` ! # % ' ^ & * = [ ] \ / { } | " : < > ?. Example: My website project.

Example input: `{"project_id":643526670283248}`

### `semrush_update_review_auto_reply_config`

Update Review Auto-Reply Config · Write

Replace the automatic review-reply settings of a location. Settings you leave empty reset to their defaults, so pass every setting you want to keep; read them first with get_review_auto_reply_config.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `location_id` (`string`, required): 32-character hex ID of the Local location. Find it with list_locations. Example: 1d21ceab55d740709311ec9b8a12c01e.
- `language_strategy` (`string`, optional): How the reply language is chosen: SPECIFIC_LANGUAGE (use preferred_language_code) or REVIEW_LANGUAGE (match the review). Resets to SPECIFIC_LANGUAGE when omitted. One of: `SPECIFIC_LANGUAGE`, `REVIEW_LANGUAGE`.
- `preferred_language_code` (`string`, optional): Language name for replies, used only when language_strategy is SPECIFIC_LANGUAGE, for example ENGLISH. When omitted the API picks AUTO, the location's country language.
- `reply_to_negative_reviews` (`boolean`, optional): Turn automatic replies on or off for 1, 2 and 3 star reviews and unrated reviews. Resets to false when omitted.
- `reply_to_positive_reviews` (`boolean`, optional): Turn automatic replies on or off for 4 and 5 star reviews. Resets to false when omitted.
- `reply_tone` (`string`, optional): Tone of generated replies: FRIENDLY, PROFESSIONAL, CALM or ENERGETIC. Resets to FRIENDLY when omitted. One of: `FRIENDLY`, `PROFESSIONAL`, `CALM`, `ENERGETIC`.

Example input: `{"location_id":"<location_id>"}`

### `semrush_update_review_comment`

Update Review Comment · Write

Edit the text of an existing reply on a review. Returns the updated comment. Check supports_comment_edit on the review in list_reviews first.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `comment_id` (`string`, required): ID of the comment, from the comments array in list_reviews. Example: comment-789.
- `content` (`string`, required): New text of the reply, at most 2000 characters. Example: Thanks again for your feedback.
- `location_id` (`string`, required): 32-character hex ID of the Local location. Find it with list_locations. Example: 1d21ceab55d740709311ec9b8a12c01e. It must be the location the review belongs to.
- `review_id` (`string`, required): ID of the review, from list_reviews. Example: review-abc123.

Example input: `{"comment_id":"<comment_id>","content":"<content>","location_id":"<location_id>","review_id":"<review_id>"}`

### `semrush_delete_location`

Delete Location · Destructive

Permanently delete a business location. Allowed only 30 days or more after creation. This cannot be undone; confirm the ID with get_location first.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `location_id` (`string`, required): 32-character hex ID of the Local location. Find it with list_locations. Example: 1d21ceab55d740709311ec9b8a12c01e.

Example input: `{"location_id":"<location_id>"}`

### `semrush_delete_location_image`

Delete Location Image · Destructive

Permanently remove an image from a location's profile. This cannot be undone; check the ID with list_location_images first.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `image_id` (`string`, required): ID of the image, from list_location_images. Example: a1b2c3d4e5f64789abcdef0123456789.

Example input: `{"image_id":"<image_id>"}`

### `semrush_delete_map_rank_campaign`

Delete Map Rank Campaign · Destructive

Permanently delete a Map Rank Tracker campaign and all its collected data. This cannot be undone; confirm the ID with get_map_rank_campaign first.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `campaign_id` (`string`, required): ID of the Map Rank Tracker campaign, from list_map_rank_campaigns. Example: 382738af-b6ae-4002-b6f6-c4c907b2b024.

Example input: `{"campaign_id":"<campaign_id>"}`

### `semrush_delete_project`

Delete Project · Destructive

Permanently delete a Semrush project and all its tools, settings and history. Returns the deleted project ID. This cannot be undone; confirm the project ID with get_project first.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Numeric ID of the project (folder). Find it with list_projects or in the project URL on semrush.com/projects/<id>. Example: 643526670283248.

Example input: `{"project_id":643526670283248}`

### `semrush_delete_review_comment`

Delete Review Comment · Destructive

Permanently delete a reply from a review. Check supports_comment_removal on the review in list_reviews first. This cannot be undone.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `comment_id` (`string`, required): ID of the comment, from the comments array in list_reviews. Example: comment-789.
- `location_id` (`string`, required): 32-character hex ID of the Local location. Find it with list_locations. Example: 1d21ceab55d740709311ec9b8a12c01e. It must be the location the review belongs to.
- `review_id` (`string`, required): ID of the review, from list_reviews. Example: review-abc123.

Example input: `{"comment_id":"<comment_id>","location_id":"<location_id>","review_id":"<review_id>"}`

## Related

Other Marketing connectors ([all 87](/agentkit/connectors/?category=marketing)):

- [HubSpot](/agentkit/connectors/hubspot/): Scalekit connector, OAuth, 457 tools
- [Mailchimp](/agentkit/connectors/mailchimp/): Scalekit connector, OAuth, 73 tools
- [Twitter / X](/agentkit/connectors/twitteroauth/): Scalekit connector, OAuth, 92 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
