Felo API PlatformFelo API Platform

Badania

Zbadaj niszę produktową, zanim zamówisz zapas

Zbierz kontekst kategorii, uchwyć strony konkurentów w podanej dacie, przeczytaj skargi kupujących na X i trzymaj dowody oraz memo w jednym LiveDoc do przeglądu przed zamówieniem.

Czas30 minutPoziomŚredniZaktualizowano2026-10-30
Dla kogoOperatorzy e-commerceBadacze produktuFounderzy DTC

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.

Zbadaj tę niszę produktową przed zamówieniem zapasów lub premierą: [produkt lub kategoria].

Rynek: [kraj lub region]. Kanał: [marketplace / DTC / retail]. Okres postów kupujących: ostatnie [30] dni.
Produkty porównywalne lub URL-e konkurencji: [URL-e]. Ograniczenia budżetu i marży: [ograniczenia]. Odbiorcy: [zespół].

Przygotuj notatkę w Markdown zawierającą:
1. Werdykt w jednym akapicie: czy warto badać dalej i co zmieniłoby Twoją opinię.
2. Sygnały popytu: co źródła mówią o zainteresowaniu, sezonowości i substytutach.
3. Produkty konkurencji: co każdy twierdzi, cenę uchwyconą na stronie i gdzie kupujący widzą braki.
4. Pozycjonowanie cenowe: ceny faktycznie znalezione na stronach, każda z datą uchwycenia.
5. Skargi i niezaspokojone potrzeby, z cytatami, kontami i datami.
6. Ryzyka i otwarte pytania do rozwiązania przed zakupem zapasów.
7. Źródła: każda użyta strona i post, z URL i datą.

Zasady:
- Używaj tylko tego, co zwracają API. Nigdy nie wymyślaj rozmiaru rynku, szacunków sprzedaży, liczby opinii ani cen konkurencji.
- Raportuj ceny dokładnie tak, jak je uchwycono, z URL strony i datą. Nigdy ich nie uśredniaj ani nie normalizuj.
- Traktuj posty X jako anegdotę, nie dane rynkowe, i mów, gdy próba jest zbyt mała.
- Oddziel twierdzenia dostawcy od relacji kupujących.
- Zanim zużyjesz kredyty, pokaż planowane ekstrakcje i wyszukiwania i poczekaj na moją zgodę.
- Nie kontaktuj się z dostawcami, nie składaj zamówień i nie pisz do nikogo na X.
- Zapisz wynik w ./product-research.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ładowa notatka (fragment)

Badanie produktu — przykładowa kategoria

Werdykt

Warto przyjrzeć się bliżej, ale publiczne dowody nie wystarczą do decyzji o zapasach. Otwarte pytania poniżej to następny krok.

Kontekst kategorii

Kupujący porównują miejsce na blacie i łatwość czyszczenia bardziej niż ciśnienie. Żadne publiczne źródło nie wspiera szacunku rozmiaru rynku.

Strony konkurencji

  • Example A — strona produktu (zapisano 2026-10-30)
  • Example B — strona produktu (zapisano 2026-10-30)

Co raportują kupujący

  • @example_buyer: „Trzecia wymiana w roku; uszczelka zawodzi.” — 2026-10-19
  • @example_home: „Czyszczenie zajmuje minuty, nikt o tym nie mówi.” — 2026-10-24

Pozycjonowanie cenowe

Ceny zapisano 2026-10-30 z linkowanych stron. Są w dwóch przedziałach; każda strona jest cytowana bezpośrednio, bez uśredniania.

Ryzyka i otwarte pytania

  • Trwałość uszczelki to najczęstsza skarga.
  • Żadne źródło nie obejmuje zwrotów.
  • Przed zamówieniem sprawdź terminy dostawcy i koszt dostawy.

Źródła

  • https://example.com/product-a — 2026-10-30
  • https://x.com/example_buyer/status/... — 2026-10-19

Dokładne wywołania

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

