> ## Documentation Index
> Fetch the complete documentation index at: https://docs.revenuebase.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Search for contacts

> Count, preview, and export B2B contacts by role, company, and location using the v2 Contact Search API.

export const RBCardGroup = ({cols = 3, children}) => <div className={`rb-grid-${cols}`}>{children}</div>;

export const RBCard = ({href, title, desc, icon, tag, children, stat}) => {
  const icons = {
    cloud: <svg width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="1.5">
        <path strokeLinecap="round" strokeLinejoin="round" d="M2.25 15a4.5 4.5 0 0 0 4.5 4.5H18a3.75 3.75 0 0 0 1.332-7.257 3 3 0 0 0-3.758-3.848 5.25 5.25 0 0 0-10.233 2.33A4.502 4.502 0 0 0 2.25 15Z" />
      </svg>,
    database: <svg width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="1.5">
        <path strokeLinecap="round" strokeLinejoin="round" d="M20.25 6.375c0 2.278-3.694 4.125-8.25 4.125S3.75 8.653 3.75 6.375m16.5 0c0-2.278-3.694-4.125-8.25-4.125S3.75 4.097 3.75 6.375m16.5 0v11.25c0 2.278-3.694 4.125-8.25 4.125s-8.25-1.847-8.25-4.125V6.375m16.5 5.625c0 2.278-3.694 4.125-8.25 4.125s-8.25-1.847-8.25-4.125" />
      </svg>,
    table: <svg width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="1.5">
        <path strokeLinecap="round" strokeLinejoin="round" d="M3.375 19.5h17.25m-17.25 0a1.125 1.125 0 0 1-1.125-1.125M3.375 19.5h7.5c.621 0 1.125-.504 1.125-1.125m-9.75 0V5.625m0 12.75v-1.5c0-.621.504-1.125 1.125-1.125m18.375 2.625V5.625m0 12.75c0 .621-.504 1.125-1.125 1.125m1.125-1.125v-1.5c0-.621-.504-1.125-1.125-1.125m0 3.75h-7.5A1.125 1.125 0 0 1 12 18.375m9.75-12.75c0-.621-.504-1.125-1.125-1.125H3.375c-.621 0-1.125.504-1.125 1.125m19.5 0v1.5c0 .621-.504 1.125-1.125 1.125M2.25 5.625v1.5c0 .621.504 1.125 1.125 1.125m0 0h17.25m-17.25 0h7.5c.621 0 1.125.504 1.125 1.125M3.375 8.25c-.621 0-1.125.504-1.125 1.125v1.5c0 .621.504 1.125 1.125 1.125m17.25-3.75h-7.5c-.621 0-1.125.504-1.125 1.125m8.625-1.125c.621 0 1.125.504 1.125 1.125v1.5c0 .621-.504 1.125-1.125 1.125m-17.25 0h7.5m-7.5 0c-.621 0-1.125.504-1.125 1.125v1.5c0 .621.504 1.125 1.125 1.125M12 10.875v-1.5m0 1.5c0 .621-.504 1.125-1.125 1.125M12 10.875c0 .621.504 1.125 1.125 1.125m-2.25 0c-.621 0-1.125.504-1.125 1.125v1.5c0 .621.504 1.125 1.125 1.125m2.25-2.25h-2.25m2.25 0h2.25" />
      </svg>,
    link: <svg width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="1.5">
        <path strokeLinecap="round" strokeLinejoin="round" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622 1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244" />
      </svg>,
    clock: <svg width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="1.5">
        <path strokeLinecap="round" strokeLinejoin="round" d="M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z" />
      </svg>,
    'book-atlas': <svg width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="1.5">
        <path strokeLinecap="round" strokeLinejoin="round" d="M12 6.042A8.967 8.967 0 0 0 6 3.75c-1.052 0-2.062.18-3 .512v14.25A8.987 8.987 0 0 1 6 18c2.305 0 4.408.867 6 2.292m0-14.25a8.966 8.966 0 0 1 6-2.292c1.052 0 2.062.18 3 .512v14.25A8.987 8.987 0 0 0 18 18a8.967 8.967 0 0 0-6 2.292m0-14.25v14.25" />
      </svg>,
    fingerprint: <svg width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="1.5">
        <path strokeLinecap="round" strokeLinejoin="round" d="M7.864 4.243A7.5 7.5 0 0 1 19.5 10.5c0 2.92-.556 5.709-1.568 8.268M5.742 6.364A7.465 7.465 0 0 0 4.5 10.5a7.464 7.464 0 0 1-1.15 3.993m1.989 3.559A11.209 11.209 0 0 0 8.25 10.5a3.75 3.75 0 1 1 7.5 0c0 .527-.021 1.049-.064 1.565M12 10.5a14.94 14.94 0 0 1-3.6 9.75m6.633-4.596a18.666 18.666 0 0 1-2.485 5.33" />
      </svg>,
    'gauge-high': <svg width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="1.5">
        <path strokeLinecap="round" strokeLinejoin="round" d="M12 3v2.25m6.364.386-1.591 1.591M21 12h-2.25m-.386 6.364-1.591-1.591M12 18.75V21m-4.773-4.227-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 1 1-7.5 0 3.75 3.75 0 0 1 7.5 0Z" />
      </svg>,
    wrench: <svg width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="1.5">
        <path strokeLinecap="round" strokeLinejoin="round" d="M11.42 15.17 17.25 21A2.652 2.652 0 0 0 21 17.25l-5.877-5.877M11.42 15.17l2.496-3.03c.317-.384.74-.626 1.208-.766M11.42 15.17l-4.655 5.653a2.548 2.548 0 1 1-3.586-3.586l6.837-5.63m5.108-.233c.55-.164 1.163-.188 1.743-.14a4.5 4.5 0 0 0 4.486-6.336l-3.276 3.277a3.004 3.004 0 0 1-2.25-2.25l3.276-3.276a4.5 4.5 0 0 0-6.336 4.486c.091 1.076-.071 2.264-.904 2.95l-.102.085m-1.745 1.437L5.909 7.5H4.5L3 3.75l1.5-1.5L8.25 3.75v1.409l4.26 4.26m-1.745 1.437 1.745-1.437m6.615 8.206L15.75 15.75M4.867 19.125h.008v.008h-.008v-.008Z" />
      </svg>,
    'magnifying-glass': <svg width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="1.5">
        <path strokeLinecap="round" strokeLinejoin="round" d="m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 15.803 7.5 7.5 0 0 0 15.803 15.803Z" />
      </svg>,
    envelope: <svg width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="1.5">
        <path strokeLinecap="round" strokeLinejoin="round" d="M21.75 6.75v10.5a2.25 2.25 0 0 1-2.25 2.25h-15a2.25 2.25 0 0 1-2.25-2.25V6.75m19.5 0A2.25 2.25 0 0 0 19.5 4.5h-15a2.25 2.25 0 0 0-2.25 2.25m19.5 0v.243a2.25 2.25 0 0 1-1.07 1.916l-7.5 4.615a2.25 2.25 0 0 1-2.36 0L3.32 8.91a2.25 2.25 0 0 1-1.07-1.916V6.75" />
      </svg>,
    building: <svg width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="1.5">
        <path strokeLinecap="round" strokeLinejoin="round" d="M2.25 21h19.5m-18-18v18m10.5-18v18m6-13.5V21M6.75 6.75h.75m-.75 3h.75m-.75 3h.75m3-6h.75m-.75 3h.75m-.75 3h.75M6.75 21v-3.375c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125V21M3 3h12m-.75 4.5H21m-3.75 3.75h.008v.008h-.008v-.008Zm0 3h.008v.008h-.008v-.008Zm0 3h.008v.008h-.008v-.008Z" />
      </svg>,
    user: <svg width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="1.5">
        <path strokeLinecap="round" strokeLinejoin="round" d="M15.75 6a3.75 3.75 0 1 1-7.5 0 3.75 3.75 0 0 1 7.5 0ZM4.501 20.118a7.5 7.5 0 0 1 14.998 0A17.933 17.933 0 0 1 12 21.75c-2.676 0-5.216-.584-7.499-1.632Z" />
      </svg>,
    users: <svg width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="1.5">
        <path strokeLinecap="round" strokeLinejoin="round" d="M15 19.128a9.38 9.38 0 0 0 2.625.372 9.337 9.337 0 0 0 4.121-.952 4.125 4.125 0 0 0-7.533-2.493M15 19.128v-.003c0-1.113-.285-2.16-.786-3.07M15 19.128v.106A12.318 12.318 0 0 1 8.624 21c-2.331 0-4.512-.645-6.374-1.766l-.001-.109a6.375 6.375 0 0 1 11.964-3.07M12 6.375a3.375 3.375 0 1 1-6.75 0 3.375 3.375 0 0 1 6.75 0Zm8.25 2.25a2.625 2.625 0 1 1-5.25 0 2.625 2.625 0 0 1 5.25 0Z" />
      </svg>,
    'user-group': <svg width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="1.5">
        <path strokeLinecap="round" strokeLinejoin="round" d="M15 19.128a9.38 9.38 0 0 0 2.625.372 9.337 9.337 0 0 0 4.121-.952 4.125 4.125 0 0 0-7.533-2.493M15 19.128v-.003c0-1.113-.285-2.16-.786-3.07M15 19.128v.106A12.318 12.318 0 0 1 8.624 21c-2.331 0-4.512-.645-6.374-1.766l-.001-.109a6.375 6.375 0 0 1 11.964-3.07M12 6.375a3.375 3.375 0 1 1-6.75 0 3.375 3.375 0 0 1 6.75 0Zm8.25 2.25a2.625 2.625 0 1 1-5.25 0 2.625 2.625 0 0 1 5.25 0Z" />
      </svg>,
    'users-gear': <svg width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="1.5">
        <path strokeLinecap="round" strokeLinejoin="round" d="M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.325.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.431l-1.003.827c-.293.241-.438.613-.43.992a7.723 7.723 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.955.26 1.43l-1.298 2.247a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.431l1.004-.827c.292-.24.437-.613.43-.991a6.932 6.932 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28Z" />
      </svg>,
    mobile: <svg width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="1.5">
        <path strokeLinecap="round" strokeLinejoin="round" d="M10.5 1.5H8.25A2.25 2.25 0 0 0 6 3.75v16.5a2.25 2.25 0 0 0 2.25 2.25h7.5A2.25 2.25 0 0 0 18 20.25V3.75a2.25 2.25 0 0 0-2.25-2.25H13.5m-3 0V3h3V1.5m-3 0h3m-3 18h3" />
      </svg>,
    calendar: <svg width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="1.5">
        <path strokeLinecap="round" strokeLinejoin="round" d="M6.75 3v2.25M17.25 3v2.25M3 18.75V7.5a2.25 2.25 0 0 1 2.25-2.25h13.5A2.25 2.25 0 0 1 21 7.5v11.25m-18 0A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75m-18 0v-7.5A2.25 2.25 0 0 1 5.25 9h13.5A2.25 2.25 0 0 1 21 11.25v7.5" />
      </svg>,
    'badge-check': <svg width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="1.5">
        <path strokeLinecap="round" strokeLinejoin="round" d="M9 12.75 11.25 15 15 9.75M21 12c0 1.268-.63 2.39-1.593 3.068a3.745 3.745 0 0 1-1.043 3.296 3.745 3.745 0 0 1-3.296 1.043A3.745 3.745 0 0 1 12 21c-1.268 0-2.39-.63-3.068-1.593a3.746 3.746 0 0 1-3.296-1.043 3.745 3.745 0 0 1-1.043-3.296A3.745 3.745 0 0 1 3 12c0-1.268.63-2.39 1.593-3.068a3.745 3.745 0 0 1 1.043-3.296 3.746 3.746 0 0 1 3.296-1.043A3.746 3.746 0 0 1 12 3c1.268 0 2.39.63 3.068 1.593a3.746 3.746 0 0 1 3.296 1.043 3.746 3.746 0 0 1 1.043 3.296A3.745 3.745 0 0 1 21 12Z" />
      </svg>,
    at: <svg width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="1.5">
        <path strokeLinecap="round" strokeLinejoin="round" d="M16.5 12a4.5 4.5 0 1 1-9 0 4.5 4.5 0 0 1 9 0Zm0 0c0 1.657 1.007 3 2.25 3S21 13.657 21 12a9 9 0 1 0-2.636 6.364M16.5 12V8.25" />
      </svg>,
    handshake: <svg width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="1.5">
        <path strokeLinecap="round" strokeLinejoin="round" d="M10.05 4.575a1.575 1.575 0 1 0-3.15 0v3m3.15-3v-1.5a1.575 1.575 0 0 1 3.15 0v1.5m-3.15 0 .075 5.925m3.075.75V4.575m0 0a1.575 1.575 0 0 1 3.15 0V15M6.9 7.575a1.575 1.575 0 1 0-3.15 0v8.175a6.75 6.75 0 0 0 6.75 6.75h2.018a5.25 5.25 0 0 0 3.712-1.538l1.732-1.732a5.25 5.25 0 0 0 1.538-3.712l.003-2.024a.668.668 0 0 1 .198-.471 1.575 1.575 0 1 0-2.228-2.228 3.818 3.818 0 0 0-1.12 2.687M6.9 7.575V12m6.27 4.318A4.49 4.49 0 0 1 16.35 15m.002 0h-.002" />
      </svg>,
    'microchip-ai': <svg width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="1.5">
        <path strokeLinecap="round" strokeLinejoin="round" d="M8.25 3v1.5M4.5 8.25H3m18 0h-1.5M4.5 12H3m18 0h-1.5m-15 3.75H3m18 0h-1.5M8.25 19.5V21M12 3v1.5m0 15V21m3.75-18v1.5m0 15V21m-9-1.5h10.5a2.25 2.25 0 0 0 2.25-2.25V6.75a2.25 2.25 0 0 0-2.25-2.25H6.75A2.25 2.25 0 0 0 4.5 6.75v10.5a2.25 2.25 0 0 0 2.25 2.25Zm.75-12h9v9h-9v-9Z" />
      </svg>,
    'shield-check': <svg width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="1.5">
        <path strokeLinecap="round" strokeLinejoin="round" d="M9 12.75 11.25 15 15 9.75m-3-7.036A11.959 11.959 0 0 1 3.598 6 11.99 11.99 0 0 0 3 9.749c0 5.592 3.824 10.29 9 11.623 5.176-1.332 9-6.03 9-11.622 0-1.31-.21-2.571-.598-3.751h-.152c-3.196 0-6.1-1.248-8.25-3.285Z" />
      </svg>,
    chain: <svg width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="1.5">
        <path strokeLinecap="round" strokeLinejoin="round" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622 1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244" />
      </svg>,
    leaf: <svg width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="1.5">
        <path strokeLinecap="round" strokeLinejoin="round" d="M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0 3.181 3.183a8.25 8.25 0 0 0 13.803-3.7M4.031 9.865a8.25 8.25 0 0 1 13.803-3.7l3.181 3.182m0-4.991v4.99" />
      </svg>,
    'chart-line': <svg width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="1.5">
        <path strokeLinecap="round" strokeLinejoin="round" d="M3.75 3v11.25A2.25 2.25 0 0 0 6 16.5h2.25M3.75 3h-1.5m1.5 0h16.5m0 0h1.5m-1.5 0v11.25A2.25 2.25 0 0 1 18 16.5h-2.25m-7.5 0h7.5m-7.5 0-1 3m8.5-3 1 3m0 0 .5 1.5m-.5-1.5h-9.5m0 0-.5 1.5M9 11.25v1.5M12 9v3.75m3-6v6" />
      </svg>,
    code: <svg width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="1.5">
        <path strokeLinecap="round" strokeLinejoin="round" d="M17.25 6.75 22.5 12l-5.25 5.25m-10.5 0L1.5 12l5.25-5.25m7.5-3-4.5 16.5" />
      </svg>,
    headset: <svg width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="1.5">
        <path strokeLinecap="round" strokeLinejoin="round" d="M2.25 6.75c0 8.284 6.716 15 15 15h2.25a2.25 2.25 0 0 0 2.25-2.25v-1.372c0-.516-.351-.966-.852-1.091l-4.423-1.106c-.44-.11-.902.055-1.173.417l-.97 1.293c-.282.376-.769.542-1.21.38a12.035 12.035 0 0 1-7.143-7.143c-.162-.441.004-.928.38-1.21l1.293-.97c.363-.271.527-.734.417-1.173L6.963 3.102a1.125 1.125 0 0 0-1.091-.852H4.5A2.25 2.25 0 0 0 2.25 4.5v2.25Z" />
      </svg>,
    filter: <svg width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="1.5">
        <path strokeLinecap="round" strokeLinejoin="round" d="M12 3c2.755 0 5.455.232 8.083.678.533.09.917.556.917 1.096v1.044a2.25 2.25 0 0 1-.659 1.591l-5.432 5.432a2.25 2.25 0 0 0-.659 1.591v2.927a2.25 2.25 0 0 1-1.244 2.013L9.75 21v-6.568a2.25 2.25 0 0 0-.659-1.591L3.659 7.409A2.25 2.25 0 0 1 3 5.818V4.774c0-.54.384-1.006.917-1.096A48.32 48.32 0 0 1 12 3Z" />
      </svg>,
    'layer-group': <svg width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="1.5">
        <path strokeLinecap="round" strokeLinejoin="round" d="M6 6.878V6a2.25 2.25 0 0 1 2.25-2.25h7.5A2.25 2.25 0 0 1 18 6v.878m-12 0c.235-.083.487-.128.75-.128h10.5c.263 0 .515.045.75.128m-12 0A2.25 2.25 0 0 0 4.5 9v.878m13.5-3A2.25 2.25 0 0 1 19.5 9v.878m0 0a2.246 2.246 0 0 0-.75-.128H5.25c-.263 0-.515.045-.75.128m15 0A2.25 2.25 0 0 1 21 12v6a2.25 2.25 0 0 1-2.25 2.25H5.25A2.25 2.25 0 0 1 3 18v-6c0-.98.626-1.813 1.5-2.122" />
      </svg>,
    bookmark: <svg width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="1.5">
        <path strokeLinecap="round" strokeLinejoin="round" d="M17.593 3.322c1.1.128 1.907 1.077 1.907 2.185V21L12 17.25 4.5 21V5.507c0-1.108.806-2.057 1.907-2.185a48.507 48.507 0 0 1 11.186 0Z" />
      </svg>,
    'share-nodes': <svg width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="1.5">
        <path strokeLinecap="round" strokeLinejoin="round" d="M9 8.25H7.5a2.25 2.25 0 0 0-2.25 2.25v9a2.25 2.25 0 0 0 2.25 2.25h9a2.25 2.25 0 0 0 2.25-2.25v-9a2.25 2.25 0 0 0-2.25-2.25H15m0-3-3-3m0 0-3 3m3-3V15" />
      </svg>,
    'file-export': <svg width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="1.5">
        <path strokeLinecap="round" strokeLinejoin="round" d="M3 16.5v2.25A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75V16.5M16.5 12 12 16.5m0 0L7.5 12m4.5 4.5V3" />
      </svg>,
    'wand-magic-sparkles': <svg width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="1.5">
        <path strokeLinecap="round" strokeLinejoin="round" d="M9.813 15.904 9 18.75l-.813-2.846a4.5 4.5 0 0 0-3.09-3.09L2.25 12l2.846-.813a4.5 4.5 0 0 0 3.09-3.09L9 5.25l.813 2.846a4.5 4.5 0 0 0 3.09 3.09L15.75 12l-2.846.813a4.5 4.5 0 0 0-3.09 3.09ZM18.259 8.715 18 9.75l-.259-1.035a3.375 3.375 0 0 0-2.455-2.456L14.25 6l1.036-.259a3.375 3.375 0 0 0 2.455-2.456L18 2.25l.259 1.035a3.375 3.375 0 0 0 2.456 2.456L21.75 6l-1.035.259a3.375 3.375 0 0 0-2.456 2.456ZM16.894 20.567 16.5 21.75l-.394-1.183a2.25 2.25 0 0 0-1.423-1.423L13.5 18.75l1.183-.394a2.25 2.25 0 0 0 1.423-1.423l.394-1.183.394 1.183a2.25 2.25 0 0 0 1.423 1.423l1.183.394-1.183.394a2.25 2.25 0 0 0-1.423 1.423Z" />
      </svg>,
    'circle-question': <svg width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="1.5">
        <path strokeLinecap="round" strokeLinejoin="round" d="M9.879 7.519c1.171-1.025 3.071-1.025 4.242 0 1.172 1.025 1.172 2.687 0 3.712-.203.179-.43.326-.67.442-.745.361-1.45.999-1.45 1.827v.75M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Zm-9 5.25h.008v.008H12v-.008Z" />
      </svg>,
    stairs: <svg width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="1.5">
        <path strokeLinecap="round" strokeLinejoin="round" d="M2.25 18 9 11.25l4.306 4.306a11.95 11.95 0 0 1 5.814-5.518l2.74-1.22m0 0-5.94-2.281m5.94 2.28-2.28 5.941" />
      </svg>,
    'arrow-right': <svg width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="1.5">
        <path strokeLinecap="round" strokeLinejoin="round" d="M13.5 4.5 21 12m0 0-7.5 7.5M21 12H3" />
      </svg>,
    python: <svg width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="1.5">
        <path strokeLinecap="round" strokeLinejoin="round" d="M14.25 9.75 16.5 12l-2.25 2.25m-4.5 0L7.5 12l2.25-2.25M6 20.25h12A2.25 2.25 0 0 0 20.25 18V6A2.25 2.25 0 0 0 18 3.75H6A2.25 2.25 0 0 0 3.75 6v12A2.25 2.25 0 0 0 6 20.25Z" />
      </svg>,
    'code-branch': <svg width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="1.5">
        <path strokeLinecap="round" strokeLinejoin="round" d="M17.25 6.75 22.5 12l-5.25 5.25m-10.5 0L1.5 12l5.25-5.25m7.5-3-4.5 16.5" />
      </svg>
  };
  const resolvedIcon = typeof icon === 'string' ? icons[icon] : icon;
  const Tag = href ? 'a' : 'div';
  const linkProps = href ? {
    href
  } : {};
  return <Tag {...linkProps} className="rb-card">
      <span className="rb-ch rb-ch--tl" />
      <span className="rb-ch rb-ch--tr" />
      <span className="rb-ch rb-ch--bl" />
      <span className="rb-ch rb-ch--br" />
      <div className="rb-card-header">
        {resolvedIcon && <div className="rb-card-icon">{resolvedIcon}</div>}
        <div className="rb-card-name">{title}</div>
      </div>
      {desc && <p className="rb-card-desc">{desc}</p>}
      {children && <div className={stat ? 'rb-card-stat' : 'rb-card-desc'}>{children}</div>}
      {tag && <span className="rb-card-tag">{tag}</span>}
    </Tag>;
};

