Listing Management

Jump to Create LocationCreate Location

Create a location.

To verify a request without applying changes, use the validate_only parameter. When set to true, the API validates the data but doesn’t update it nor consume your Local Pro limit.

Jump to EndpointEndpoint

POSThttps://api.semrush.com/apis/v4/local/v1/locations

Request Parameters

validate_only

Set to false by default. If set to true, the system validates the data without applying any changes.

Value/Type: boolean

Body parameters

business_nameRequired

Official public name of the business.

Max. length is 125 characters.

Value/Type: string

phone_numberRequired

Primary contact phone number for the business.

International format is required. For example: "+49 351 8629318", "+1 541-754-3010"

Value/Type: string

countryRequired

2-letter country code where the business is located, as defined by the ISO 3166-1 code reference (the Alpha-2 code column).

Supported values: 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 The list of supported countries will increase in the future.

Value/Type: string

region

Highest administrative subdivision for postal addresses in a country or region. For example, a state, province, oblast, or prefecture. Specifically, for Spain this is the province rather than the autonomous community (for example, "Barcelona" instead of "Catalonia"). Many countries do not use administrative areas in postal addresses.

Required for Canada, Australia, Brazil, India, and US.

Max. length is 200 characters.

Value/Type: string

cityRequired

City or locality name.

Max. length is 64 characters.

Value/Type: string

zip

Postal or ZIP code.

Required for the following countries: 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, 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, EG, MV, UY, KH, LA, MT, PA, PR, TN, DO, MN, GU, VE, ME, MP

Value/Type: string

address_line_1Required

Street address, including house number and street name.

Max. length is 190 characters.

Value/Type: string

address_line_2

Supplemental address information (for example, suite, floor, or building).

Max. length is 64 characters.

Value/Type: string

website_url

URL for the business. Must start with https://. If possible, use a URL specific to this location rather than a generic brand website.

Max. length is 255 characters.

Value/Type: string

description

Detailed description of the business and its services.

Min. length is 10 characters. Max. length is 750 characters.

Value/Type: string

business_hours

Standard weekly operating hours.

Each weekday can contain no more than two time ranges. Ranges must not overlap.

Value/Type: object

special_hours

Exceptions to regular hours, such as holidays or temporary closures. This field can only be set if business hours are specified. These hours override regular business hours.

Max. 30 entries.

Value/Type: array of objects

service_area_places

Areas serviced by the business. If the suppress_address parameter is set to true, the service areas must be specified.

Value/Type: array of objects

category_idsRequired

List of category identifiers (max. 10) that describe the business and help customers find relevant services.

Identifiers must be retrieved from the Get Categories endpoint.

Value/Type: array of strings

suppress_address

If set to true, the physical address is hidden from public listings and search results. If the address is hidden, service_area_places must be populated to define the business’s geographic reach.

Value/Type: boolean

coordinates

Exact geographic coordinates for the location.

Value/Type: object

featured_message

Promotional message or announcement displayed on the business profile.

Max. length is 50 characters.

Value/Type: string

featured_message_url

Call-to-action URL associated with the featured message.

Example: "https://www.semrush.com/local-business/start/"

Max. length is 255 characters.

Value/Type: string

youtube_video

URL of a YouTube video showcasing the business.

Example: "https://www.youtube.com/watch?v=ndJB4J951_k"

Max. length is 150 characters.

Value/Type: string

instagram_username

Instagram profile handle.

Example: semrush

Max. length is 30 characters.

Value/Type: string

twitter_username

X (formerly Twitter) profile handle.

Example: semrush

Max. length is 15 characters.

Value/Type: string

reopen_date

Date ("YYYY-MM-DD") when a temporarily closed location is scheduled to reopen. This must be a future date and is only applicable if the location status is set to temporarily closed.

Value/Type: string

