Felo API PlatformFelo API Platform

Pesquisa

Monte uma análise de concorrente que o time de vendas possa usar

Reúna as páginas do próprio concorrente, a cobertura ao redor dele e o que os compradores dizem no X, depois monte uma análise em que cada afirmação tem fonte, data e status.

Tempo30 minutosNívelIntermediárioAtualizado2026-10-30
Para quemMarketing de produtoInteligência competitivaEnablement de vendas

Copiar o prompt

Substitua os campos entre colchetes e cole no Claude Code, Codex ou qualquer IA com acesso ao terminal. Ela instala a skill da Felo, pergunta antes de gastar créditos e executa o fluxo.

Monte um teardown competitivo de [nome do concorrente] para [nosso produto].

Escopo: [segmento], [região], [idioma]. Janela de tempo: [últimos 90 dias / últimos 12 meses]. Decisão que ele apoia: [mudança de preço / posicionamento de lançamento / tratamento de objeções].
Fontes iniciais: [domínio do concorrente], [URL da página de preços], [URL do changelog].

Produza um teardown em Markdown com:
1. Como eles se posicionam, nas próprias palavras.
2. Uma tabela de evidências: afirmação, título da fonte, URL, data, status (Verified / Vendor claim / Third-party / Signal / Inference / Not verified).
3. Preços: o que a página diz, com o link e a data de verificação. Nunca copie um valor para o texto sem a página e a data.
4. Onde os compradores discordam, com contas do X e datas, marcado como sinal.
5. O que devemos fazer em seguida, marcado como recomendação.
6. Uma lista completa de fontes.

Regras:
- Cite o posicionamento deles; não reformule para algo mais forte.
- Separe alegações do fornecedor, cobertura de terceiros e suas inferências. Rotule cada linha.
- Nunca invente preço, métrica, nome de cliente ou benchmark. Dado ausente é “Não disponível”.
- Transforme a janela de tempo e a região em valores explícitos.
- Antes de gastar créditos, mostre as chamadas de API planejadas e aguarde minha aprovação.
- Não publique, envie, agende nem grave nada em um CRM.
- Grave o resultado em ./competitor-teardown.md e resuma no chat.

A cópia também inclui os passos de instalação e as regras de segurança.

O que você recebe

Saída de exemplo de uma execução. Não é geração ao vivo.

Exemplo de análise (trecho)

Análise de concorrente — [concorrente], verificado em 2026-10-30

Como se posicionam

Manchete da home: “A plataforma para times de suporte em crescimento.” Página de categoria: “Tudo o que seu time de suporte precisa.” Ambas são alegações do fornecedor, citadas como escritas.

Tabela de evidências

AfirmaçãoFonteDataStatus
Posiciona-se como plataforma, não ferramenta pontualhttps://example.com/competitor/home2026-10-30Verified
Entrega mudanças toda semanahttps://example.com/competitor/changelog2026-10-28Verified
Coberto em roundups independenteshttps://example.com/roundup2026-10-27Third-party
Compradores citam onboarding lentopost do X citado abaixo2026-10-14Signal
Enterprise é o maior segmentoNão disponível—Not verified

Preços

A página de preços lista um plano em camadas e um por uso. As tarifas não são repetidas aqui; consulte a página ao vivo e a data: https://example.com/competitor/pricing (2026-10-30).

Onde os compradores discordam

@example_dev, 2026-10-14: “a configuração levou mais tempo do que a demo sugeria.” Um post datado; é reclamação, não estimativa de frequência.

Recomendação

Destacar o tempo até o primeiro resultado na página de comparação. É nossa inferência, não alegação do concorrente.

Fontes

  • https://example.com/competitor/home
  • https://example.com/competitor/pricing
  • https://example.com/competitor/changelog

As chamadas exatas

Para desenvolvedores: o mesmo fluxo em código, na ordem de execução.

