Felo API PlatformFelo API Platform

Araştırma

Satış ekibinin kullanabileceği bir rakip analizi oluşturun

Rakibin sayfalarını, çevresindeki haberciliği ve alıcıların X’te söylediklerini toplayın, ardından her iddianın kaynak, tarih ve durum taşıdığı bir analiz kurun.

Süre30 dakikaSeviyeOrtaGüncellendi2026-10-30
Kimler içinProduct marketingCompetitive intelligenceSales enablement

İstemi kopyalayın

Köşeli parantezli alanları değiştirip Claude Code, Codex veya terminal erişimi olan bir AI’ya yapıştırın. Felo becerisini kurar, kredi harcamadan önce sorar ve iş akışını çalıştırır.

[Rakip adı] için [ürünümüz] adına rekabet analizi hazırla.

Kapsam: [segment], [bölge], [dil]. Dönem: [son 90 gün / son 12 ay]. Desteklediği karar: [fiyat değişikliği / lansman konumlandırması / itiraz yönetimi].
Başlangıç kaynakları: [rakip alan adı], [fiyat sayfası URL], [changelog URL].

Markdown analizi şunları içersin:
1. Kendilerini nasıl konumlandırdıkları, kendi sözleriyle.
2. Kanıt tablosu: iddia, kaynak başlığı, URL, tarih, durum (Verified / Vendor claim / Third-party / Signal / Inference / Not verified).
3. Fiyatlar: sayfada yazan, bağlantı ve kontrol tarihiyle. Sayfa ve tarih olmadan asla bir ücreti metne taşıma.
4. Alıcıların itiraz ettiği noktalar, X hesapları ve tarihlerle, sinyal olarak işaretli.
5. Sonra ne yapmamız gerektiği, öneri olarak işaretli.
6. Tam kaynak listesi.

Kurallar:
- Konumlandırmalarını alıntıla; daha güçlü bir iddiaya dönüştürme.
- Satıcı iddialarını, üçüncü taraf haberlerini ve kendi çıkarımlarını ayır. Her satırı etiketle.
- Asla fiyat, metrik, müşteri adı veya kıyas ölçütü uydurma. Veri yoksa “Veri yok” yaz.
- Dönemi ve bölgeyi açık değerlere çevir.
- Kredi harcamadan önce planlanan API çağrılarını göster ve onayımı bekle.
- Hiçbir şey yayımlama, gönderme, planlama ve CRM’e yazma.
- Sonucu ./competitor-teardown.md dosyasına yaz ve sohbette özetle.

Kopya kurulum adımlarını ve güvenlik kurallarını da içerir.

Ne elde edersiniz

Bir çalıştırmanın örnek çıktısı. Canlı üretim değil.

Örnek rakip analizi (alıntı)

Rakip analizi — [rakip], 2026-10-30 kontrol edildi

Kendilerini nasıl konumlandırıyorlar

Ana sayfa başlığı: “Büyüyen destek ekipleri için platform.” Kategori sayfası: “Destek ekibinizin ihtiyacı olan her şey.” İkisi de satıcı iddiası, yazıldığı gibi alıntılandı.

Kanıt tablosu

İddiaKaynakTarihDurum
Nokta araç değil platform olarak konumlanıyorhttps://example.com/competitor/home2026-10-30Verified
Her hafta değişiklik yayınlıyorhttps://example.com/competitor/changelog2026-10-28Verified
Bağımsız derlemelerde yer alıyorhttps://example.com/roundup2026-10-27Third-party
Alıcılar yavaş onboarding diyoraşağıda alıntılanan X gönderisi2026-10-14Signal
Enterprise en büyük segmentleriVeri yok—Not verified

Fiyatlar

Fiyat sayfası katmanlı ve kullanım tabanlı plan listeliyor. Ücretler burada tekrarlanmıyor; canlı sayfayı ve tarihi kontrol edin: https://example.com/competitor/pricing (2026-10-30).

Alıcıların itiraz ettiği yer

@example_dev, 2026-10-14: “kurulum demo’nun ima ettiğinden uzun sürdü.” Tarihli tek gönderi; bu bir şikâyet, sıklık tahmini değil.

Öneri

Karşılaştırma sayfasında ilk sonuca kadar geçen süreyi öne çıkarın. Bu bizim çıkarımımız, rakibin iddiası değil.

Kaynaklar

  • https://example.com/competitor/home
  • https://example.com/competitor/pricing
  • https://example.com/competitor/changelog

Tam çağrılar

Geliştiriciler için: aynı iş akışı kod olarak, yürütme sırasıyla.