Use the Contact Search API to find business contacts by role, company, and location — count how many match, preview a sample, then export the full list.

## Choose the right method

|              | Preview                                         | Export                                         |
| ------------ | ----------------------------------------------- | ---------------------------------------------- |
| **Use when** | Checking that a search returns the right people | Pulling a full list to load somewhere else     |
| **Endpoint** | `POST /v2/contact/preview`                      | `POST /v2/contact/exports`                     |
| **Response** | Immediate, up to 50,000 rows                    | Async — poll job status, then download results |
| **Best for** | Interactive search, sanity checks               | Bulk extracts, CRM and outreach loads          |

Count before you do either. `POST /v2/contact/count` is immediate and tells you whether a search is worth running.

Every response carries the standard `X-RateLimit-Limit`, `X-RateLimit-Remaining`, and `X-RateLimit-Reset` headers. See [Rate limits and error codes](/api-reference/v2/rate-limits), and [Credits & Plans](/api-reference/v2/credits) for what searches and downloads cost on your plan.

## Understand the data model

Every record is one person at one company. Person fields and company fields sit on the same record, so a single search can filter on both at once — no joining required.

Column names end in a suffix that tells you what the field describes:

| Suffix | Describes                                    | Examples                                                                |
| ------ | -------------------------------------------- | ----------------------------------------------------------------------- |
| `_PER` | The person — name, contact details, location | `FULL_NAME_PER`, `EMAIL_ADDRESS_PER`, `COUNTRY_NAME_PER`                |
| `_ORG` | Their company — size, industry, location     | `COMPANY_NAME_ORG`, `INDUSTRY_LINKEDIN_ORG`, `EMPLOYEE_COUNT_RANGE_ORG` |
| `_PAO` | Their job at that company                    | Role and tenure fields                                                  |

