Felo API PlatformFelo API Platform

Исследования

Превратите вопрос о рынке в go-to-market бриф

Задайте рынку точный вопрос, прочитайте страницы категории и цен, на которых основан ответ, соберите формулировки покупателей в X и сохраните GTM-бриф с утверждениями из источников и открытыми вопросами.

Время30 минутУровеньСреднийОбновлено2026-10-30
Для когоОснователи и операторыПродуктовый маркетингРуководители продаж

Скопировать промпт

Замените поля в квадратных скобках и вставьте в Claude Code, Codex или любой AI с доступом к терминалу. Он установит навык Felo, спросит перед списанием кредитов и выполнит процесс.

Составь go-to-market исследовательский бриф для [продукт], выходящего в [сегмент или ICP] в регионе [регион], на [язык].

Модель: [self-serve / продажи / партнёры]. Какое решение поддерживает: [запуск / цены / репозиционирование]. Период: [последние 90 дней / последние 12 месяцев].

Подготовь Markdown-бриф с:
1. Определением сегмента: кто они, что используют сегодня и что источники говорят о размере — со ссылкой или «Нет данных».
2. Языком покупателей: как они описывают проблему, со ссылками и датами.
3. Альтернативами: от чего они уходят, включая таблицы и «ничего не делать».
4. Возражениями и доказательствами, которые требуют покупатели.
5. Открытыми вопросами, на которые публичные источники не отвечают.
6. Полным списком источников.

Правила:
- Каждое рыночное утверждение требует ссылки и даты. Никогда не оценивай размер рынка, рост или бюджет на ощущениях.
- Разделяй независимые источники, страницы вендоров и собственные выводы.
- X используй для языка и возражений, а не как доказательство размера рынка.
- Преврати период и регион в явные значения.
- Перед расходом кредитов покажи планируемые вызовы API и дождись моего одобрения.
- Ничего не публикуй, не отправляй, не планируй и не записывай в CRM.
- Запиши результат в ./gtm-brief.md и кратко изложи его в чате.

В копию также входят шаги установки и правила безопасности.

Что получится

Пример вывода одного запуска. Не живая генерация.

Пример GTM-брифа (фрагмент)

GTM-бриф — [сегмент] в [регион]

Определение сегмента

Небольшие операционные команды, которые ведут расписание в таблицах. Размер: нет данных в проверенных публичных источниках — без источника цифру в бриф не писать.

Язык покупателей

  • «мы всё ещё делаем это в таблице» — пост X, 2026-10-18
  • «настройка — самая сложная часть» — пост X, 2026-10-02

Помечено как язык, а не как доказательство распространённости.

Альтернативы, которые называют покупатели

Таблицы, существующий набор инструментов и ничего не делать. Источник: https://example.com/thread (2026-10-18).

Возражения и требуемые доказательства

Проверка безопасности и путь миграции. Покупатели просят именованного референса; публично его нет, поэтому вопрос остаётся открытым.

Открытые вопросы

  • Какая часть сегмента уже имеет отдельную строку бюджета?
  • Меняется ли возражение с размером компании?

Источники

  • https://example.com/category-page
  • https://example.com/pricing-page
  • https://example.com/thread

Реальные вызовы

Для разработчиков: тот же процесс в виде кода в порядке выполнения.