Mostrar as chamadas reais da API
  1. Comece por uma base com fontes

    O Chat devolve uma resposta e as páginas que usou, o que dá um mapa de onde o concorrente é discutido. Trate a resposta como pista, não como fonte: o que importa são os links, que fornecem as linhas de terceiros na tabela de evidências. O helper abaixo envia a chave uma vez e lança erro em respostas fora de 2xx.

    competitor.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 competitor = "Example Competitor";
    const segment = "mid-market support teams";
    
    const baseline = await felo<ChatData>("/v2/chat", {
      query: `How does ${competitor} position itself for ${segment}? Include pricing and recent launches.`,
    });
    
    const seedSources = baseline.data.resources.slice(0, 5);

    Saída de exemplo

    {
      "answer": "The competitor positions itself as …",
      "sources": [
        { "link": "https://example.com/competitor", "title": "…", "snippet": "…" }
      ]
    }
  2. Baixe as páginas que eles controlam

    A cobertura de terceiros mostra o que as pessoas pensam; as páginas do concorrente mostram o que ele afirma. Extraia home, preços e changelog em Markdown com legibilidade e carimbe a data de captura: uma página de preços sem data é uma armadilha.

    competitor.ts
    type ExtractData = { data: { content: string } };
    
    const ownedPages = [
      { url: "https://example.com/competitor/home", title: "Homepage" },
      { url: "https://example.com/competitor/pricing", title: "Pricing" },
      { url: "https://example.com/competitor/changelog", title: "Changelog" },
    ];
    
    const fetched = await Promise.all(
      ownedPages.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 };
      }),
    );

    Saída de exemplo

    {
      "url": "https://example.com/competitor/pricing",
      "checkedAt": "2026-10-30",
      "content": "# Pricing\n\nExtracted page text…"
    }
  3. Veja o que os compradores dizem no X

    Pesquise no X as objeções e contornos que as pessoas publicam sobre o concorrente. Guarde o perfil e a data de cada post; uma citação datada é evidência de uma reclamação, não de sua frequência, então a análise marca como sinal e nunca transforma alguns posts em porcentagem.

    competitor.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 buyerSignal = await felo<XData>("/v2/x/tweet/search", {
      query: `"${competitor}" (pricing OR onboarding OR migration)`,
      limit: 25,
      since_time: since,
    });
    
    const objections = buyerSignal.data.tweets.slice(0, 5);

    Saída de exemplo

    { "data": { "tweets": [
      {
        "content": "setup took longer than the demo suggested",
        "author": { "username": "example_dev" },
        "created_at": "2026-10-14T09:20:00Z",
        "metrics": { "retweet_count": 3, "favorite_count": 24 }
      }
    ] } }
  4. Monte a análise com uma tabela de evidências

    Este é o passo editorial: transforme as páginas e os posts em afirmações e dê a cada uma fonte, data e status. A coluna de status mantém o documento honesto: Verified para o que a página diz, Vendor claim para o marketing deles, Third-party para cobertura externa, Signal para um post datado, Inference para a sua leitura e Not verified quando falta evidência.

    competitor.ts
    const today = new Date().toISOString().slice(0, 10);
    
    const row = (claim: string, source: string, date: string, status: string) =>
      `| ${claim} | ${source} | ${date} | ${status} |`;
    
    const teardown = [
      `# Competitor teardown — ${competitor}`,
      `Scope: ${segment}. Checked ${today}.`,
      "",
      "| Claim | Source | Date | Status |",
      "| --- | --- | --- | --- |",
      row("Free tier listed on the pricing page", ownedPages[1].url, fetched[1].checkedAt, "Verified"),
      row("Positions as a platform, not a point tool", ownedPages[0].url, fetched[0].checkedAt, "Vendor claim"),
      row("Discussed in independent coverage", seedSources[0]?.link ?? "Not available", today, "Third-party"),
      row("Buyers report onboarding friction", "X post, quoted below", today, "Signal"),
      row("Most revenue comes from enterprise", "Not available", "—", "Not verified"),
      "",
      "## Recommendation",
      "Lead with time-to-first-result on the comparison page. Inference, not a competitor claim.",
    ].join("\n");
    
    console.log(teardown);

    Saída de exemplo

    | Free tier listed on the pricing page | https://example.com/competitor/pricing | 2026-10-30 | Verified |
  5. Arquive no LiveDoc para a próxima atualização

    Crie um LiveDoc por concorrente, adicione as páginas capturadas como recursos de URL e a própria análise como documento. Reenviar URLs é deduplicado, então no próximo trimestre você baixa só o que mudou e a análise anterior continua no mesmo arquivo.

    competitor.ts
    type LiveDocData = { data: { short_id: string } };
    
    const teardownDoc = await felo<LiveDocData>("/v2/livedocs", {
      name: `Teardown: ${competitor}`,
      description: `Sources and teardown checked ${today}`,
    });
    
    await felo(`/v2/livedocs/${teardownDoc.data.short_id}/resources/urls`, {
      urls: fetched.map((page) => ({ url: page.url, title: page.title })),
    });
    
    await felo(`/v2/livedocs/${teardownDoc.data.short_id}/resources/doc`, {
      title: `Teardown ${today}`,
      content: teardown,
    });
    
    console.log(teardownDoc.data.short_id); // the next refresh reuses this LiveDoc

    Saída de exemplo

    { "short_id": "PvyKouzJirXjFdst4uKRK3" }

