Skip to main content
Les endpoints de recherche de Pubrio (/companies/search, /people/search, /companies/advertisements/search) partagent un moteur de filtres unique. Vous composez un corps de requête une seule fois et les mêmes règles s’appliquent à tous les endpoints — y compris la façon dont les filtres à valeurs multiples se combinent, la façon dont les lieux sont mis en correspondance, et la façon dont vous remplacez l’opérateur par défaut avec filter_conditions.

Pourquoi un moteur de filtres unifié ?

Un seul schéma, trois endpoints

Les filtres au niveau entreprise comme technologies, verticals et founded_dates fonctionnent de façon identique sur /companies/search, /people/search, et à l’intérieur des company_filters des Monitors — vous les apprenez une seule fois.

AND/OR par filtre

La valeur par défaut est OR (correspond à au moins un). Passez des filtres individuels en AND (correspond à tous) en ajoutant une seule entrée à filter_conditions — sans toucher au reste du corps de la requête.

Filtré avant la pagination

Chaque filtre est appliqué avant le renvoi des résultats, de sorte que chaque page et chaque total reflètent l’ensemble de votre requête. Aucun post-filtrage côté application.

Mêmes filtres dans les Monitors

Le bloc company_filters des Monitors accepte la même structure, de sorte qu’un payload de recherche fonctionnel est également un payload de monitor fonctionnel.

Anatomie d’une requête de recherche

Chaque requête de recherche est construite à partir de trois couches dans le même corps JSON : Une requête /people/search minimale utilisant les trois couches :

company_filters : regrouper les clés au niveau entreprise

L’objet enveloppant company_filters: {...} est la façon recommandée d’envoyer les filtres au niveau entreprise — il sépare visuellement les clés qui filtrent la personne de celles qui filtrent l’entreprise, et correspond à la structure déjà utilisée par les Monitors, de sorte que les payloads se transfèrent proprement entre les configurations de recherche et de monitor. Les deux styles fonctionnent ; le moteur aplatit la forme enveloppée au premier niveau avant traitement, et les clés de premier niveau l’emportent en cas de conflit :
Lorsque vous ajoutez un remplacement filter_conditions pour une clé au niveau entreprise, placez-le à l’intérieur de company_filters afin qu’il voyage avec les clés qu’il remplace.

Même structure sur les variantes /search/similar

POST /companies/search/similar et POST /people/search/similar acceptent le même corps de filtres que leurs équivalents non « similar » (y compris l’enveloppe company_filters et filter_conditions). Chacun ajoute une étape de similarité par-dessus : Les filtres réduisent le vivier de candidats avant l’application de la similarité — combiner company_locations: ["US"] avec /people/search/similar renvoie donc les personnes basées aux États-Unis les plus proches de vos titres de référence, ce qui correspond au schéma « trouver plus de personnes comme X dans ces contraintes ».
/companies/search/similar renvoie data sous la forme d’un simple tableau d’entreprises — il n’y a pas d’objet pagination. Parcourez les résultats avec page et per_page. Utilisez la recherche par similarité pour trouver les meilleures correspondances, pas pour énumérer chacune d’entre elles.

AND ou OR — la seule décision à prendre par filtre

Les filtres à valeurs multiples (technologies, verticals, keywords, categories, …) acceptent un tableau. L’opérateur détermine ce que signifie « correspondance » :
Correspond à au moins une valeur. Renvoie les lignes dont le tableau chevauche l’entrée.
Une entreprise est incluse si sa stack technologique contient au moins une des technologies Python, PostgreSQL ou Kubernetes.À utiliser quand : vous voulez une large couverture — « intéressé par n’importe lequel de ces éléments », « situé dans n’importe lequel de ces pays ».
Les filtres non listés dans filter_conditions utilisent l’opérateur par défaut (OR au sein d’un tableau, AND entre clés de filtre distinctes). Vous ne déclarez que les remplacements — jamais les valeurs par défaut.

Ce que vous pouvez remplacer

Chaque endpoint accepte des remplacements pour un ensemble de clés différent. Les clés proviennent de l’énumération OpenAPI de chaque schéma *_filter_conditions :

Endpoint entreprise

Clés company_filter_conditions : keywords, verticals, vertical_categories, vertical_sub_categories, technologies, categories, social_media, advertisement_target_locations, job_exclude_locations.

Endpoint personnes

Clés people_filter_conditions : keywords, verticals, vertical_categories, vertical_sub_categories, technologies, categories, social_media.

Endpoint annonces

Clés ads_filter_conditions : target_locations, publisher_platforms.
Les filtres de localisation et de lieu correspondent toujours à n’importe quelle valeur listée, sur tous les endpoints. filter_conditions ne les modifie pas.

Conseils de performance

