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
Query 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
Response Parameters
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"
}'{
"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
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, gbp_category_ids, gbp_attributes
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
Response Parameters
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."
}'{
"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. If there is no location with the given ID, an error is returned.
Jump to EndpointEndpoint
Path parameters
location_idRequired
Value/Type: string
Response Parameters
curl -L 'https://api.semrush.com/apis/v4/local/v1/locations/3e8d046f62fe4b73802112e138a78532'
-H 'Authorization: Apikey YOUR_API_KEY'{
"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
Returns a paginated list of all locations associated with the current user.
Jump to EndpointEndpoint
Request Parameters
location_statuses
Supported values: "COMPLETED", "PROCESSING", "FAILED"
Filter locations by status.
Value/Type: array of strings
limit
Maximum 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
Response Parameters
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'{
"meta": {
"success": true,
"status_code": 200,
"request_id": "94ea05c2c3f903450236cd4f36023631",
"limit": 5,
"offset": 10,
"total": 12
},
"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
Path parameters
location_idRequired
Unique identifier of the location to delete.
Value/Type: string
curl -X DELETE "https://api.semrush.com/apis/v4/local/v1/locations/3e8d046f62fe4b73802112e138a78532" \
-H "Authorization: Apikey YOUR_API_KEY"{
"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.
If the location is frozen or the user doesn’t have permission, an error is returned. You can check if a location is frozen by checking the frozen field in the Location object.
Jump to EndpointEndpoint
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
Response Parameters
curl -X GET "https://api.semrush.com/apis/v4/local/v1/locations/1d21ceab55d740709311ec9b8a12c01e/listings?listing_statuses=CONNECTED,PROCESSING" \
-H "Authorization: Apikey YOUR_API_KEY"{
"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
Path parameters
listing_idRequired
Unique identifier of the listing to disable.
Value/Type: string
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"{
"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
Path parameters
listing_idRequired
Unique identifier of the listing to enable.
Value/Type: string
curl -X POST "https://api.semrush.com/apis/v4/local/v1/listings/a3f1c2e4b5d6789012345678abcdef01/enable" \
-H "Authorization: Apikey YOUR_API_KEY"{
"meta": {
"request_id": "7c3a91e0f2b84d5e6a1092bdc3874f12",
"status_code": 200,
"success": true
},
"data": {}
}Jump to Create ImageCreate Image
Adds an image to a location. If the location is frozen or the user doesn’t have permission, an error is returned. You can check if a location is frozen by checking the frozen field in the Location object.
Jump to EndpointEndpoint
Path parameters
location_idRequired
Path parameter. The ID of the location related to this image.
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
Response Parameters
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"
}'{
"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. If the location is frozen or the user doesn’t have permission, an error is returned. You can check if a location is frozen by checking the frozen field in the Location object.
Jump to EndpointEndpoint
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
Starting point for the subset of records to be returned.
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
Response Parameters
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"{
"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
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
Response Parameters
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"
}'{
"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
Path parameters
image_idRequired
Unique identifier of the image to delete.
Value/Type: string
curl -X DELETE "https://api.semrush.com/apis/v4/local/v1/images/a1b2c3d4e5f64789abcdef0123456789" \
-H "Authorization: Apikey YOUR_API_KEY"{
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true
},
"data": {}
}Jump to Get CategoriesGet Categories
Returns a paginated list of location categories supported within a specific country. These categories are used for location management across the listings and differ from GBP categories.
Jump to EndpointEndpoint
Request Parameters
countryRequired
Filter categories by country, 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
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
Response Parameters
curl -L 'https://api.semrush.com/apis/v4/local/v1/categories?country=CZ&limit=1000&offset=1000'
-H 'Authorization: Apikey YOUR_API_KEY'{
"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 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
Path parameters
location_idRequired
Unique identifier of the location for which you want to retrieve payment options.
Value/Type: string
Response Parameters
data
Object containing available payment options.
Value/Type: object
payment_options
Payment option identifiers available for the location. For example: "CASH", "CREDIT_CARD", "DEBIT_CARD", "NFC_MOBILE_PAYMENTS".
Value/Type: array of strings
curl -X GET "https://api.semrush.com/apis/v4/local/v1/locations/3e8d046f62fe4b73802112e138a78532/payment-options" \
-H "Authorization: Apikey YOUR_API_KEY"{
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true
},
"data": {
"payment_options": [
"CASH",
"CREDIT_CARD",
"DEBIT_CARD"
]
}
}Last updated: September 1, 2026