Gerçek API çağrılarını göster
  1. Kaynaklı temelle başlayın

    Chat yanıtı ve kullanılan sayfaları döndürür, rakip hakkında nerede konuşulduğunun haritası. Yanıtı ipucu olarak görün, kaynak değil: bağlantıları saklayın, üçüncü taraf satırlarını onlar verir. Yardımcı anahtarı bir kez gönderir ve 2xx dışında hata fırlatır.

    competitor.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 competitor = "Example Competitor";
    const segment = "mid-market support teams";
    
    const baseline = await felo<ChatData>("/v2/chat", {
      query: `How does ${competitor} position itself for ${segment}? Include pricing and recent launches.`,
    });
    
    const seedSources = baseline.data.resources.slice(0, 5);

    Örnek çıktı

    {
      "answer": "The competitor positions itself as …",
      "sources": [
        { "link": "https://example.com/competitor", "title": "…", "snippet": "…" }
      ]
    }
  2. Kontrol ettikleri sayfaları indirin

    Üçüncü taraf habercilik insanların ne düşündüğünü gösterir; kendi sayfaları ne iddia ettiklerini gösterir. Ana sayfayı, fiyatları ve changelog’u okuma moduyla Markdown olarak çıkarın ve indirme tarihini yazın: tarihsiz fiyat sayfası tuzaktır.

    competitor.ts
    type ExtractData = { data: { content: string } };
    
    const ownedPages = [
      { url: "https://example.com/competitor/home", title: "Homepage" },
      { url: "https://example.com/competitor/pricing", title: "Pricing" },
      { url: "https://example.com/competitor/changelog", title: "Changelog" },
    ];
    
    const fetched = await Promise.all(
      ownedPages.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 };
      }),
    );

    Örnek çıktı

    {
      "url": "https://example.com/competitor/pricing",
      "checkedAt": "2026-10-30",
      "content": "# Pricing\n\nExtracted page text…"
    }
  3. Alıcıların X’te ne dediğine bakın

    X’te rakip hakkındaki itirazları ve etrafından dolanmaları arayın. Her gönderinin hesabını ve tarihini saklayın; tarihli bir alıntı şikâyeti kanıtlar, sıklığını değil. Analiz bunu sinyal olarak işaretler ve birkaç gönderiyi asla yüzdeye çevirmez.

    competitor.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 buyerSignal = await felo<XData>("/v2/x/tweet/search", {
      query: `"${competitor}" (pricing OR onboarding OR migration)`,
      limit: 25,
      since_time: since,
    });
    
    const objections = buyerSignal.data.tweets.slice(0, 5);

    Örnek çıktı

    { "data": { "tweets": [
      {
        "content": "setup took longer than the demo suggested",
        "author": { "username": "example_dev" },
        "created_at": "2026-10-14T09:20:00Z",
        "metrics": { "retweet_count": 3, "favorite_count": 24 }
      }
    ] } }
  4. Kanıt tablosuyla analizi kurun

    Bu editoryal adımdır: sayfaları ve gönderileri iddialara dönüştürün ve her birine kaynak, tarih ve durum verin. Durum sütunu belgeyi dürüst tutar: sayfanın söylediği için Verified, pazarlama için Vendor claim, dış habercilik için Third-party, tarihli gönderi için Signal, sizin okumanız için Inference ve kanıtsız Not verified.

    competitor.ts
    const today = new Date().toISOString().slice(0, 10);
    
    const row = (claim: string, source: string, date: string, status: string) =>
      `| ${claim} | ${source} | ${date} | ${status} |`;
    
    const teardown = [
      `# Competitor teardown — ${competitor}`,
      `Scope: ${segment}. Checked ${today}.`,
      "",
      "| Claim | Source | Date | Status |",
      "| --- | --- | --- | --- |",
      row("Free tier listed on the pricing page", ownedPages[1].url, fetched[1].checkedAt, "Verified"),
      row("Positions as a platform, not a point tool", ownedPages[0].url, fetched[0].checkedAt, "Vendor claim"),
      row("Discussed in independent coverage", seedSources[0]?.link ?? "Not available", today, "Third-party"),
      row("Buyers report onboarding friction", "X post, quoted below", today, "Signal"),
      row("Most revenue comes from enterprise", "Not available", "—", "Not verified"),
      "",
      "## Recommendation",
      "Lead with time-to-first-result on the comparison page. Inference, not a competitor claim.",
    ].join("\n");
    
    console.log(teardown);

    Örnek çıktı

    | Free tier listed on the pricing page | https://example.com/competitor/pricing | 2026-10-30 | Verified |
  5. Sonraki güncelleme için LiveDoc’a arşivleyin

    Rakip başına bir LiveDoc oluşturun, indirilen sayfaları URL kaynağı ve analizi belge olarak ekleyin. URL’yi yeniden eklemek tekilleştirilir, böylece sonraki çeyrekte yalnızca değişiklikler indirilir ve önceki analiz aynı arşivde kalır.

    competitor.ts
    type LiveDocData = { data: { short_id: string } };
    
    const teardownDoc = await felo<LiveDocData>("/v2/livedocs", {
      name: `Teardown: ${competitor}`,
      description: `Sources and teardown checked ${today}`,
    });
    
    await felo(`/v2/livedocs/${teardownDoc.data.short_id}/resources/urls`, {
      urls: fetched.map((page) => ({ url: page.url, title: page.title })),
    });
    
    await felo(`/v2/livedocs/${teardownDoc.data.short_id}/resources/doc`, {
      title: `Teardown ${today}`,
      content: teardown,
    });
    
    console.log(teardownDoc.data.short_id); // the next refresh reuses this LiveDoc

    Örnek çıktı

    { "short_id": "PvyKouzJirXjFdst4uKRK3" }

