Felo API PlatformFelo API Platform

Badania

Zamień pytanie rynkowe w brief go-to-market

Zadaj rynkowi precyzyjne pytanie, przeczytaj strony kategorii i cen za odpowiedzią, zbierz, jak kupujący opisują problem na X, i zapisz brief GTM z twierdzeniami ze źródeł i otwartymi pytaniami.

Czas30 minutPoziomŚredniZaktualizowano2026-10-30
Dla kogoFounderzy i operatorzyProduct marketingLiderzy sprzedaży

Skopiuj prompt

Podmień pola w nawiasach kwadratowych i wklej do Claude Code, Codex albo AI z dostępem do terminala. Instaluje skill Felo, pyta przed wydaniem kredytów i uruchamia workflow.

Przygotuj briefing badawczy go-to-market dla [produkt] wchodzącego w [segment lub ICP] w [region], w języku [język].

Model: [self-serve / sprzedaż / partner]. Decyzja, którą wspiera: [premiera / ceny / repozycjonowanie]. Okres: [ostatnie 90 dni / ostatnie 12 miesięcy].

Przygotuj briefing w Markdown zawierający:
1. Definicję segmentu: kim są, czego używają dziś i co źródła mówią o rozmiarze — zacytuj źródło lub napisz „Brak danych”.
2. Język kupujących: jak opisują problem, z linkami i datami.
3. Alternatywy: z czego przechodzą, w tym arkusze kalkulacyjne i brak działania.
4. Obiekcje i dowody, których domagają się kupujący.
5. Otwarte pytania, na które publiczne źródła nie odpowiadają.
6. Pełną listę źródeł.

Zasady:
- Każde twierdzenie rynkowe wymaga linku i daty. Nigdy nie szacuj rozmiaru rynku, wzrostu ani budżetu na wyczucie.
- Oddziel niezależne źródła, strony dostawców i własne wnioski.
- X używaj do języka i obiekcji, nie jako dowodu rozmiaru rynku.
- Zamień okres i region na konkretne wartości.
- Zanim zużyjesz kredyty, pokaż planowane wywołania API i poczekaj na moją zgodę.
- Nie publikuj, nie wysyłaj, nie planuj i nie zapisuj niczego w CRM.
- Zapisz wynik w ./gtm-brief.md i podsumuj go w czacie.

Kopia zawiera też kroki instalacji i zasady bezpieczeństwa.

Co otrzymujesz

Przykładowy wynik jednego uruchomienia. Nie generowanie na żywo.

Przykładowy briefing GTM (fragment)

Briefing GTM — [segment] w [region]

Definicja segmentu

Małe zespoły operacyjne, które prowadzą harmonogram w arkuszach. Rozmiar: brak danych w sprawdzonych źródłach publicznych — bez źródła nie wpisuj liczby.

Język kupujących

  • „wciąż robimy to w arkuszu” — post X, 2026-10-18
  • „konfiguracja jest najtrudniejsza” — post X, 2026-10-02

Oznaczone jako język, nie dowód powszechności.

Alternatywy wymieniane przez kupujących

Arkusze, istniejący pakiet i nic nie robić. Źródło: https://example.com/thread (2026-10-18).

Obiekcje i wymagane dowody

Przegląd bezpieczeństwa i ścieżka migracji. Kupujący proszą o nazwaną referencję; publicznie jej nie mamy, więc pytanie pozostaje otwarte.

Otwarte pytania

  • Jaka część segmentu ma już osobną linię budżetową?
  • Czy obiekcja zmienia się z rozmiarem firmy?

Źródła

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

Dokładne wywołania

Dla deweloperów: ten sam workflow jako kod, w kolejności wykonania.

