Исследования
Исследуйте нишу продукта до закупки
Соберите контекст категории, зафиксируйте страницы конкурентов на указанную дату, прочитайте жалобы покупателей в X и сохраните доказательства и меморандум в одном LiveDoc, к которому можно вернуться перед заказом.
Скопировать промпт
Замените поля в квадратных скобках и вставьте в Claude Code, Codex или любой AI с доступом к терминалу. Он установит навык Felo, спросит перед списанием кредитов и выполнит процесс.
Изучи эту товарную нишу до закупки или запуска: [товар или категория]. Рынок: [страна или регион]. Канал: [маркетплейс / DTC / розница]. Период постов покупателей: последние [30] дней. Сопоставимые товары или URL конкурентов: [URL]. Ограничения по бюджету и марже: [ограничения]. Аудитория: [команда]. Подготовь Markdown-записку с: 1. Выводом на один абзац: стоит ли исследовать дальше и что изменит твоё мнение. 2. Сигналами спроса: что источники говорят об интересе, сезонности и заменителях. 3. Конкурирующими товарами: что каждый заявляет, какую цену удалось зафиксировать на странице и в чём покупатели видят недостатки. 4. Ценовым позиционированием: реально найденные на страницах цены, каждая с датой фиксации. 5. Жалобами и неудовлетворёнными потребностями, с цитатами, аккаунтами и датами. 6. Рисками и открытыми вопросами, которые нужно решить до закупки. 7. Источниками: каждая использованная страница и пост с URL и датой. Правила: - Используй только то, что возвращают API. Никогда не выдумывай размер рынка, оценку продаж, число отзывов или цены конкурентов. - Сообщай цены ровно как зафиксировано, с URL страницы и датой фиксации. Никогда не усредняй и не нормализуй их. - Относись к постам X как к частным случаям, а не рыночным данным, и говори, когда выборка слишком мала. - Разделяй заявления вендора и сообщения покупателей. - Перед расходом кредитов покажи планируемые извлечения и поиски и дождись моего одобрения. - Не связывайся с поставщиками, не размещай заказы и никому не пиши в X. - Запиши результат в ./product-research.md и кратко изложи его в чате.
В копию также входят шаги установки и правила безопасности.
Что получится
Пример вывода одного запуска. Не живая генерация.
Исследование продукта — пример категории
Вывод
Стоит изучить ближе, но публичных доказательств недостаточно для решения о закупке. Открытые вопросы ниже — следующий шаг.
Контекст категории
Покупатели сравнивают место на столе и лёгкость чистки, а не давление. Ни один публичный источник не подтверждает оценку размера рынка.
Страницы конкурентов
- Example A — страница продукта (снято 2026-10-30)
- Example B — страница продукта (снято 2026-10-30)
Что сообщают покупатели
- @example_buyer: «Третья замена за год; уплотнитель ломается». — 2026-10-19
- @example_home: «Чистка занимает минуты, и никто об этом не говорит». — 2026-10-24
Позиционирование по цене
Цены сняты 2026-10-30 со связанных страниц. Они делятся на два уровня; каждая страница цитируется напрямую, без усреднения.
Риски и открытые вопросы
- Долговечность уплотнителя — самая повторяемая жалоба.
- Ни один источник не покрывает процент возвратов.
- Проверить сроки поставщика и конечную стоимость до заказа.
Источники
- https://example.com/product-a — 2026-10-30
- https://x.com/example_buyer/status/... — 2026-10-19
Реальные вызовы
Для разработчиков: тот же процесс в виде кода в порядке выполнения.
Показать реальные вызовы API
Попросите Chat об обзоре категории
Начните не с пустой страницы, а с ответа с источниками: Chat ищет в публичном вебе, ранжирует страницы и возвращает использованные ресурсы. Спросите о контексте спроса, заменителях и частых жалобах одним вопросом, затем оставьте верхние ресурсы как список доказательств.
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);Пример вывода
{ "answer": "Buyers compare on counter space and cleanup …", "sources": [ { "link": "https://example.com/category-guide", "title": "…", "snippet": "…" } ] }Зафиксируйте страницы конкурентов
Извлеките две-три страницы товаров конкурентов в Markdown с читаемостью. Цель — сегодняшние утверждения и цена страницы, а не пересказанная спецификация. Держите URL рядом с содержимым и записывайте дату фиксации: цена без даты — слух.
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 })), ), );Пример вывода
[ { "url": "https://example.com/product-a", "title": "Example A — product page", "content": "# Example A\n\nSpecs and price as displayed…" } ]Прочитайте отчёты покупателей в X
Страницы вендоров перечисляют функции, покупатели описывают сбои. Ищите нишу вместе со словами трения — доставка, качество, возврат — за последние 30 дней и сохраняйте аккаунт, дату и ссылку. Это анекдоты, а не данные спроса, и меморандум должен это указывать.
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;Пример вывода
{ "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/..." } ] } }Соберите меморандум
Это обычный код: соберите ответ по категории, даты фиксации, цитаты покупателей и список источников в один Markdown. Честно оставьте открытые вопросы: меморандум полезен именно тем, что отделяет доказанное страницами от того, что нужно уточнить у поставщика.
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);Сохраните доказательства в LiveDoc
Запускайте один раз на нишу: создайте LiveDoc и сохраните
short_idв конфигурации. Добавьте страницы конкурентов и источники Chat как URL-ресурсы, чтобы архив дедуплицировал их, затем добавьте меморандум документом. Перед закупкой можно найти фиксации и увидеть, какие цены изменились.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, });Пример вывода
{ "short_id": "PvyKouzJirXjFdst4uKRK3" }
Что входит
- Обзор категории с источниками из Chat и страницы, на которых он основан
- Страницы конкурентов в Markdown с датой фиксации
- Жалобы покупателей в X с аккаунтами, датами и ссылками
- Markdown-меморандум из этих входных данных
- Один LiveDoc с доказательствами и меморандумом
Чего не делает
- Только публичные источники; платные отчёты, предложения поставщиков и внутренние продажи вне scope
- Не оценивает размер рынка, объём продаж или маржу
- Цены фиксируются как есть, без нормализации и усреднения
- Посты X — анекдоты, а не данные спроса
- Не связывается с поставщиками, не заказывает и не меняет листинги
Вопросы
Откуда берётся контекст рынка?
Chat API возвращает ответ с источниками и использованные публичные страницы. Страницы конкурентов берутся из ваших URL через Web Fetch, посты покупателей — из X Search. Приватные данные продаж не используются.
Он скажет, будет ли товар продаваться?
Нет. Он организует публичные доказательства — контекст категории, зафиксированные цены и жалобы — и записывает неизвестное. Для проверки спроса нужны ваши данные: реклама, предзаказы или разговоры с поставщиками.
Что если маркетплейс блокирует извлечение?
Web Fetch загружает публичные страницы по одной, и некоторые сайты блокируют. Используйте доступную страницу товара или поставщика, а меморандум отметит отсутствующую фиксацию вместо угадывания цены.
Как не устареть ценам конкурентов?
Каждая цена в меморандуме привязана к URL страницы и дате фиксации. Повторите извлечение перед решением о закупке; архив хранит прошлые фиксации, чтобы видеть изменение цены.
Он связывается с поставщиками или продавцами?
Нет. Процесс только читает: извлекает страницы, ищет публичные посты и пишет локальный меморандум. Он не отправляет сообщения, не заказывает и не редактирует листинги.
Сколько стоит один запуск?
Каждый вызов Chat, извлечения и поиска в X расходует кредиты по факту использования; актуальные тарифы на странице цен. Промпт просит одобрение до запуска.
Связанные процессы
Превратите один вопрос в исследовательский бриф с источниками
Спросите веб, сохраните страницы, на которых основан ответ, как Markdown, добавьте мнения практиков из X и оставьте доказательства в LiveDoc, который можно будет искать позже.
Открыть рабочий процессКонтентПревратите обсуждения в еженедельный бриф социального слушания
Ищите посты X о бренде и конкурентах за неделю, добавьте веб-контекст с источниками, прочитайте страницы за ним и сохраняйте каждый выпуск, чтобы следующая неделя начиналась с известного.
Открыть рабочий процессОфисПревратите исследовательскую страницу в презентацию
Извлеките страницу, сохраните её как контекст LiveDoc, затем дайте PPT Task API собрать deck и опрашивайте задачу до готовой ссылки.
Открыть рабочий процессАдаптируйте под себя
Тот же рецепт, подстроенный под ваш реальный процесс.
Добавьте транскрипты обзоров
Если в категории есть видеообзоры, получите транскрипт через YouTube Subtitling и добавьте две-три цитаты с таймкодами в раздел покупателей. Обзор остаётся опытом одного человека, поэтому сохраняйте ту же пометку «анекдот», что и для постов X.
Сравните двух кандидатов
Запустите те же шаги для каждого кандидата и сравните меморандумы: заявленные функции, зафиксированная цена, повторяющаяся жалоба и открытый вопрос. Сравнение остаётся качественным, пока нет ваших продаж или возвратов.
Обновите перед закупкой
Повторите извлечение за день до заказа. Оставьте тот же LiveDoc и добавьте новый меморандум, чтобы архив показал, что изменилось между кабинетным исследованием и покупкой, включая цену, вышедшую за бюджет.
Продолжить
Справочные страницы этого рецепта и куда двигаться дальше.