Les lieux, les tranches d’effectifs et founded_dates réduisent l’ensemble de candidats plus rapidement que les filtres en texte libre ou par verticale. Combinez-les avec un ou deux filtres précis avant de recourir à la recherche par similarité.
AND exige que chaque valeur soit présente. Un AND sur 10 technologies renvoie un nombre de lignes proche de zéro. Privilégiez 2 à 4 valeurs par filtre AND ; passez à OR pour les requêtes exploratoires.
Si vous ne pouvez pas fournir d’identifiants slug (verticales, technologies, catégories) et disposez uniquement de chaînes en texte libre, définissez is_enable_similarity_search: true et similarity_score: 0.7. Le moteur résout les correspondances avant d’appliquer le filtre — bien moins coûteux qu’un scan de texte.
employees: [[201, 500], [501, 1000]] (un tableau de tranches) et revenues: [1000000, 5000000] (une seule plage min/max) sont plus rapides et plus idiomatiques que de longues listes d’identifiants.

Filtres d’activité publicitaire

/companies/search peut filtrer sur l’empreinte publicitaire d’une entreprise — combien d’annonces elle diffuse, si certaines sont actuellement actives, quelles plateformes et formats elle utilise, et comment elle se classe par rapport aux autres annonceurs dans un pays donné. POST /companies/advertisements/search accepte également chacun de ces filtres (advertisement_active_ads, advertisement_running_ads, advertisement_total_ads, advertisement_platform_count, advertisement_format_count, advertisement_impressions_estimate, advertisement_formats, advertisement_country_activity) — une annonce est incluse si l’entreprise qui la possède satisfait la borne. Utilisez null pour une borne ouverte — [1, null] signifie « au moins 1 », [null, 500] signifie « 500 ou moins ».

Classement au sein d’un pays

advertisement_country_activity limite le rang, le percentile et le score de volume à un seul pays à la fois — le rang publicitaire d’une entreprise aux États-Unis ne dit rien de son rang en Allemagne, donc country est obligatoire :
rank décompte à partir du plus gros annonceur, comme dans une course. 1 est le plus gros annonceur de ce pays, et le chiffre augmente à mesure que le volume publicitaire diminue. Pour trouver les plus gros annonceurs, filtrez rank avec une borne supérieure basse — [null, 500] correspond au top 500. Filtrer [500, null] trouve tous ceux qui sont hors du top 499, ce qui est l’inverse de « gros annonceur ». Si vous voulez une version indépendante de l’échelle qui fonctionne de la même façon quel que soit le nombre d’annonceurs dans ce pays, utilisez plutôt percentile — il fonctionne dans l’autre sens, donc un chiffre plus élevé signifie un annonceur plus important : [90, null] correspond au top 10 %.
Combinez advertisement_country_activity avec les filtres tous-pays ci-dessus dans la même requête — par exemple, « classée dans le top 500 aux États-Unis, et ayant au moins 100 annonces actives à l’échelle de l’entreprise » :

Classement des résultats

Filtrer sur advertisement_country_activity restreint quelles entreprises sont renvoyées ; cela ne suffit pas à en déterminer l’ordre. Pour obtenir d’abord les plus gros annonceurs de ce marché, demandez sort_by: "advertisement_country_rank" :
Dès que advertisement_country_activity est présent, chaque entreprise porte également son classement dans ce pays, ce qui vous permet d’afficher le rang sur lequel vous avez filtré : sort_by: "advertisement_country_rank" est ignoré lorsque advertisement_country_activity est absent, car un rang n’existe qu’au sein d’un pays. Passez is_ascending_order: false pour lister d’abord les plus petits annonceurs du marché.

Repérer les nouveaux entrants sur un marché

advertisement_country_activity accepte également deux fenêtres de dates, ce qui vous permet de demander qui a commencé à faire de la publicité sur un marché plutôt que qui y est déjà important : Entreprises entrées au Japon depuis le début du mois de juillet :
Chaque borne peut être null pour une fenêtre ouverte d’un côté. Les dates sont interprétées dans le fuseau horaire de la requête. Une entreprise dont les publicités n’ont pas de date de début n’a pas de valeur de première détection et est considérée comme inconnue — elle n’est jamais signalée comme nouvelle. Combinez-la avec les clés de classement du même objet pour affiner davantage, par exemple les nouveaux entrants qui dépensent déjà beaucoup.

Étapes suivantes

filter_conditions

Page de référence — chaque clé prise en charge, chaque valeur par défaut, et des exemples AND/OR prêts à copier.

Filtres personnes + entreprise

Utilisez n’importe quel filtre entreprise à l’intérieur de /people/search. La fonctionnalité phare du moteur unifié.

Référence Recherche entreprise

Schéma complet de requête/réponse pour /companies/search.

Référence Recherche personnes

Schéma complet de requête/réponse pour /people/search.
Vous cherchez le guide de filtrage côté tableau de bord ? Voir Filtrer et exporter des contacts dans la base de connaissances.
Dernière modification le 29 septembre 2026