Felo API PlatformFelo API Platform

Research

Onderzoek een doelaccount voor je eerste outreach

Lees de site van het bedrijf, recente berichtgeving en wat ze openbaar posten, en schrijf een accountbrief met recente stappen, waarschijnlijke prioriteiten, gespreksonderwerpen en eerlijke onbekenden.

Tijd20 minutenNiveauBeginnerBijgewerkt2026-10-30
Voor wieOprichters & operatorsAccount executivesSalesleiders

Prompt kopiëren

Vervang de velden tussen blokhaken en plak in Claude Code, Codex of een AI met terminaltoegang. Die installeert de Felo-skill, vraagt voor credits en voert de workflow uit.

Maak een accountbrief over [bedrijfsnaam of domein] vóór [outreach / discoverygesprek / verlenging].

Ons aanbod: [product of dienst]. Koper die ons interesseert: [rol]. Tijdvenster voor recente bewegingen: [laatste 90 dagen / laatste 12 maanden].

Lees hun eigen site, publieke berichtgeving en publieke posts. Lever een Markdown-brief met:
1. Wat ze doen, in één alinea, met bronnen.
2. Recente bewegingen: lanceringen, financiering, werving, leiderschap, partnerschappen — met datums en links.
3. Waarschijnlijke prioriteiten dit kwartaal, duidelijk gemarkeerd als gevolgtrekking.
4. Gespreksopeners: drie concrete observaties, elk met bron.
5. Onbekenden: wat je niet uit publieke bronnen kon verifiëren.
6. Een volledige bronnenlijst.

Regels:
- Verzin nooit een contactnaam, e-mail, telefoonnummer, personeelsaantal, omzet of financieringsbedrag.
- Alleen publieke bronnen: geen privégegevens, geen login-only pagina’s, geen gescrapete directories.
- Schrijf niet in een CRM of ander systeem. De brief is een bestand dat een mens beoordeelt.
- Markeer elke gevolgtrekking als zodanig; houd feiten met hun links en datums.
- Presenteer de intentie van de koper niet als feit.
- Voordat er credits worden gebruikt, toon je de geplande API-aanroepen en wacht je op mijn goedkeuring.
- Verstuur, plan, publiceer niets en stuur niemand een bericht.
- Schrijf het resultaat naar ./account-brief.md en vat het samen in de chat.

De kopie bevat ook de installatiestappen en veiligheidsregels.

Wat je krijgt

Voorbeelduitvoer van een run. Geen live generatie.

Voorbeeld-accountbrief (fragment)

Accountbrief — [bedrijf], gecontroleerd op 2026-10-30

Wat ze doen

Bouwt magazijnpickrobots voor middelgrote logistieke dienstverleners. Bron: https://example.com/about (gecontroleerd op 2026-10-30).

Recente bewegingen

  • Tweede assemblagelocatie geopend — https://example.com/news/expansion (2026-10-24)
  • Werving voor een “deployment operations”-team — https://example.com/careers (gecontroleerd op 2026-10-30)
  • Post van hun account over een partnerintegratie — @example_company (2026-10-21)

Waarschijnlijke prioriteiten (gevolgtrekking)

Snellere deployments op meer locaties. Gevolgtrekking uit de expansiepost en de nieuwe deploymentrol — geen verklaard plan en publiek niet bevestigd.

Gespreksopeners

  • Hun tweede locatie is nieuw: vraag hoe het deployment-playbook verandert als locaties verschillen. Bron: https://example.com/news/expansion
  • Een eigen deployment operations-rol suggereert een overdracht tussen sales en installatie. Bron: https://example.com/careers

Onbekenden

  • Wie deployment operations nu leidt: niet beschikbaar uit publieke bronnen.
  • Vlootgrootte en contractwaarden: niet beschikbaar.

Bronnen

  • https://example.com/about
  • https://example.com/news/expansion
  • https://example.com/careers

De exacte aanroepen

Voor ontwikkelaars: dezelfde workflow als kopieerbare code in uitvoeringsvolgorde.