Показать реальные вызовы API
  1. Сформулируйте вопрос о рынке

    Chat возвращает ответ и использованные страницы, поэтому начните с вопроса, достаточно узкого для ответа: кто покупает, что использует сегодня, какие возражения возникают. Сохраняйте ресурсы как ссылки-подсказки: ответ — подсказка, ссылки — доказательства, они же замыкают список источников.

    gtm.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 product = "scheduling tool"; // replace with your product
    const segment = "operations teams at 50-200 person companies";
    const region = "DACH";
    
    const market = await felo<ChatData>("/v2/chat", {
      query: `Who buys ${product} for ${segment} in ${region}, what do they use today, and what objections come up?`,
    });
    
    const seedSources = market.data.resources.slice(0, 5);

    Пример вывода

    {
      "answer": "Buyers in this segment usually start from spreadsheets and …",
      "sources": [
        { "link": "https://example.com/category-page", "title": "…", "snippet": "…" }
      ]
    }
  2. Прочитайте сами страницы категории

    Загрузите страницы, которые формируют рынок: обзор категории, сравнение и цены. Извлеките их в Markdown с читаемостью и проставьте дату загрузки, потому что качество чтения рынка зависит от страниц за ним.

    gtm.ts
    type ExtractData = { data: { content: string } };
    
    const marketPages = [
      { url: "https://example.com/category", title: "Category overview" },
      { url: "https://example.com/comparison", title: "Comparison page" },
      { url: "https://example.com/pricing", title: "Pricing page" },
    ];
    
    const pages = await Promise.all(
      marketPages.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 };
      }),
    );

    Пример вывода

    {
      "url": "https://example.com/category",
      "checkedAt": "2026-10-30",
      "content": "# Category overview\n\nExtracted page text…"
    }
  3. Соберите формулировки покупателей

    Ищите в X слова, которыми покупатели описывают проблему, а не название вашего продукта. Сохраняйте аккаунты и даты; бриф использует посты для языка и возражений и никогда — как меру размера рынка или частоты возражения.

    gtm.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 language = await felo<XData>("/v2/x/tweet/search", {
      query: `(spreadsheet OR "scheduling tool") (alternative OR "looking for")`,
      limit: 25,
      since_time: since,
    });
    
    const quotes = language.data.tweets.slice(0, 5);

    Пример вывода

    { "data": { "tweets": [
      {
        "content": "we are still doing this in a spreadsheet",
        "author": { "username": "example_ops" },
        "created_at": "2026-10-18T11:05:00Z",
        "metrics": { "retweet_count": 1, "favorite_count": 18 }
      }
    ] } }
  4. Напишите бриф вокруг решения

    Соберите определение сегмента, язык покупателей, альтернативы, возражения и открытые вопросы в один Markdown. Каждое утверждение сохраняет источник и дату, размер рынка указывается только при наличии источника, а то, чего нет в публичных источниках, идёт в открытые вопросы, а не в выводы.

    gtm.ts
    const today = new Date().toISOString().slice(0, 10);
    
    const sourceLine = (title: string, url: string, date: string) =>
      `- ${title}: ${url} (checked ${date})`;
    
    const brief = [
      `# GTM brief — ${segment} in ${region}`,
      "",
      "## Segment definition",
      "See the category page for how the segment is described. Market size: Not available from public sources reviewed.",
      "",
      "## Buyer language",
      ...quotes.map((post) => `- @${post.author.username}, ${post.created_at.slice(0, 10)}: ${post.content}`),
      "",
      "## Alternatives buyers mention",
      "Spreadsheets, an incumbent suite, and doing nothing. Treated as language until a source ranks them.",
      "",
      "## Objections and proof required",
      "Migration path and a named reference. Marked open: whether the objection changes by company size.",
      "",
      "## Open questions",
      "- How much of the segment already has a dedicated budget line?",
      "- Which objection blocks a pilot most often?",
      "",
      "## Sources",
      ...pages.map((page) => sourceLine(page.title, page.url, page.checkedAt)),
      ...seedSources.map((source) => `- ${source.title}: ${source.link}`),
    ].join("\n");
    
    console.log(brief);

    Пример вывода

    # GTM brief — operations teams at 50-200 person companies in DACH
  5. Сохраните доказательства для следующего рынка

    Создайте один LiveDoc на сегмент и регион, добавьте загруженные страницы как URL-ресурсы, а бриф — как документ. Следующий рынок начнёт с тех же источников без повторной загрузки страниц категории, а повторное добавление URL дедуплицируется.

    gtm.ts
    type LiveDocData = { data: { short_id: string } };
    
    const briefDoc = await felo<LiveDocData>("/v2/livedocs", {
      name: `GTM: ${segment} — ${region}`,
      description: `Market evidence checked ${today}`,
    });
    
    await felo(`/v2/livedocs/${briefDoc.data.short_id}/resources/urls`, {
      urls: pages.map((page) => ({ url: page.url, title: page.title })),
    });
    
    await felo(`/v2/livedocs/${briefDoc.data.short_id}/resources/doc`, {
      title: `GTM brief ${today}`,
      content: brief,
    });
    
    console.log(briefDoc.data.short_id); // reuse for the next region

    Пример вывода

    { "short_id": "PvyKouzJirXjFdst4uKRK3" }

Что входит

  • Чтение рынка с источниками из Chat API и страницы, на которых оно основано
  • Страницы категорий, сравнений и цен в Markdown
  • Язык покупателей и возражения из X с аккаунтами и датами
  • Бриф, построенный вокруг решения о запуске, а не вокруг темы
  • LiveDoc, чтобы следующий регион или запуск использовал те же доказательства

Чего не делает

  • Только публичные источники; без платных отчётов, панелей и интервью с клиентами
  • Никогда не оценивает размер рынка или рост — при отсутствии данных пишет «Недоступно»
  • Посты X — язык и сигнал, а не репрезентативная выборка покупателей
  • Не выбирает сегмент или цену за вас
  • Не публикует бриф и не пишет в CRM

Вопросы

Нужен ли платный отчёт о рынке?

Нет. Процесс читает публичные источники и помечает пробелы. Если отчёт уже есть, добавьте его документом в LiveDoc и цитируйте как любой другой источник.

Можно исследовать рынок на другом языке?

Да. Задайте регион и язык. Цитаты остаются на языке оригинала с переводом рядом, чтобы локальный ревьюер проверил формулировки.

Он даёт размер рынка?

Только если источник прямо указывает его, со ссылкой и датой. Иначе бриф пишет «Недоступно», не выдумывая число и не экстраполируя из одного поста.

Можно общаться с клиентами?

Нет. Он читает публичные источники. Добавьте заметки интервью документом и пометьте их внутренними; бриф не выдаёт приватные заметки за публичные доказательства.

Чем это отличается от рецепта исследовательского брифа?

Исследовательский бриф отвечает на один вопрос. Этот процесс структурирует доказательства вокруг решения go-to-market — сегмент, язык покупателей, альтернативы, возражения и доказательства, которые просят покупатели, — чтобы результат вошёл в план запуска.

Сколько стоит бриф?

Каждый вызов chat, извлечения и поиска в X расходует кредиты; актуальные тарифы на странице цен. Промпт просит одобрение до трат.

Связанные процессы

Адаптируйте под себя

Тот же рецепт, подстроенный под ваш реальный процесс.

Запускайте по регионам

Сохраняйте структуру разделов и меняйте только регион и язык. Один LiveDoc на регион и те же вопросы, чтобы брифы можно было сравнивать, а не превращать в три несвязанных документа.

Добавьте свои заметки интервью

Вставьте заметки звонков с клиентами как документ и пометьте их внутренними. Бриф сможет ссылаться на них рядом с публичными доказательствами, но никогда не выдаст приватную заметку за публичный источник.

Передайте в deck запуска

Отдайте раздел возражений и доказательств в процесс создания deck, сохранив список источников. Бриф остаётся слоем доказательств, deck — его презентацией, а не вторым источником истины.

Справочные страницы этого рецепта и куда двигаться дальше.