Request example
curl -L 'https://api.semrush.com/apis/v4/local/v1/locations?validate_only=true'
  -H 'Authorization: Apikey YOUR_API_KEY'
  -H 'Content-Type: application/json'
  -d '{
    "business_name":"Some business name",
    "phone_number":"+1 435 864 3376",
    "country":"US",
    "region":"UT",
    "city":"Delta",
    "zip":"84624",
    "address_line_1":"Naumburger Str.2",
    "address_line_2":"Second floor",
    "website_url":"www.test.com",
    "description":"Welcome to our Some business name!",
    "category_ids":["b871306d44c145a0b781ed2cb3b19bf1","909c2eebd4fb4b338937d8518a3f0d73"],
    "coordinates":{"latitude":39.35221240176079,
    "longitude":-112.57777149021301},
    "featured_message":"Call Today",
    "featured_message_url":"www.test.com",
    "youtube_video":"https://www.youtube.com/watch?v=nYykbUPQ9eo",
    "instagram_username":"some_instagram_username",
    "twitter_username":"some_x_username"
  }'
Response exampleJSON
{
  "meta": {
      "success": true,
      "status_code": 200,
      "request_id": "182d587194adf5096d1b6d5b309f164f",
      "validate_only": true
  },
  "data": {
      "business_name": "Some business name",
      "phone_number": "+1 435 864 3376",
      "country": "US",
      "region": "UT",
      "city": "Delta",
      "zip": "84624",
      "address_line_1": "Naumburger Str.2",
      "address_line_2": "Second floor",
      "website_url": "www.test.com",
      "description": "Welcome to our Some business name!",
      "special_hours": [],
      "service_area_places": [],
      "category_ids": [
          "b871306d44c145a0b781ed2cb3b19bf1",
          "909c2eebd4fb4b338937d8518a3f0d73"
      ],
      "suppress_address": false,
      "coordinates": {
          "latitude": 39.35221240176079,
          "longitude": -112.57777149021301
      },
      "featured_message": "Call Today",
      "featured_message_url": "www.test.com",
      "youtube_video": "https://www.youtube.com/watch?v=nYykbUPQ9eo",
      "instagram_username": "some_instagram_username",
      "twitter_username": "some_x_username",
      "location_id": "1d21ceab55d740709311ec9b8a12c01e",
      "location_status": "PROCESSING",
      "frozen": false,
      "submit_date": "2026-03-10T17:03:42.691",
      "errors": []
  }
}

Jump to Update LocationUpdate Location

Update a single location by its ID.

You must provide a non-empty update_mask parameter. To update a field with a specific value, include the field in both the update_mask and the request body.

If you want to verify the request without applying changes, use the validate_only parameter. When set to true, the API validates the data but doesn’t update it.

Jump to EndpointEndpoint

PATCHhttps://api.semrush.com/apis/v4/local/v1/locations/:location_id

Request Parameters

update_maskRequired

Supported values: 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

Specify each field you want to update as a value of the update_mask parameter. For example: update_mask=business_name,address_line_1.

Value/Type: array of strings

validate_only

Set to false by default. If set to true, the system validates the data without applying any changes.

Value/Type: boolean

Body Parameters

business_name

Official public name of the business.

Max. length is 125 characters.

Value/Type: string

phone_number

Primary contact phone number for the business.

International format is required. For example: "+49 351 8629318", "+1 541-754-3010".

Value/Type: string

region

Highest administrative subdivision for postal addresses in a country or region. For example, a state, province, oblast, or prefecture. Specifically, for Spain this is the province rather than the autonomous community (for example, "Barcelona" instead of "Catalonia"). Many countries do not use administrative areas in postal addresses.

Required for Canada, Australia, Brazil, India, and US.

Value/Type: string

city

City or locality name.

Max. length is 64 characters.

Value/Type: string

zip

Postal or ZIP code.

Required for the following countries: 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, 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, EG, MV, UY, KH, LA, MT, PA, PR, TN, DO, MN, GU, VE, ME, MP

Value/Type: string

address_line_1

Street address, including house number and street name.

Max. length is 190 characters.

Value/Type: string

address_line_2

Supplemental address information (for example, suite, floor, or building).

Max. length is 64 characters.

Value/Type: string

website_url

URL for the business. Must start with https://. If possible, use a URL specific to this location rather than a generic brand website.

Max. length is 255 characters.

Value/Type: string

description

Detailed description of the business and its services.

Min. length is 10 characters. Max. length is 750 characters.

Value/Type: string

