Skip to content

Nach Firmen suchen

Mit search_companies baust und qualifizierst du eine Account-Liste, bevor du an diesen Accounts nach Personen suchst. Der Filter-Wortschatz ist fast identisch mit search_people, du kannst also alles, was du hier lernst, direkt übertragen.

Erst mit limit: 1 antesten, bevor du eine Seite ziehst

Section titled “Erst mit limit: 1 antesten, bevor du eine Seite ziehst”

search_companies hat keinen kostenlosen Trockenlauf. count_only gibt es nur bei search_linkedin_profile. Führe deshalb jede neue Suche einmal mit limit: 1 aus, bevor du sie in Menge abrufst.

{ "industry": "Computer Software", "employee_range": "51-200", "revenue_range": "$10M - $20M", "limit": 1 }

Ein Datensatz kostet einen Such-Datensatz aus deinem Fair-Use-Pool. Dieselbe Abfrage mit limit: 25, fünf Seiten tief gelaufen, kostet 125. Und jeder Filter hier ist ein Exact-Match, ein einziger falscher String verbraucht also alle 125 für die falsche Liste. Die üblichen Verdächtigen sind alle lautlos: "$1 - $1M" statt "$500k - $1M", "TX" statt "Texas", "Information Technology", wo die Datensätze unter "Computer Software" abgelegt sind, oder ein Länderfilter, der eine multinationale Firma ins falsche Büro zieht.

Lies zwei Dinge aus dem einzelnen Ergebnis, bevor du erweiterst:

  • results.total: Ist das Account-Universum so groß, wie du erwartet hast? Ein dünner Gesamtwert bedeutet, dass ein Filterwert nicht stimmt, nicht dass das Segment leer ist. Probiere den benachbarten Branchenwert oder kürze den naics_code.
  • Der Datensatz selbst: Passt diese Firma wirklich zu deinem Ziel? Prüfe domain, industry, employee_range und location gegen das, was du gefragt hast.

Erst dann führst du die Suche mit einem echten limit erneut aus und beginnst zu paginieren.

Such-Datensätze werden getrennt von Enrichment-Datensätzen gedeckelt und pro zurückgegebenem Datensatz verbraucht, in einem rollierenden 5-Stunden-Fenster. Das wird besonders beim Verketten wichtig: Ein search_companies-Ergebnis mit 25 Domains, jede aufgefächert in einen search_people-Aufruf mit limit: 25, sind 625 Such-Datensätze aus einer Schleife. Teste beide Suchen mit limit: 1 an, bevor du die Kette laufen lässt. Siehe Rate Limits.

Die Suchkosten werden vom kostenlosen Freitext-query getrieben, nicht von den daran angehängten Filtern.

AbfrageformGeschwindigkeit und Präzision
query alleinLangsamer und ungenauer
query + beliebig viele FilterLangsamer, aber präziser
Nur Filter, kein query~40x schneller und präziser

Daraus folgen zwei Regeln.

Sende nie einen nackten query. industry, employee_range oder revenue_range hinzuzufügen kostet nichts und grenzt das Ergebnis stark ein. Ein reiner Query-Aufruf ist die ungenaueste verfügbare Form und nicht günstiger als eine gefilterte.

Lass query ganz weg, wenn Filter die gesamte Absicht tragen können. Die meisten Account-Listen sind reine Firmografie, “Softwarefirmen mit 51 bis 200 Mitarbeitern und 10 Mio. bis 20 Mio. Umsatz” braucht gar keinen Freitext und läuft ohne ihn ~40x günstiger.

{ "industry": "Computer Software", "employee_range": "51-200", "revenue_range": "$10M - $20M" }

Greife nur dann zu query, wenn du eine Firma über den Namen matchst. Alles andere gehört in einen Filter.

Hier geht es um Ausführungskosten, nicht um die Abrechnung. Tokens werden pro zurückgegebenem Datensatz berechnet, unabhängig von der Abfrageform. Eine günstigere Abfrage liefert schneller und belastet die Suchkapazität weniger, ändert aber nicht, was dir berechnet wird.

Wenn du die Website-Domain kennst, ist domain ein Exact-Match und schlägt immer einen Freitext-query:

{ "domain": "acme.com" }

Vollständige URLs werden automatisch normalisiert, https://www.acme.com/about wird zu acme.com. Du musst Protokoll oder Pfad nicht vorher entfernen.

Greife nur dann zu query, wenn du einen Namen und keine Domain hast. Er durchsucht ausschließlich den Firmennamen, domain und industry sind Keyword-Felder und werden davon nicht abgedeckt.

Wie bei der Personensuche beschreiben drei Filter die Branche in unterschiedlicher Auflösung:

FilterVokabularNutze, wenn
industry23 primäre Buckets plus Long-Tail-WerteDu in breiten Kategorien denkst
linkedin_industryLinkedIns eigene ~150 LabelsDu eine Nische brauchst, die die Buckets nicht ausdrücken können
naics_codeVollständige NAICS-HierarchieDu standardisierte Codes willst oder präzise Kontrolle über die Breite

