Ricerca
Studia una nicchia di prodotto prima di ordinare stock
Raccogli il contesto di categoria, cattura le pagine dei concorrenti a una data dichiarata, leggi di cosa si lamentano gli acquirenti su X e tieni prove e memo in un LiveDoc da rivedere prima dell’ordine.
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.
Studia questa nicchia di prodotto prima di ordinare stock o lanciare: [prodotto o categoria]. Mercato: [paese o regione]. Canale: [marketplace / DTC / retail]. Finestra dei post dei compratori: ultimi [30] giorni. Prodotti comparabili o URL dei concorrenti: [URL]. Vincoli di budget e margine: [vincoli]. Pubblico: [team]. Produci un memo Markdown con: 1. Un verdetto di un paragrafo: vale la pena approfondire e cosa cambierebbe la tua opinione. 2. Segnali di domanda: cosa dicono le fonti su interesse, stagionalità e sostituti. 3. Prodotti concorrenti: cosa afferma ciascuno, il prezzo rilevato sulla pagina e dove i compratori dicono che delude. 4. Posizionamento di prezzo: i prezzi realmente trovati sulle pagine, ciascuno con la data di rilevamento. 5. Lamentele e bisogni non soddisfatti, con citazioni, account e date. 6. Rischi e domande aperte da risolvere prima di comprare inventario. 7. Fonti: ogni pagina e post usati, con URL e data. Regole: - Usa solo ciò che restituiscono le API. Non inventare mai dimensione di mercato, stime di vendita, numero di recensioni o prezzi dei concorrenti. - Riporta i prezzi esattamente come rilevati, con URL della pagina e data di rilevamento. Non fare mai medie né normalizzazioni. - Tratta i post di X come aneddoti, non come dati di mercato, e dillo quando il campione è scarso. - Separa ciò che afferma il fornitore da ciò che riporta il compratore. - Prima di consumare crediti, mostra le estrazioni e ricerche previste e attendi la mia approvazione. - Non contattare fornitori, non fare ordini e non scrivere a nessuno su X. - Scrivi il risultato in ./product-research.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.
Ricerca prodotto — categoria di esempio
Verdetto
Merita un approfondimento, ma le prove pubbliche non bastano per decidere lo stock. Le domande aperte sono il passo successivo.
Contesto di categoria
Gli acquirenti confrontano spazio sul piano e pulizia più della pressione. Nessuna fonte pubblica sostiene una stima di dimensione di mercato.
Pagine concorrenti
- Example A — pagina prodotto (acquisita il 2026-10-30)
- Example B — pagina prodotto (acquisita il 2026-10-30)
Cosa riportano gli acquirenti
- @example_buyer: «Terza sostituzione in un anno; la guarnizione si rompe.» — 2026-10-19
- @example_home: «La pulizia richiede minuti e nessuno lo dice.» — 2026-10-24
Posizionamento prezzo
I prezzi sono stati acquisiti il 2026-10-30 dalle pagine collegate. Sono su due livelli; ogni pagina è citata direttamente, senza media.
Rischi e domande aperte
- La durata della guarnizione è la lamentela più ripetuta.
- Nessuna fonte copre i tassi di reso.
- Verificare tempi del fornitore e costo finale prima dell’ordine.
Fonti
- https://example.com/product-a — 2026-10-30
- https://x.com/example_buyer/status/... — 2026-10-19
Le chiamate esatte
Per gli sviluppatori: lo stesso workflow come codice, nell'ordine di esecuzione.
Mostra le chiamate API reali
Chiedi a Chat l’immagine di categoria
Parti dalla risposta con fonti, non da una pagina bianca: Chat cerca nel web pubblico, ordina le pagine e restituisce le risorse usate. Chiedi in una query contesto di domanda, sostituti e lamentele comuni, poi tieni le risorse migliori come elenco prove.
product-research.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 niche = "portable espresso maker"; // replace with the category you are judging const context = await felo<ChatData>("/v2/chat", { query: `Demand, price bands, and buyer complaints for ${niche} in the US`, }); const sources = context.data.resources.slice(0, 5);Output di esempio
{ "answer": "Buyers compare on counter space and cleanup …", "sources": [ { "link": "https://example.com/category-guide", "title": "…", "snippet": "…" } ] }Cattura le pagine concorrenti
Estrai due o tre pagine prodotto concorrenti in Markdown con leggibilità. L’obiettivo è l’affermazione e il prezzo sulla pagina oggi, non una scheda tecnica riscritta. Tieni URL e contenuto insieme e annota la data di cattura: un prezzo senza data è una voce.
product-research.ts const PRODUCT_PAGES = [ { url: "https://example.com/product-a", title: "Example A — product page" }, { url: "https://example.com/product-b", title: "Example B — product page" }, ]; type ExtractData = { data: { content: string } }; const listings = await Promise.all( PRODUCT_PAGES.map((page) => felo<ExtractData>("/v2/web/extract", { url: page.url, output_format: "markdown", with_readability: true, }).then((extracted) => ({ ...page, content: extracted.data.content })), ), );Output di esempio
[ { "url": "https://example.com/product-a", "title": "Example A — product page", "content": "# Example A\n\nSpecs and price as displayed…" } ]Leggi cosa riportano gli acquirenti su X
Le pagine dei fornitori elencano funzioni; gli acquirenti descrivono guasti. Cerca la nicchia con parole di attrito — spedizione, qualità, rimborso — negli ultimi 30 giorni e conserva account, data e link. Sono aneddoti, non dati di domanda, e il memo deve dirlo.
product-research.ts type XData = { data: { tweets: { content: string; author: { username: string }; created_at: string; metrics: { retweet_count: number; favorite_count: number; reply_count: number }; url: string; }[]; }; }; const since = Math.floor((Date.now() - 30 * 24 * 60 * 60 * 1000) / 1000); const search = await felo<XData>("/v2/x/tweet/search", { query: `"${niche}" (shipping OR quality OR refund)`, limit: 50, since_time: since, }); const complaints = search.data.tweets;Output di esempio
{ "data": { "tweets": [ { "content": "Third replacement in a year; the seal fails.", "author": { "username": "example_buyer" }, "created_at": "2026-10-19T15:02:00Z", "metrics": { "retweet_count": 1, "favorite_count": 12, "reply_count": 3 }, "url": "https://x.com/example_buyer/status/..." } ] } }Scrivi il memo
Questo passo è codice semplice: unisci risposta di categoria, date di cattura, citazioni degli acquirenti e lista fonti in un Markdown. Sii onesto sulle domande aperte — il memo è utile perché separa ciò che le pagine provano da ciò che va confermato con un fornitore.
product-research.ts const capturedOn = new Date().toISOString().slice(0, 10); const memo = [ `# Product research — ${niche}`, "", "## Category context", context.data.answer, "", "## Competitor pages", ...listings.map( (page) => `- [${page.title}](${page.url}) — captured ${capturedOn}`, ), "", "## What buyers report", ...complaints.slice(0, 10).map( (post) => `- @${post.author.username} (${post.created_at.slice(0, 10)}): ${post.content}`, ), "", "## Sources", ...sources.map((source) => `- [${source.title}](${source.link})`), ].join("\n"); console.log(memo);Archivia le prove in un LiveDoc
Esegui una volta per nicchia: crea il LiveDoc e salva lo
short_idnella configurazione. Aggiungi pagine concorrenti e fonti Chat come risorse URL per la deduplica, poi il memo come documento. Prima dell’acquisto puoi interrogare le catture e vedere quali prezzi si sono mossi.product-research.ts type LiveDocData = { data: { short_id: string } }; const research = await felo<LiveDocData>("/v2/livedocs", { name: `Product research: ${niche}`, description: "Competitor pages, buyer posts, and the memo", }); await felo(`/v2/livedocs/${research.data.short_id}/resources/urls`, { urls: [ ...listings.map((page) => ({ url: page.url, title: page.title })), ...sources.map((source) => ({ url: source.link, title: source.title })), ].slice(0, 10), }); await felo(`/v2/livedocs/${research.data.short_id}/resources/doc`, { title: `Product memo — ${capturedOn}`, content: memo, });Output di esempio
{ "short_id": "PvyKouzJirXjFdst4uKRK3" }
Cosa include
- Immagine di categoria con fonti da Chat e le pagine dietro
- Pagine concorrenti in Markdown con data di cattura
- Lamentele degli acquirenti su X con account, date e link
- Memo Markdown costruito da questi input
- Un LiveDoc con prove e memo
Cosa non fa
- Solo fonti pubbliche; report a pagamento, preventivi fornitori e vendite interne esclusi
- Non stima dimensione di mercato, volumi o margine
- I prezzi sono registrati come catturati, mai normalizzati o mediati
- I post X sono aneddoti, non dati di domanda
- Non contatta fornitori, non ordina e non modifica listing
Domande
Da dove viene il contesto di mercato?
Il Chat API restituisce una risposta con fonti e le pagine pubbliche usate. Le pagine concorrenti vengono dai tuoi URL e sono estratte da Web Fetch; i post da X Search. Nessun dato privato di vendita.
Mi dice se un prodotto venderà?
No. Organizza prove pubbliche — contesto, prezzi catturati e lamentele — e scrive ciò che è sconosciuto. Validare la domanda richiede i tuoi dati: ads, pre-ordini o conversazioni con fornitori.
E se il marketplace blocca l’estrazione?
Web Fetch scarica pagine pubbliche una URL alla volta e alcuni siti bloccano. Usa una pagina accessibile e lascia che il memo segnali la cattura mancante invece di indovinare un prezzo.
Come evito prezzi concorrenti obsoleti?
Ogni prezzo nel memo è legato all’URL e alla data di cattura. Riesegui l’estrazione vicino alla decisione d’acquisto; l’archivio conserva catture precedenti per vedere i movimenti.
Contatta fornitori o venditori?
No. Il workflow è in sola lettura: estrae pagine, cerca post pubblici e scrive un memo locale. Non invia messaggi, non ordina e non modifica listing.
Quanto costa una ricerca?
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 workflowContenutiTrasforma le conversazioni social in un brief settimanale di ascolto
Cerca i post X dell’ultima settimana su brand e concorrenti, aggiungi contesto web con fonti, leggi le pagine dietro e archivia ogni edizione perché la settimana dopo parta da ciò che si sa.
Apri il workflowUfficioTrasforma una pagina di ricerca in una presentazione
Estrai la pagina, salvala come contesto LiveDoc, lascia che la PPT Task API costruisca il deck e interroga finché il link è pronto.
Apri il workflowAdattala a te
La stessa ricetta, adattata a come lavori davvero.
Aggiungi trascrizioni di recensioni video
Se la categoria ha video recensione, prendi la trascrizione con YouTube Subtitling e aggiungi due o tre citazioni con timestamp alla sezione acquirenti. Una recensione video resta l’esperienza di una persona: mantieni l’etichetta di aneddoto.
Confronta due candidati
Esegui gli stessi passi per candidato e metti i memo affiancati: funzioni dichiarate, prezzo catturato, lamentela ricorrente e domanda aperta. Il confronto resta qualitativo finché non hai dati di vendita o resi.
Aggiorna prima dell’acquisto
Riesegui l’estrazione il giorno prima dell’ordine. Tieni lo stesso LiveDoc e aggiungi un nuovo memo, così l’archivio mostra cosa è cambiato tra ricerca desktop e acquisto.
Continua
Le pagine di riferimento dietro questa ricetta e i prossimi passi.