business_hours

Standard weekly operating hours.

Each weekday can contain no more than two time ranges. Ranges must not overlap.

Value/Type: object

special_hours

Exceptions to regular hours, such as holidays or temporary closures. This field can only be set if business hours are specified. These hours override regular business hours.

Max. 30 entries.

Value/Type: array of objects

more_hours

Additional business hours for specific service types (for example, delivery or pickup). Synchronized with Google Business Profile (GBP). Requires a linked GBP account.

Value/Type: array of objects

service_area_places

Areas serviced by the business. If the suppress_address parameter is set to true, the service areas must be specified.

Value/Type: array of objects

category_ids

List of category identifiers (max. 10) that describe the business and help customers find relevant services.

Identifiers must be retrieved from the Get Categories endpoint.

Value/Type: array of strings

suppress_address

If set to true, the physical address is hidden from public listings and search results. If the address is hidden, service_area_places must be populated to define the business’s geographic reach.

Value/Type: boolean

coordinates

Exact geographic coordinates for the location.

Value/Type: object

featured_message

Promotional message or announcement displayed on the business profile.

Max. length is 50 characters.

Value/Type: string

featured_message_url

Call-to-action URL associated with the featured message.

Example: "https://www.semrush.com/local-business/start/"

Max. length is 255 characters.

Value/Type: string

youtube_video

URL of a YouTube video showcasing the business.

Example: "https://www.youtube.com/watch?v=ndJB4J951_k"

Max. length is 150 characters.

Value/Type: string

instagram_username

Instagram profile handle.

Example: semrush

Max. length is 30 characters.

Value/Type: string

twitter_username

X (formerly Twitter) profile handle.

Example: semrush

Max. length is 15 characters.

Value/Type: string

reopen_date

Date ("YYYY-MM-DD") when a temporarily closed location is scheduled to reopen. This must be a future date and is only applicable if the location status is set to temporarily closed.

Value/Type: string

payment_options

Supported payment methods for the business.

Identifiers must be retrieved from the Get Payment Options endpoint.

Value/Type: array of strings

Request example
curl -L -X PATCH 'https://api.semrush.com/apis/v4/local/v1/locations/04f447bda9f845d691fb4cc37daba031?update_mask=address_line_1,business_name,address_line_2'
  -H 'Content-Type: application/json'
  -H 'Authorization: Apikey YOUR_API_KEY'
  -d '{
    "business_name":"Updated business name",
    "address_line_1":"Naumburger Str."
  }'
Response exampleJSON
{
  "meta": {
      "success": true,
      "status_code": 200,
      "request_id": "9d55854e927ecaea7d80707cc8282189",
      "update_mask": ["address_line_1", "business_name", "address_line_2"]
  },
  "data": {
      "business_name": "Updated business name",
      "phone_number": "+1 222-666-1111",
      "country": "US",
      "region": "CA",
      "city": "New Brettmouth",
      "zip": "08527",
      "address_line_1": "Naumburger Str.",
      "website_url": "www.test.com",
      "description": "Some description here",
      "special_hours": [],
      "service_area_places": [
          {
              "name": "17763",
              "place_id": "DJYLLjkCOgvNiWDFEeiPIhXcAFpKRCJSGjsFdeV"
          },
          {
              "name": "North Many",
              "place_id": "AJfjhjLYkPiHljnHruSOntPsMLvsNthJqycYbSX"
          },
          {
              "name": "West Bradley",
              "place_id": "nYUkPeFsrTzygxnKapBRoBolALdaBxnqLyVhBRe"
          }
      ],
      "category_ids": [
          "42e91d12d5dd45029c709f223545abd5"
      ],
      "suppress_address": false,
      "coordinates": {
          "latitude": -6.761864717379694,
          "longitude": 13.537953520639036
      },
      "instagram_username": "some_user",
      "twitter_username": "some_user",
      "location_id": "04f447bda9f845d691fb4cc37daba031",
      "location_status": "COMPLETED",
      "submit_date": "2026-03-03T11:44:43.19",
      "errors": []
  }
}

Jump to Get LocationGet Location

Get a single location by its ID.

Jump to EndpointEndpoint