Pokaż rzeczywiste wywołania API
  1. Poproś Chat o obraz kategorii

    Zacznij od odpowiedzi ze źródłami, nie od pustej strony: Chat przeszukuje publiczny web, szereguje strony i zwraca użyte zasoby. Zapytaj w jednym query o kontekst popytu, substytuty i typowe skargi, potem zachowaj najlepsze zasoby jako listę dowodów.

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

    Przykładowy wynik

    {
      "answer": "Buyers compare on counter space and cleanup …",
      "sources": [
        { "link": "https://example.com/category-guide", "title": "…", "snippet": "…" }
      ]
    }
  2. Uchwyć strony konkurentów

    Wyekstrahuj dwie lub trzy strony produktów konkurentów jako Markdown z trybem czytania. Celem jest twierdzenie i cena na stronie dziś, nie przepisana karta specyfikacji. Trzymaj URL z treścią i zapisz datę uchwycenia: cena bez daty to plotka.

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

    Przykładowy wynik

    [
      {
        "url": "https://example.com/product-a",
        "title": "Example A — product page",
        "content": "# Example A\n\nSpecs and price as displayed…"
      }
    ]
  3. Przeczytaj, co zgłaszają kupujący na X

    Strony dostawców wymieniają funkcje; kupujący opisują awarie. Szukaj niszy z słowami tarcia — dostawa, jakość, zwrot — w 30 dniach i zachowaj konto, datę i link. To anegdoty, nie dane popytu, i memo musi to mówić.

    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;

    Przykładowy wynik

    { "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. Napisz memo

    Ten krok to prosty kod: połącz odpowiedź kategorii, daty uchwycenia, cytaty kupujących i listę źródeł w jeden Markdown. Bądź uczciwy co do otwartych pytań — memo jest użyteczne, bo oddziela to, co dowodzą strony, od tego, co trzeba potwierdzić z dostawcą.

    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. Zarchiwizuj dowody w LiveDoc

    Uruchom raz na niszę: utwórz LiveDoc i zapisz short_id w konfiguracji. Dodaj strony konkurentów i źródła Chat jako zasoby URL, żeby archiwum deduplikowało, potem memo jako dokument. Przed zakupem przeszukaj uchwycenia i zobacz, które ceny się ruszyły.

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

    Przykładowy wynik

    { "short_id": "PvyKouzJirXjFdst4uKRK3" }

Co zawiera

  • Obraz kategorii ze źródłami z Chat i strony za nim
  • Strony konkurentów jako Markdown z datą uchwycenia
  • Skargi kupujących na X z kontami, datami i linkami
  • Memo Markdown z tych wejść
  • Jeden LiveDoc z dowodami i memo

Czego nie robi

  • Tylko źródła publiczne; płatne raporty, wyceny dostawców i wewnętrzna sprzedaż poza zakresem
  • Nie szacuje rozmiaru rynku, wolumenu ani marży
  • Ceny zapisane jak uchwycone, nigdy normalizowane ani uśredniane
  • Posty X to anegdoty, nie dane popytu
  • Nie kontaktuje dostawców, nie zamawia i nie zmienia listingów

Pytania

Skąd kontekst rynku?

Chat API zwraca odpowiedź ze źródłami i użyte publiczne strony. Strony konkurentów pochodzą z twoich URL-i i ekstrahuje je Web Fetch; posty kupujących z X Search. Bez prywatnych danych sprzedaży.

Czy mówi, czy produkt się sprzeda?

Nie. Układa publiczne dowody — kontekst, uchwycone ceny i skargi — i zapisuje, co nieznane. Walidacja popytu wymaga twoich danych: reklam, pre-orderów lub rozmów z dostawcami.

Jeśli marketplace blokuje ekstrakcję?

Web Fetch pobiera publiczne strony po jednym URL-u, a część serwisów blokuje. Użyj dostępnej strony produktu lub dostawcy i pozwól memo oznaczyć brakujące uchwycenie zamiast zgadywać cenę.

Jak uniknąć nieaktualnych cen konkurencji?

Każda cena w memo jest powiązana z URL-em i datą uchwycenia. Uruchom ekstrakcję ponownie blisko decyzji o zakupie; archiwum trzyma wcześniejsze uchwycenia, by zobaczyć ruchy.

Czy kontaktuje dostawców lub sprzedawców?

Nie. Workflow tylko czyta: ekstrahuje strony, szuka publicznych postów i pisze lokalne memo. Nie wysyła wiadomości, nie zamawia i nie zmienia listingów.

Ile kosztuje jedno badanie?

Każde wywołanie Chat, 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.

Dodaj transkrypty recenzji wideo

Gdy kategoria ma recenzje wideo, pobierz transkrypt z YouTube Subtitling i dodaj dwa lub trzy cytaty ze znacznikami czasu do sekcji kupujących. Recenzja wideo to doświadczenie jednej osoby: zachowaj etykietę anegdoty.

Porównaj dwóch kandydatów

Uruchom te same kroki dla każdego kandydata i postaw memo obok siebie: deklarowane funkcje, uchwycona cena, powtarzająca się skarga i otwarte pytanie. Porównanie zostaje jakościowe, dopóki nie masz danych sprzedaży lub zwrotów.

Odśwież przed zakupem

Uruchom ekstrakcję ponownie dzień przed zamówieniem. Zachowaj ten sam LiveDoc i dodaj nowe memo, żeby archiwum pokazało, co zmieniło się między badaniem a zakupem.

Strony referencyjne za tą recepturą i kolejne kroki.