Das industry-Enum trägt außerdem Long-Tail-Werte: "Insurance", "Banks", "Computer Software", "Pharmaceuticals and Biotechnology", "Aerospace and Defense", "Electronics", "Mining and Metals". Diese überschneiden sich konzeptionell mit den breiten Buckets, eine Firma im Softwarebereich kann also entweder unter "Information Technology" oder unter "Computer Software" abgelegt sein. Wenn eine Suche dünner ausfällt als erwartet, probiere den benachbarten Wert.

naics_code matcht auf jeder Hierarchieebene. Nutze einen 2-stelligen Sektor ("23" = Bauwesen), um breit zu streuen, oder einen 6-stelligen Code ("511210" = Software-Verlage), um eng zu werden. Den Code zu kürzen ist der sauberste Weg, eine Suche zu erweitern, die zu wenig zurückgibt.

country und state filtern den Standort der Firma, aber dieser Standort wird daraus abgeleitet, wo das Team der Firma sitzt.

Das ist für die kleinen Firmen, die den Index dominieren, genau. Große multinationale Firmen werden jedoch einem einzelnen ihrer Büros zugeordnet. Eine globale Firma mit Hauptsitz in einem Land kann in einem völlig anderen aufgelöst werden. Wenn du große oder internationale Firmen targetierst, kombiniere den Standort mit anderen Filtern, statt dich allein darauf zu verlassen.

Beide erfordern exakt gespeicherte Werte mit Standard-Großschreibung, "Texas", nicht "TX". Kombiniere state mit country für Präzision.

Achte auf die Größen- und Umsatzverteilung

Section titled “Achte auf die Größen- und Umsatzverteilung”

Beide Range-Filter sind Exact-Match, und beide haben eine stark schiefe Verteilung.

employee_range: "1-10" ist mit großem Abstand der häufigste Wert. Eine auf kleine Bänder gefilterte Suche gibt sehr viel zurück, eine auf "5001+" gefilterte sehr wenig.

WertLiest sich als
"1-10"Solo, Mikro, sehr klein, mit Abstand am häufigsten
"11-20"Winziges Team
"21-50"Kleines Startup
"51-200"Klein bis mittel
"201-500"Mittelgroß
"501-1000"
"1001-5000"Groß
"5001+"Enterprise, sehr groß

Die Legacy-Werte "Small", "Mid-Market", "Enterprise" und "Unknown" existieren ebenfalls. Bevorzuge die numerischen Ranges, sie haben weitaus mehr Abdeckung.

revenue_range: "$500k - $1M" ist das häufigste Band.

"$1 - $1M" ist ein Legacy-Format, das denselben Bereich wie "$500k - $1M" abdeckt, aber weitaus weniger Datensätze hält. Bevorzuge immer "$500k - $1M", sonst verpasst du den Großteil des Bandes.

ip_to_company löst eine IPv4-Adresse zur Domain der dahinterstehenden Organisation auf, nützlich, um Website-Besucher zu de-anonymisieren und account-basierte Workflows auszulösen.

{ "ip_address": "8.8.8.8" }

Das ist ein B2B-Werkzeug. Consumer-ISP-Adressen lösen sich typischerweise nicht zu einer benannten Firma auf, rechne also bei allgemeinem Web-Traffic mit einer nennenswerten Fehlerquote.

Der häufigste Workflow sind zwei Aufrufe: Accounts qualifizieren, dann Kontakte an ihnen finden.

  1. search_companies mit deinen firmografischen Filtern gibt dir eine Liste von Domains
  2. search_people mit company_domain auf jede Domain gesetzt gibt dir Kontakte
const companies = await search("search_companies", {
industry: "Computer Software",
employee_range: "51-200",
revenue_range: "$10M - $20M",
limit: 25
});
for (const company of companies.results.results) {
const people = await search("search_people", {
company_domain: company.domain,
seniority: "VP",
limit: 25
});
}

Führe die erste Iteration dieser Schleife mit limit: 1 auf beiden Aufrufen aus. Eine Kette, die bei einer Firma pro Account richtig aussieht, kannst du gefahrlos auffächern. Eine, die es nicht ist, kostet dich die gesamte Auffächerung, nur um das herauszufinden.

search_people kann auch direkt auf employee_range und revenue_range filtern, angewandt auf den aktuellen Arbeitgeber der Person. Wenn Firmografie der einzige Grund ist, warum du search_companies aufrufst, kannst du es oft überspringen und in einem einzigen Aufruf filtern.

Ergebnisse werden nach _score gerankt, die erste Seite ist also die stärkste.

Ergebnisse pro Aufruf25 max, 10 Standard
Ergebnisse pro Aufruf (Free-Plan)5 max
Free-Plan Such-Datensätze (lebenslang)100

Lies results.total, bevor du Seiten durchläufst, und erhöhe dann offset um dein limit. Jede Seite, die du durchläufst, zieht aus demselben Such-Datensatz-Pool, bestätige also mit limit: 1, dass die Suche stimmt, bevor du dich darauf festlegst, sie durchzulaufen.