Felo API PlatformFelo API Platform

Дослідження

Дослідіть продуктоку нішу перед замовленням складу

Зберіть контекст категорії, зафіксуйте сторінки конкурентів на вказану дату, прочитайте скарги покупців на X і тримайте докази та мемо в одному LiveDoc для перегляду перед замовленням.

Час30 хвилинРівеньСереднійОновлено2026-10-30
Для когоОператори e-commerceДослідники продуктівЗасновники DTC

Скопіювати промпт

Замініть поля в квадратних дужках і вставте в 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
  1. Попросіть 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": "…" }
      ]
    }
  2. Зафіксуйте сторінки конкурентів

    Вилучіть дві або три сторінки продуктів конкурентів як Markdown із режимом читання. Мета — твердження й ціна на сторінці сьогодні, а не переписаний spec sheet. Тримайте 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…"
      }
    ]
  3. Прочитайте, що покупці повідомляють на 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/..."
      }
    ] } }
  4. Напишіть мемо

    Цей крок — простий код: поєднайте відповідь категорії, дати фіксації, цитати покупців і список джерел в один 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);
  5. Заархівуйте докази в 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 із доказами й мемо

Чого не робить

  • Лише публічні джерела; платні звіти, пропозиції постачальників і внутрішні продажі поза межами
  • Не оцінює розмір ринку, обсяг чи маржу
  • Ціни записані як зафіксовані, ніколи не нормалізовані чи усереднені
  • Пости X — анекдоти, не дані попиту
  • Не контактує постачальників, не замовляє й не змінює лістинги

Запитання

Звідки контекст ринку?

Chat API повертає відповідь із джерелами й використані публічні сторінки. Сторінки конкурентів із ваших URL і їх вилучає Web Fetch; пости покупців із X Search. Без приватних даних продажів.

Чи каже, чи продаватиметься продукт?

Ні. Він упорядковує публічні докази — контекст, зафіксовані ціни й скарги — і пише, що невідомо. Валідація попиту потребує ваших даних: реклами, передзамовлень або розмов із постачальниками.

Якщо маркетплейс блокує вилучення?

Web Fetch завантажує публічні сторінки по одному URL, а деякі сайти блокують. Використайте доступну сторінку продукту або постачальника й дозвольте мемо позначити відсутню фіксацію замість здогадки про ціну.

Як уникнути застарілих цін конкурентів?

Кожна ціна в мемо прив’язана до URL і дати фіксації. Запустіть вилучення знову близько рішення про покупку; архів тримає попередні фіксації, щоб бачити рухи.

Чи контактує постачальників або продавців?

Ні. Процес лише читає: вилучає сторінки, шукає публічні пости й пише локальне мемо. Не надсилає повідомлень, не замовляє й не змінює лістинги.

Скільки коштує одне дослідження?

Кожен виклик Chat, вилучення й пошуку X витрачає кредити за використання; актуальні тарифи на сторінці цін. Промпт просить схвалення перед витратою.

Пов’язані процеси

Адаптуйте

Той самий рецепт, підлаштований під те, як ви насправді працюєте.

Додайте транскрипти відеооглядів

Коли категорія має відеоогляди, візьміть транскрипт через YouTube Subtitling і додайте два-три цитати з таймкодами до розділу покупців. Відеоогляд — досвід однієї людини: тримайте ярлик анекдоту.

Порівняйте двох кандидатів

Запустіть ті самі кроки для кожного кандидата й поставте мемо поруч: заявлені функції, зафіксована ціна, повторювана скарга й відкрите питання. Порівняння лишається якісним, доки не маєте даних продажів або повернень.

Оновіть перед покупкою

Запустіть вилучення знову за день до замовлення. Тримайте той самий LiveDoc і додайте нове мемо, щоб архів показав, що змінилося між дослідженням і покупкою.

Довідкові сторінки за цим рецептом і наступні кроки.