Felo API PlatformFelo API Platform

Ricerca

Crea un’analisi competitiva che il team vendite possa usare

Raccogli le pagine del concorrente, la copertura intorno a lui e ciò che dicono gli acquirenti su X, poi costruisci un’analisi in cui ogni affermazione ha fonte, data e stato.

Tempo30 minutiLivelloIntermedioAggiornato2026-10-30
Per chiProduct marketingCompetitive intelligenceSales enablement

Copia il prompt

Sostituisci i campi tra parentesi quadre e incolla in Claude Code, Codex o qualsiasi IA con accesso al terminale. Installa lo skill Felo, chiede prima di spendere crediti ed esegue il workflow.

Prepara un teardown competitivo di [nome del concorrente] per [nostro prodotto].

Ambito: [segmento], [regione], [lingua]. Finestra temporale: [ultimi 90 giorni / ultimi 12 mesi]. Decisione che supporta: [cambio prezzi / posizionamento di lancio / gestione obiezioni].
Fonti di partenza: [dominio del concorrente], [URL della pagina prezzi], [URL del changelog].

Produci un teardown Markdown con:
1. Come si posizionano, con le loro parole.
2. Una tabella delle prove: affermazione, titolo della fonte, URL, data, stato (Verified / Vendor claim / Third-party / Signal / Inference / Not verified).
3. I prezzi: cosa dice la pagina, con link e data di verifica. Non copiare mai una tariffa nel testo senza pagina e data.
4. Dove i compratori obiettano, con account X e date, etichettato come segnale.
5. Cosa dovremmo fare dopo, contrassegnato come raccomandazione.
6. Un elenco completo delle fonti.

Regole:
- Cita il loro posizionamento; non riformularlo in qualcosa di più forte.
- Separa affermazioni del fornitore, copertura di terzi e tue deduzioni. Etichetta ogni riga.
- Non inventare mai prezzi, metriche, nomi di clienti o benchmark. Un dato mancante si scrive «Non disponibile».
- Trasforma finestra temporale e regione in valori espliciti.
- Prima di consumare crediti, mostra le chiamate API previste e attendi la mia approvazione.
- Non pubblicare, inviare, programmare né scrivere in alcun CRM.
- Scrivi il risultato in ./competitor-teardown.md e riassumilo in chat.

La copia include anche i passaggi di installazione e le regole di sicurezza.

Cosa ottieni

Output di esempio di un'esecuzione. Non è generazione dal vivo.

Esempio di teardown (estratto)

Teardown competitivo — [concorrente], verificato il 2026-10-30

Come si posizionano

Titolo della home: «La piattaforma per team di supporto in crescita». Pagina categoria: «Tutto ciò che serve al tuo team di supporto». Entrambe affermazioni del fornitore, citate come scritte.

Tabella delle prove

AffermazioneFonteDataStato
Si posiziona come piattaforma, non come strumento puntualehttps://example.com/competitor/home2026-10-30Verified
Rilascia modifiche ogni settimanahttps://example.com/competitor/changelog2026-10-28Verified
Citato in roundup indipendentihttps://example.com/roundup2026-10-27Third-party
Gli acquirenti citano onboarding lentopost X citato sotto2026-10-14Signal
Enterprise è il loro segmento più grandeNon disponibile—Not verified

Prezzi

La pagina prezzi elenca un piano a livelli e uno a consumo. Le tariffe non sono ripetute qui; controlla la pagina live e la data: https://example.com/competitor/pricing (2026-10-30).

Dove gli acquirenti obiettano

@example_dev, 2026-10-14: «l’installazione ha richiesto più tempo di quanto suggerisse la demo». Un post datato; è una lamentela, non una stima di frequenza.

Raccomandazione

Mettere in evidenza il tempo al primo risultato nella pagina di confronto. È la nostra deduzione, non un’affermazione del concorrente.

Fonti

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

Le chiamate esatte

Per gli sviluppatori: lo stesso workflow come codice, nell'ordine di esecuzione.