GEThttps://api.semrush.com/apis/v4/local/v1/locations/:location_id

Path parameters

location_idRequired

Path parameter. Unique identifier for this location.

Value/Type: string

Request example
curl -L 'https://api.semrush.com/apis/v4/local/v1/locations/3e8d046f62fe4b73802112e138a78532'
  -H 'Authorization: Apikey YOUR_API_KEY'
Response exampleJSON
{
  "meta": {
      "success": true,
      "status_code": 200,
      "request_id": "fc8e2dd369a9ed46f93ebffd9660afa0"
  },
  "data": {
      "business_name": "Delta Manor Apartments",
      "phone_number": "+1 435 864 3376",
      "country": "US",
      "region": "UT",
      "city": "Delta",
      "zip": "84624",
      "address_line_1": "111 W Main St, Delta, UT 84624, United States",
      "address_line_2": "Second floor",
      "website_url": "www.test.com",
      "description": "Welcome to our Some business name!",
      "business_hours": {
          "monday_hours": [
              {
                  "from": "08:00",
                  "to": "12:00"
              },
              {
                  "from": "14:00",
                  "to": "18:00"
              }
          ],
          "tuesday_hours": [
              {
                  "from": "08:00",
                  "to": "12:00"
              },
              {
                  "from": "14:00",
                  "to": "18:00"
              }
          ],
          "wednesday_hours": [
              {
                  "from": "08:00",
                  "to": "12:00"
              },
              {
                  "from": "14:00",
                  "to": "18:00"
              }
          ],
          "thursday_hours": [
              {
                  "from": "08:00",
                  "to": "12:00"
              },
              {
                  "from": "14:00",
                  "to": "18:00"
              }
          ],
          "friday_hours": [
              {
                  "from": "08:00",
                  "to": "12:00"
              },
              {
                  "from": "14:00",
                  "to": "18:00"
              }
          ],
          "saturday_hours": [
              {
                  "from": "08:00",
                  "to": "14:00"
              }
          ],
          "sunday_hours": []
      },
      "special_hours": [
          {
              "type": "CLOSED",
              "day": "2026-05-01",
              "times": []
          },
          {
              "type": "OPENED_ALL_DAY",
              "day": "2026-12-24",
              "times": []
          },
          {
              "type": "RANGE",
              "day": "2026-03-11",
              "times": [
                  {
                      "from": "14:00",
                      "to": "18:00"
                  }
              ]
          }
      ],
      "service_area_places": [
          {
              "name": "Delta, UT, USA",
              "place_id": "ChIJQRRb_PG0TIcRwoI8h4xTvTM"
          },
          {
              "name": "UT, USA",
              "place_id": "ChIJzfkTj8drTIcRP0bXbKVK370"
          }
      ],
      "category_ids": [
          "b871306d44c145a0b781ed2cb3b19bf1",
          "909c2eebd4fb4b338937d8518a3f0d73"
      ],
      "suppress_address": true,
      "coordinates": {
          "latitude": 39.35221240176079,
          "longitude": -112.57777149021301
      },
      "featured_message": "Call Today",
      "featured_message_url": "www.test.com",
      "youtube_video": "https://www.youtube.com/watch?v=nYykbUPQ9eo",
      "instagram_username": "some_instagram_username",
      "twitter_username": "some_x_username",
      "location_id": "6d6ac5e772284c569c6ca109008b4c4f",
      "location_status": "COMPLETED",
      "submit_date": "2025-08-14T15:57:56.414",
      "errors": []
  }
}

Jump to Get LocationsGet Locations

Get a paginated list of all locations.

Jump to EndpointEndpoint

GEThttps://api.semrush.com/apis/v4/local/v1/locations

Request Parameters

location_statuses

Supported values: "COMPLETED", "PROCESSING", "FAILED" Filter locations by status.

Value/Type: array of strings

limit

Mximum number of locations to be returned in a single paginated response.

Default is 50. Max. is 50.

Value/Type: integer

offset

Starting point for the subset of records to be returned.

Default is 0.

Value/Type: integer

frozen

Filters locations by their frozen status. If true, returns only frozen locations. If false, returns only non-frozen locations. If omitted, returns all locations regardless of frozen status.

