CommunityRedacción y edicióngithub.com

Marca-Voz

Crea una guía de voz y tono de marca y una casa de mensajes a partir de tus anuncios de Google Ads, Meta Ads, publicaciones en redes sociales y contenido del sitio web, y luego verifica el contenido en vivo contra ella. Úsalo cuando necesites una guía de estilo, un marco de mensajes o una auditoría de mensajes del sitio web. No es para redactar contenido nuevo (usar redacción publicitaria).

¿Qué es Marca-Voz?

Esta habilidad construye una guía completa de voz, tono y estilo de marca analizando el contenido existente de la marca y los datos de rendimiento de múltiples fuentes, como Google Ads, Meta Ads, páginas de Facebook e Instagram, perfiles de LinkedIn, Google Search Console y DataForSEO. La guía resultante documenta la personalidad consistente de la marca (voz), cómo se adapta a diferentes situaciones (tono) y las reglas que hacen que ambos sean repetibles (estilo), basando cada elección en el propio texto de la marca, sus resultados de clics, las palabras de sus clientes y las brechas dejadas por sus competidores. El usuario puede especificar opciones como la descripción de la marca en una línea, ejemplos de texto que le gusta o que siente incorrecto, creencias fundamentales, competidores, reglas existentes y canales a cubrir, con valores predeterminados inferidos de los datos cuando sea necesario. Además, la habilidad incluye un modo de auditoría de mensajes del sitio web que lee páginas clave del sitio y verifica que cuenten una historia coherente con los anuncios, clasificando luego las correcciones por tráfico. Está diseñada para agentes de IA como Claude Code, Cursor y Codex, e integra el MCP de InsightfulPipe para acceder a datos de rendimiento de anuncios y contenido web.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Insightful-Pipe/content-creative-skills/tree/HEAD/skills/brand-voice

Installed? Explore more Redacción y edición skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

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.

  1. Llama a query_contexts con request="accounts" para google-ads, facebook-ads, facebook-pages, instagram-profile, linkedin-pages, google-search-console y dataforseo. Anota workspace_id, el brand_id propio 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.
  2. Llama a query_contexts con request="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".
  3. 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_DAYS es rechazado. Usa segments.date BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'.
  • Meta Ads rechaza campos anidados. get_ads con creative{title,body} es rechazado. Pide el campo creative simple, que devuelve el id del creativo, luego lee el texto con get_ad_creatives. Los anuncios que fueron eliminados aún aparecen en los insights pero no en get_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_parsing devolvió 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 trata content-quality-checker y brand-extractor como extras opcionales. El 2026-10-30 el rastreador estaba de vuelta, y brand-extractor devolvió colores, fuentes y botones.
  • Las bibliotecas de anuncios pueden estar caídas. El mismo día google_company_ads y google_search_advertisers volvieron vacíos incluso para anunciantes muy grandes, y facebook_search_companies falló 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_code 2840 y language_code en a 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_report por landingPage devolvió sesiones y eventos clave por página. Search Console search_analytics por página y consulta devolvió el row_limit completo de 5,000 filas. Las comprobaciones del rastreador funcionaron en un sitio que permite lectores, y brand-extractor devolvió las etiquetas de los botones. En un sitio que rechaza lectores automatizados, el rastreador no da error: meta-tags-checker devuelve title_tag_count 0 y headings-checker devuelve no_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ñade account_id a 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

  1. 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)

Skills relacionados