Felo API PlatformFelo API Platform

Investigación

Convierte una pregunta de mercado en un brief go-to-market

Haz una pregunta precisa al mercado, lee las páginas de categoría y precios detrás de la respuesta, recoge cómo describen el problema los compradores en X y guarda un brief GTM con afirmaciones con fuentes y preguntas abiertas.

Tiempo30 minutosNivelIntermedioActualizado2026-10-30
Para quiénFundadores y operadoresMarketing de productoLíderes de ventas

Copiar el prompt

Sustituye los campos entre corchetes y pégalo en Claude Code, Codex o cualquier IA con acceso a terminal. Instala el skill de Felo, pregunta antes de gastar créditos y ejecuta el flujo.

Elabora un informe de investigación go-to-market para [producto] que entra en [segmento o ICP] en [región], en [idioma].

Motion: [self-serve / ventas / partner]. Decisión que apoya: [lanzamiento / precio / reposicionamiento]. Ventana temporal: [últimos 90 días / últimos 12 meses].

Genera un informe en Markdown con:
1. Definición del segmento: quiénes son, qué usan hoy y qué dicen las fuentes sobre el tamaño: cita una fuente o escribe «No disponible».
2. Lenguaje del comprador: cómo describen el problema, con enlaces y fechas.
3. Alternativas: de qué se cambian, incluidos hojas de cálculo y no hacer nada.
4. Objeciones y las pruebas que piden los compradores.
5. Preguntas abiertas que las fuentes públicas no pueden responder.
6. Una lista completa de fuentes.

Reglas:
- Toda afirmación de mercado necesita enlace y fecha. Nunca estimes tamaño, crecimiento o presupuesto por intuición.
- Separa fuentes independientes, páginas de proveedores y tus propias inferencias.
- Usa X para lenguaje y objeciones, no como prueba del tamaño de mercado.
- Convierte la ventana temporal y la región en valores explícitos.
- Antes de gastar créditos, muestra las llamadas API previstas y espera mi aprobación.
- No publiques, envíes, programes ni escribas en ningún CRM.
- Escribe el resultado en ./gtm-brief.md y resúmelo en el chat.

La copia también incluye los pasos de instalación y las reglas de seguridad.

Lo que obtienes

Salida de ejemplo de una ejecución. No es generación en vivo.

Ejemplo de informe GTM (extracto)

Informe GTM — [segmento] en [región]

Definición del segmento

Equipos operativos pequeños que gestionan turnos en hojas de cálculo. Tamaño: no disponible en las fuentes públicas revisadas; no pongas un número sin fuente.

Lenguaje del comprador

  • «seguimos haciendo esto en una hoja de cálculo» — publicación de X, 2026-10-18
  • «la configuración es la parte difícil» — publicación de X, 2026-10-02

Etiquetado como lenguaje, no como prueba de prevalencia.

Alternativas que mencionan

Hojas de cálculo, una suite existente y no hacer nada. Fuente: https://example.com/thread (2026-10-18).

Objeciones y pruebas exigidas

Revisión de seguridad y ruta de migración. Los compradores piden una referencia con nombre; no tenemos ninguna pública, así que sigue abierto.

Preguntas abiertas

  • ¿Qué parte del segmento ya tiene una línea de presupuesto propia?
  • ¿La objeción cambia con el tamaño de la empresa?

Fuentes

  • https://example.com/category-page
  • https://example.com/pricing-page
  • https://example.com/thread

Las llamadas exactas

Para desarrolladores: el mismo flujo como código, en orden de ejecución.