Pokaż rzeczywiste wywołania API
  1. Ujmij pytanie rynkowe

    Chat zwraca odpowiedź i użyte strony, więc zacznij od pytania dość wąskiego: kto kupuje, czego używa dziś, jakie obiekcje się pojawiają. Trzymaj zasoby jako linki-wskazówki; odpowiedź jest wskazówką, linki są dowodem i zamykają listę źródeł.

    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);

    Przykładowy wynik

    {
      "answer": "Buyers in this segment usually start from spreadsheets and …",
      "sources": [
        { "link": "https://example.com/category-page", "title": "…", "snippet": "…" }
      ]
    }
  2. Przeczytaj strony kategorii

    Pobierz strony, które ujmują rynek: przegląd kategorii, porównanie i ceny. Wyekstrahuj je jako Markdown z trybem czytania i zapisz datę pobrania, bo jakość lektury zależy od stron za nią.

    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 };
      }),
    );

    Przykładowy wynik

    {
      "url": "https://example.com/category",
      "checkedAt": "2026-10-30",
      "content": "# Category overview\n\nExtracted page text…"
    }
  3. Zbierz, jak kupujący opisują problem

    Szukaj na X słów, których kupujący używają, gdy spotykają problem, nie nazwy produktu. Zachowaj konta i daty; brief używa postów do języka i obiekcji, nigdy jako miary rozmiaru rynku lub częstotliwości.

    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);

    Przykładowy wynik

    { "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. Napisz brief wokół decyzji

    Połącz definicję segmentu, język kupujących, alternatywy, obiekcje i otwarte pytania w jeden Markdown. Każde twierdzenie zachowuje źródło i datę, rozmiar rynku pojawia się tylko ze źródłem, a czego publiczne źródła nie odpowiadają, idzie do otwartych pytań zamiast inferencji.

    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);

    Przykładowy wynik

    # GTM brief — operations teams at 50-200 person companies in DACH
  5. Zachowaj dowody na kolejny rynek

    Utwórz jeden LiveDoc na segment i region, dodaj pobrane strony jako zasoby URL i brief jako dokument. Kolejny rynek startuje z tych samych źródeł bez ponownego pobierania kategorii, a dodanie URL ponownie jest deduplikowane.

    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

    Przykładowy wynik

    { "short_id": "PvyKouzJirXjFdst4uKRK3" }

Co zawiera

  • Lektura rynku ze źródłami z Chat API i stronami za nią
  • Strony kategorii, porównania i cen jako Markdown
  • Język i obiekcje kupujących z X z kontami i datami
  • Brief wokół decyzji o launchu, nie tematu
  • LiveDoc, by kolejny region lub launch użył dowodów ponownie

Czego nie robi

  • Tylko źródła publiczne; bez płatnych raportów, paneli i wywiadów z klientami
  • Nigdy nie szacuje rozmiaru ani wzrostu rynku — bez danych pisze „Niedostępne”
  • Posty X to język i sygnał, nie reprezentatywna próba kupujących
  • Nie wybiera za ciebie segmentu ani ceny
  • Nie publikuje briefu ani nie zapisuje do CRM

Pytania

Czy potrzebny jest płatny raport rynkowy?

Nie. Workflow czyta źródła publiczne i oznacza luki. Jeśli masz raport, dodaj go jako dokument w LiveDoc i cytuj jak inne źródło.

Czy można badać rynek w innym języku?

Tak. Ustaw region i język. Cytaty zostają w oryginale z tłumaczeniem obok, żeby lokalny recenzent sprawdził sformułowanie.

Czy dostaję rozmiar rynku?

Tylko gdy źródło go podaje, z linkiem i datą. Inaczej brief pisze „Niedostępne” zamiast wymyślać liczbę lub ekstrapolować z jednego posta.

Czy rozmawia z klientami?

Nie. Czyta źródła publiczne. Dodaj notatki z wywiadów jako dokument i oznacz jako wewnętrzne; brief nigdy nie przedstawia prywatnych notatek jako publicznych dowodów.

Czym różni się od briefu badawczego?

Brief badawczy odpowiada na jedno pytanie. Ten workflow układa dowody wokół decyzji go-to-market — segment, język kupujących, alternatywy, obiekcje i dowody, o które proszą — żeby zasilić plan launchu.

Ile kosztuje jeden brief?

Każde wywołanie czatu, ekstrakcji i wyszukiwania X zużywa kredyty według użycia; aktualne stawki na stronie cen. Prompt pyta o zgodę przed wydaniem.

Powiązane workflowy

Dostosuj

Ta sama receptura, dopasowana do tego, jak naprawdę dostarczasz.

Uruchamiaj według regionu

Zachowaj strukturę sekcji i zmień tylko region oraz język. Jeden LiveDoc na region i te same pytania, żeby briefy były porównywalne.

Dodaj notatki z wywiadów

Wklej notatki z rozmów z klientami jako dokument i oznacz jako wewnętrzne. Brief może je cytować obok publicznych dowodów, ale nigdy nie przedstawia prywatnej notatki jako publicznego źródła.

Zasil deck launchowy

Przekaż sekcję obiekcji i dowodów do workflow decku, zachowując listę źródeł. Brief pozostaje warstwą dowodów; deck jest prezentacją, nie drugim źródłem prawdy.

Strony referencyjne za tą recepturą i kolejne kroki.