Neler dahil

  • Chat API’den kaynaklı temel ve arkasındaki sayfalar
  • Rakibin ana sayfası, fiyatları ve changelog’u Markdown olarak
  • X’ten tarihli alıcı yorumları, kanıt değil sinyal olarak
  • Doğrulanmış gerçekleri, satıcı iddialarını ve çıkarımı ayıran kanıt tablosu
  • Sıfırdan başlamamak için kaynakları tutan LiveDoc

Neleri yapmaz

  • Yalnızca kamuya açık kaynaklar; kazanma/kaybetme görüşmeleri, CRM notları veya özel panolar yok
  • Fiyatlar bağlantılanır ve tarihlenir, doğrulama tarihi olmadan tabloda asla dondurulmaz
  • X kapsamı eksiktir ve temsili alıcı örneği değildir
  • Konumlandırmanızı seçmez; öneriler çıkarım olarak işaretlenir
  • Analizi yayımlamaz veya battlecard araçlarına yazmaz

Sorular

Kanıtlar nereden geliyor?

Chat API kaynaklı temeli ve kullanılan sayfaları döndürür, Web Fetch rakip sayfalarını Markdown’a çevirir ve X Search tarihli gönderiler ekler. Her satır kaynak ve tarih tutar, çıkarımın kendi durumu vardır.

Birden çok rakip kapsanabilir mi?

Evet. Aynı istemi her rakip için çalıştırın ve şirket başına bir LiveDoc tutun. Karşılaştırma sayfası yalnızca “doğrulanmış” satırları birleştirir, iki çalıştırmanın kanıtlarını karıştırmaz.

Fiyatları alıntılanabilir mi?

İş akışı fiyat sayfasının söylediğini bağlantı ve doğrulama tarihiyle kaydeder. Tarifeleri metinde dondurmaz çünkü fiyatlar değişir ve eski sayı hiç sayı olmamasından kötüdür.

Kazanma/kaybetme notlarımız?

Yalnızca kamuya açık kaynakları okur. Dahili notları LiveDoc’ta ayrı belge olarak ekleyin ve dahili işaretleyin; müşteri materyallerinde asla alıntılanmazlar.

Ne sıklıkla güncellenmeli?

Takvimle değil tetikleyiciyle: fiyat değişikliği, lansman veya satış döngüsü başlangıcı. Aynı LiveDoc’ta yeniden çalıştırın ki önceki çeyrek yeniyle yan yana dursun.

Bir analizin maliyeti nedir?

Her sohbet, çıkarım ve X araması kullanıma göre kredi harcar; güncel tarifeler fiyat sayfasında. İstem harcamadan önce onay ister.

İlgili iş akışları

Kendinize uyarlayın

Aynı tarif, gerçekte nasıl teslim ettiğinize uyarlanmış.

Takvimle değil tetikleyiciyle güncelleyin

Rakip fiyat değiştirdiğinde, büyük lansman yaptığında veya satış döngüsünden önce yeniden çalıştırın. Her analizi aynı LiveDoc’ta tarihli belge olarak tutun.

Analizi battlecard’a çevirin

Aynı tablodan rol başına bir sayfa yazın — ekonomik alıcı, champion, teknik inceleyici — yalnızca `Verified` satırları ve bağlantılarla. `Inference`i müşteri materyallerinin dışında tutun.

İki rakibi karşılaştırın

Her rakip için ayrı LiveDocs ile iş akışını çalıştırın ve yalnızca iki çalıştırmadaki `Verified` satırlarından karşılaştırma sayfası kurun. Durum sütunu olmadan iki çalıştırmayı asla birleştirmeyin.

Bu tarifin arkasındaki referans sayfaları ve sonraki adımlar.