Exacte API-aanroepen tonen
  1. Haal het overzicht op

    Vraag Chat wat het bedrijf doet en welke openbare veranderingen recent zijn, en bewaar de geciteerde bronnen.

    account.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 company = "Example Robotics";
    const domain = "example.com";
    const buyerRole = "Head of Operations";
    
    const overview = await felo<ChatData>("/v2/chat", {
      query: `What does ${company} do, who buys from it, and what changed in the last 90 days?`,
    });
    
    const seedSources = overview.data.resources.slice(0, 5);

    Voorbeelduitvoer

    {
      "answer": "The company builds …",
      "sources": [
        { "link": "https://example.com/about", "title": "…", "snippet": "…" }
      ]
    }
  2. Lees site, prijzen en vacatures

    Lees met Web Fetch About, prijzen en vacatures om product, klanten en open rollen te begrijpen.

    account.ts
    type ExtractData = { data: { content: string } };
    
    const companyPages = [
      { url: `https://${domain}/about`, title: "About" },
      { url: `https://${domain}/pricing`, title: "Pricing" },
      { url: `https://${domain}/careers`, title: "Careers" },
    ];
    
    const pages = await Promise.all(
      companyPages.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 };
      }),
    );

    Voorbeelduitvoer

    {
      "url": "https://example.com/careers",
      "checkedAt": "2026-10-30",
      "content": "# Careers\n\nOpen roles: deployment operations…"
    }
  3. Bekijk openbare signalen van 90 dagen

    Zoek op X naar bedrijfs- en productnaam en bewaar openbare posts, accounts en datums van de laatste 90 dagen.

    account.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 posts = await felo<XData>("/v2/x/tweet/search", {
      query: `"${company}" (hiring OR launch OR partnership OR expansion)`,
      limit: 20,
      since_time: since,
    });
    
    const recent = posts.data.tweets.slice(0, 5);

    Voorbeelduitvoer

    { "data": { "tweets": [
      {
        "content": "We just opened our second assembly site",
        "author": { "username": "example_company" },
        "created_at": "2026-10-21T14:02:00Z",
        "metrics": { "retweet_count": 4, "favorite_count": 31 }
      }
    ] } }
  4. Schrijf de accountbrief

    Beschrijf overzicht, recente stappen, waarschijnlijke prioriteiten, gespreksonderwerpen, onbekenden en bronnen.

    account.ts
    const today = new Date().toISOString().slice(0, 10);
    
    const accountBrief = [
      `# Account brief — ${company}`,
      `Checked ${today}. Buyer role: ${buyerRole}.`,
      "",
      "## What they do",
      overview.data.answer,
      "",
      "## Recent moves",
      ...recent.map(
        (post) => `- ${post.created_at.slice(0, 10)}: ${post.content} (from @${post.author.username})`,
      ),
      ...pages.map((page) => `- ${page.title} page captured ${page.checkedAt}: ${page.url}`),
      "",
      "## Likely priorities (inference)",
      "<!-- One or two sentences from the moves above. Mark them as inference, never a stated plan. Delete this comment when filled. -->",
      "",
      "## Conversation starters",
      ...recent.slice(0, 3).map(
        (post) => `- Ask about: ${post.content.slice(0, 100)} (dated ${post.created_at.slice(0, 10)})`,
      ),
      "",
      "## Unknowns",
      "- Who owns the workflow we sell into: Not available from public sources.",
      "- Contract values and team size: Not available.",
      "",
      "## Sources",
      ...pages.map((page) => `- ${page.title}: ${page.url}`),
      ...seedSources.map((source) => `- ${source.title}: ${source.link}`),
    ].join("\n");
    
    console.log(accountBrief);

    Voorbeelduitvoer

    # Account brief — Example Robotics
  5. Sla op in de LiveDoc

    Bewaar brief en bronnen in de LiveDoc om ze bij het volgende contact te hergebruiken.

    account.ts
    type LiveDocData = { data: { short_id: string } };
    
    const accountDoc = await felo<LiveDocData>("/v2/livedocs", {
      name: `Account: ${company}`,
      description: `Briefs and sources checked ${today}`,
    });
    
    await felo(`/v2/livedocs/${accountDoc.data.short_id}/resources/urls`, {
      urls: [
        ...pages.map((page) => ({ url: page.url, title: page.title })),
        ...seedSources.map((source) => ({ url: source.link, title: source.title })),
      ],
    });
    
    await felo(`/v2/livedocs/${accountDoc.data.short_id}/resources/doc`, {
      title: `Account brief ${today}`,
      content: accountBrief,
    });
    
    console.log(accountDoc.data.short_id); // the next call reuses this LiveDoc

    Voorbeelduitvoer

    { "short_id": "PvyKouzJirXjFdst4uKRK3" }

Wat inbegrepen is

  • Onderbouwd bedrijfsoverzicht uit Chat
  • Site, prijzen en vacatures als Markdown
  • Gedateerde openbare posts op X
  • Gestructureerde accountbrief
  • LiveDoc met bewijs

Wat het niet doet

  • Geen contact-e-mails, telefoonnummers of persoonsgegevens
  • Leest geen privédata of login-only pagina’s
  • Schrijft niet in het CRM en verstuurt geen berichten
  • Medewerkersaantal, omzet en financiering alleen met expliciete bron
  • Prioriteiten en intenties zijn als inferentie gemarkeerd

Vragen

Geeft het contact-e-mails?

Nee. De workflow doet alleen openbaar onderzoek en levert geen e-mail, telefoon of persoonsgegevens.

Waar komen de data vandaan?

Chat geeft een onderbouwd overzicht, Web Fetch leest site, prijzen en vacatures, X Search voegt openbare posts toe. Elk item behoudt link en datum.

Kan ik niet-techbedrijven onderzoeken?

Ja. Waar weinig openbare informatie is, markeert de brief onbekenden in plaats van te verzinnen.

Schrijft het in het CRM?

Nee. Het maakt alleen een Markdown-brief; CRM-integratie is aan jou.

Zijn prioriteiten feiten?

Nee. De brief markeert ‘waarschijnlijke prioriteiten’ als inferentie en geeft de basis; de eindbeslissing is aan sales.

Wat kost een run?

Chat, extractie en X Search worden op gebruik gefactureerd; actuele tarieven staan op de prijspagina en de prompt vraagt goedkeuring voor uitgaven.

Gerelateerde workflows

Maak het van jou

Hetzelfde recept, aangepast aan hoe je echt oplevert.

Alleen één segment

Beperk tot sector of regio voor een concretere brief.

Voeg de laatste launch toe

Neem de launchpagina als extra bron op voor actuele gespreksonderwerpen.

Samen met de concurrentieanalyse

Vergelijk prioriteiten uit de accountbrief met de positionering uit de analyse en vind een differentiatiehoek.

De referentiepagina’s achter dit recept en de volgende stappen.