Mostrar las llamadas reales a la API
  1. Enmarca la pregunta de mercado

    Chat devuelve una respuesta y las páginas usadas, así que empieza por una pregunta lo bastante estrecha: quién compra, qué usan hoy y qué objeciones surgen. Guarda los recursos como enlaces-pista; la respuesta es pista, los enlaces son evidencia y cierran la lista de fuentes.

    gtm.ts
    const BASE = "https://openapi.felo.ai";
    const headers = {
      Authorization: `Bearer ${process.env.FELO_API_KEY}`,
      "Content-Type": "application/json",
    };
    
    async function felo<T>(path: string, body?: unknown): Promise<T> {
      const res = await fetch(`${BASE}${path}`, {
        method: body ? "POST" : "GET",
        headers,
        body: body ? JSON.stringify(body) : undefined,
      });
      if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);
      return res.json() as Promise<T>;
    }
    
    type ChatData = {
      data: {
        answer: string;
        resources: { link: string; title: string; snippet: string }[];
      };
    };
    
    const product = "scheduling tool"; // replace with your product
    const segment = "operations teams at 50-200 person companies";
    const region = "DACH";
    
    const market = await felo<ChatData>("/v2/chat", {
      query: `Who buys ${product} for ${segment} in ${region}, what do they use today, and what objections come up?`,
    });
    
    const seedSources = market.data.resources.slice(0, 5);

    Salida de ejemplo

    {
      "answer": "Buyers in this segment usually start from spreadsheets and …",
      "sources": [
        { "link": "https://example.com/category-page", "title": "…", "snippet": "…" }
      ]
    }
  2. Lee las páginas de categoría

    Descarga las páginas que enmarcan el mercado: visión de categoría, comparación y precios. Extráelas en Markdown con legibilidad y pon fecha de captura, porque la calidad de la lectura depende de las páginas detrás.

    gtm.ts
    type ExtractData = { data: { content: string } };
    
    const marketPages = [
      { url: "https://example.com/category", title: "Category overview" },
      { url: "https://example.com/comparison", title: "Comparison page" },
      { url: "https://example.com/pricing", title: "Pricing page" },
    ];
    
    const pages = await Promise.all(
      marketPages.map(async (page) => {
        const res = await felo<ExtractData>("/v2/web/extract", {
          url: page.url,
          output_format: "markdown",
          with_readability: true,
          with_cache: true,
        });
        const checkedAt = new Date().toISOString().slice(0, 10);
        return { ...page, checkedAt, content: res.data.content };
      }),
    );

    Salida de ejemplo

    {
      "url": "https://example.com/category",
      "checkedAt": "2026-10-30",
      "content": "# Category overview\n\nExtracted page text…"
    }
  3. Recoge cómo describen el problema

    Busca en X las palabras que usan los compradores al encontrarse el problema, no el nombre de tu producto. Guarda cuentas y fechas; el brief usa esos posts para lenguaje y objeciones, nunca como medida del tamaño de mercado o frecuencia de una objeción.

    gtm.ts
    type XData = {
      data: {
        tweets: {
          content: string;
          author: { username: string };
          created_at: string;
          metrics: { retweet_count: number; favorite_count: number };
        }[];
      };
    };
    
    const since = Math.floor((Date.now() - 90 * 24 * 60 * 60 * 1000) / 1000);
    
    const language = await felo<XData>("/v2/x/tweet/search", {
      query: `(spreadsheet OR "scheduling tool") (alternative OR "looking for")`,
      limit: 25,
      since_time: since,
    });
    
    const quotes = language.data.tweets.slice(0, 5);

    Salida de ejemplo

    { "data": { "tweets": [
      {
        "content": "we are still doing this in a spreadsheet",
        "author": { "username": "example_ops" },
        "created_at": "2026-10-18T11:05:00Z",
        "metrics": { "retweet_count": 1, "favorite_count": 18 }
      }
    ] } }
  4. Escribe el brief alrededor de la decisión

    Reúne definición de segmento, lenguaje de compradores, alternativas, objeciones y preguntas abiertas en un Markdown. Cada afirmación conserva fuente y fecha, el tamaño de mercado solo aparece con fuente y lo que las fuentes públicas no responden va a preguntas abiertas en vez de inferencia.

    gtm.ts
    const today = new Date().toISOString().slice(0, 10);
    
    const sourceLine = (title: string, url: string, date: string) =>
      `- ${title}: ${url} (checked ${date})`;
    
    const brief = [
      `# GTM brief — ${segment} in ${region}`,
      "",
      "## Segment definition",
      "See the category page for how the segment is described. Market size: Not available from public sources reviewed.",
      "",
      "## Buyer language",
      ...quotes.map((post) => `- @${post.author.username}, ${post.created_at.slice(0, 10)}: ${post.content}`),
      "",
      "## Alternatives buyers mention",
      "Spreadsheets, an incumbent suite, and doing nothing. Treated as language until a source ranks them.",
      "",
      "## Objections and proof required",
      "Migration path and a named reference. Marked open: whether the objection changes by company size.",
      "",
      "## Open questions",
      "- How much of the segment already has a dedicated budget line?",
      "- Which objection blocks a pilot most often?",
      "",
      "## Sources",
      ...pages.map((page) => sourceLine(page.title, page.url, page.checkedAt)),
      ...seedSources.map((source) => `- ${source.title}: ${source.link}`),
    ].join("\n");
    
    console.log(brief);

    Salida de ejemplo

    # GTM brief — operations teams at 50-200 person companies in DACH
  5. Guarda las evidencias para el siguiente mercado

    Crea un LiveDoc por segmento y región, añade las páginas capturadas como recursos URL y el brief como documento. El siguiente mercado parte de las mismas fuentes sin volver a descargar categorías, y reañadir una URL se deduplica.

    gtm.ts
    type LiveDocData = { data: { short_id: string } };
    
    const briefDoc = await felo<LiveDocData>("/v2/livedocs", {
      name: `GTM: ${segment} — ${region}`,
      description: `Market evidence checked ${today}`,
    });
    
    await felo(`/v2/livedocs/${briefDoc.data.short_id}/resources/urls`, {
      urls: pages.map((page) => ({ url: page.url, title: page.title })),
    });
    
    await felo(`/v2/livedocs/${briefDoc.data.short_id}/resources/doc`, {
      title: `GTM brief ${today}`,
      content: brief,
    });
    
    console.log(briefDoc.data.short_id); // reuse for the next region

    Salida de ejemplo

    { "short_id": "PvyKouzJirXjFdst4uKRK3" }