O que está incluído

  • Base com fontes do Chat API e as páginas por trás da resposta
  • Home, preços e changelog do concorrente extraídos em Markdown
  • Comentários datados de compradores no X, marcados como sinal e não prova
  • Tabela de evidências que separa fatos verificados, alegações do fornecedor e inferência
  • LiveDoc que guarda as fontes para a próxima atualização não começar do zero

O que não faz

  • Somente fontes públicas; sem entrevistas de ganho/perda, notas de CRM ou dashboards privados
  • Preços são linkados e datados, nunca congelados em uma tabela sem data de checagem
  • A cobertura do X é incompleta e não é uma amostra representativa de compradores
  • Não escolhe seu posicionamento; recomendações são marcadas como inferência
  • Não publica a análise nem grava em ferramentas de battlecard

Perguntas

De onde vêm as evidências?

O Chat API devolve uma base com fontes e as páginas que usou, o Web Fetch transforma as páginas do concorrente em Markdown e o X Search adiciona posts datados de compradores. Cada linha mantém fonte e data, e inferências têm status próprio.

Posso cobrir mais de um concorrente?

Sim. Rode o mesmo prompt uma vez por concorrente e mantenha um LiveDoc por empresa. Uma página comparativa combina apenas linhas marcadas como verificadas, sem misturar evidências de duas execuções.

Posso citar os preços deles?

O fluxo registra o que a página de preços diz, com link e data de checagem. Não congela tarifas no texto, porque preços de fornecedores mudam e um número antigo é pior que nenhum.

E as nossas notas de ganho/perda?

Ele lê apenas fontes públicas. Adicione notas internas como um recurso de documento separado no LiveDoc e marque como interno; elas nunca são citadas em material para clientes.

Com que frequência atualizar?

Atualize por gatilho, não por calendário: mudança de preço, lançamento ou início de ciclo de vendas. Rode de novo no mesmo LiveDoc para a análise anterior ficar ao lado da nova.

Quanto custa uma análise?

Cada chamada de chat, extração e busca no X gasta créditos por uso; as tarifas atuais estão na página de preços. O prompt pede aprovação antes de gastar.

Fluxos relacionados

Faça do seu jeito

A mesma receita, adaptada ao seu processo real.

Atualize por gatilho, não por calendário

Rode o mesmo fluxo quando o concorrente mudar preço, lançar algo grande ou antes de um ciclo de vendas. Mantenha cada análise como documento datado no mesmo LiveDoc, para o trimestre anterior ficar ao lado do novo.

Transforme a análise em battlecards

Da mesma tabela, escreva uma página por persona — comprador econômico, campeão e revisor técnico — usando apenas linhas `Verified`, com os links anexados. Deixe `Inference` fora de qualquer material para clientes.

Compare dois concorrentes

Rode o fluxo uma vez por concorrente com LiveDocs separados e monte uma página comparativa apenas com linhas `Verified` nas duas execuções. Nunca junte duas execuções em uma tabela sem a coluna de status.

As páginas de referência por trás desta receita e para onde ir depois.