Skip to main content
Los endpoints de búsqueda de Pubrio (/companies/search, /people/search, /companies/advertisements/search) comparten un único motor de filtros. Compones el cuerpo de la solicitud una vez y las mismas reglas se aplican en todos los endpoints — incluida la forma en que se combinan los filtros multivalor, cómo se comparan las ubicaciones y cómo anulas el operador por defecto con filter_conditions.

¿Por qué un motor de filtros unificado?

Un esquema, tres endpoints

Los filtros a nivel de empresa como technologies, verticals y founded_dates funcionan de forma idéntica en /companies/search, /people/search y dentro de company_filters de Monitor — los aprendes una sola vez.

AND/OR por filtro

El valor por defecto es OR (coincide con cualquiera). Promueve filtros individuales a AND (coincide con todos) agregando una entrada a filter_conditions — sin tocar el resto del cuerpo.

Filtrado antes de paginar

Todos los filtros se aplican antes de devolver los resultados, por lo que cada página y cada total reflejan tu solicitud completa. Sin post-filtrado del lado de la aplicación.

Los mismos filtros en Monitores

El bloque company_filters en Monitores acepta la misma forma, por lo que un payload de búsqueda que funciona también funciona como payload de monitor.

Anatomía de una solicitud de búsqueda

Cada solicitud de búsqueda se construye a partir de tres capas en el mismo cuerpo JSON: Una solicitud mínima a /people/search que usa las tres capas:

company_filters: mantén agrupadas las claves de nivel de empresa

El objeto contenedor company_filters: {...} es la forma recomendada de enviar filtros a nivel de empresa — separa visualmente qué claves filtran a la persona de cuáles filtran a la empresa, y coincide con la forma que ya usan los Monitores, de modo que los payloads se transfieren limpiamente entre configuraciones de búsqueda y de monitor. Ambos estilos funcionan; el motor aplana la forma envuelta al nivel superior antes de procesar, y las claves de nivel superior ganan en caso de conflicto:
Cuando agregues una anulación de filter_conditions para una clave de nivel de empresa, colócala dentro de company_filters para que viaje junto con las claves que anula.

Misma forma en las variantes /search/similar

POST /companies/search/similar y POST /people/search/similar aceptan el mismo cuerpo de filtros que sus contrapartes sin “similar” (incluyendo el contenedor company_filters y filter_conditions). Cada uno agrega un paso de similitud adicional: Los filtros acotan el conjunto de candidatos antes de que se aplique la similitud — por lo que combinar company_locations: ["US"] con /people/search/similar devuelve a las personas con sede en EE. UU. más cercanas a tus títulos de referencia, que es el patrón “encuentra más personas como X dentro de estas restricciones”.
/companies/search/similar devuelve data como un array simple de empresas — no hay un objeto pagination. Recorre los resultados con page y per_page. Usa la búsqueda por similitud para encontrar las mejores coincidencias, no para enumerar cada una de ellas.

AND frente a OR — la única decisión que tomas por filtro

Los filtros multivalor (technologies, verticals, keywords, categories, …) aceptan un array. El operador decide qué significa “coincidencia”:
Coincide con cualquier valor. Devuelve filas cuyo array se solapa con la entrada.
Una empresa se incluye si su stack tecnológico contiene al menos uno de Python, PostgreSQL o Kubernetes.Úsalo cuando: quieres un alcance amplio — “interesado en cualquiera de estos”, “ubicado en cualquiera de estos países”.
Los filtros no listados en filter_conditions usan el operador por defecto (OR dentro de un array, AND entre claves de filtro distintas). Solo declaras las anulaciones — nunca los valores por defecto.

Qué puedes anular

Cada endpoint acepta anulaciones para un conjunto de claves distinto. Las claves provienen del enum de OpenAPI en cada esquema *_filter_conditions:

Endpoint de empresas

Claves de company_filter_conditions: keywords, verticals, vertical_categories, vertical_sub_categories, technologies, categories, social_media, advertisement_target_locations, job_exclude_locations.

Endpoint de personas

Claves de people_filter_conditions: keywords, verticals, vertical_categories, vertical_sub_categories, technologies, categories, social_media.

Endpoint de anuncios

Claves de ads_filter_conditions: target_locations, publisher_platforms.
Los filtros de ubicación y lugar siempre coinciden con cualquiera de los valores listados, en todos los endpoints. filter_conditions no los cambia.

Consejos de rendimiento