Qué incluye

  • Lectura de mercado con fuentes del Chat API y las páginas detrás
  • Páginas de categoría, comparación y precios en Markdown
  • Lenguaje y objeciones de compradores en X con cuentas y fechas
  • Brief estructurado alrededor de la decisión de lanzamiento, no del tema
  • LiveDoc para reutilizar evidencias en la siguiente región o lanzamiento

Qué no hace

  • Solo fuentes públicas; sin informes de pago, paneles ni entrevistas con clientes
  • Nunca estima tamaño o crecimiento del mercado — sin datos escribe «No disponible»
  • Los posts de X son lenguaje y señal, no una muestra representativa de compradores
  • No elige el segmento ni el precio por ti
  • No publica el brief ni escribe en el CRM

Preguntas

¿Necesito un informe de mercado de pago?

No. El flujo lee fuentes públicas y marca los huecos. Si ya tienes un informe, añádelo como documento en el LiveDoc y cítalo como cualquier otra fuente.

¿Puedo investigar un mercado en otro idioma?

Sí. Define región e idioma. Las citas quedan en el original con traducción al lado para que un revisor local compruebe la redacción.

¿Me da el tamaño de mercado?

Solo cuando una fuente lo indica, con enlace y fecha. Si no, el brief escribe «No disponible» en vez de inventar un número o extrapolar de un post.

¿Puede hablar con clientes?

No. Lee fuentes públicas. Añade notas de entrevista como documento y márcalas como internas; el brief nunca presenta notas privadas como evidencia pública.

¿En qué se diferencia del brief de investigación?

El brief de investigación responde a una pregunta. Este flujo organiza las evidencias alrededor de una decisión go-to-market —segmento, lenguaje de compradores, alternativas, objeciones y pruebas que piden— para alimentar un plan de lanzamiento.

¿Cuánto cuesta un brief?

Cada llamada de chat, extracción y búsqueda en X consume créditos por uso; las tarifas actuales están en la página de precios. El prompt pide aprobación antes de gastar.

Flujos relacionados

Hazlo tuyo

La misma receta, adaptada a cómo entregas de verdad.

Ejecuta por región

Mantén la estructura y cambia solo región e idioma. Un LiveDoc por región y las mismas preguntas para que los briefs se comparen.

Añade tus notas de entrevista

Pega notas de llamadas como recurso de documento y márcalas internas. El brief puede citarlas junto a evidencias públicas, pero nunca presenta una nota privada como fuente pública.

Alimenta el deck de lanzamiento

Pasa la sección de objeciones y pruebas al flujo de deck manteniendo la lista de fuentes. El brief es la capa de evidencia; el deck es una presentación, no una segunda fuente de verdad.

Las páginas de referencia detrás de esta receta y los siguientes pasos.