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.
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.
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
| Affermazione | Fonte | Data | Stato |
|---|---|---|---|
| Si posiziona come piattaforma, non come strumento puntuale | https://example.com/competitor/home | 2026-10-30 | Verified |
| Rilascia modifiche ogni settimana | https://example.com/competitor/changelog | 2026-10-28 | Verified |
| Citato in roundup indipendenti | https://example.com/roundup | 2026-10-27 | Third-party |
| Gli acquirenti citano onboarding lento | post X citato sotto | 2026-10-14 | Signal |
| Enterprise è il loro segmento più grande | Non 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
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": "…" } ] }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…" }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 } } ] } }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:
Verifiedper ciò che dice la pagina,Vendor claimper il marketing,Third-partyper la copertura esterna,Signalper un post datato,Inferenceper la tua lettura eNot verifiedsenza 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 |
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 LiveDocOutput 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
Trasforma una domanda in un brief di ricerca con fonti
Interroga il web, salva come Markdown le pagine dietro la risposta, aggiungi ciò che dicono i professionisti su X e conserva le prove in un LiveDoc che potrai interrogare di nuovo.
Apri il workflowRicercaTrasforma una domanda di mercato in un brief go-to-market
Fai una domanda precisa al mercato, leggi le pagine di categoria e prezzi dietro la risposta, raccogli come gli acquirenti descrivono il problema su X e salva un brief GTM con affermazioni documentate e domande aperte.
Apri il workflowContenutiPubblica un digest quotidiano di notizie IA che il team legga davvero
Ottieni una rassegna con fonti, aggiungi le discussioni dei professionisti su X, prendi una trascrizione video, componi l’edizione in Markdown e archiviala in un LiveDoc.
Apri il workflowAdattala 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.
Continua
Le pagine di riferimento dietro questa ricetta e i prossimi passi.