Las ubicaciones, los rangos de empleados y founded_dates reducen el conjunto de candidatos más rápido que los filtros de texto libre o de vertical. Combínalos con uno o dos filtros precisos antes de recurrir a la búsqueda por similitud.
AND exige que cada valor esté presente. Un AND de 10 tecnologías devuelve casi cero filas. Prefiere entre 2 y 4 valores por filtro AND; cambia a OR para consultas exploratorias.
Si no puedes proporcionar IDs de slug (verticales, tecnologías, categorías) y solo tienes cadenas de texto libre, configura is_enable_similarity_search: true y similarity_score: 0.7. El motor resuelve las coincidencias antes de aplicar el filtro — mucho más económico que escanear texto.
employees: [[201, 500], [501, 1000]] (un array de rangos) y revenues: [1000000, 5000000] (un único rango mínimo/máximo) son más rápidos y más idiomáticos que listas largas de IDs.

Filtros de actividad publicitaria

/companies/search puede filtrar por la huella publicitaria de una empresa — cuántos anuncios ejecuta, si alguno está actualmente activo, qué plataformas y formatos usa, y cómo se clasifica frente a otros anunciantes en un país determinado. POST /companies/advertisements/search también acepta todos estos filtros (advertisement_active_ads, advertisement_running_ads, advertisement_total_ads, advertisement_platform_count, advertisement_format_count, advertisement_impressions_estimate, advertisement_formats, advertisement_country_activity) — un anuncio se incluye si la empresa propietaria cumple el límite. Usa null para un límite abierto — [1, null] significa “al menos 1”, [null, 500] significa “500 o menos”.

Clasificación dentro de un país

advertisement_country_activity acota el rango, el percentil y la puntuación de volumen a un país a la vez — el rango publicitario de una empresa en EE. UU. no dice nada sobre su rango en Alemania, por lo que country es obligatorio:
rank cuenta hacia abajo desde el mayor anunciante, como en una carrera. 1 es el mayor anunciante en ese país, y el número sube a medida que el volumen publicitario baja. Para encontrar a los mayores anunciantes, filtra rank con un límite superior bajo — [null, 500] es el top 500. Filtrar [500, null] encuentra a todos los que están fuera del top 499, que es lo opuesto de “gran anunciante”. Si quieres una versión libre de escala que funcione igual sin importar cuántos anunciantes haya en ese país, usa percentile en su lugar — funciona en la dirección contraria, por lo que un número más alto significa un anunciante más grande: [90, null] es el 10% superior.
Combina advertisement_country_activity con los filtros de todos los países anteriores en la misma solicitud — por ejemplo, “clasificado en el top 500 en EE. UU., y tiene al menos 100 anuncios activos a nivel de empresa”:

Ordenación de los resultados

Filtrar por advertisement_country_activity acota qué empresas se devuelven; por sí solo no decide el orden. Para obtener primero a los mayores anunciantes de ese mercado, pide sort_by: "advertisement_country_rank":
Siempre que advertisement_country_activity esté presente, cada empresa lleva además su posición en ese país, de modo que puedes mostrar el rango por el que has filtrado: sort_by: "advertisement_country_rank" se ignora cuando advertisement_country_activity no está presente, ya que un rango solo existe dentro de un país. Pasa is_ascending_order: false para listar primero a los anunciantes más pequeños del mercado.

Encontrar nuevos entrantes en un mercado

advertisement_country_activity también acepta dos ventanas de fechas, de modo que puedes preguntar quién empezó a anunciarse en un mercado en lugar de quién ya es grande allí: Empresas que entraron en Japón desde principios de julio:
Cualquiera de los dos extremos puede ser null para dejar la ventana abierta. Las fechas se interpretan en la zona horaria de la petición. Una empresa cuyos anuncios no llevan fecha de inicio no tiene valor de primera detección y se trata como desconocida — nunca se reporta como nueva. Combínalo con las claves de clasificación del mismo objeto para acotar más, por ejemplo nuevos entrantes que ya invierten mucho.

Próximos pasos

filter_conditions

Página de referencia — cada clave admitida, cada valor por defecto, y recetas AND/OR copiables.

Personas + Filtros de empresa

Usa cualquier filtro de empresa dentro de /people/search. La función destacada del motor unificado.

Referencia de Company Search

Esquema completo de solicitud/respuesta para /companies/search.

Referencia de People Search

Esquema completo de solicitud/respuesta para /people/search.
¿Buscas el recorrido de filtrado del lado del dashboard? Consulta Filtrar y exportar contactos en la Base de conocimiento.
Última modificación el 29 de septiembre de 2026