Value/Type: boolean

Request example
curl -L 'https://api.semrush.com/apis/v4/local/v1/locations?location_statuses=COMPLETED,FAILED&limit=10&offset=10'
  -H 'Authorization: Apikey YOUR_API_KEY'
Response exampleJSON
{
  "meta": {
      "success": true,
      "status_code": 200,
      "request_id": "94ea05c2c3f903450236cd4f36023631"
  },
  "data": [
      {
          "business_name": "Some business name",
          "phone_number": "+1 112-330-1303",
          "country": "US",
          "region": "TX",
          "city": "Austin",
          "zip": "78731",
          "address_line_1": "3305 Northland",
          "special_hours": [],
          "service_area_places": [],
          "category_ids": [
              "c8124a0c01554493a645a58bb1fd9247",
              "ee5ecf6d8dc14797b750e97f75b03e4f",
              "79ece4794d46492f8e936516001abace"
          ],
          "suppress_address": false,
          "coordinates": {
              "latitude": 30.334286,
              "longitude": -97.7568222
          },
          "featured_message": "Call Today",
          "instagram_username": "some_username",
          "twitter_username": "some_username",
          "location_id": "b326158fb2a24777a76575b1883923e6",
          "location_status": "COMPLETED",
          "submit_date": "2026-02-16T14:38:14.57",
          "errors": []
      },
      {
          "business_name": "Another business name",
          "phone_number": "+357 16 932379",
          "country": "CY",
          "city": "Paphos",
          "zip": "8040",
          "address_line_1": "Apostolou Pavlou Avenue 99",
          "website_url": "https://some-website.com/",
          "description": "Established in 1954, Another Business Name remains a cornerstone of the domestic ball-bearing and gasket distribution industry.",
          "business_hours": {
              "monday_hours": [
                  {
                      "from": "09:00",
                      "to": "17:00"
                  }
              ],
              "tuesday_hours": [],
              "wednesday_hours": [],
              "thursday_hours": [],
              "friday_hours": [],
              "saturday_hours": [],
              "sunday_hours": []
          },
          "special_hours": [],
          "service_area_places": [],
          "category_ids": [
              "3e25b0338cf94ad8bd1c7d5a28140b65"
          ],
          "suppress_address": false,
          "coordinates": {
              "latitude": 34.7851347,
              "longitude": 32.4174674
          },
          "location_id": "15b4a2871cc14dda9fc448aed4060171",
          "location_status": "COMPLETED",
          "submit_date": "2026-02-03T12:03:05.301",
          "errors": []
      }
  ]
}

Jump to Delete LocationDelete Location

Permanently removes a location by its ID.

Jump to EndpointEndpoint

DELETEhttps://api.semrush.com/apis/v4/local/v1/locations/:location_id

Path parameters

location_idRequired

Unique identifier of the location to delete.

Value/Type: string

Request example
curl -X DELETE "https://api.semrush.com/apis/v4/local/v1/locations/3e8d046f62fe4b73802112e138a78532" \
-H "Authorization: Apikey YOUR_API_KEY"
Response exampleJSON
{
  "meta": {
      "request_id": "4fb1773ec2a8d61a0407f464599f897c",
      "status_code": 200,
      "success": true
  },
  "data": {}
}

Jump to Get ListingsGet Listings

Returns the listings associated with a specific location. Use the optional listing_statuses filter to narrow results by connection state.

Jump to EndpointEndpoint

GEThttps://api.semrush.com/apis/v4/local/v1/locations/:location_id/listings

Path parameters

location_idRequired

Unique identifier of the location for which you want to retrieve the listings.

Value/Type: string

Query parameters

listing_statuses

Filters the results to listings with the specified statuses. Multiple values can be provided.

Supported values: CONNECTED, SUBMITTED, UNAVAILABLE, DISCONNECTED, PROCESSING.

Value/Type: array of strings