`COUNTRY_NAME_PER` is where the person is. For where the company is, use the `HEADQUARTERS_*` fields — `HEADQUARTERS_COUNTRY_NAME_ORG` and friends. These are frequently different, so for "people in the United States", use `_PER`.

<Warning>
  `COUNTRY_NAME_ORG` is *a* location the company operates from, not necessarily the head office. For "companies headquartered in the United States", use `HEADQUARTERS_COUNTRY_NAME_ORG`. See [Company location vs headquarters](/api-reference/v2/contact-api-overview#company-location-vs-headquarters).
</Warning>

Every field is documented in the [Person-Organization-Insight data dictionary](/docs/data-features/pre-joined-tables/person-organization-insight), including how each one is sourced and how often it's populated.

## Count matching contacts

Send a filter describing who you want. See [Build a search filter](/api-reference/v2/search-filters) for the full syntax.

```bash theme={null}
curl -X POST https://api.revenuebase.ai/v2/contact/count \
  -H "x-key: {YOUR_API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{
    "filter": {
      "type": "group",
      "op": "AND",
      "children": [
        { "type": "condition", "column": "COUNTRY_NAME_PER",
          "operator": "eq", "value": "United States" },
        { "type": "condition", "column": "JOB_LEVEL_PER",
          "operator": "in", "valueList": ["VP", "C-Level"] }
      ]
    }
  }'
```

**Response:**

```json theme={null}
{
  "total": 2410220,
  "companies": 574874,
  "withEmail": 908255,
  "withCellphone": 412008,
  "exact": { "total": true, "companies": false,
             "withEmail": false, "withCellphone": false },
  "mode": "fast"
}
```

The `exact` object reports which figures are precise. In the default `fast` mode everything except `total` is an estimate — display those with a `~`. Send `"mode": "exact"` for precise figures at the cost of a slower response.

Counting accounts rather than people? [Company Search](/api-reference/v2/company-search-overview) takes the same filter and returns one row per company.

## Preview matching contacts

Return rows inline to check a search before committing to an export.

```bash theme={null}
curl -X POST https://api.revenuebase.ai/v2/contact/preview \
  -H "x-key: {YOUR_API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{
    "filter": { ... },
    "limit": 20,
    "columns": ["FULL_NAME_PER", "JOB_TITLE_PER", "COMPANY_NAME_ORG", "EMAIL_ADDRESS_PER"]
  }'
```

**Response:**

```json theme={null}
{
  "rows": [
    {
      "FULL_NAME_PER": "Dana Whitfield",
      "JOB_TITLE_PER": "VP of Marketing",
      "COMPANY_NAME_ORG": "Northwind Analytics",
      "EMAIL_ADDRESS_PER": "dana.whitfield@northwind.com"
    }
  ],
  "columns": ["FULL_NAME_PER", "JOB_TITLE_PER", "COMPANY_NAME_ORG", "EMAIL_ADDRESS_PER"],
  "columnLabels": { "FULL_NAME_PER": "Full Name" },
  "rowCount": 20,
  "limit": 20
}
```

Omit `columns` to receive a default set. Results are unordered and there is no pagination — preview returns a sample, not page one of a list. For a complete list, use an export.

## Understand the response fields

| Field           | Values  | What it means                                                           |
| --------------- | ------- | ----------------------------------------------------------------------- |
| `total`         | integer | Contacts matching the filter. Always exact.                             |
| `companies`     | integer | Distinct companies represented. Estimated in `fast` mode.               |
| `withEmail`     | integer | Matching contacts that have an email address. Estimated in `fast` mode. |
| `withCellphone` | integer | Matching contacts that have a mobile number. Estimated in `fast` mode.  |
| `exact`         | object  | Which of the counts above are precise.                                  |
| `rows`          | array   | Matching records, one object per contact.                               |
| `columns`       | array   | Column names present in each row, in order.                             |
| `columnLabels`  | object  | Display names for each column, for table headers.                       |
| `rowCount`      | integer | Rows returned. Never exceeds `limit`.                                   |

## Export a full list

Exports run asynchronously. Submit the search, poll for status, then download the file.

<Steps>
  <Step title="Start the export">
    Returns an `exportId` immediately. Formats are `csv`, `json`, and `parquet`; compression is `gz`, `zip`, or `none`.

    ```bash theme={null}
    curl -X POST https://api.revenuebase.ai/v2/contact/exports \
      -H "x-key: {YOUR_API_KEY}" \
      -H "Content-Type: application/json" \
      -d '{"filter": { ... }, "format": "csv", "compression": "gz"}'
    ```

    ```json theme={null}
    { "exportId": "exp_9c2f1a", "status": "QUEUED", "format": "csv",
      "compression": "gz", "maxRows": 1000000 }
    ```
  </Step>

  <Step title="Poll for status">
    ```bash theme={null}
    curl https://api.revenuebase.ai/v2/contact/exports/{EXPORT_ID} \
      -H "x-key: {YOUR_API_KEY}"
    ```

    Poll until `status` is `COMPLETED`. Use a reasonable interval — every 5–10 seconds for smaller exports.
  </Step>

  <Step title="Download the results">
    A completed export includes a `downloadUrl`:

    ```json theme={null}
    { "exportId": "exp_9c2f1a", "status": "COMPLETED", "rowCount": 100000,
      "bytes": 184320512, "compressedBytes": 41287168,
      "downloadUrl": "https://...", "expiresInSeconds": 3600 }
    ```

    The link requires no API key and expires after one hour. Treat it as a credential — anyone holding it can download the file. Poll again to get a fresh link.
  </Step>
</Steps>

## Track export status

| Status       | What it means                                        |
| ------------ | ---------------------------------------------------- |
| `QUEUED`     | Accepted, not yet started                            |
| `PROCESSING` | Writing rows                                         |
| `COMPLETED`  | File ready. `downloadUrl` and row counts are present |
| `FAILED`     | Stopped with an error. `error` explains why          |
| `CANCELLING` | Cancellation requested, still winding down           |
| `CANCELLED`  | Stopped. No file produced                            |

## Manage exports

| Endpoint                                 | What it does                             |
| ---------------------------------------- | ---------------------------------------- |
| `POST /v2/contact/exports`               | Start an export. Returns an `exportId`   |
| `GET /v2/contact/exports/{export_id}`    | Get current status and the download link |
| `DELETE /v2/contact/exports/{export_id}` | Cancel an export before it completes     |

Cancelling an export that has already finished returns its final status unchanged.

## Analyze an audience

`POST /v2/contact/insights` returns aggregate statistics for a filter instead of rows. Send one `section` per request.

| Section        | Returns                                                             |
| -------------- | ------------------------------------------------------------------- |
| `reachability` | How many matching contacts have an email, a mobile number, or both  |
| `freshness`    | How recently emails were verified and records updated, in age bands |
| `coverage`     | Contact counts broken down by a field you choose in `groupField`    |
| `fillRate`     | How often each field in `fields` is populated                       |

```bash theme={null}
curl -X POST https://api.revenuebase.ai/v2/contact/insights \
  -H "x-key: {YOUR_API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{"filter": { ... }, "section": "reachability"}'
```

**Response:**

```json theme={null}
{
  "section": "reachability",
  "reachability": { "total": 2410220, "withEmail": 908255,
                    "withMobile": 412008, "withBoth": 311947 }
}
```

## Match contacts you already have

`POST /v2/contact/enrich` looks up records for a list of email addresses. Send up to **10,000 addresses per request**, counted after canonicalization and de-duplication — 12,000 addresses that resolve to 9,000 distinct ones is fine. Over the cap returns `400`; split the list and merge the responses. See [Limits](/api-reference/v2/contact-api-overview#limits).

```bash theme={null}
curl -X POST https://api.revenuebase.ai/v2/contact/enrich \
  -H "x-key: {YOUR_API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{"emails": ["dana.whitfield@northwind.com"],
       "columns": ["JOB_TITLE_PER", "COMPANY_NAME_ORG"]}'
```

**Response:**

```json theme={null}
{
  "matches": {
    "dana.whitfield@northwind.com": {
      "EMAIL_ADDRESS_PER": "dana.whitfield@northwind.com",
      "JOB_TITLE_PER": "VP of Marketing",
      "COMPANY_NAME_ORG": "Northwind Analytics"
    }
  },
  "columns": ["EMAIL_ADDRESS_PER", "JOB_TITLE_PER", "COMPANY_NAME_ORG"],
  "matched": 1,
  "total": 1
}
```

Results are keyed by the address you submitted, so they join directly back to your own list. Addresses with no match are absent from `matches`; `total` minus `matched` is your miss count.

## Browse the data

| Endpoint                                  | What it does                                                 |
| ----------------------------------------- | ------------------------------------------------------------ |
| `GET /v2/contact/columns`                 | The column catalog. `?include=values` embeds the value lists |
| `GET /v2/contact/columns/{column}/values` | Values for one enumerable column                             |
| `GET /v2/contact/stats`                   | Table-wide totals: contacts and distinct companies           |
| `GET /v2/contact/match-presets`           | The named SmartSearch presets and what each one means        |
| `GET /v2/contact/health`                  | Service liveness. No API key required                        |

```bash theme={null}
curl https://api.revenuebase.ai/v2/contact/stats \
  -H "x-key: {YOUR_API_KEY}"
```

**Response:**

```json theme={null}
{ "uniqueCompanies": 14762388, "contacts": 682104553 }
```

For what each field contains and how it's sourced, see the [Person-Organization-Insight data dictionary](/docs/data-features/pre-joined-tables/person-organization-insight). The catalog tells you which columns exist; the data dictionary tells you what they mean.

## Find similar companies

Look-alike search is company-grain, so it lives on the company surface — see [Search for companies](/api-reference/v2/company-search-overview). You can still use a look-alike leg inside a contact filter to find *people* at similar companies; see [SmartSearch](/api-reference/v2/smartsearch).

## Next steps

<RBCardGroup cols={2}>
  <RBCard title="Build a search filter" icon="filter" href="/api-reference/v2/search-filters" desc="Conditions, groups, and operators." />

  <RBCard title="SmartSearch" icon="wand-magic-sparkles" href="/api-reference/v2/smartsearch" desc="Match job titles, company descriptions, and look-alike companies on meaning." />
</RBCardGroup>
