Voz de Marca
Una guía de voz construida a partir de lo que la marca ya dice y a lo que sus clientes ya responden. La voz es la personalidad que se mantiene igual en todas partes. El tono es cómo esa personalidad se adapta al momento: un anuncio de búsqueda, una disculpa, un cliente preocupado que escribe a las 11 p.m. El estilo es el conjunto de pequeñas reglas que hacen que ambos sean repetibles. Esta habilidad documenta los tres, y fundamenta cada elección en el propio texto de la marca, sus resultados de clics, las palabras de sus clientes y los vacíos que sus rivales dejan abiertos.
También ejecuta un modo por sí solo: la auditoría de mensajes del sitio web (después del Paso 7). Ese modo lee las páginas clave del sitio juntas y verifica que cuenten una historia con los anuncios, luego clasifica las correcciones por tráfico.
Antes de empezar
Necesitas el MCP de InsightfulPipe conectado con al menos una fuente del texto propio de la marca: una cuenta de Google Ads o Meta Ads, una página de Facebook, Instagram o una página de LinkedIn, o un sitio web que DataForSEO pueda leer. Sin ninguna de ellas, usa "Sin conexión" al final.
- Llama a
query_contextsconrequest="accounts"paragoogle-ads,facebook-ads,facebook-pages,instagram-profile,linkedin-pages,google-search-consoleydataforseo. Anotaworkspace_id, elbrand_idpropio de cada fila (las cuentas de un negocio pueden estar bajo diferentes marcas) y el id de la cuenta, página, sitio u organización. En un espacio de trabajo de agencia, pregunta para qué negocio es esta guía y lee solo las cuentas de ese negocio. - Llama a
query_contextsconrequest="actions_details"para cada lectura en "Las llamadas" a continuación, y sigue las formas del cuerpo que devuelve, con las excepciones enumeradas en "Cómo ejecutar las consultas". - Pregunta al usuario y usa los valores predeterminados cuando no sepa:
- La marca en una línea: qué hace y para quién. Valor predeterminado: inferido de los anuncios y páginas; di que es una inferencia.
- Texto que les gusta y texto que sienten incorrecto. Dos o tres ejemplos de cada uno, suyos o de otros. Opcional, y vale la pena pedirlo: lo que se siente incorrecto es tan útil como lo que se siente correcto.
- Lo que la marca defiende y contra lo que está. Dos o tres creencias que dan forma a cómo habla, como "las personas merecen una respuesta directa". Opcional. Valor predeterminado: no proporcionado, y los pilares se basan solo en la evidencia; dilo.
- Rivales. De dos a cinco nombres o dominios. Valor predeterminado: los negocios que aparecen en Google para los dos temas principales no relacionados con la marca de la marca (paso 5).
- Reglas que ya existen: una guía de estilo, palabras prohibidas, límites legales o regulatorios sobre afirmaciones (ley, salud, finanzas, alcohol). Valor predeterminado: ninguna, pero cada superlativo aún se marca (paso 6).
- Por dónde va el texto: los canales que la guía debe cubrir. Valor predeterminado: los canales encontrados en el paso 1, más el sitio web y el correo electrónico.
Para una auditoría de mensajes del sitio web solamente, también busca google-analytics y crawler en el paso 1, y haz las preguntas del propio modo (bajo "Modo: Auditoría de mensajes del sitio web") en lugar de la lista anterior.
Ventana. Anuncios, publicaciones y términos de búsqueda: los últimos 90 días completos. Indica las fechas al inicio del informe.
Cómo ejecutar las consultas
Cada lectura pasa por query_data con la plataforma nombrada. Esta habilidad nunca llama a execute_action. Reglas encontradas en ejecuciones en vivo:
- Fechas de Google Ads.
DURING LAST_90_DAYSes rechazado. Usasegments.date BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'. - Meta Ads rechaza campos anidados.
get_adsconcreative{title,body}es rechazado. Pide el campocreativesimple, que devuelve el id del creativo, luego lee el texto conget_ad_creatives. Los anuncios que fueron eliminados aún aparecen en los insights pero no enget_ads; déjalos fuera y cuéntalos. - Algunos sitios rechazan lectores automatizados. En la ejecución de construcción, el sitio del cliente respondió 403, y
onpage_content_parsingdevolvió 0 elementos (sin error). Cuando eso suceda, lee la voz de la página a partir de los propios títulos y fragmentos de Google de las páginas de la marca en las búsquedas del paso 5, pide al usuario que pegue una o dos páginas clave, y di cuáles usaste. - El rastreador SEO puede estar caído. El 2026-10-06 cada acción del rastreador devolvió
Error fetching URL, también en sitios de control. Usa DataForSEO para el texto de la página, y tratacontent-quality-checkerybrand-extractorcomo extras opcionales. El 2026-10-30 el rastreador estaba de vuelta, ybrand-extractordevolvió colores, fuentes y botones. - Las bibliotecas de anuncios pueden estar caídas. El mismo día
google_company_adsygoogle_search_advertisersvolvieron vacíos incluso para anunciantes muy grandes, yfacebook_search_companiesfalló con un restablecimiento de conexión. Los anuncios de rivales de las bibliotecas están sin probar en la ejecución de construcción; la voz rival proviene de los resultados de Google (paso 5) en su lugar. - Las páginas de LinkedIn pueden necesitar una reconexión. Si una llamada devuelve "Vuelve a conectar tu página de LinkedIn", omite LinkedIn, dilo y continúa. La lectura de LinkedIn está sin probar hasta que se conecte.
- Search Console limita una extracción solo de consultas a 1,000 filas. Eso es suficiente para vocabulario; di que la lista son las 1,000 principales.
- DataForSEO cuesta dinero. Usa
location_code2840 ylanguage_codeena menos que la audiencia esté en otro lugar. Limita una ejecución a 6 llamadas: hasta 3 lecturas de página y 2 o 3 búsquedas. Lee la página más visitada primero; si vuelve con 0 elementos, el sitio está rechazando lectores, así que no pagues por las otras páginas. La auditoría de mensajes del sitio web tiene su propio presupuesto: una lectura de página por página, indicada antes de que se ejecute (W1). - Las llamadas de la auditoría de mensajes del sitio web se probaron el 2026-10-30.
GA4 get_reportporlandingPagedevolvió sesiones y eventos clave por página.Search Console search_analyticspor página y consulta devolvió elrow_limitcompleto de 5,000 filas. Las comprobaciones del rastreador funcionaron en un sitio que permite lectores, ybrand-extractordevolvió las etiquetas de los botones. En un sitio que rechaza lectores automatizados, el rastreador no da error:meta-tags-checkerdevuelvetitle_tag_count0 yheadings-checkerdevuelveno_headings. Trata eso como "no se pudo leer", nunca como un título o H1 faltante. Cuando la marca tiene más de una conexión de DataForSEO, añadeaccount_ida la lectura de página. - Espacia las llamadas. No envíes más de una llamada cada 2 segundos. Cuando una llamada sea rechazada con un tiempo de reintento, espera ese tiempo y reintenta una vez.
Si una llamada falla, continúa. Marca esa fuente como desconocida, di qué llamada falló y por qué, y nunca llenes el vacío con una suposición.
Las llamadas
Google Ads: cada titular y descripción con sus propios clics
{"platform": "google-ads", "action": "gaql", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "account_id": "<CUSTOMER_ID>",
"query": "SELECT campaign.name, ad_group_ad_asset_view.field_type, ad_group_ad_asset_view.performance_label, asset.text_asset.text, metrics.impressions, metrics.clicks, metrics.conversions FROM ad_group_ad_asset_view WHERE segments.date BETWEEN '<START>' AND '<END>' AND ad_group_ad_asset_view.field_type IN ('HEADLINE', 'DESCRIPTION') AND campaign.status = 'ENABLED' AND ad_group_ad_asset_view.enabled = TRUE AND metrics.impressions > 0 ORDER BY metrics.impressions DESC LIMIT 1000"}
Google Ads: los anuncios y a dónde envían a las personas
{"platform": "google-ads", "action": "gaql", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "account_id": "<CUSTOMER_ID>",
"query": "SELECT campaign.name, ad_group.name, ad_group_ad.ad.id, ad_group_ad.ad.responsive_search_ad.headlines, ad_group_ad.ad.responsive_search_ad.descriptions, ad_group_ad.ad.final_urls, ad_group_ad.ad_strength, metrics.impressions, metrics.clicks, metrics.conversions FROM ad_group_ad WHERE segments.date BETWEEN '<START>' AND '<END>' AND ad_group_ad.status = 'ENABLED' AND campaign.status = 'ENABLED' AND ad_group_ad.ad.type = 'RESPONSIVE_SEARCH_AD' AND metrics.impressions > 0 ORDER BY metrics.impressions DESC LIMIT 50"}
Las URL finales con la mayor cantidad de impresiones son las páginas a leer en el paso 1.
Google Ads: el total de impresiones y clics de la cuenta (para indicar cuánto cubre el informe de términos de búsqueda)
{"platform": "google-ads", "action": "gaql", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "account_id": "<CUSTOMER_ID>",
"query": "SELECT metrics.impressions, metrics.clicks FROM customer WHERE segments.date BETWEEN '<START>' AND '<END>'"}
Google Ads: las palabras con las que los clientes buscan
{"platform": "google-ads", "action": "search_terms_report", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "account_id": "<CUSTOMER_ID>", "start_date": "<START>", "end_date": "<END>", "limit": 5000}
Meta Ads: qué anuncios se ejecutaron, luego su texto
{"platform": "facebook-ads", "action": "get_insights_adaccount", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "ad_account_id": "act_<ID>", "level": "ad", "fields": ["ad_id", "ad_name", "impressions", "inline_link_clicks", "inline_link_click_ctr", "spend"], "time_range": {"since": "<START>", "until": "<END>"}}
{"platform": "facebook-ads", "action": "get_ads", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "ad_account_id": "act_<ID>", "fields": ["id", "name", "status", "creative"]}
{"platform": "facebook-ads", "action": "get_ad_creatives", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "ad_account_id": "act_<ID>", "fields": ["id", "name", "title", "body", "object_story_spec"]}
Empareja anuncio → id creativo → body (texto principal) y title (titular). El texto principal también puede estar en object_story_spec.link_data.message.
Publicaciones de la página de Facebook
{"platform": "facebook-pages", "action": "get_posts", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "page_id": "<PAGE_ID>", "fields": ["id", "message", "created_time", "permalink_url", "status_type", "shares"], "since": "<START>", "until": "<END>", "limit": 50}
{"platform": "facebook-pages", "action": "get_post_insights", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "page_id": "<PAGE_ID>", "post_id": "<POST_ID>", "metrics": ["post_media_view", "post_clicks", "post_reactions_by_type_total"], "period": "lifetime"}
get_posts rechaza campos anidados como likes.summary(true), aunque el asistente los liste, por lo que estas llamadas no devuelven recuentos de comentarios. shares puede faltar en una publicación (faltó en todas las publicaciones de la página leída en la ejecución de construcción); cuenta un campo faltante como 0. Una llamada de insights por publicación; lee como máximo las 30 publicaciones más recientes.
Publicaciones de Instagram
{"platform": "instagram-profile", "action": "get_media", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "account_id": "<INSTAGRAM_USER_ID>", "fields": "id,caption,media_type,media_product_type,permalink,timestamp,comments_count,like_count", "limit": 50}
Publicaciones de la página de LinkedIn (sin probar hasta que se conecte)
{"platform": "linkedin-pages", "action": "fetch_organization_posts", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "org_id": "<ORG_ID>", "count": 50}
Search Console: cómo las personas encuentran el sitio
{"platform": "google-search-console", "action": "search_analytics", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "site_url": "<SITE_URL>", "dimensions": ["query"], "start_date": "<START>", "end_date": "<END>", "row_limit": 1000}
Texto de la página (DataForSEO, una llamada paga por página)
{"platform": "dataforseo", "action": "onpage_content_parsing", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "url": "<PAGE_URL>"}
El texto está en page_content.main_topic: cada bloque tiene h_title, level y primary_content[].text. Lee la página de inicio y la o dos páginas a las que los anuncios envían a más personas.
Rivales y los propios fragmentos de la marca en Google (DataForSEO, una llamada paga por búsqueda)
{"platform": "dataforseo", "action": "serp_google_organic", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "keyword": "<TOP_NON_BRAND_THEME>", "location_code": 2840, "language_code": "en", "depth": 20}
Extras opcionales
{"platform": "crawler", "action": "content-quality-checker", "workspace_id": "<WORKSPACE_ID>", "url": "<PAGE_URL>"}
{"platform": "crawler", "action": "brand-extractor", "workspace_id": "<WORKSPACE_ID>", "url": "<HOMEPAGE_URL>"}
content-quality-checker añade legibilidad y recuento de palabras; brand-extractor añade colores, fuentes y botones para una línea de identidad visual en la guía. Anuncios de rivales: facebook_search_companies luego facebook_company_ads con el page_id, o google_company_ads con el domain del rival (bibliotecas de anuncios).
Llamadas para la auditoría de mensajes del sitio web
GA4: las páginas en las que comienzan las visitas, con eventos clave
{"platform": "google-analytics", "action": "get_report", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "property_id": "properties/<PROPERTY_ID>", "dimensions": ["landingPage"], "metrics": ["sessions", "keyEvents"], "start_date": "<START>", "end_date": "<END>"}
Las sesiones por página de destino son entradas: visitas que comenzaron en esa página.
Search Console: las consultas con las que se encuentra cada página
{"platform": "google-search-console", "action": "search_analytics", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "site_url": "<SITE_URL>", "dimensions": ["page", "query"], "start_date": "<START>", "end_date": "<END>", "row_limit": 5000}
Rastreador: título, meta descripción, encabezados y etiquetas de botones de una página (sin créditos pagos)
{"platform": "crawler", "action": "meta-tags-checker", "workspace_id": "<WORKSPACE_ID>", "url": "<PAGE_URL>"}
{"platform": "crawler", "action": "headings-checker", "workspace_id": "<WORKSPACE_ID>", "url": "<PAGE_URL>"}
{"platform": "crawler", "action": "brand-extractor", "workspace_id": "<WORKSPACE_ID>", "url": "<PAGE_URL>"}
Las etiquetas de los botones están en brand-extractor's primaryButton.text y buttons[].text. Si ambas comprobaciones del rastreador vuelven vacías (title_tag_count 0 y no_headings), el sitio rechazó al rastreador: toma el título, el encabezado y las etiquetas del texto de la página o pide que los peguen.
Texto del cuerpo de la página: la misma llamada onpage_content_parsing de DataForSEO de arriba. Una llamada paga por página. Di el número de páginas y el coste estimado antes de ejecutarlo.
Después de los datos
- Construye la guía de voz. Escribe las secciones que la evidencia soporta. Si un pilar no tiene evidencia, omítelo. Si la evidencia contradice un pilar, prioriza la evidencia. La guía tiene: (la guía se completa con los datos recopilados)