Request example
curl -X GET "https://api.semrush.com/apis/v4/local/v1/locations/1d21ceab55d740709311ec9b8a12c01e/listings?listing_statuses=CONNECTED&listing_statuses=PROCESSING" \
-H "Authorization: Apikey YOUR_API_KEY"
Response exampleJSON
{
  "meta": {
      "request_id": "4fb1773ec2a8d61a0407f464599f897c",
      "status_code": 200,
      "success": true
  },
  "data": [
      {
          "id": "gbp-1d21ceab55d740709311ec9b8a12c01e",
          "name": "Google Business Profile",
          "status": "CONNECTED",
          "controllable": false,
          "url": "https://maps.google.com/?cid=7451928374651234567",
          "parent_id": ""
      },
      {
          "id": "apple-1d21ceab55d740709311ec9b8a12c01e",
          "name": "Apple Maps",
          "status": "CONNECTED",
          "controllable": true,
          "url": "https://maps.apple.com/?q=Some+Business+Name&ll=39.3522,-112.5778",
          "parent_id": ""
      },
      {
          "id": "yelp-child-1d21ceab55d740709311ec9b8a12c01e",
          "name": "Yelp",
          "status": "PROCESSING",
          "controllable": true,
          "url": "",
          "parent_id": "yelp-1d21ceab55d740709311ec9b8a12c01e"
      }
  ]
}

Jump to Disable ListingDisable Listing

Disables a location listing. To be disabled, a listing must be controllable and have one of the following statuses: CONNECTED, SUBMITTED, or UNAVAILABLE.

You can check if a listing is controllable by using the Get Listings endpoint and looking at the controllable field in the response.

Jump to EndpointEndpoint

POSThttps://api.semrush.com/apis/v4/local/v1/listings/:listing_id/disable

Path parameters

listing_idRequired

Unique identifier of the listing to disable.

Value/Type: string

Request example
curl -X POST "https://api.semrush.com/apis/v4/local/v1/listings/b1c2d3e4f5a64789abcdef0123456789/disable" \
-H "Authorization: Apikey YOUR_API_KEY" \
-H "Content-Type: application/json"
Response exampleJSON
{
  "meta": {
      "request_id": "a3f7c1e2d4b56789012345678abcdef0",
      "status_code": 200,
      "success": true
  },
  "data": {}
}

Jump to Enable ListingEnable Listing

Enables a location listing. To be enabled, a listing must be controllable and have a status of DISCONNECTED.

You can check if a listing is controllable by using the Get Listings endpoint and looking at the controllable field in the response.

Jump to EndpointEndpoint

POSThttps://api.semrush.com/apis/v4/local/v1/listings/:listing_id/enable

Path parameters

listing_idRequired

Unique identifier of the listing to enable.

Value/Type: string

Request example
curl -X POST "https://api.semrush.com/apis/v4/local/v1/listings/a3f1c2e4b5d6789012345678abcdef01/enable" \
-H "Authorization: Apikey YOUR_API_KEY"
Response exampleJSON
{
  "meta": {
      "request_id": "7c3a91e0f2b84d5e6a1092bdc3874f12",
      "status_code": 200,
      "success": true
  },
  "data": {}
}

Jump to Create ImageCreate Image

Upload an image to a location’s profile.

Jump to EndpointEndpoint

POSThttps://api.semrush.com/apis/v4/local/v1/locations/:location_id/images

Path parameters

location_idRequired

Unique identifier of the location to attach the image to.

Value/Type: string

Body parameters

contentRequired

Base64-encoded image data. Supported formats: JPEG, JPG, PNG.

Max. size: 4MB.

Value/Type: string

typeRequired

Intended use of the image. Supported values: PHOTO, PROFILE, COVER.

Dimension constraints:

  • COVER: 480x270 px (min) to 2120x1192 px (max)
  • PHOTO: 270x270 px (min) to 5000x5000 px (max)
  • PROFILE: 250x250 px (min) to 5000x5000 px (max)

Value/Type: string

description

Caption describing the image content.

Value/Type: string

