MCPHerramientas MCP/Ubicaciones/bulk_update_locations

bulk_update_locations

Writelocations:write

Apply the same profile patch, publisher overrides, and/or tag add/remove to many locations at once, optionally publishing each to Google afterward. Useful for changes like "add the tag 'holiday-hours-2026' to these 40 locations" or "turn off online ordering everywhere in this client". Up to 100 locations per call: the first 100 are applied and every extra id comes back in `results` as `{ ok: false, status: "skipped_over_limit" }` (also counted in `skipped`) — send those in another call, and never read a response with skipped > 0 as "all done". Tags are merged per-location (added/removed against each location's existing tags), never wholesale replaced. Returns a per-location result so partial failures are visible.

Parámetros
locationIdsstring[]obligatorio
The locations to update (required, up to 100).
patchobjectopcional
Base profile fields to set on every location — exactly update_location's fields (minus locationId and applyToPublishers), e.g. { description, phone, tags }, including hours (regularHours, moreHours, specialHours — e.g. to close every location in a client on the same date) and services. Omit fields you don't want to change. `attributes` takes update_location's { id: value } map (the stored `[{ id, value }]` array is still accepted); ids Google's catalog can't take are listed in `rejectedAttributes`.
namestringopcional
The location's business name.
descriptionstringopcional
The business description.
taglinestringopcional
A short tagline/slogan for the business.
storeCodestringopcional
Your internal store code / reference for this location.
logoUrlstringopcional
URL of the location's logo image.
languageCodestringopcional
The primary language of the listing, as a code (e.g. "en").
streetstringopcional
Street address, line 1.
street1stringopcional
Street address, line 2.
citystringopcional
City.
stateIsostringopcional
State or region, as an ISO code (e.g. "CA").
postalCodestringopcional
Postal or ZIP code.
latitudenumberopcional
Latitude. If you change the address without setting coordinates, they're re-derived automatically.
longitudenumberopcional
Longitude. If you change the address without setting coordinates, they're re-derived automatically.
phonestringopcional
Primary phone number.
additionalPhonesstring[]opcional
Any additional phone numbers (replaces the existing list).
websitestringopcional
The location's website URL.
businessEmailstringopcional
A public contact email for the business.
categoryIdstringopcional
General category id — look it up with list_categories.
categoryNamestringopcional
General category display name (from list_categories).
publisherCategoriesobjectopcional
Each publisher's PRIMARY category, as { id, name } looked up with list_publisher_categories — both are required for each one you send (an id alone would clear or mislabel it). Google (a gcid such as "gcid:cookie_shop") is what Google shows and ranks on; the general category above does not override it. Facebook, Apple and Bing are set the same way. Only the publishers you name change; the others keep theirs. Don't combine with applyToPublishers. The value is stored, and reaches a publisher once it is connected for this location.
googleobjectopcional
idstringopcional
The publisher's own category id (from list_publisher_categories)
namestringopcional
The category's display name
facebookobjectopcional
idstringopcional
The publisher's own category id (from list_publisher_categories)
namestringopcional
The category's display name
appleobjectopcional
idstringopcional
The publisher's own category id (from list_publisher_categories)
namestringopcional
The category's display name
bingobjectopcional
idstringopcional
The publisher's own category id (from list_publisher_categories)
namestringopcional
The category's display name
additionalCategoriesobject[]opcional
Up to 9 extra categories, each an { id?, name } (replaces the existing list). A bare name is accepted and its id is resolved from the category catalog where one matches.
idstringopcional
namestringopcional
Category name
attributesobjectopcional
Google Business Profile attributes, as a map of attribute id to value — e.g. { "attributes/is_owned_by_women": true, "attributes/wi_fi": "free" }. REPLACES the whole set, so read the current ones with get_location_by_id and pass back everything you want kept. Values are a boolean for yes/no attributes, a string for single-choice ones, or { setValues: [...], unsetValues: [...] } for multi-select. Google only accepts attributes its catalog allows for this location's category and country — unsupported ids are dropped when publishing rather than failing the update. Don't set social-link, menu-URL or payment attributes here; use socialLinks, menuUrl and the payment fields instead.
servicesobject[]opcional
The services or products this location offers (replaces the existing list). Each entry is { name, description?, price?, currency?, googleServiceTypeId? }. price is a number in the listed currency (e.g. 12.5 with currency "USD"); omit both for services with no set price.
namestringopcional
Service or product name (required).
descriptionstringopcional
Short description — this is where long-tail keywords belong.
pricenumberopcional
Price as a number, in `currency`.
currencystringopcional
ISO 4217 currency code, e.g. "USD".
googleServiceTypeIdstringopcional
Google's service-type id, when it maps to one of Google's predefined services. There's currently no tool to look these up — omit it and the service is still saved, just without that Google-specific mapping.
ownerNamestringopcional
The owner's name.
menuUrlstringopcional
URL of the business's menu.
yearEstablishednumberopcional
The year the business was established (e.g. 2012).
tagsstring[]opcional
Internal tags for your own organization — not shown publicly (replaces the existing list).
labelsstring[]opcional
Internal labels for this location (replaces the existing list).
openStatusopcional
Whether the business is open: OPEN, CLOSED_TEMPORARILY or CLOSED_PERMANENTLY (null clears it).
openingDateopcional
When the business opened (or will open), as YYYY-MM-DD (null clears it).
googleAdsPhoneopcional
The phone number Google Ads call extensions use for this location (null clears it).
relationshipDataopcional
Chain membership and parent/child links as Google models them: { parentChain: "chains/{id}" | null, parentLocation: { placeId, relationType } | null, childrenLocations: [{ placeId, relationType }] }. Replaces the stored value; null clears it.
regularHoursobject[]opcional
The weekly regular-hours schedule — replaces the existing schedule entirely. Pass one entry per day of the week (7 entries, one for each of MONDAY–SUNDAY).
day"MONDAY" | "TUESDAY" | "WEDNESDAY" | "THURSDAY" | "FRIDAY" | "SATURDAY" | "SUNDAY"opcional
Day of week.
closedbooleanopcional
true if closed all day.
periodsobject[]opcional
Open/close intervals for this day. Omit or leave empty when closed. For 24-hour, use a single period { open: "00:00", close: "24:00" }.
openstringopcional
Open time, 24h "HH:MM" (e.g. "09:00").
closestringopcional
Close time, 24h "HH:MM" — use "24:00" for midnight/end-of-day.
moreHoursobject[]opcional
Extra hour types beyond regular hours (delivery, takeout, happy hour, etc.), replaces the existing list. Each entry is { hoursTypeId, label?, days }, where days is the same weekly-schedule shape as regularHours. Common hoursTypeId values: DELIVERY, TAKEOUT, PICKUP, DRIVE_THROUGH, BREAKFAST, LUNCH, DINNER, BRUNCH, HAPPY_HOUR, KITCHEN, ONLINE_SERVICE_HOURS, ACCESS, SENIOR_HOURS.
hoursTypeIdstringopcional
The more-hours type id, e.g. "DELIVERY".
labelstringopcional
Optional display label for this hours type.
daysobject[]opcional
Weekly schedule for this hours type, same shape as regularHours.
day"MONDAY" | "TUESDAY" | "WEDNESDAY" | "THURSDAY" | "FRIDAY" | "SATURDAY" | "SUNDAY"opcional
Day of week.
closedbooleanopcional
true if closed all day.
periodsobject[]opcional
Open/close intervals for this day. Omit or leave empty when closed. For 24-hour, use a single period { open: "00:00", close: "24:00" }.
openstringopcional
Open time, 24h "HH:MM" (e.g. "09:00").
closestringopcional
Close time, 24h "HH:MM" — use "24:00" for midnight/end-of-day.
specialHoursobject[]opcional
One-off date overrides — holiday closures or a single day's special hours — replaces the existing list. Each entry is { date, closed, open?, close? } where date is any calendar date as "YYYY-MM-DD" (not limited to named holidays — use this for requests like "mark this Sunday, Aug 2 2026, as closed"). When closed is false, pass open/close as 24h "HH:MM".
datestringopcional
The date, as "YYYY-MM-DD".
closedbooleanopcional
true if closed all day on this date.
openstringopcional
Open time, 24h "HH:MM", when not closed.
closestringopcional
Close time, 24h "HH:MM", when not closed.
serviceAreaopcional
Service-area settings — for a business that serves customers at their location. businessType CUSTOMER_LOCATION_ONLY hides the street address on Google (a pure service-area business; the street is never sent there); CUSTOMER_AND_BUSINESS_LOCATION shows the address plus the areas served. places is up to 20 areas, each { name, placeId? }; Google only accepts places with their Google Place ID, so pass placeId for every place you want on Google. Pass null to clear (a plain storefront).
publisherServiceAreasobjectopcional
A different service area per publisher, stored as that publisher's own value; a publisher left out uses serviceArea. Each key is a serviceArea object (same shape). On update_location, null for a publisher removes its own value so it goes back to using serviceArea.
googleopcional
Service-area settings — for a business that serves customers at their location. businessType CUSTOMER_LOCATION_ONLY hides the street address on Google (a pure service-area business; the street is never sent there); CUSTOMER_AND_BUSINESS_LOCATION shows the address plus the areas served. places is up to 20 areas, each { name, placeId? }; Google only accepts places with their Google Place ID, so pass placeId for every place you want on Google. Pass null to clear (a plain storefront).
facebookopcional
Service-area settings — for a business that serves customers at their location. businessType CUSTOMER_LOCATION_ONLY hides the street address on Google (a pure service-area business; the street is never sent there); CUSTOMER_AND_BUSINESS_LOCATION shows the address plus the areas served. places is up to 20 areas, each { name, placeId? }; Google only accepts places with their Google Place ID, so pass placeId for every place you want on Google. Pass null to clear (a plain storefront).
appleopcional
Service-area settings — for a business that serves customers at their location. businessType CUSTOMER_LOCATION_ONLY hides the street address on Google (a pure service-area business; the street is never sent there); CUSTOMER_AND_BUSINESS_LOCATION shows the address plus the areas served. places is up to 20 areas, each { name, placeId? }; Google only accepts places with their Google Place ID, so pass placeId for every place you want on Google. Pass null to clear (a plain storefront).
bingopcional
Service-area settings — for a business that serves customers at their location. businessType CUSTOMER_LOCATION_ONLY hides the street address on Google (a pure service-area business; the street is never sent there); CUSTOMER_AND_BUSINESS_LOCATION shows the address plus the areas served. places is up to 20 areas, each { name, placeId? }; Google only accepts places with their Google Place ID, so pass placeId for every place you want on Google. Pass null to clear (a plain storefront).
socialLinksobjectopcional
Social profile URLs. Only the keys you pass change; pass null for a key to clear it. Published to Google as url_* attributes and to Bing/Apple's social fields — don't send those as attributes.
facebookopcional
Facebook page URL.
instagramopcional
Instagram URL.
twitteropcional
X/Twitter URL.
linkedinopcional
LinkedIn URL.
youtubeopcional
YouTube URL.
tiktokopcional
TikTok URL.
pinterestopcional
Pinterest URL.
paymentMethodsstring[]opcional
Payment methods accepted, e.g. "Visa", "American Express", "Cash only" (replaces the existing list; [] clears it). Published to Google as pay_* attributes, and to Apple and Bing.
clearPublisherOverridesobjectopcional
Reset per-publisher values so that publisher uses the shared (Master) value again. Keyed by publisher: a list of field names (e.g. { "google": ["name", "description"] }) or ["all"] to drop every override it has.
googlestring[]opcional
Field names to reset, or ["all"].
facebookstring[]opcional
Field names to reset, or ["all"].
applestring[]opcional
Field names to reset, or ["all"].
bingstring[]opcional
Field names to reset, or ["all"].
overridesobjectopcional
Per-publisher overrides to apply to every location, keyed by publisher (google/facebook/apple/bing), each an object of profile fields.
addTagsstring[]opcional
Internal tags to add to every location (merged with each location's existing tags).
removeTagsstring[]opcional
Internal tags to remove from every location.
publishbooleanopcional
If true, push each updated location to Google immediately afterward.
Solicitud de ejemplo
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "bulk_update_locations",
    "arguments": {
      "locationIds": [
        "string"
      ]
    }
  }
}
Respuesta de ejemplo
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "..."
      }
    ]
  }
}

La forma de la respuesta se muestra a modo ilustrativo — el contenido real depende de la herramienta y de tus datos.