Mostra le chiamate API reali
  1. Parti da una base con fonti

    Chat restituisce risposta e pagine usate, una mappa di dove si parla del concorrente. Tratta la risposta come pista, non come fonte: conserva i link, che forniscono le righe di terze parti. L’helper invia la chiave una volta e lancia errore fuori da 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);

    Output di esempio

    {
      "answer": "The competitor positions itself as …",
      "sources": [
        { "link": "https://example.com/competitor", "title": "…", "snippet": "…" }
      ]
    }
  2. Scarica le pagine che controllano

    La copertura di terzi dice cosa pensano le persone; le loro pagine dicono cosa affermano. Estrai home, prezzi e changelog in Markdown con leggibilità e metti la data di recupero: una pagina prezzi senza data è una trappola.

    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 };
      }),
    );

    Output di esempio

    {
      "url": "https://example.com/competitor/pricing",
      "checkedAt": "2026-10-30",
      "content": "# Pricing\n\nExtracted page text…"
    }
  3. Guarda cosa dicono gli acquirenti su X

    Cerca su X obiezioni e aggiramenti sul concorrente. Conserva account e data di ogni post; una citazione datata prova una lamentela, non la sua frequenza. L’analisi la marca come segnale e non trasforma pochi post in percentuale.

    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);

    Output di esempio

    { "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. Costruisci l’analisi con una tabella di prove

    Questo è il passo editoriale: trasforma pagine e post in affermazioni e dai a ciascuna fonte, data e stato. La colonna stato tiene il documento onesto: Verified per ciò che dice la pagina, Vendor claim per il marketing, Third-party per la copertura esterna, Signal per un post datato, Inference per la tua lettura e Not verified senza prove.

    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);

    Output di esempio

    | Free tier listed on the pricing page | https://example.com/competitor/pricing | 2026-10-30 | Verified |
  5. Archivia nel LiveDoc per il prossimo aggiornamento

    Crea un LiveDoc per concorrente, aggiungi le pagine come risorse URL e l’analisi come documento. Riaggiungere URL viene deduplicato, così il prossimo trimestre scarichi solo le modifiche e l’analisi precedente resta nello stesso archivio.

    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

    Output di esempio

    { "short_id": "PvyKouzJirXjFdst4uKRK3" }

Cosa include

  • Base con fonti dal Chat API e le pagine dietro
  • Home, prezzi e changelog del concorrente in Markdown
  • Commenti datati degli acquirenti su X, marcati come segnale e non prova
  • Tabella che separa fatti verificati, dichiarazioni del fornitore e inferenza
  • LiveDoc che conserva le fonti per non ripartire da zero

Cosa non fa

  • Solo fonti pubbliche; niente interviste win/loss, note CRM o dashboard privati
  • I prezzi sono linkati e datati, mai congelati in una tabella senza data di verifica
  • La copertura X è incompleta e non è un campione rappresentativo
  • Non sceglie il posizionamento; le raccomandazioni sono marcate come inferenza
  • Non pubblica l’analisi né scrive in strumenti battlecard

Domande

Da dove vengono le prove?

Il Chat API restituisce una base con fonti e le pagine usate, Web Fetch trasforma le pagine del concorrente in Markdown e X Search aggiunge post datati. Ogni riga conserva fonte e data, le inferenze hanno uno stato proprio.

Posso coprire più concorrenti?

Sì. Esegui lo stesso prompt una volta per concorrente e tieni un LiveDoc per azienda. Una pagina comparativa unisce solo righe “verificate”, senza mescolare prove di due esecuzioni.

Posso citare i loro prezzi?

Il workflow registra ciò che dice la pagina prezzi, con link e data di verifica. Non congela le tariffe nel testo, perché cambiano e un numero vecchio è peggio di nessun numero.

E le nostre note win/loss?

Legge solo fonti pubbliche. Aggiungi note interne come documento separato nel LiveDoc e marcate come interne; non vengono mai citate in materiali per clienti.

Ogni quanto aggiornare?

Per trigger, non per calendario: cambio prezzo, lancio o inizio di un ciclo vendite. Riesegui nello stesso LiveDoc per tenere il trimestre precedente accanto al nuovo.

Quanto costa un’analisi?

Ogni chiamata chat, estrazione e ricerca X consuma crediti a consumo; le tariffe attuali sono nella pagina prezzi. Il prompt chiede approvazione prima di spendere.

Workflow correlati

Adattala a te

La stessa ricetta, adattata a come lavori davvero.

Aggiorna per trigger, non per calendario

Riesegui quando il concorrente cambia prezzi, fa un lancio importante o prima di un ciclo vendite. Tieni ogni analisi come documento datato nello stesso LiveDoc, con il trimestre precedente accanto al nuovo.

Trasforma l’analisi in battlecard

Dalla stessa tabella scrivi una pagina per persona — acquirente economico, champion, revisore tecnico — usando solo righe `Verified` e con i link. Lascia `Inference` fuori dai materiali per clienti.

Confronta due concorrenti

Esegui il workflow una volta per concorrente con LiveDoc separati e costruisci una pagina comparativa solo con righe `Verified` in entrambe le esecuzioni. Non unire mai due esecuzioni senza colonna stato.

Le pagine di riferimento dietro questa ricetta e i prossimi passi.