Request example
curl -X POST "https://api.semrush.com/apis/v4/local/v1/locations/3e8d046f62fe4b73802112e138a78532/images" \
-H "Authorization: Apikey YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "/9j/4AAQSkZJRgABAQEASABIAAD...",
"type": "PHOTO",
"description": "Front entrance of the store"
}'
Response exampleJSON
{
  "meta": {
      "request_id": "4fb1773ec2a8d61a0407f464599f897c",
      "status_code": 200,
      "success": true
  },
  "data": {
      "id": "a1b2c3d4e5f64a7b8c9d0e1f2a3b4c5d",
      "type": "PHOTO",
      "url": "https://images.semrush.com/local/a1b2c3d4e5f64a7b8c9d0e1f2a3b4c5d.jpg",
      "description": "Front entrance of the store",
      "create_date": "2024-05-11T00:28:38"
  }
}

Jump to Get ImagesGet Images

Returns a paginated list of images associated with a location.

Jump to EndpointEndpoint

GEThttps://api.semrush.com/apis/v4/local/v1/locations/:location_id/images

Path parameters

location_idRequired

ID of the location for which you need to get the images.

Value/Type: string

Query parameters

image_types

Filters results to one or more image types. Supported values: PHOTO, PROFILE, COVER.

Value/Type: []string

offset

Zero-based starting position for the results page. Default is 0.

Value/Type: integer

limit

Maximum number of images to return in a single response. Default is 50. Max. is 50.

Value/Type: integer

Request example
curl -X GET "https://api.semrush.com/apis/v4/local/v1/locations/3e8d046f62fe4b73802112e138a78532/images?image_types=PHOTO&offset=0&limit=10" \
-H "Authorization: Apikey YOUR_API_KEY"
Response exampleJSON
{
  "meta": {
      "limit": 10,
      "offset": 0,
      "request_id": "4fb1773ec2a8d61a0407f464599f897c",
      "status_code": 200,
      "success": true,
      "total": 42
  },
  "data": [
      {
          "id": "a1b2c3d4e5f64a7b8c9d0e1f2a3b4c5d",
          "type": "PHOTO",
          "url": "https://lh3.googleusercontent.com/p/AF1QipN3xZkL8mVqT2oWpBkD1YnRcEeJvSs6k4fHg=s1024",
          "description": "Exterior view of the main entrance",
          "create_date": "2024-05-11T00:28:38"
      },
      {
          "id": "b7c8d9e0f1a24b3c4d5e6f7a8b9c0d1e",
          "type": "COVER",
          "url": "https://lh3.googleusercontent.com/p/BG2RjqOM4yZkP9nVuT3pXqCkE2ZsRfFkWTt7m5gIh=s1024",
          "description": "Interior seating area with natural lighting",
          "create_date": "2024-07-22T14:15:00"
      }
  ]
}

Jump to Update ImageUpdate Image

Updates the metadata of an existing location image, such as its caption.

Jump to EndpointEndpoint

PUThttps://api.semrush.com/apis/v4/local/v1/images/:image_id

Path parameters

image_idRequired

Unique identifier of the image to update.

Value/Type: string

Body parameters

description

Caption describing the image content. Max. length is 255 characters.

Value/Type: string

Request example
curl -X PUT "https://api.semrush.com/apis/v4/local/v1/images/a1b2c3d4e5f64789abcdef0123456789" \
-H "Authorization: Apikey YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"description": "Front entrance of our downtown location"
}'
Response exampleJSON
{
  "meta": {
      "request_id": "4fb1773ec2a8d61a0407f464599f897c",
      "status_code": 200,
      "success": true
  },
  "data": {
      "id": "a1b2c3d4e5f64789abcdef0123456789",
      "type": "PHOTO",
      "url": "https://images.semrush.com/local/a1b2c3d4e5f64789abcdef0123456789.jpg",
      "description": "Front entrance of our downtown location",
      "create_date": "2024-05-11T00:28:38"
  }
}

Jump to Delete ImageDelete Image

Permanently removes an image from a location’s profile.

Jump to EndpointEndpoint

DELETEhttps://api.semrush.com/apis/v4/local/v1/images/:image_id

Path parameters

image_idRequired

Unique identifier of the image to delete.

Value/Type: string

Request example
curl -X DELETE "https://api.semrush.com/apis/v4/local/v1/images/a1b2c3d4e5f64789abcdef0123456789" \
-H "Authorization: Apikey YOUR_API_KEY"
Response exampleJSON
{
  "meta": {
      "request_id": "4fb1773ec2a8d61a0407f464599f897c",
      "status_code": 200,
      "success": true
  },
  "data": {}
}

Jump to Get CategoriesGet Categories

Get a paginated list of business categories for a specific country.

Jump to EndpointEndpoint

GEThttps://api.semrush.com/apis/v4/local/v1/categories

Request Parameters

countryRequired

Filter categories by country.

Value/Type: string

limit

Maximum number of categories to be returned in a single paginated response.

Default is 1000. Max. is 1000.

Value/Type: integer

offset

Starting point for the subset of records to be returned.

Default is 0.

Value/Type: integer

Request example
curl -L 'https://api.semrush.com/apis/v4/local/v1/categories?country=CZ&limit=1000&offset=1000'
 -H 'Authorization: Apikey YOUR_API_KEY'
Response exampleJSON
{
  "meta": {
      "success": true,
      "status_code": 200,
      "request_id": "c2ad517a4e341f07b543f0f68477e9fa"
  },
  "data": [
      {
          "id": "46e6afbab7cd408bae8d392184a5627e",
          "name": "Marble supplier",
          "full_name": "Businesses and Services > Supplier > Marble supplier",
          "parent_id": "12898ed82f5849b1abb684887b82b464"
      },
      {
          "id": "836dca5e11c546c49eb8802e9efe2d54",
          "name": "Metal industry suppliers",
          "full_name": "Businesses and Services > Supplier > Metal industry suppliers",
          "parent_id": "12898ed82f5849b1abb684887b82b464"
      },
      {
          "id": "90d3ba25b03f4e13bb1ef77d9097a025",
          "name": "Metal detecting equipment supplier",
          "full_name": "Businesses and Services > Supplier > Metal detecting equipment supplier",
          "parent_id": "12898ed82f5849b1abb684887b82b464"
      }
  ]
}

Jump to Get More Hour TypesGet More Hour Types

Returns the list of hour types available for a specific location. Use the returned type values in the more_hours field when updating a location.

This endpoint is only applicable to locations connected to Google Business Profile (GBP).

Jump to EndpointEndpoint

GEThttps://api.semrush.com/apis/v4/local/v1/locations/:location_id/more-hour-types

Path parameters

location_idRequired

Unique identifier of the location.

Value/Type: string

Request example
curl -X GET "https://api.semrush.com/apis/v4/local/v1/locations/3e8d046f62fe4b73802112e138a78532/more-hour-types" \
-H "Authorization: Apikey YOUR_API_KEY"
Response exampleJSON
{
  "meta": {
      "request_id": "4fb1773ec2a8d61a0407f464599f897c",
      "status_code": 200,
      "success": true
  },
  "data": {
      "more_hour_types": [
          "SENIOR_HOURS",
          "DRIVE_THROUGH",
          "DELIVERY",
          "TAKEOUT",
          "PICKUP",
          "KITCHEN",
          "BREAKFAST",
          "LUNCH",
          "DINNER",
          "BRUNCH",
          "HAPPY_HOUR",
          "PRAYER_GENERAL"
      ]
  }
}

Jump to Get Payment OptionsGet Payment Options

Returns the list of payment option identifiers available for a specific location. Use the returned values to populate the payment_options field when updating a location.

Jump to EndpointEndpoint

GEThttps://api.semrush.com/apis/v4/local/v1/locations/:location_id/payment-options

Path parameters

location_idRequired

Unique identifier of the location for which you want to retrieve payment options.

Value/Type: string

Request example
curl -X GET "https://api.semrush.com/apis/v4/local/v1/locations/3e8d046f62fe4b73802112e138a78532/payment-options" \
-H "Authorization: Apikey YOUR_API_KEY"
Response exampleJSON
{
  "meta": {
      "request_id": "4fb1773ec2a8d61a0407f464599f897c",
      "status_code": 200,
      "success": true
  },
  "data": {
      "payment_options": [
          "CASH",
          "CREDIT_CARD",
          "DEBIT_CARD",
          "NFC_MOBILE_PAYMENTS"
      ]
  }
}

Last updated: May 29, 2026

Was this page helpful?