mirror of
https://github.com/simstudioai/sim.git
synced 2026-09-24 15:45:35 +08:00
feat(integrations): add RB2B integration (#4784)
* make zoominfo icon a bit bigger * feat(integrations): add RB2B integration Add the RB2B AI workspace integration for person-level visitor identification and B2B enrichment via the RB2B API (api.rb2b.com). - 15 tools: credit check, IP to HEM/MAID/company, email/HEM to business profile/best LinkedIn/LinkedIn slug/MAID, email to last active date, and LinkedIn to business profile/best personal email/personal email/hashed emails/mobile phone, plus LinkedIn slug search - Single API-key block with an operation dropdown, conditional inputs, and outputs covering every tool - RB2B icon and generated docs * fix(integrations): address RB2B PR review - email_to_activity now has its own plaintext Email field (canonicalParamId) instead of sharing the Email-or-MD5 input, since it does not accept MD5 hashes - RB2BIcon uses useId() for its clipPath id instead of a hardcoded id, matching the convention used by other icons * fix(integrations): map RB2B email_to_activity input via params, not canonicalParamId The canonical-pair validation test requires canonical members to share the same condition. Replace the cross-operation canonicalParamId reuse with two distinct subblock ids (email for HEM ops, emailAddress for email_to_activity) and a small tools.config.params remap to the email tool param.
This commit is contained in:
@@ -1574,6 +1574,48 @@ export function ExaAIIcon(props: SVGProps<SVGSVGElement>) {
|
||||
)
|
||||
}
|
||||
|
||||
export function RB2BIcon(props: SVGProps<SVGSVGElement>) {
|
||||
const id = useId()
|
||||
const clipId = `rb2b_clip_${id}`
|
||||
return (
|
||||
<svg viewBox='0 0 165 48' fill='none' xmlns='http://www.w3.org/2000/svg' {...props}>
|
||||
<g clipPath={`url(#${clipId})`}>
|
||||
<path d='M95.975 8.40234H87.5703V16.8057H95.975V8.40234Z' fill='#0C1316' />
|
||||
<path d='M121.405 8.40234H113V16.8057H121.405V8.40234Z' fill='#0C1316' />
|
||||
<path d='M112.998 16.8066H104.594V25.21H112.998V16.8066Z' fill='#0C1316' />
|
||||
<path d='M104.596 25.2109H96.1914V33.6143H104.596V25.2109Z' fill='#0C1316' />
|
||||
<path
|
||||
d='M87.7852 39.5965V42.0166V47.9998H121.404V39.5965H96.1898V33.6133H87.7852V39.5965Z'
|
||||
fill='#0C1316'
|
||||
/>
|
||||
<path d='M112.786 0H95.9766V8.40336H112.786V0Z' fill='#0C1316' />
|
||||
<path
|
||||
d='M52.3773 8.40336H74.3639V0H52.3773H43.9727V48H52.3773H74.3639V39.5966H52.3773V28.2017H74.3639V19.7983H52.3773V8.40336Z'
|
||||
fill='#0C1316'
|
||||
/>
|
||||
<path d='M82.7718 8.40234H74.3672V19.7973H82.7718V8.40234Z' fill='#0C1316' />
|
||||
<path d='M82.7679 28.2031H74.3633V39.5981H82.7679V28.2031Z' fill='#0C1316' />
|
||||
<path d='M164.998 8.40234H156.594V19.7973H164.998V8.40234Z' fill='#0C1316' />
|
||||
<path d='M164.998 28.2031H156.594V39.5981H164.998V28.2031Z' fill='#0C1316' />
|
||||
<path
|
||||
d='M134.608 19.7983V8.40336H156.594V0H134.608H126.203V48H134.608H156.594V39.5966H134.608V28.2017H156.594V19.7983H134.608Z'
|
||||
fill='#0C1316'
|
||||
/>
|
||||
<path
|
||||
d='M8.40464 8.40336H30.3912V0H8.40464H0V48H8.40464V28.2017H21.9866V36.605H30.3912V48H38.7958V28.2017H30.3912V19.7983H8.40464V8.40336Z'
|
||||
fill='#0C1316'
|
||||
/>
|
||||
<path d='M38.7953 8.40234H30.3906V19.7973H38.7953V8.40234Z' fill='#0C1316' />
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id={clipId}>
|
||||
<rect width='165' height='48' fill='white' />
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
)
|
||||
}
|
||||
|
||||
export function RedditIcon(props: SVGProps<SVGSVGElement>) {
|
||||
return (
|
||||
<svg
|
||||
|
||||
@@ -152,6 +152,7 @@ import {
|
||||
QdrantIcon,
|
||||
QuiverIcon,
|
||||
RailwayIcon,
|
||||
RB2BIcon,
|
||||
RDSIcon,
|
||||
RedditIcon,
|
||||
RedisIcon,
|
||||
@@ -382,6 +383,7 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
|
||||
qdrant: QdrantIcon,
|
||||
quiver: QuiverIcon,
|
||||
railway: RailwayIcon,
|
||||
rb2b: RB2BIcon,
|
||||
rds: RDSIcon,
|
||||
reddit: RedditIcon,
|
||||
redis: RedisIcon,
|
||||
|
||||
@@ -148,6 +148,7 @@
|
||||
"qdrant",
|
||||
"quiver",
|
||||
"railway",
|
||||
"rb2b",
|
||||
"rds",
|
||||
"reddit",
|
||||
"redis",
|
||||
|
||||
@@ -0,0 +1,756 @@
|
||||
---
|
||||
title: RB2B
|
||||
description: Identify and enrich website visitors
|
||||
---
|
||||
|
||||
import { BlockInfoCard } from "@/components/ui/block-info-card"
|
||||
|
||||
<BlockInfoCard
|
||||
type="rb2b"
|
||||
color="#51FF00"
|
||||
/>
|
||||
|
||||
## Usage Instructions
|
||||
|
||||
Resolve IP addresses, hashed emails, and LinkedIn profiles into person-level identity and B2B enrichment data using the RB2B API. Convert IPs to hashed emails, MAIDs, and company domains; enrich emails into LinkedIn profiles, business profiles, and mobile IDs; and look up emails or phone numbers from LinkedIn. Requires an RB2B API key.
|
||||
|
||||
|
||||
|
||||
## Tools
|
||||
|
||||
### `rb2b_credit_check`
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `credits_remaining` | number | API credits remaining \(Credit Check\) |
|
||||
| `results` | json | Result list for IP/MAID/company/activity lookups |
|
||||
| `match_count` | number | Number of matches \(Email to Last Active Date\) |
|
||||
| `credits_charged` | number | Credits charged for the request |
|
||||
| `credits_exhausted` | boolean | Whether the account is out of credits |
|
||||
| `linkedin_url` | string | LinkedIn profile URL |
|
||||
| `linkedin_slug` | string | LinkedIn slug |
|
||||
| `email` | string | Best personal email |
|
||||
| `emails` | array | Personal email addresses |
|
||||
| `mobile_phone` | string | Mobile phone number |
|
||||
| `business_md5_array` | array | MD5 hashes of business emails |
|
||||
| `business_sha256_array` | array | SHA-256 hashes of business emails |
|
||||
| `personal_md5_array` | array | MD5 hashes of personal emails |
|
||||
| `personal_sha256_array` | array | SHA-256 hashes of personal emails |
|
||||
| `first_name` | string | First name \(business profile\) |
|
||||
| `last_name` | string | Last name \(business profile\) |
|
||||
| `full_name` | string | Full name \(LinkedIn business profile\) |
|
||||
| `headline` | string | LinkedIn headline |
|
||||
| `title` | string | Job title |
|
||||
| `seniority` | string | Seniority level |
|
||||
| `country` | string | Country |
|
||||
| `current_industry` | string | Current industry |
|
||||
| `functional_area` | json | Functional area\(s\) |
|
||||
| `current_company` | string | Current company name |
|
||||
| `current_company_url` | string | Current company website |
|
||||
| `current_company_linkedinurl` | string | Current company LinkedIn URL |
|
||||
| `company` | json | Company details \(LinkedIn business profile\) |
|
||||
| `business_email` | string | Business email address |
|
||||
| `personal_email` | string | Personal email address |
|
||||
| `personal_emails` | array | Personal emails \(business profile\) |
|
||||
| `linkedinurl` | string | LinkedIn profile URL \(business profile\) |
|
||||
| `link_email` | string | Linked business email \(business profile\) |
|
||||
| `work_email_confirmed` | string | Whether the work email is confirmed |
|
||||
| `company_employee_count` | string | Company employee count |
|
||||
| `company_employee_range` | string | Company employee range band |
|
||||
| `company_revenue_range` | string | Company revenue range band |
|
||||
| `md5` | string | MD5 hash of the resolved email |
|
||||
|
||||
### `rb2b_ip_to_hem`
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `credits_remaining` | number | API credits remaining \(Credit Check\) |
|
||||
| `results` | json | Result list for IP/MAID/company/activity lookups |
|
||||
| `match_count` | number | Number of matches \(Email to Last Active Date\) |
|
||||
| `credits_charged` | number | Credits charged for the request |
|
||||
| `credits_exhausted` | boolean | Whether the account is out of credits |
|
||||
| `linkedin_url` | string | LinkedIn profile URL |
|
||||
| `linkedin_slug` | string | LinkedIn slug |
|
||||
| `email` | string | Best personal email |
|
||||
| `emails` | array | Personal email addresses |
|
||||
| `mobile_phone` | string | Mobile phone number |
|
||||
| `business_md5_array` | array | MD5 hashes of business emails |
|
||||
| `business_sha256_array` | array | SHA-256 hashes of business emails |
|
||||
| `personal_md5_array` | array | MD5 hashes of personal emails |
|
||||
| `personal_sha256_array` | array | SHA-256 hashes of personal emails |
|
||||
| `first_name` | string | First name \(business profile\) |
|
||||
| `last_name` | string | Last name \(business profile\) |
|
||||
| `full_name` | string | Full name \(LinkedIn business profile\) |
|
||||
| `headline` | string | LinkedIn headline |
|
||||
| `title` | string | Job title |
|
||||
| `seniority` | string | Seniority level |
|
||||
| `country` | string | Country |
|
||||
| `current_industry` | string | Current industry |
|
||||
| `functional_area` | json | Functional area\(s\) |
|
||||
| `current_company` | string | Current company name |
|
||||
| `current_company_url` | string | Current company website |
|
||||
| `current_company_linkedinurl` | string | Current company LinkedIn URL |
|
||||
| `company` | json | Company details \(LinkedIn business profile\) |
|
||||
| `business_email` | string | Business email address |
|
||||
| `personal_email` | string | Personal email address |
|
||||
| `personal_emails` | array | Personal emails \(business profile\) |
|
||||
| `linkedinurl` | string | LinkedIn profile URL \(business profile\) |
|
||||
| `link_email` | string | Linked business email \(business profile\) |
|
||||
| `work_email_confirmed` | string | Whether the work email is confirmed |
|
||||
| `company_employee_count` | string | Company employee count |
|
||||
| `company_employee_range` | string | Company employee range band |
|
||||
| `company_revenue_range` | string | Company revenue range band |
|
||||
| `md5` | string | MD5 hash of the resolved email |
|
||||
|
||||
### `rb2b_ip_to_maid`
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `credits_remaining` | number | API credits remaining \(Credit Check\) |
|
||||
| `results` | json | Result list for IP/MAID/company/activity lookups |
|
||||
| `match_count` | number | Number of matches \(Email to Last Active Date\) |
|
||||
| `credits_charged` | number | Credits charged for the request |
|
||||
| `credits_exhausted` | boolean | Whether the account is out of credits |
|
||||
| `linkedin_url` | string | LinkedIn profile URL |
|
||||
| `linkedin_slug` | string | LinkedIn slug |
|
||||
| `email` | string | Best personal email |
|
||||
| `emails` | array | Personal email addresses |
|
||||
| `mobile_phone` | string | Mobile phone number |
|
||||
| `business_md5_array` | array | MD5 hashes of business emails |
|
||||
| `business_sha256_array` | array | SHA-256 hashes of business emails |
|
||||
| `personal_md5_array` | array | MD5 hashes of personal emails |
|
||||
| `personal_sha256_array` | array | SHA-256 hashes of personal emails |
|
||||
| `first_name` | string | First name \(business profile\) |
|
||||
| `last_name` | string | Last name \(business profile\) |
|
||||
| `full_name` | string | Full name \(LinkedIn business profile\) |
|
||||
| `headline` | string | LinkedIn headline |
|
||||
| `title` | string | Job title |
|
||||
| `seniority` | string | Seniority level |
|
||||
| `country` | string | Country |
|
||||
| `current_industry` | string | Current industry |
|
||||
| `functional_area` | json | Functional area\(s\) |
|
||||
| `current_company` | string | Current company name |
|
||||
| `current_company_url` | string | Current company website |
|
||||
| `current_company_linkedinurl` | string | Current company LinkedIn URL |
|
||||
| `company` | json | Company details \(LinkedIn business profile\) |
|
||||
| `business_email` | string | Business email address |
|
||||
| `personal_email` | string | Personal email address |
|
||||
| `personal_emails` | array | Personal emails \(business profile\) |
|
||||
| `linkedinurl` | string | LinkedIn profile URL \(business profile\) |
|
||||
| `link_email` | string | Linked business email \(business profile\) |
|
||||
| `work_email_confirmed` | string | Whether the work email is confirmed |
|
||||
| `company_employee_count` | string | Company employee count |
|
||||
| `company_employee_range` | string | Company employee range band |
|
||||
| `company_revenue_range` | string | Company revenue range band |
|
||||
| `md5` | string | MD5 hash of the resolved email |
|
||||
|
||||
### `rb2b_ip_to_company`
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `credits_remaining` | number | API credits remaining \(Credit Check\) |
|
||||
| `results` | json | Result list for IP/MAID/company/activity lookups |
|
||||
| `match_count` | number | Number of matches \(Email to Last Active Date\) |
|
||||
| `credits_charged` | number | Credits charged for the request |
|
||||
| `credits_exhausted` | boolean | Whether the account is out of credits |
|
||||
| `linkedin_url` | string | LinkedIn profile URL |
|
||||
| `linkedin_slug` | string | LinkedIn slug |
|
||||
| `email` | string | Best personal email |
|
||||
| `emails` | array | Personal email addresses |
|
||||
| `mobile_phone` | string | Mobile phone number |
|
||||
| `business_md5_array` | array | MD5 hashes of business emails |
|
||||
| `business_sha256_array` | array | SHA-256 hashes of business emails |
|
||||
| `personal_md5_array` | array | MD5 hashes of personal emails |
|
||||
| `personal_sha256_array` | array | SHA-256 hashes of personal emails |
|
||||
| `first_name` | string | First name \(business profile\) |
|
||||
| `last_name` | string | Last name \(business profile\) |
|
||||
| `full_name` | string | Full name \(LinkedIn business profile\) |
|
||||
| `headline` | string | LinkedIn headline |
|
||||
| `title` | string | Job title |
|
||||
| `seniority` | string | Seniority level |
|
||||
| `country` | string | Country |
|
||||
| `current_industry` | string | Current industry |
|
||||
| `functional_area` | json | Functional area\(s\) |
|
||||
| `current_company` | string | Current company name |
|
||||
| `current_company_url` | string | Current company website |
|
||||
| `current_company_linkedinurl` | string | Current company LinkedIn URL |
|
||||
| `company` | json | Company details \(LinkedIn business profile\) |
|
||||
| `business_email` | string | Business email address |
|
||||
| `personal_email` | string | Personal email address |
|
||||
| `personal_emails` | array | Personal emails \(business profile\) |
|
||||
| `linkedinurl` | string | LinkedIn profile URL \(business profile\) |
|
||||
| `link_email` | string | Linked business email \(business profile\) |
|
||||
| `work_email_confirmed` | string | Whether the work email is confirmed |
|
||||
| `company_employee_count` | string | Company employee count |
|
||||
| `company_employee_range` | string | Company employee range band |
|
||||
| `company_revenue_range` | string | Company revenue range band |
|
||||
| `md5` | string | MD5 hash of the resolved email |
|
||||
|
||||
### `rb2b_hem_to_business_profile`
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `credits_remaining` | number | API credits remaining \(Credit Check\) |
|
||||
| `results` | json | Result list for IP/MAID/company/activity lookups |
|
||||
| `match_count` | number | Number of matches \(Email to Last Active Date\) |
|
||||
| `credits_charged` | number | Credits charged for the request |
|
||||
| `credits_exhausted` | boolean | Whether the account is out of credits |
|
||||
| `linkedin_url` | string | LinkedIn profile URL |
|
||||
| `linkedin_slug` | string | LinkedIn slug |
|
||||
| `email` | string | Best personal email |
|
||||
| `emails` | array | Personal email addresses |
|
||||
| `mobile_phone` | string | Mobile phone number |
|
||||
| `business_md5_array` | array | MD5 hashes of business emails |
|
||||
| `business_sha256_array` | array | SHA-256 hashes of business emails |
|
||||
| `personal_md5_array` | array | MD5 hashes of personal emails |
|
||||
| `personal_sha256_array` | array | SHA-256 hashes of personal emails |
|
||||
| `first_name` | string | First name \(business profile\) |
|
||||
| `last_name` | string | Last name \(business profile\) |
|
||||
| `full_name` | string | Full name \(LinkedIn business profile\) |
|
||||
| `headline` | string | LinkedIn headline |
|
||||
| `title` | string | Job title |
|
||||
| `seniority` | string | Seniority level |
|
||||
| `country` | string | Country |
|
||||
| `current_industry` | string | Current industry |
|
||||
| `functional_area` | json | Functional area\(s\) |
|
||||
| `current_company` | string | Current company name |
|
||||
| `current_company_url` | string | Current company website |
|
||||
| `current_company_linkedinurl` | string | Current company LinkedIn URL |
|
||||
| `company` | json | Company details \(LinkedIn business profile\) |
|
||||
| `business_email` | string | Business email address |
|
||||
| `personal_email` | string | Personal email address |
|
||||
| `personal_emails` | array | Personal emails \(business profile\) |
|
||||
| `linkedinurl` | string | LinkedIn profile URL \(business profile\) |
|
||||
| `link_email` | string | Linked business email \(business profile\) |
|
||||
| `work_email_confirmed` | string | Whether the work email is confirmed |
|
||||
| `company_employee_count` | string | Company employee count |
|
||||
| `company_employee_range` | string | Company employee range band |
|
||||
| `company_revenue_range` | string | Company revenue range band |
|
||||
| `md5` | string | MD5 hash of the resolved email |
|
||||
|
||||
### `rb2b_hem_to_best_linkedin`
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `credits_remaining` | number | API credits remaining \(Credit Check\) |
|
||||
| `results` | json | Result list for IP/MAID/company/activity lookups |
|
||||
| `match_count` | number | Number of matches \(Email to Last Active Date\) |
|
||||
| `credits_charged` | number | Credits charged for the request |
|
||||
| `credits_exhausted` | boolean | Whether the account is out of credits |
|
||||
| `linkedin_url` | string | LinkedIn profile URL |
|
||||
| `linkedin_slug` | string | LinkedIn slug |
|
||||
| `email` | string | Best personal email |
|
||||
| `emails` | array | Personal email addresses |
|
||||
| `mobile_phone` | string | Mobile phone number |
|
||||
| `business_md5_array` | array | MD5 hashes of business emails |
|
||||
| `business_sha256_array` | array | SHA-256 hashes of business emails |
|
||||
| `personal_md5_array` | array | MD5 hashes of personal emails |
|
||||
| `personal_sha256_array` | array | SHA-256 hashes of personal emails |
|
||||
| `first_name` | string | First name \(business profile\) |
|
||||
| `last_name` | string | Last name \(business profile\) |
|
||||
| `full_name` | string | Full name \(LinkedIn business profile\) |
|
||||
| `headline` | string | LinkedIn headline |
|
||||
| `title` | string | Job title |
|
||||
| `seniority` | string | Seniority level |
|
||||
| `country` | string | Country |
|
||||
| `current_industry` | string | Current industry |
|
||||
| `functional_area` | json | Functional area\(s\) |
|
||||
| `current_company` | string | Current company name |
|
||||
| `current_company_url` | string | Current company website |
|
||||
| `current_company_linkedinurl` | string | Current company LinkedIn URL |
|
||||
| `company` | json | Company details \(LinkedIn business profile\) |
|
||||
| `business_email` | string | Business email address |
|
||||
| `personal_email` | string | Personal email address |
|
||||
| `personal_emails` | array | Personal emails \(business profile\) |
|
||||
| `linkedinurl` | string | LinkedIn profile URL \(business profile\) |
|
||||
| `link_email` | string | Linked business email \(business profile\) |
|
||||
| `work_email_confirmed` | string | Whether the work email is confirmed |
|
||||
| `company_employee_count` | string | Company employee count |
|
||||
| `company_employee_range` | string | Company employee range band |
|
||||
| `company_revenue_range` | string | Company revenue range band |
|
||||
| `md5` | string | MD5 hash of the resolved email |
|
||||
|
||||
### `rb2b_hem_to_linkedin`
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `credits_remaining` | number | API credits remaining \(Credit Check\) |
|
||||
| `results` | json | Result list for IP/MAID/company/activity lookups |
|
||||
| `match_count` | number | Number of matches \(Email to Last Active Date\) |
|
||||
| `credits_charged` | number | Credits charged for the request |
|
||||
| `credits_exhausted` | boolean | Whether the account is out of credits |
|
||||
| `linkedin_url` | string | LinkedIn profile URL |
|
||||
| `linkedin_slug` | string | LinkedIn slug |
|
||||
| `email` | string | Best personal email |
|
||||
| `emails` | array | Personal email addresses |
|
||||
| `mobile_phone` | string | Mobile phone number |
|
||||
| `business_md5_array` | array | MD5 hashes of business emails |
|
||||
| `business_sha256_array` | array | SHA-256 hashes of business emails |
|
||||
| `personal_md5_array` | array | MD5 hashes of personal emails |
|
||||
| `personal_sha256_array` | array | SHA-256 hashes of personal emails |
|
||||
| `first_name` | string | First name \(business profile\) |
|
||||
| `last_name` | string | Last name \(business profile\) |
|
||||
| `full_name` | string | Full name \(LinkedIn business profile\) |
|
||||
| `headline` | string | LinkedIn headline |
|
||||
| `title` | string | Job title |
|
||||
| `seniority` | string | Seniority level |
|
||||
| `country` | string | Country |
|
||||
| `current_industry` | string | Current industry |
|
||||
| `functional_area` | json | Functional area\(s\) |
|
||||
| `current_company` | string | Current company name |
|
||||
| `current_company_url` | string | Current company website |
|
||||
| `current_company_linkedinurl` | string | Current company LinkedIn URL |
|
||||
| `company` | json | Company details \(LinkedIn business profile\) |
|
||||
| `business_email` | string | Business email address |
|
||||
| `personal_email` | string | Personal email address |
|
||||
| `personal_emails` | array | Personal emails \(business profile\) |
|
||||
| `linkedinurl` | string | LinkedIn profile URL \(business profile\) |
|
||||
| `link_email` | string | Linked business email \(business profile\) |
|
||||
| `work_email_confirmed` | string | Whether the work email is confirmed |
|
||||
| `company_employee_count` | string | Company employee count |
|
||||
| `company_employee_range` | string | Company employee range band |
|
||||
| `company_revenue_range` | string | Company revenue range band |
|
||||
| `md5` | string | MD5 hash of the resolved email |
|
||||
|
||||
### `rb2b_hem_to_maid`
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `credits_remaining` | number | API credits remaining \(Credit Check\) |
|
||||
| `results` | json | Result list for IP/MAID/company/activity lookups |
|
||||
| `match_count` | number | Number of matches \(Email to Last Active Date\) |
|
||||
| `credits_charged` | number | Credits charged for the request |
|
||||
| `credits_exhausted` | boolean | Whether the account is out of credits |
|
||||
| `linkedin_url` | string | LinkedIn profile URL |
|
||||
| `linkedin_slug` | string | LinkedIn slug |
|
||||
| `email` | string | Best personal email |
|
||||
| `emails` | array | Personal email addresses |
|
||||
| `mobile_phone` | string | Mobile phone number |
|
||||
| `business_md5_array` | array | MD5 hashes of business emails |
|
||||
| `business_sha256_array` | array | SHA-256 hashes of business emails |
|
||||
| `personal_md5_array` | array | MD5 hashes of personal emails |
|
||||
| `personal_sha256_array` | array | SHA-256 hashes of personal emails |
|
||||
| `first_name` | string | First name \(business profile\) |
|
||||
| `last_name` | string | Last name \(business profile\) |
|
||||
| `full_name` | string | Full name \(LinkedIn business profile\) |
|
||||
| `headline` | string | LinkedIn headline |
|
||||
| `title` | string | Job title |
|
||||
| `seniority` | string | Seniority level |
|
||||
| `country` | string | Country |
|
||||
| `current_industry` | string | Current industry |
|
||||
| `functional_area` | json | Functional area\(s\) |
|
||||
| `current_company` | string | Current company name |
|
||||
| `current_company_url` | string | Current company website |
|
||||
| `current_company_linkedinurl` | string | Current company LinkedIn URL |
|
||||
| `company` | json | Company details \(LinkedIn business profile\) |
|
||||
| `business_email` | string | Business email address |
|
||||
| `personal_email` | string | Personal email address |
|
||||
| `personal_emails` | array | Personal emails \(business profile\) |
|
||||
| `linkedinurl` | string | LinkedIn profile URL \(business profile\) |
|
||||
| `link_email` | string | Linked business email \(business profile\) |
|
||||
| `work_email_confirmed` | string | Whether the work email is confirmed |
|
||||
| `company_employee_count` | string | Company employee count |
|
||||
| `company_employee_range` | string | Company employee range band |
|
||||
| `company_revenue_range` | string | Company revenue range band |
|
||||
| `md5` | string | MD5 hash of the resolved email |
|
||||
|
||||
### `rb2b_email_to_activity`
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `credits_remaining` | number | API credits remaining \(Credit Check\) |
|
||||
| `results` | json | Result list for IP/MAID/company/activity lookups |
|
||||
| `match_count` | number | Number of matches \(Email to Last Active Date\) |
|
||||
| `credits_charged` | number | Credits charged for the request |
|
||||
| `credits_exhausted` | boolean | Whether the account is out of credits |
|
||||
| `linkedin_url` | string | LinkedIn profile URL |
|
||||
| `linkedin_slug` | string | LinkedIn slug |
|
||||
| `email` | string | Best personal email |
|
||||
| `emails` | array | Personal email addresses |
|
||||
| `mobile_phone` | string | Mobile phone number |
|
||||
| `business_md5_array` | array | MD5 hashes of business emails |
|
||||
| `business_sha256_array` | array | SHA-256 hashes of business emails |
|
||||
| `personal_md5_array` | array | MD5 hashes of personal emails |
|
||||
| `personal_sha256_array` | array | SHA-256 hashes of personal emails |
|
||||
| `first_name` | string | First name \(business profile\) |
|
||||
| `last_name` | string | Last name \(business profile\) |
|
||||
| `full_name` | string | Full name \(LinkedIn business profile\) |
|
||||
| `headline` | string | LinkedIn headline |
|
||||
| `title` | string | Job title |
|
||||
| `seniority` | string | Seniority level |
|
||||
| `country` | string | Country |
|
||||
| `current_industry` | string | Current industry |
|
||||
| `functional_area` | json | Functional area\(s\) |
|
||||
| `current_company` | string | Current company name |
|
||||
| `current_company_url` | string | Current company website |
|
||||
| `current_company_linkedinurl` | string | Current company LinkedIn URL |
|
||||
| `company` | json | Company details \(LinkedIn business profile\) |
|
||||
| `business_email` | string | Business email address |
|
||||
| `personal_email` | string | Personal email address |
|
||||
| `personal_emails` | array | Personal emails \(business profile\) |
|
||||
| `linkedinurl` | string | LinkedIn profile URL \(business profile\) |
|
||||
| `link_email` | string | Linked business email \(business profile\) |
|
||||
| `work_email_confirmed` | string | Whether the work email is confirmed |
|
||||
| `company_employee_count` | string | Company employee count |
|
||||
| `company_employee_range` | string | Company employee range band |
|
||||
| `company_revenue_range` | string | Company revenue range band |
|
||||
| `md5` | string | MD5 hash of the resolved email |
|
||||
|
||||
### `rb2b_linkedin_to_business_profile`
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `credits_remaining` | number | API credits remaining \(Credit Check\) |
|
||||
| `results` | json | Result list for IP/MAID/company/activity lookups |
|
||||
| `match_count` | number | Number of matches \(Email to Last Active Date\) |
|
||||
| `credits_charged` | number | Credits charged for the request |
|
||||
| `credits_exhausted` | boolean | Whether the account is out of credits |
|
||||
| `linkedin_url` | string | LinkedIn profile URL |
|
||||
| `linkedin_slug` | string | LinkedIn slug |
|
||||
| `email` | string | Best personal email |
|
||||
| `emails` | array | Personal email addresses |
|
||||
| `mobile_phone` | string | Mobile phone number |
|
||||
| `business_md5_array` | array | MD5 hashes of business emails |
|
||||
| `business_sha256_array` | array | SHA-256 hashes of business emails |
|
||||
| `personal_md5_array` | array | MD5 hashes of personal emails |
|
||||
| `personal_sha256_array` | array | SHA-256 hashes of personal emails |
|
||||
| `first_name` | string | First name \(business profile\) |
|
||||
| `last_name` | string | Last name \(business profile\) |
|
||||
| `full_name` | string | Full name \(LinkedIn business profile\) |
|
||||
| `headline` | string | LinkedIn headline |
|
||||
| `title` | string | Job title |
|
||||
| `seniority` | string | Seniority level |
|
||||
| `country` | string | Country |
|
||||
| `current_industry` | string | Current industry |
|
||||
| `functional_area` | json | Functional area\(s\) |
|
||||
| `current_company` | string | Current company name |
|
||||
| `current_company_url` | string | Current company website |
|
||||
| `current_company_linkedinurl` | string | Current company LinkedIn URL |
|
||||
| `company` | json | Company details \(LinkedIn business profile\) |
|
||||
| `business_email` | string | Business email address |
|
||||
| `personal_email` | string | Personal email address |
|
||||
| `personal_emails` | array | Personal emails \(business profile\) |
|
||||
| `linkedinurl` | string | LinkedIn profile URL \(business profile\) |
|
||||
| `link_email` | string | Linked business email \(business profile\) |
|
||||
| `work_email_confirmed` | string | Whether the work email is confirmed |
|
||||
| `company_employee_count` | string | Company employee count |
|
||||
| `company_employee_range` | string | Company employee range band |
|
||||
| `company_revenue_range` | string | Company revenue range band |
|
||||
| `md5` | string | MD5 hash of the resolved email |
|
||||
|
||||
### `rb2b_linkedin_to_best_personal_email`
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `credits_remaining` | number | API credits remaining \(Credit Check\) |
|
||||
| `results` | json | Result list for IP/MAID/company/activity lookups |
|
||||
| `match_count` | number | Number of matches \(Email to Last Active Date\) |
|
||||
| `credits_charged` | number | Credits charged for the request |
|
||||
| `credits_exhausted` | boolean | Whether the account is out of credits |
|
||||
| `linkedin_url` | string | LinkedIn profile URL |
|
||||
| `linkedin_slug` | string | LinkedIn slug |
|
||||
| `email` | string | Best personal email |
|
||||
| `emails` | array | Personal email addresses |
|
||||
| `mobile_phone` | string | Mobile phone number |
|
||||
| `business_md5_array` | array | MD5 hashes of business emails |
|
||||
| `business_sha256_array` | array | SHA-256 hashes of business emails |
|
||||
| `personal_md5_array` | array | MD5 hashes of personal emails |
|
||||
| `personal_sha256_array` | array | SHA-256 hashes of personal emails |
|
||||
| `first_name` | string | First name \(business profile\) |
|
||||
| `last_name` | string | Last name \(business profile\) |
|
||||
| `full_name` | string | Full name \(LinkedIn business profile\) |
|
||||
| `headline` | string | LinkedIn headline |
|
||||
| `title` | string | Job title |
|
||||
| `seniority` | string | Seniority level |
|
||||
| `country` | string | Country |
|
||||
| `current_industry` | string | Current industry |
|
||||
| `functional_area` | json | Functional area\(s\) |
|
||||
| `current_company` | string | Current company name |
|
||||
| `current_company_url` | string | Current company website |
|
||||
| `current_company_linkedinurl` | string | Current company LinkedIn URL |
|
||||
| `company` | json | Company details \(LinkedIn business profile\) |
|
||||
| `business_email` | string | Business email address |
|
||||
| `personal_email` | string | Personal email address |
|
||||
| `personal_emails` | array | Personal emails \(business profile\) |
|
||||
| `linkedinurl` | string | LinkedIn profile URL \(business profile\) |
|
||||
| `link_email` | string | Linked business email \(business profile\) |
|
||||
| `work_email_confirmed` | string | Whether the work email is confirmed |
|
||||
| `company_employee_count` | string | Company employee count |
|
||||
| `company_employee_range` | string | Company employee range band |
|
||||
| `company_revenue_range` | string | Company revenue range band |
|
||||
| `md5` | string | MD5 hash of the resolved email |
|
||||
|
||||
### `rb2b_linkedin_to_personal_email`
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `credits_remaining` | number | API credits remaining \(Credit Check\) |
|
||||
| `results` | json | Result list for IP/MAID/company/activity lookups |
|
||||
| `match_count` | number | Number of matches \(Email to Last Active Date\) |
|
||||
| `credits_charged` | number | Credits charged for the request |
|
||||
| `credits_exhausted` | boolean | Whether the account is out of credits |
|
||||
| `linkedin_url` | string | LinkedIn profile URL |
|
||||
| `linkedin_slug` | string | LinkedIn slug |
|
||||
| `email` | string | Best personal email |
|
||||
| `emails` | array | Personal email addresses |
|
||||
| `mobile_phone` | string | Mobile phone number |
|
||||
| `business_md5_array` | array | MD5 hashes of business emails |
|
||||
| `business_sha256_array` | array | SHA-256 hashes of business emails |
|
||||
| `personal_md5_array` | array | MD5 hashes of personal emails |
|
||||
| `personal_sha256_array` | array | SHA-256 hashes of personal emails |
|
||||
| `first_name` | string | First name \(business profile\) |
|
||||
| `last_name` | string | Last name \(business profile\) |
|
||||
| `full_name` | string | Full name \(LinkedIn business profile\) |
|
||||
| `headline` | string | LinkedIn headline |
|
||||
| `title` | string | Job title |
|
||||
| `seniority` | string | Seniority level |
|
||||
| `country` | string | Country |
|
||||
| `current_industry` | string | Current industry |
|
||||
| `functional_area` | json | Functional area\(s\) |
|
||||
| `current_company` | string | Current company name |
|
||||
| `current_company_url` | string | Current company website |
|
||||
| `current_company_linkedinurl` | string | Current company LinkedIn URL |
|
||||
| `company` | json | Company details \(LinkedIn business profile\) |
|
||||
| `business_email` | string | Business email address |
|
||||
| `personal_email` | string | Personal email address |
|
||||
| `personal_emails` | array | Personal emails \(business profile\) |
|
||||
| `linkedinurl` | string | LinkedIn profile URL \(business profile\) |
|
||||
| `link_email` | string | Linked business email \(business profile\) |
|
||||
| `work_email_confirmed` | string | Whether the work email is confirmed |
|
||||
| `company_employee_count` | string | Company employee count |
|
||||
| `company_employee_range` | string | Company employee range band |
|
||||
| `company_revenue_range` | string | Company revenue range band |
|
||||
| `md5` | string | MD5 hash of the resolved email |
|
||||
|
||||
### `rb2b_linkedin_to_hashed_emails`
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `credits_remaining` | number | API credits remaining \(Credit Check\) |
|
||||
| `results` | json | Result list for IP/MAID/company/activity lookups |
|
||||
| `match_count` | number | Number of matches \(Email to Last Active Date\) |
|
||||
| `credits_charged` | number | Credits charged for the request |
|
||||
| `credits_exhausted` | boolean | Whether the account is out of credits |
|
||||
| `linkedin_url` | string | LinkedIn profile URL |
|
||||
| `linkedin_slug` | string | LinkedIn slug |
|
||||
| `email` | string | Best personal email |
|
||||
| `emails` | array | Personal email addresses |
|
||||
| `mobile_phone` | string | Mobile phone number |
|
||||
| `business_md5_array` | array | MD5 hashes of business emails |
|
||||
| `business_sha256_array` | array | SHA-256 hashes of business emails |
|
||||
| `personal_md5_array` | array | MD5 hashes of personal emails |
|
||||
| `personal_sha256_array` | array | SHA-256 hashes of personal emails |
|
||||
| `first_name` | string | First name \(business profile\) |
|
||||
| `last_name` | string | Last name \(business profile\) |
|
||||
| `full_name` | string | Full name \(LinkedIn business profile\) |
|
||||
| `headline` | string | LinkedIn headline |
|
||||
| `title` | string | Job title |
|
||||
| `seniority` | string | Seniority level |
|
||||
| `country` | string | Country |
|
||||
| `current_industry` | string | Current industry |
|
||||
| `functional_area` | json | Functional area\(s\) |
|
||||
| `current_company` | string | Current company name |
|
||||
| `current_company_url` | string | Current company website |
|
||||
| `current_company_linkedinurl` | string | Current company LinkedIn URL |
|
||||
| `company` | json | Company details \(LinkedIn business profile\) |
|
||||
| `business_email` | string | Business email address |
|
||||
| `personal_email` | string | Personal email address |
|
||||
| `personal_emails` | array | Personal emails \(business profile\) |
|
||||
| `linkedinurl` | string | LinkedIn profile URL \(business profile\) |
|
||||
| `link_email` | string | Linked business email \(business profile\) |
|
||||
| `work_email_confirmed` | string | Whether the work email is confirmed |
|
||||
| `company_employee_count` | string | Company employee count |
|
||||
| `company_employee_range` | string | Company employee range band |
|
||||
| `company_revenue_range` | string | Company revenue range band |
|
||||
| `md5` | string | MD5 hash of the resolved email |
|
||||
|
||||
### `rb2b_linkedin_to_mobile_phone`
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `credits_remaining` | number | API credits remaining \(Credit Check\) |
|
||||
| `results` | json | Result list for IP/MAID/company/activity lookups |
|
||||
| `match_count` | number | Number of matches \(Email to Last Active Date\) |
|
||||
| `credits_charged` | number | Credits charged for the request |
|
||||
| `credits_exhausted` | boolean | Whether the account is out of credits |
|
||||
| `linkedin_url` | string | LinkedIn profile URL |
|
||||
| `linkedin_slug` | string | LinkedIn slug |
|
||||
| `email` | string | Best personal email |
|
||||
| `emails` | array | Personal email addresses |
|
||||
| `mobile_phone` | string | Mobile phone number |
|
||||
| `business_md5_array` | array | MD5 hashes of business emails |
|
||||
| `business_sha256_array` | array | SHA-256 hashes of business emails |
|
||||
| `personal_md5_array` | array | MD5 hashes of personal emails |
|
||||
| `personal_sha256_array` | array | SHA-256 hashes of personal emails |
|
||||
| `first_name` | string | First name \(business profile\) |
|
||||
| `last_name` | string | Last name \(business profile\) |
|
||||
| `full_name` | string | Full name \(LinkedIn business profile\) |
|
||||
| `headline` | string | LinkedIn headline |
|
||||
| `title` | string | Job title |
|
||||
| `seniority` | string | Seniority level |
|
||||
| `country` | string | Country |
|
||||
| `current_industry` | string | Current industry |
|
||||
| `functional_area` | json | Functional area\(s\) |
|
||||
| `current_company` | string | Current company name |
|
||||
| `current_company_url` | string | Current company website |
|
||||
| `current_company_linkedinurl` | string | Current company LinkedIn URL |
|
||||
| `company` | json | Company details \(LinkedIn business profile\) |
|
||||
| `business_email` | string | Business email address |
|
||||
| `personal_email` | string | Personal email address |
|
||||
| `personal_emails` | array | Personal emails \(business profile\) |
|
||||
| `linkedinurl` | string | LinkedIn profile URL \(business profile\) |
|
||||
| `link_email` | string | Linked business email \(business profile\) |
|
||||
| `work_email_confirmed` | string | Whether the work email is confirmed |
|
||||
| `company_employee_count` | string | Company employee count |
|
||||
| `company_employee_range` | string | Company employee range band |
|
||||
| `company_revenue_range` | string | Company revenue range band |
|
||||
| `md5` | string | MD5 hash of the resolved email |
|
||||
|
||||
### `rb2b_linkedin_slug_search`
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `credits_remaining` | number | API credits remaining \(Credit Check\) |
|
||||
| `results` | json | Result list for IP/MAID/company/activity lookups |
|
||||
| `match_count` | number | Number of matches \(Email to Last Active Date\) |
|
||||
| `credits_charged` | number | Credits charged for the request |
|
||||
| `credits_exhausted` | boolean | Whether the account is out of credits |
|
||||
| `linkedin_url` | string | LinkedIn profile URL |
|
||||
| `linkedin_slug` | string | LinkedIn slug |
|
||||
| `email` | string | Best personal email |
|
||||
| `emails` | array | Personal email addresses |
|
||||
| `mobile_phone` | string | Mobile phone number |
|
||||
| `business_md5_array` | array | MD5 hashes of business emails |
|
||||
| `business_sha256_array` | array | SHA-256 hashes of business emails |
|
||||
| `personal_md5_array` | array | MD5 hashes of personal emails |
|
||||
| `personal_sha256_array` | array | SHA-256 hashes of personal emails |
|
||||
| `first_name` | string | First name \(business profile\) |
|
||||
| `last_name` | string | Last name \(business profile\) |
|
||||
| `full_name` | string | Full name \(LinkedIn business profile\) |
|
||||
| `headline` | string | LinkedIn headline |
|
||||
| `title` | string | Job title |
|
||||
| `seniority` | string | Seniority level |
|
||||
| `country` | string | Country |
|
||||
| `current_industry` | string | Current industry |
|
||||
| `functional_area` | json | Functional area\(s\) |
|
||||
| `current_company` | string | Current company name |
|
||||
| `current_company_url` | string | Current company website |
|
||||
| `current_company_linkedinurl` | string | Current company LinkedIn URL |
|
||||
| `company` | json | Company details \(LinkedIn business profile\) |
|
||||
| `business_email` | string | Business email address |
|
||||
| `personal_email` | string | Personal email address |
|
||||
| `personal_emails` | array | Personal emails \(business profile\) |
|
||||
| `linkedinurl` | string | LinkedIn profile URL \(business profile\) |
|
||||
| `link_email` | string | Linked business email \(business profile\) |
|
||||
| `work_email_confirmed` | string | Whether the work email is confirmed |
|
||||
| `company_employee_count` | string | Company employee count |
|
||||
| `company_employee_range` | string | Company employee range band |
|
||||
| `company_revenue_range` | string | Company revenue range band |
|
||||
| `md5` | string | MD5 hash of the resolved email |
|
||||
|
||||
|
||||
@@ -151,6 +151,7 @@ import {
|
||||
QdrantIcon,
|
||||
QuiverIcon,
|
||||
RailwayIcon,
|
||||
RB2BIcon,
|
||||
RDSIcon,
|
||||
RedditIcon,
|
||||
RedisIcon,
|
||||
@@ -360,6 +361,7 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
|
||||
qdrant: QdrantIcon,
|
||||
quiver: QuiverIcon,
|
||||
railway: RailwayIcon,
|
||||
rb2b: RB2BIcon,
|
||||
rds: RDSIcon,
|
||||
reddit: RedditIcon,
|
||||
redis: RedisIcon,
|
||||
|
||||
@@ -11000,6 +11000,85 @@
|
||||
"integrationTypes": ["developer-tools"],
|
||||
"tags": ["cloud", "ci-cd"]
|
||||
},
|
||||
{
|
||||
"type": "rb2b",
|
||||
"slug": "rb2b",
|
||||
"name": "RB2B",
|
||||
"description": "Identify and enrich website visitors",
|
||||
"longDescription": "Resolve IP addresses, hashed emails, and LinkedIn profiles into person-level identity and B2B enrichment data using the RB2B API. Convert IPs to hashed emails, MAIDs, and company domains; enrich emails into LinkedIn profiles, business profiles, and mobile IDs; and look up emails or phone numbers from LinkedIn. Requires an RB2B API key.",
|
||||
"bgColor": "#51FF00",
|
||||
"iconName": "RB2BIcon",
|
||||
"docsUrl": "https://docs.sim.ai/tools/rb2b",
|
||||
"operations": [
|
||||
{
|
||||
"name": "Credit Check",
|
||||
"description": "Check the number of API credits remaining on your RB2B account."
|
||||
},
|
||||
{
|
||||
"name": "IP to HEM",
|
||||
"description": "Convert an IP address (and optional user agent) into hashed email addresses (HEM) with accuracy scores."
|
||||
},
|
||||
{
|
||||
"name": "IP to MAID",
|
||||
"description": "Resolve an IP address (and optional user agent) into mobile advertising identifiers (MAIDs) observed over the last 60 days."
|
||||
},
|
||||
{
|
||||
"name": "IP to Company",
|
||||
"description": "Identify the company domains associated with an IP address, ranked by confidence."
|
||||
},
|
||||
{
|
||||
"name": "Email/HEM to Business Profile",
|
||||
"description": "Return a full business profile (name, title, company, industry, seniority and more) for an email address or MD5-hashed email."
|
||||
},
|
||||
{
|
||||
"name": "Email/HEM to Best LinkedIn URL",
|
||||
"description": "Return the most recently active LinkedIn profile URL for an email address or MD5-hashed email."
|
||||
},
|
||||
{
|
||||
"name": "Email/HEM to LinkedIn Slug",
|
||||
"description": "Return the LinkedIn slug (the profile identifier portion of the URL) for an email address or MD5-hashed email."
|
||||
},
|
||||
{
|
||||
"name": "Email/HEM to MAID",
|
||||
"description": "Return up to five mobile advertising identifiers (MAIDs) associated with an email address or MD5-hashed email."
|
||||
},
|
||||
{
|
||||
"name": "Email to Last Active Date",
|
||||
"description": "Return the last known active date for an email address."
|
||||
},
|
||||
{
|
||||
"name": "LinkedIn to Business Profile",
|
||||
"description": "Return a full business profile (name, title, company, emails and more) for a LinkedIn profile."
|
||||
},
|
||||
{
|
||||
"name": "LinkedIn to Best Personal Email",
|
||||
"description": "Return the personal email with the most recent known network activity for a LinkedIn profile."
|
||||
},
|
||||
{
|
||||
"name": "LinkedIn to Personal Email",
|
||||
"description": "Return the personal email addresses associated with a LinkedIn profile."
|
||||
},
|
||||
{
|
||||
"name": "LinkedIn to Hashed Emails",
|
||||
"description": "Return the business and personal hashed emails (MD5 and SHA-256) associated with a LinkedIn profile."
|
||||
},
|
||||
{
|
||||
"name": "LinkedIn to Mobile Phone",
|
||||
"description": "Return the mobile phone number with the most recent known network activity for a LinkedIn profile."
|
||||
},
|
||||
{
|
||||
"name": "LinkedIn Slug Search",
|
||||
"description": "Find a LinkedIn profile URL from a first name, last name, and company domain."
|
||||
}
|
||||
],
|
||||
"operationCount": 15,
|
||||
"triggers": [],
|
||||
"triggerCount": 0,
|
||||
"authType": "api-key",
|
||||
"category": "tools",
|
||||
"integrationTypes": ["sales", "security"],
|
||||
"tags": ["enrichment", "identity", "sales-engagement"]
|
||||
},
|
||||
{
|
||||
"type": "reddit",
|
||||
"slug": "reddit",
|
||||
|
||||
@@ -0,0 +1,219 @@
|
||||
import { RB2BIcon } from '@/components/icons'
|
||||
import type { BlockConfig } from '@/blocks/types'
|
||||
import { AuthMode, IntegrationType } from '@/blocks/types'
|
||||
import type { Rb2bResponse } from '@/tools/rb2b/types'
|
||||
|
||||
const EMAIL_OPERATIONS = [
|
||||
'hem_to_business_profile',
|
||||
'hem_to_best_linkedin',
|
||||
'hem_to_linkedin',
|
||||
'hem_to_maid',
|
||||
]
|
||||
|
||||
const LINKEDIN_OPERATIONS = [
|
||||
'linkedin_to_business_profile',
|
||||
'linkedin_to_best_personal_email',
|
||||
'linkedin_to_personal_email',
|
||||
'linkedin_to_hashed_emails',
|
||||
'linkedin_to_mobile_phone',
|
||||
]
|
||||
|
||||
const IP_OPERATIONS = ['ip_to_hem', 'ip_to_maid', 'ip_to_company']
|
||||
|
||||
export const RB2BBlock: BlockConfig<Rb2bResponse> = {
|
||||
type: 'rb2b',
|
||||
name: 'RB2B',
|
||||
description: 'Identify and enrich website visitors',
|
||||
authMode: AuthMode.ApiKey,
|
||||
longDescription:
|
||||
'Resolve IP addresses, hashed emails, and LinkedIn profiles into person-level identity and B2B enrichment data using the RB2B API. Convert IPs to hashed emails, MAIDs, and company domains; enrich emails into LinkedIn profiles, business profiles, and mobile IDs; and look up emails or phone numbers from LinkedIn. Requires an RB2B API key.',
|
||||
category: 'tools',
|
||||
integrationType: IntegrationType.Sales,
|
||||
tags: ['enrichment', 'identity', 'sales-engagement'],
|
||||
docsLink: 'https://docs.sim.ai/tools/rb2b',
|
||||
bgColor: '#51FF00',
|
||||
icon: RB2BIcon,
|
||||
subBlocks: [
|
||||
{
|
||||
id: 'operation',
|
||||
title: 'Operation',
|
||||
type: 'dropdown',
|
||||
options: [
|
||||
{ label: 'Credit Check', id: 'credit_check' },
|
||||
{ label: 'IP to HEM', id: 'ip_to_hem' },
|
||||
{ label: 'IP to MAID', id: 'ip_to_maid' },
|
||||
{ label: 'IP to Company', id: 'ip_to_company' },
|
||||
{ label: 'Email/HEM to Business Profile', id: 'hem_to_business_profile' },
|
||||
{ label: 'Email/HEM to Best LinkedIn URL', id: 'hem_to_best_linkedin' },
|
||||
{ label: 'Email/HEM to LinkedIn Slug', id: 'hem_to_linkedin' },
|
||||
{ label: 'Email/HEM to MAID', id: 'hem_to_maid' },
|
||||
{ label: 'Email to Last Active Date', id: 'email_to_activity' },
|
||||
{ label: 'LinkedIn to Business Profile', id: 'linkedin_to_business_profile' },
|
||||
{ label: 'LinkedIn to Best Personal Email', id: 'linkedin_to_best_personal_email' },
|
||||
{ label: 'LinkedIn to Personal Email', id: 'linkedin_to_personal_email' },
|
||||
{ label: 'LinkedIn to Hashed Emails', id: 'linkedin_to_hashed_emails' },
|
||||
{ label: 'LinkedIn to Mobile Phone', id: 'linkedin_to_mobile_phone' },
|
||||
{ label: 'LinkedIn Slug Search', id: 'linkedin_slug_search' },
|
||||
],
|
||||
value: () => 'ip_to_hem',
|
||||
},
|
||||
{
|
||||
id: 'ip_address',
|
||||
title: 'IP Address',
|
||||
type: 'short-input',
|
||||
placeholder: 'e.g. 162.192.6.240',
|
||||
condition: { field: 'operation', value: IP_OPERATIONS },
|
||||
required: { field: 'operation', value: IP_OPERATIONS },
|
||||
},
|
||||
{
|
||||
id: 'user_agent',
|
||||
title: 'User Agent',
|
||||
type: 'short-input',
|
||||
placeholder: 'Optional user agent string',
|
||||
condition: { field: 'operation', value: ['ip_to_hem', 'ip_to_maid'] },
|
||||
},
|
||||
{
|
||||
id: 'include_sha256',
|
||||
title: 'Include SHA-256 Hashes',
|
||||
type: 'switch',
|
||||
condition: { field: 'operation', value: 'ip_to_hem' },
|
||||
},
|
||||
{
|
||||
id: 'email',
|
||||
title: 'Email or MD5 Hash',
|
||||
type: 'short-input',
|
||||
placeholder: 'jane@example.com or an MD5 hash',
|
||||
condition: { field: 'operation', value: EMAIL_OPERATIONS },
|
||||
required: { field: 'operation', value: EMAIL_OPERATIONS },
|
||||
},
|
||||
{
|
||||
id: 'emailAddress',
|
||||
title: 'Email Address',
|
||||
type: 'short-input',
|
||||
placeholder: 'jane@example.com',
|
||||
condition: { field: 'operation', value: 'email_to_activity' },
|
||||
required: { field: 'operation', value: 'email_to_activity' },
|
||||
},
|
||||
{
|
||||
id: 'linkedin_slug',
|
||||
title: 'LinkedIn Slug or URL',
|
||||
type: 'short-input',
|
||||
placeholder: 'e.g. firstname-lastname or full profile URL',
|
||||
condition: { field: 'operation', value: LINKEDIN_OPERATIONS },
|
||||
required: { field: 'operation', value: LINKEDIN_OPERATIONS },
|
||||
},
|
||||
{
|
||||
id: 'first_name',
|
||||
title: 'First Name',
|
||||
type: 'short-input',
|
||||
placeholder: 'Jane',
|
||||
condition: { field: 'operation', value: 'linkedin_slug_search' },
|
||||
required: { field: 'operation', value: 'linkedin_slug_search' },
|
||||
},
|
||||
{
|
||||
id: 'last_name',
|
||||
title: 'Last Name',
|
||||
type: 'short-input',
|
||||
placeholder: 'Doe',
|
||||
condition: { field: 'operation', value: 'linkedin_slug_search' },
|
||||
required: { field: 'operation', value: 'linkedin_slug_search' },
|
||||
},
|
||||
{
|
||||
id: 'company_domain',
|
||||
title: 'Company Domain',
|
||||
type: 'short-input',
|
||||
placeholder: 'example.com',
|
||||
condition: { field: 'operation', value: 'linkedin_slug_search' },
|
||||
required: { field: 'operation', value: 'linkedin_slug_search' },
|
||||
},
|
||||
{
|
||||
id: 'apiKey',
|
||||
title: 'API Key',
|
||||
type: 'short-input',
|
||||
placeholder: 'Enter your RB2B API key',
|
||||
password: true,
|
||||
required: true,
|
||||
},
|
||||
],
|
||||
tools: {
|
||||
access: [
|
||||
'rb2b_credit_check',
|
||||
'rb2b_ip_to_hem',
|
||||
'rb2b_ip_to_maid',
|
||||
'rb2b_ip_to_company',
|
||||
'rb2b_hem_to_business_profile',
|
||||
'rb2b_hem_to_best_linkedin',
|
||||
'rb2b_hem_to_linkedin',
|
||||
'rb2b_hem_to_maid',
|
||||
'rb2b_email_to_activity',
|
||||
'rb2b_linkedin_to_business_profile',
|
||||
'rb2b_linkedin_to_best_personal_email',
|
||||
'rb2b_linkedin_to_personal_email',
|
||||
'rb2b_linkedin_to_hashed_emails',
|
||||
'rb2b_linkedin_to_mobile_phone',
|
||||
'rb2b_linkedin_slug_search',
|
||||
],
|
||||
config: {
|
||||
tool: (params) => `rb2b_${params.operation}`,
|
||||
params: (params) => {
|
||||
const email = params.email ?? params.emailAddress
|
||||
return email !== undefined ? { email } : {}
|
||||
},
|
||||
},
|
||||
},
|
||||
inputs: {
|
||||
operation: { type: 'string', description: 'Operation to perform' },
|
||||
apiKey: { type: 'string', description: 'RB2B API key' },
|
||||
ip_address: { type: 'string', description: 'IP address to resolve' },
|
||||
user_agent: { type: 'string', description: 'Optional user agent string' },
|
||||
include_sha256: { type: 'boolean', description: 'Include SHA-256 hashes (IP to HEM)' },
|
||||
email: { type: 'string', description: 'Email address or MD5 hash (HEM operations)' },
|
||||
emailAddress: { type: 'string', description: 'Email address (Email to Last Active Date)' },
|
||||
linkedin_slug: { type: 'string', description: 'LinkedIn profile slug or URL' },
|
||||
first_name: { type: 'string', description: 'First name (LinkedIn Slug Search)' },
|
||||
last_name: { type: 'string', description: 'Last name (LinkedIn Slug Search)' },
|
||||
company_domain: { type: 'string', description: 'Company domain (LinkedIn Slug Search)' },
|
||||
},
|
||||
outputs: {
|
||||
credits_remaining: { type: 'number', description: 'API credits remaining (Credit Check)' },
|
||||
results: {
|
||||
type: 'json',
|
||||
description: 'Result list for IP/MAID/company/activity lookups',
|
||||
},
|
||||
match_count: { type: 'number', description: 'Number of matches (Email to Last Active Date)' },
|
||||
credits_charged: { type: 'number', description: 'Credits charged for the request' },
|
||||
credits_exhausted: { type: 'boolean', description: 'Whether the account is out of credits' },
|
||||
linkedin_url: { type: 'string', description: 'LinkedIn profile URL' },
|
||||
linkedin_slug: { type: 'string', description: 'LinkedIn slug' },
|
||||
email: { type: 'string', description: 'Best personal email' },
|
||||
emails: { type: 'array', description: 'Personal email addresses' },
|
||||
mobile_phone: { type: 'string', description: 'Mobile phone number' },
|
||||
business_md5_array: { type: 'array', description: 'MD5 hashes of business emails' },
|
||||
business_sha256_array: { type: 'array', description: 'SHA-256 hashes of business emails' },
|
||||
personal_md5_array: { type: 'array', description: 'MD5 hashes of personal emails' },
|
||||
personal_sha256_array: { type: 'array', description: 'SHA-256 hashes of personal emails' },
|
||||
first_name: { type: 'string', description: 'First name (business profile)' },
|
||||
last_name: { type: 'string', description: 'Last name (business profile)' },
|
||||
full_name: { type: 'string', description: 'Full name (LinkedIn business profile)' },
|
||||
headline: { type: 'string', description: 'LinkedIn headline' },
|
||||
title: { type: 'string', description: 'Job title' },
|
||||
seniority: { type: 'string', description: 'Seniority level' },
|
||||
country: { type: 'string', description: 'Country' },
|
||||
current_industry: { type: 'string', description: 'Current industry' },
|
||||
functional_area: { type: 'json', description: 'Functional area(s)' },
|
||||
current_company: { type: 'string', description: 'Current company name' },
|
||||
current_company_url: { type: 'string', description: 'Current company website' },
|
||||
current_company_linkedinurl: { type: 'string', description: 'Current company LinkedIn URL' },
|
||||
company: { type: 'json', description: 'Company details (LinkedIn business profile)' },
|
||||
business_email: { type: 'string', description: 'Business email address' },
|
||||
personal_email: { type: 'string', description: 'Personal email address' },
|
||||
personal_emails: { type: 'array', description: 'Personal emails (business profile)' },
|
||||
linkedinurl: { type: 'string', description: 'LinkedIn profile URL (business profile)' },
|
||||
link_email: { type: 'string', description: 'Linked business email (business profile)' },
|
||||
work_email_confirmed: { type: 'string', description: 'Whether the work email is confirmed' },
|
||||
company_employee_count: { type: 'string', description: 'Company employee count' },
|
||||
company_employee_range: { type: 'string', description: 'Company employee range band' },
|
||||
company_revenue_range: { type: 'string', description: 'Company revenue range band' },
|
||||
md5: { type: 'string', description: 'MD5 hash of the resolved email' },
|
||||
},
|
||||
}
|
||||
@@ -165,6 +165,7 @@ import { PulseBlock, PulseV2Block } from '@/blocks/blocks/pulse'
|
||||
import { QdrantBlock } from '@/blocks/blocks/qdrant'
|
||||
import { QuiverBlock } from '@/blocks/blocks/quiver'
|
||||
import { RailwayBlock } from '@/blocks/blocks/railway'
|
||||
import { RB2BBlock } from '@/blocks/blocks/rb2b'
|
||||
import { RDSBlock } from '@/blocks/blocks/rds'
|
||||
import { RedditBlock } from '@/blocks/blocks/reddit'
|
||||
import { RedisBlock } from '@/blocks/blocks/redis'
|
||||
@@ -432,6 +433,7 @@ export const registry: Record<string, BlockConfig> = {
|
||||
qdrant: QdrantBlock,
|
||||
quiver: QuiverBlock,
|
||||
railway: RailwayBlock,
|
||||
rb2b: RB2BBlock,
|
||||
rds: RDSBlock,
|
||||
reddit: RedditBlock,
|
||||
redis: RedisBlock,
|
||||
|
||||
@@ -1574,6 +1574,48 @@ export function ExaAIIcon(props: SVGProps<SVGSVGElement>) {
|
||||
)
|
||||
}
|
||||
|
||||
export function RB2BIcon(props: SVGProps<SVGSVGElement>) {
|
||||
const id = useId()
|
||||
const clipId = `rb2b_clip_${id}`
|
||||
return (
|
||||
<svg viewBox='0 0 165 48' fill='none' xmlns='http://www.w3.org/2000/svg' {...props}>
|
||||
<g clipPath={`url(#${clipId})`}>
|
||||
<path d='M95.975 8.40234H87.5703V16.8057H95.975V8.40234Z' fill='#0C1316' />
|
||||
<path d='M121.405 8.40234H113V16.8057H121.405V8.40234Z' fill='#0C1316' />
|
||||
<path d='M112.998 16.8066H104.594V25.21H112.998V16.8066Z' fill='#0C1316' />
|
||||
<path d='M104.596 25.2109H96.1914V33.6143H104.596V25.2109Z' fill='#0C1316' />
|
||||
<path
|
||||
d='M87.7852 39.5965V42.0166V47.9998H121.404V39.5965H96.1898V33.6133H87.7852V39.5965Z'
|
||||
fill='#0C1316'
|
||||
/>
|
||||
<path d='M112.786 0H95.9766V8.40336H112.786V0Z' fill='#0C1316' />
|
||||
<path
|
||||
d='M52.3773 8.40336H74.3639V0H52.3773H43.9727V48H52.3773H74.3639V39.5966H52.3773V28.2017H74.3639V19.7983H52.3773V8.40336Z'
|
||||
fill='#0C1316'
|
||||
/>
|
||||
<path d='M82.7718 8.40234H74.3672V19.7973H82.7718V8.40234Z' fill='#0C1316' />
|
||||
<path d='M82.7679 28.2031H74.3633V39.5981H82.7679V28.2031Z' fill='#0C1316' />
|
||||
<path d='M164.998 8.40234H156.594V19.7973H164.998V8.40234Z' fill='#0C1316' />
|
||||
<path d='M164.998 28.2031H156.594V39.5981H164.998V28.2031Z' fill='#0C1316' />
|
||||
<path
|
||||
d='M134.608 19.7983V8.40336H156.594V0H134.608H126.203V48H134.608H156.594V39.5966H134.608V28.2017H156.594V19.7983H134.608Z'
|
||||
fill='#0C1316'
|
||||
/>
|
||||
<path
|
||||
d='M8.40464 8.40336H30.3912V0H8.40464H0V48H8.40464V28.2017H21.9866V36.605H30.3912V48H38.7958V28.2017H30.3912V19.7983H8.40464V8.40336Z'
|
||||
fill='#0C1316'
|
||||
/>
|
||||
<path d='M38.7953 8.40234H30.3906V19.7973H38.7953V8.40234Z' fill='#0C1316' />
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id={clipId}>
|
||||
<rect width='165' height='48' fill='white' />
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
)
|
||||
}
|
||||
|
||||
export function RedditIcon(props: SVGProps<SVGSVGElement>) {
|
||||
return (
|
||||
<svg
|
||||
@@ -4689,7 +4731,7 @@ export function ZoomInfoIcon(props: SVGProps<SVGSVGElement>) {
|
||||
return (
|
||||
<svg
|
||||
{...props}
|
||||
viewBox='0 0 65 65'
|
||||
viewBox='0.272461 0.272461 64 64'
|
||||
fill='none'
|
||||
xmlns='http://www.w3.org/2000/svg'
|
||||
aria-hidden='true'
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
import type { Rb2bCreditCheckParams, Rb2bCreditCheckResponse } from '@/tools/rb2b/types'
|
||||
import { RB2B_API_BASE, rb2bHeaders } from '@/tools/rb2b/utils'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
|
||||
export const rb2bCreditCheckTool: ToolConfig<Rb2bCreditCheckParams, Rb2bCreditCheckResponse> = {
|
||||
id: 'rb2b_credit_check',
|
||||
name: 'RB2B Credit Check',
|
||||
description: 'Check the number of API credits remaining on your RB2B account.',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiKey: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'RB2B API key',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
method: 'GET',
|
||||
url: `${RB2B_API_BASE}/credits`,
|
||||
headers: (params) => rb2bHeaders(params.apiKey),
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
const data = await response.json()
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
credits_remaining: data.credits_remaining ?? 0,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
credits_remaining: {
|
||||
type: 'number',
|
||||
description: 'Number of API credits remaining on the account',
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
import {
|
||||
RB2B_ACTIVITY_RESULT_OUTPUT_PROPERTIES,
|
||||
type Rb2bEmailActivityParams,
|
||||
type Rb2bEmailActivityResponse,
|
||||
} from '@/tools/rb2b/types'
|
||||
import { RB2B_API_BASE, rb2bHeaders } from '@/tools/rb2b/utils'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
|
||||
export const rb2bEmailToActivityTool: ToolConfig<
|
||||
Rb2bEmailActivityParams,
|
||||
Rb2bEmailActivityResponse
|
||||
> = {
|
||||
id: 'rb2b_email_to_activity',
|
||||
name: 'RB2B Email to Last Active Date',
|
||||
description: 'Return the last known active date for an email address.',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiKey: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'RB2B API key',
|
||||
},
|
||||
email: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-or-llm',
|
||||
description: 'The email address to look up',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
method: 'POST',
|
||||
url: `${RB2B_API_BASE}/email_to_activity`,
|
||||
headers: (params) => rb2bHeaders(params.apiKey),
|
||||
body: (params) => ({ email: params.email }),
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
const data = await response.json()
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
results: data.results ?? [],
|
||||
match_count: data.match_count ?? 0,
|
||||
credits_charged: data.credits_charged ?? 0,
|
||||
credits_exhausted: data.credits_exhausted ?? false,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
results: {
|
||||
type: 'array',
|
||||
description: 'Activity records for the email',
|
||||
items: { type: 'object', properties: RB2B_ACTIVITY_RESULT_OUTPUT_PROPERTIES },
|
||||
},
|
||||
match_count: { type: 'number', description: 'Number of matches found' },
|
||||
credits_charged: { type: 'number', description: 'Credits charged for this request' },
|
||||
credits_exhausted: { type: 'boolean', description: 'Whether the account is out of credits' },
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
import type { Rb2bIdentifierParams, Rb2bLinkedinUrlResponse } from '@/tools/rb2b/types'
|
||||
import { buildIdentifierBody, RB2B_API_BASE, rb2bHeaders } from '@/tools/rb2b/utils'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
|
||||
export const rb2bHemToBestLinkedinTool: ToolConfig<Rb2bIdentifierParams, Rb2bLinkedinUrlResponse> =
|
||||
{
|
||||
id: 'rb2b_hem_to_best_linkedin',
|
||||
name: 'RB2B Email/HEM to Best LinkedIn URL',
|
||||
description:
|
||||
'Return the most recently active LinkedIn profile URL for an email address or MD5-hashed email.',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiKey: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'RB2B API key',
|
||||
},
|
||||
email: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-or-llm',
|
||||
description: 'A plaintext email address or an MD5 hash of the email',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
method: 'POST',
|
||||
url: `${RB2B_API_BASE}/hem_to_best_linkedin`,
|
||||
headers: (params) => rb2bHeaders(params.apiKey),
|
||||
body: (params) => buildIdentifierBody(params.email),
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
const data = await response.json()
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
linkedin_url: data.results?.linkedin_url ?? null,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
linkedin_url: {
|
||||
type: 'string',
|
||||
description: 'Best LinkedIn profile URL for the email',
|
||||
optional: true,
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
import {
|
||||
RB2B_BUSINESS_PROFILE_OUTPUT_PROPERTIES,
|
||||
type Rb2bBusinessProfileResponse,
|
||||
type Rb2bIdentifierParams,
|
||||
} from '@/tools/rb2b/types'
|
||||
import { buildIdentifierBody, RB2B_API_BASE, rb2bHeaders } from '@/tools/rb2b/utils'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
|
||||
export const rb2bHemToBusinessProfileTool: ToolConfig<
|
||||
Rb2bIdentifierParams,
|
||||
Rb2bBusinessProfileResponse
|
||||
> = {
|
||||
id: 'rb2b_hem_to_business_profile',
|
||||
name: 'RB2B Email/HEM to Business Profile',
|
||||
description:
|
||||
'Return a full business profile (name, title, company, industry, seniority and more) for an email address or MD5-hashed email.',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiKey: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'RB2B API key',
|
||||
},
|
||||
email: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-or-llm',
|
||||
description: 'A plaintext email address or an MD5 hash of the email',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
method: 'POST',
|
||||
url: `${RB2B_API_BASE}/hem_to_business_profile`,
|
||||
headers: (params) => rb2bHeaders(params.apiKey),
|
||||
body: (params) => buildIdentifierBody(params.email),
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
const data = await response.json()
|
||||
const result = data.result ?? {}
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
first_name: result.first_name ?? undefined,
|
||||
last_name: result.last_name ?? undefined,
|
||||
title: result.title ?? undefined,
|
||||
seniority: result.seniority ?? undefined,
|
||||
linkedinurl: result.linkedinurl ?? undefined,
|
||||
link_email: result.link_email ?? undefined,
|
||||
work_email_confirmed: result.work_email_confirmed ?? undefined,
|
||||
personal_emails: result.personal_emails ?? [],
|
||||
current_company: result.current_company ?? undefined,
|
||||
current_company_url: result.current_company_url ?? undefined,
|
||||
current_company_linkedinurl: result.current_company_linkedinurl ?? undefined,
|
||||
current_industry: result.current_industry ?? undefined,
|
||||
functional_area: result.functional_area ?? undefined,
|
||||
country: result.country ?? undefined,
|
||||
company_employee_count: result.company_employee_count ?? undefined,
|
||||
company_employee_range: result.company_employee_range ?? undefined,
|
||||
company_revenue_range: result.company_revenue_range ?? undefined,
|
||||
md5: result.md5 ?? undefined,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: RB2B_BUSINESS_PROFILE_OUTPUT_PROPERTIES,
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
import type { Rb2bIdentifierParams, Rb2bLinkedinSlugResponse } from '@/tools/rb2b/types'
|
||||
import { buildIdentifierBody, RB2B_API_BASE, rb2bHeaders } from '@/tools/rb2b/utils'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
|
||||
export const rb2bHemToLinkedinTool: ToolConfig<Rb2bIdentifierParams, Rb2bLinkedinSlugResponse> = {
|
||||
id: 'rb2b_hem_to_linkedin',
|
||||
name: 'RB2B Email/HEM to LinkedIn Slug',
|
||||
description:
|
||||
'Return the LinkedIn slug (the profile identifier portion of the URL) for an email address or MD5-hashed email.',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiKey: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'RB2B API key',
|
||||
},
|
||||
email: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-or-llm',
|
||||
description: 'A plaintext email address or an MD5 hash of the email',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
method: 'POST',
|
||||
url: `${RB2B_API_BASE}/hem_to_linkedin`,
|
||||
headers: (params) => rb2bHeaders(params.apiKey),
|
||||
body: (params) => buildIdentifierBody(params.email),
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
const data = await response.json()
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
linkedin_slug: data.results?.linkedin_slug ?? null,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
linkedin_slug: {
|
||||
type: 'string',
|
||||
description: 'LinkedIn slug for the email',
|
||||
optional: true,
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
import {
|
||||
RB2B_MAID_RESULT_OUTPUT_PROPERTIES,
|
||||
type Rb2bIdentifierParams,
|
||||
type Rb2bMaidResponse,
|
||||
} from '@/tools/rb2b/types'
|
||||
import { buildIdentifierBody, RB2B_API_BASE, rb2bHeaders } from '@/tools/rb2b/utils'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
|
||||
export const rb2bHemToMaidTool: ToolConfig<Rb2bIdentifierParams, Rb2bMaidResponse> = {
|
||||
id: 'rb2b_hem_to_maid',
|
||||
name: 'RB2B Email/HEM to MAID',
|
||||
description:
|
||||
'Return up to five mobile advertising identifiers (MAIDs) associated with an email address or MD5-hashed email.',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiKey: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'RB2B API key',
|
||||
},
|
||||
email: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-or-llm',
|
||||
description: 'A plaintext email address or an MD5 hash of the email',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
method: 'POST',
|
||||
url: `${RB2B_API_BASE}/hem_to_maid`,
|
||||
headers: (params) => rb2bHeaders(params.apiKey),
|
||||
body: (params) => buildIdentifierBody(params.email),
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
const data = await response.json()
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
results: data.results ?? [],
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
results: {
|
||||
type: 'array',
|
||||
description: 'Mobile advertising identifiers associated with the email',
|
||||
items: { type: 'object', properties: RB2B_MAID_RESULT_OUTPUT_PROPERTIES },
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
export { rb2bCreditCheckTool } from '@/tools/rb2b/credit-check'
|
||||
export { rb2bEmailToActivityTool } from '@/tools/rb2b/email-to-activity'
|
||||
export { rb2bHemToBestLinkedinTool } from '@/tools/rb2b/hem-to-best-linkedin'
|
||||
export { rb2bHemToBusinessProfileTool } from '@/tools/rb2b/hem-to-business-profile'
|
||||
export { rb2bHemToLinkedinTool } from '@/tools/rb2b/hem-to-linkedin'
|
||||
export { rb2bHemToMaidTool } from '@/tools/rb2b/hem-to-maid'
|
||||
export { rb2bIpToCompanyTool } from '@/tools/rb2b/ip-to-company'
|
||||
export { rb2bIpToHemTool } from '@/tools/rb2b/ip-to-hem'
|
||||
export { rb2bIpToMaidTool } from '@/tools/rb2b/ip-to-maid'
|
||||
export { rb2bLinkedinSlugSearchTool } from '@/tools/rb2b/linkedin-slug-search'
|
||||
export { rb2bLinkedinToBestPersonalEmailTool } from '@/tools/rb2b/linkedin-to-best-personal-email'
|
||||
export { rb2bLinkedinToBusinessProfileTool } from '@/tools/rb2b/linkedin-to-business-profile'
|
||||
export { rb2bLinkedinToHashedEmailsTool } from '@/tools/rb2b/linkedin-to-hashed-emails'
|
||||
export { rb2bLinkedinToMobilePhoneTool } from '@/tools/rb2b/linkedin-to-mobile-phone'
|
||||
export { rb2bLinkedinToPersonalEmailTool } from '@/tools/rb2b/linkedin-to-personal-email'
|
||||
@@ -0,0 +1,54 @@
|
||||
import {
|
||||
RB2B_COMPANY_RESULT_OUTPUT_PROPERTIES,
|
||||
type Rb2bIpToCompanyParams,
|
||||
type Rb2bIpToCompanyResponse,
|
||||
} from '@/tools/rb2b/types'
|
||||
import { RB2B_API_BASE, rb2bHeaders } from '@/tools/rb2b/utils'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
|
||||
export const rb2bIpToCompanyTool: ToolConfig<Rb2bIpToCompanyParams, Rb2bIpToCompanyResponse> = {
|
||||
id: 'rb2b_ip_to_company',
|
||||
name: 'RB2B IP to Company',
|
||||
description: 'Identify the company domains associated with an IP address, ranked by confidence.',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiKey: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'RB2B API key',
|
||||
},
|
||||
ip_address: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-or-llm',
|
||||
description: 'The IP address to resolve (IPv4 or IPv6)',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
method: 'POST',
|
||||
url: `${RB2B_API_BASE}/ip_to_company`,
|
||||
headers: (params) => rb2bHeaders(params.apiKey),
|
||||
body: (params) => ({ ip_address: params.ip_address }),
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
const data = await response.json()
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
results: data.results ?? [],
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
results: {
|
||||
type: 'array',
|
||||
description: 'Company domain matches for the IP address',
|
||||
items: { type: 'object', properties: RB2B_COMPANY_RESULT_OUTPUT_PROPERTIES },
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
import {
|
||||
RB2B_HEM_RESULT_OUTPUT_PROPERTIES,
|
||||
type Rb2bIpToHemParams,
|
||||
type Rb2bIpToHemResponse,
|
||||
} from '@/tools/rb2b/types'
|
||||
import { RB2B_API_BASE, rb2bHeaders } from '@/tools/rb2b/utils'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
|
||||
export const rb2bIpToHemTool: ToolConfig<Rb2bIpToHemParams, Rb2bIpToHemResponse> = {
|
||||
id: 'rb2b_ip_to_hem',
|
||||
name: 'RB2B IP to HEM',
|
||||
description:
|
||||
'Convert an IP address (and optional user agent) into hashed email addresses (HEM) with accuracy scores.',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiKey: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'RB2B API key',
|
||||
},
|
||||
ip_address: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-or-llm',
|
||||
description: 'The IP address to resolve (IPv4 or IPv6)',
|
||||
},
|
||||
user_agent: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-or-llm',
|
||||
description: 'Optional user agent string to improve match accuracy',
|
||||
},
|
||||
include_sha256: {
|
||||
type: 'boolean',
|
||||
required: false,
|
||||
visibility: 'user-or-llm',
|
||||
description: 'Whether to include SHA-256 hashes in addition to MD5 hashes',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
method: 'POST',
|
||||
url: `${RB2B_API_BASE}/ip_to_hem`,
|
||||
headers: (params) => rb2bHeaders(params.apiKey),
|
||||
body: (params) => {
|
||||
const body: Record<string, any> = { ip_address: params.ip_address }
|
||||
if (params.user_agent) body.user_agent = params.user_agent
|
||||
if (typeof params.include_sha256 === 'boolean') body.include_sha256 = params.include_sha256
|
||||
return body
|
||||
},
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
const data = await response.json()
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
results: data.results ?? [],
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
results: {
|
||||
type: 'array',
|
||||
description: 'Up to 3 hashed email matches for the IP address',
|
||||
items: { type: 'object', properties: RB2B_HEM_RESULT_OUTPUT_PROPERTIES },
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
import {
|
||||
RB2B_MAID_RESULT_OUTPUT_PROPERTIES,
|
||||
type Rb2bIpToMaidParams,
|
||||
type Rb2bMaidResponse,
|
||||
} from '@/tools/rb2b/types'
|
||||
import { RB2B_API_BASE, rb2bHeaders } from '@/tools/rb2b/utils'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
|
||||
export const rb2bIpToMaidTool: ToolConfig<Rb2bIpToMaidParams, Rb2bMaidResponse> = {
|
||||
id: 'rb2b_ip_to_maid',
|
||||
name: 'RB2B IP to MAID',
|
||||
description:
|
||||
'Resolve an IP address (and optional user agent) into mobile advertising identifiers (MAIDs) observed over the last 60 days.',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiKey: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'RB2B API key',
|
||||
},
|
||||
ip_address: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-or-llm',
|
||||
description: 'The IP address to resolve (IPv4 or IPv6)',
|
||||
},
|
||||
user_agent: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-or-llm',
|
||||
description: 'Optional user agent string to improve match accuracy',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
method: 'POST',
|
||||
url: `${RB2B_API_BASE}/ip_to_maid`,
|
||||
headers: (params) => rb2bHeaders(params.apiKey),
|
||||
body: (params) => {
|
||||
const body: Record<string, any> = { ip_address: params.ip_address }
|
||||
if (params.user_agent) body.user_agent = params.user_agent
|
||||
return body
|
||||
},
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
const data = await response.json()
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
results: data.results ?? [],
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
results: {
|
||||
type: 'array',
|
||||
description: 'Mobile advertising identifiers observed for the IP address',
|
||||
items: { type: 'object', properties: RB2B_MAID_RESULT_OUTPUT_PROPERTIES },
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
import type {
|
||||
Rb2bLinkedinSlugSearchParams,
|
||||
Rb2bLinkedinSlugSearchResponse,
|
||||
} from '@/tools/rb2b/types'
|
||||
import { RB2B_API_BASE, rb2bHeaders } from '@/tools/rb2b/utils'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
|
||||
export const rb2bLinkedinSlugSearchTool: ToolConfig<
|
||||
Rb2bLinkedinSlugSearchParams,
|
||||
Rb2bLinkedinSlugSearchResponse
|
||||
> = {
|
||||
id: 'rb2b_linkedin_slug_search',
|
||||
name: 'RB2B LinkedIn Slug Search',
|
||||
description: 'Find a LinkedIn profile URL from a first name, last name, and company domain.',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiKey: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'RB2B API key',
|
||||
},
|
||||
first_name: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-or-llm',
|
||||
description: 'The person’s first name',
|
||||
},
|
||||
last_name: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-or-llm',
|
||||
description: 'The person’s last name',
|
||||
},
|
||||
company_domain: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-or-llm',
|
||||
description: 'The company domain (e.g. example.com)',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
method: 'POST',
|
||||
url: `${RB2B_API_BASE}/linkedin_slug_search`,
|
||||
headers: (params) => rb2bHeaders(params.apiKey),
|
||||
body: (params) => ({
|
||||
first_name: params.first_name,
|
||||
last_name: params.last_name,
|
||||
company_domain: params.company_domain,
|
||||
}),
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
const data = await response.json()
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
linkedin_url: data.result?.linkedin_url ?? null,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
linkedin_url: {
|
||||
type: 'string',
|
||||
description: 'LinkedIn profile URL for the person',
|
||||
optional: true,
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
import type { Rb2bBestPersonalEmailResponse, Rb2bLinkedinParams } from '@/tools/rb2b/types'
|
||||
import { RB2B_API_BASE, rb2bHeaders } from '@/tools/rb2b/utils'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
|
||||
export const rb2bLinkedinToBestPersonalEmailTool: ToolConfig<
|
||||
Rb2bLinkedinParams,
|
||||
Rb2bBestPersonalEmailResponse
|
||||
> = {
|
||||
id: 'rb2b_linkedin_to_best_personal_email',
|
||||
name: 'RB2B LinkedIn to Best Personal Email',
|
||||
description:
|
||||
'Return the personal email with the most recent known network activity for a LinkedIn profile.',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiKey: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'RB2B API key',
|
||||
},
|
||||
linkedin_slug: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-or-llm',
|
||||
description: 'The LinkedIn profile slug or URL',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
method: 'POST',
|
||||
url: `${RB2B_API_BASE}/linkedin_to_best_personal_email`,
|
||||
headers: (params) => rb2bHeaders(params.apiKey),
|
||||
body: (params) => ({ linkedin_slug: params.linkedin_slug }),
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
const data = await response.json()
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
email: data.result?.email ?? null,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
email: {
|
||||
type: 'string',
|
||||
description: 'Best personal email for the LinkedIn profile',
|
||||
optional: true,
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
import {
|
||||
RB2B_LINKEDIN_PROFILE_OUTPUT_PROPERTIES,
|
||||
type Rb2bLinkedinParams,
|
||||
type Rb2bLinkedinProfileResponse,
|
||||
} from '@/tools/rb2b/types'
|
||||
import { RB2B_API_BASE, rb2bHeaders } from '@/tools/rb2b/utils'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
|
||||
export const rb2bLinkedinToBusinessProfileTool: ToolConfig<
|
||||
Rb2bLinkedinParams,
|
||||
Rb2bLinkedinProfileResponse
|
||||
> = {
|
||||
id: 'rb2b_linkedin_to_business_profile',
|
||||
name: 'RB2B LinkedIn to Business Profile',
|
||||
description:
|
||||
'Return a full business profile (name, title, company, emails and more) for a LinkedIn profile.',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiKey: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'RB2B API key',
|
||||
},
|
||||
linkedin_slug: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-or-llm',
|
||||
description: 'The LinkedIn profile slug or URL',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
method: 'POST',
|
||||
url: `${RB2B_API_BASE}/linkedin_to_business_profile`,
|
||||
headers: (params) => rb2bHeaders(params.apiKey),
|
||||
body: (params) => ({ linkedin_slug: params.linkedin_slug }),
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
const data = await response.json()
|
||||
const result = data.result ?? {}
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
first_name: result.first_name ?? undefined,
|
||||
last_name: result.last_name ?? undefined,
|
||||
full_name: result.full_name ?? undefined,
|
||||
headline: result.headline ?? undefined,
|
||||
title: result.title ?? undefined,
|
||||
seniority: result.seniority ?? undefined,
|
||||
country: result.country ?? undefined,
|
||||
current_industry: result.current_industry ?? undefined,
|
||||
functional_area: result.functional_area ?? undefined,
|
||||
linkedin_url: result.linkedin_url ?? undefined,
|
||||
business_email: result.business_email ?? undefined,
|
||||
personal_email: result.personal_email ?? undefined,
|
||||
company: result.company ?? undefined,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: RB2B_LINKEDIN_PROFILE_OUTPUT_PROPERTIES,
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
import type { Rb2bHashedEmailsResponse, Rb2bLinkedinParams } from '@/tools/rb2b/types'
|
||||
import { RB2B_API_BASE, rb2bHeaders } from '@/tools/rb2b/utils'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
|
||||
export const rb2bLinkedinToHashedEmailsTool: ToolConfig<
|
||||
Rb2bLinkedinParams,
|
||||
Rb2bHashedEmailsResponse
|
||||
> = {
|
||||
id: 'rb2b_linkedin_to_hashed_emails',
|
||||
name: 'RB2B LinkedIn to Hashed Emails',
|
||||
description:
|
||||
'Return the business and personal hashed emails (MD5 and SHA-256) associated with a LinkedIn profile.',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiKey: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'RB2B API key',
|
||||
},
|
||||
linkedin_slug: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-or-llm',
|
||||
description: 'The LinkedIn profile slug or URL',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
method: 'POST',
|
||||
url: `${RB2B_API_BASE}/linkedin_to_hashed_emails`,
|
||||
headers: (params) => rb2bHeaders(params.apiKey),
|
||||
body: (params) => ({ linkedin_slug: params.linkedin_slug }),
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
const data = await response.json()
|
||||
const results = data.results ?? {}
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
linkedin_slug: results.linkedin_slug ?? null,
|
||||
business_md5_array: results.business_md5_array ?? [],
|
||||
business_sha256_array: results.business_sha256_array ?? [],
|
||||
personal_md5_array: results.personal_md5_array ?? [],
|
||||
personal_sha256_array: results.personal_sha256_array ?? [],
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
linkedin_slug: { type: 'string', description: 'The LinkedIn slug', optional: true },
|
||||
business_md5_array: {
|
||||
type: 'array',
|
||||
description: 'MD5 hashes of business emails',
|
||||
items: { type: 'string' },
|
||||
},
|
||||
business_sha256_array: {
|
||||
type: 'array',
|
||||
description: 'SHA-256 hashes of business emails',
|
||||
items: { type: 'string' },
|
||||
},
|
||||
personal_md5_array: {
|
||||
type: 'array',
|
||||
description: 'MD5 hashes of personal emails',
|
||||
items: { type: 'string' },
|
||||
},
|
||||
personal_sha256_array: {
|
||||
type: 'array',
|
||||
description: 'SHA-256 hashes of personal emails',
|
||||
items: { type: 'string' },
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
import type { Rb2bLinkedinParams, Rb2bMobilePhoneResponse } from '@/tools/rb2b/types'
|
||||
import { RB2B_API_BASE, rb2bHeaders } from '@/tools/rb2b/utils'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
|
||||
export const rb2bLinkedinToMobilePhoneTool: ToolConfig<
|
||||
Rb2bLinkedinParams,
|
||||
Rb2bMobilePhoneResponse
|
||||
> = {
|
||||
id: 'rb2b_linkedin_to_mobile_phone',
|
||||
name: 'RB2B LinkedIn to Mobile Phone',
|
||||
description:
|
||||
'Return the mobile phone number with the most recent known network activity for a LinkedIn profile.',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiKey: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'RB2B API key',
|
||||
},
|
||||
linkedin_slug: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-or-llm',
|
||||
description: 'The LinkedIn profile slug or URL',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
method: 'POST',
|
||||
url: `${RB2B_API_BASE}/linkedin_to_mobile_phone`,
|
||||
headers: (params) => rb2bHeaders(params.apiKey),
|
||||
body: (params) => ({ linkedin_slug: params.linkedin_slug }),
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
const data = await response.json()
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
mobile_phone: data.result?.mobile_phone ?? null,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
mobile_phone: {
|
||||
type: 'string',
|
||||
description: 'Mobile phone number for the LinkedIn profile',
|
||||
optional: true,
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
import type { Rb2bLinkedinParams, Rb2bPersonalEmailsResponse } from '@/tools/rb2b/types'
|
||||
import { RB2B_API_BASE, rb2bHeaders } from '@/tools/rb2b/utils'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
|
||||
export const rb2bLinkedinToPersonalEmailTool: ToolConfig<
|
||||
Rb2bLinkedinParams,
|
||||
Rb2bPersonalEmailsResponse
|
||||
> = {
|
||||
id: 'rb2b_linkedin_to_personal_email',
|
||||
name: 'RB2B LinkedIn to Personal Email',
|
||||
description: 'Return the personal email addresses associated with a LinkedIn profile.',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiKey: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'RB2B API key',
|
||||
},
|
||||
linkedin_slug: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-or-llm',
|
||||
description: 'The LinkedIn profile slug or URL',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
method: 'POST',
|
||||
url: `${RB2B_API_BASE}/linkedin_to_personal_email`,
|
||||
headers: (params) => rb2bHeaders(params.apiKey),
|
||||
body: (params) => ({ linkedin_slug: params.linkedin_slug }),
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
const data = await response.json()
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
emails: data.result?.emails ?? [],
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
emails: {
|
||||
type: 'array',
|
||||
description: 'Personal email addresses for the LinkedIn profile',
|
||||
items: { type: 'string' },
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,325 @@
|
||||
import type { OutputProperty, ToolResponse } from '@/tools/types'
|
||||
|
||||
/**
|
||||
* Shared output property definitions for RB2B API responses.
|
||||
* Based on the RB2B API collection: https://api.rb2b.com/api/v1
|
||||
*/
|
||||
|
||||
/** A single hashed-email match returned by IP to HEM. */
|
||||
export const RB2B_HEM_RESULT_OUTPUT_PROPERTIES = {
|
||||
md5: { type: 'string', description: 'MD5 hash of the matched email' },
|
||||
sha256: {
|
||||
type: 'string',
|
||||
description: 'SHA-256 hash of the matched email (only when include_sha256 is true)',
|
||||
optional: true,
|
||||
},
|
||||
score: {
|
||||
type: 'number',
|
||||
description: 'Match accuracy score (0 = probabilistic, 1 = deterministic)',
|
||||
},
|
||||
} as const satisfies Record<string, OutputProperty>
|
||||
|
||||
/** A single mobile advertising identifier. */
|
||||
export const RB2B_MAID_RESULT_OUTPUT_PROPERTIES = {
|
||||
device_id: { type: 'string', description: 'The mobile advertising identifier' },
|
||||
device_type: { type: 'string', description: 'The identifier type (e.g. AAID, IDFA)' },
|
||||
} as const satisfies Record<string, OutputProperty>
|
||||
|
||||
/** A single company-domain match returned by IP to Company. */
|
||||
export const RB2B_COMPANY_RESULT_OUTPUT_PROPERTIES = {
|
||||
domain: { type: 'string', description: 'Company domain associated with the IP' },
|
||||
percentage: { type: 'string', description: 'Confidence percentage for the match' },
|
||||
} as const satisfies Record<string, OutputProperty>
|
||||
|
||||
/** A single email activity record. */
|
||||
export const RB2B_ACTIVITY_RESULT_OUTPUT_PROPERTIES = {
|
||||
email: { type: 'string', description: 'The email address' },
|
||||
last_active: { type: 'string', description: 'Date the email was last seen active (YYYY-MM-DD)' },
|
||||
} as const satisfies Record<string, OutputProperty>
|
||||
|
||||
/** Fields returned by HEM to Business Profile. */
|
||||
export const RB2B_BUSINESS_PROFILE_OUTPUT_PROPERTIES = {
|
||||
first_name: { type: 'string', description: 'First name', optional: true },
|
||||
last_name: { type: 'string', description: 'Last name', optional: true },
|
||||
title: { type: 'string', description: 'Job title', optional: true },
|
||||
seniority: { type: 'string', description: 'Seniority level', optional: true },
|
||||
linkedinurl: { type: 'string', description: 'Personal LinkedIn profile URL', optional: true },
|
||||
link_email: { type: 'string', description: 'Linked business email address', optional: true },
|
||||
work_email_confirmed: {
|
||||
type: 'string',
|
||||
description: 'Whether the work email is confirmed',
|
||||
optional: true,
|
||||
},
|
||||
personal_emails: {
|
||||
type: 'array',
|
||||
description: 'Associated personal emails (hashed or plaintext depending on input)',
|
||||
optional: true,
|
||||
items: { type: 'string' },
|
||||
},
|
||||
current_company: { type: 'string', description: 'Current company name', optional: true },
|
||||
current_company_url: { type: 'string', description: 'Current company website', optional: true },
|
||||
current_company_linkedinurl: {
|
||||
type: 'string',
|
||||
description: 'Current company LinkedIn URL',
|
||||
optional: true,
|
||||
},
|
||||
current_industry: { type: 'string', description: 'Current industry', optional: true },
|
||||
functional_area: { type: 'string', description: 'Functional area', optional: true },
|
||||
country: { type: 'string', description: 'Country', optional: true },
|
||||
company_employee_count: {
|
||||
type: 'string',
|
||||
description: 'Company employee count',
|
||||
optional: true,
|
||||
},
|
||||
company_employee_range: {
|
||||
type: 'string',
|
||||
description: 'Company employee range band',
|
||||
optional: true,
|
||||
},
|
||||
company_revenue_range: {
|
||||
type: 'string',
|
||||
description: 'Company revenue range band',
|
||||
optional: true,
|
||||
},
|
||||
md5: { type: 'string', description: 'MD5 hash of the resolved email', optional: true },
|
||||
} as const satisfies Record<string, OutputProperty>
|
||||
|
||||
/** Company sub-object returned by LinkedIn to Business Profile. */
|
||||
export const RB2B_LINKEDIN_COMPANY_OUTPUT_PROPERTIES = {
|
||||
name: { type: 'string', description: 'Company name', optional: true },
|
||||
industry: { type: 'string', description: 'Company industry', optional: true },
|
||||
website_url: { type: 'string', description: 'Company website URL', optional: true },
|
||||
linkedin_url: { type: 'string', description: 'Company LinkedIn URL', optional: true },
|
||||
} as const satisfies Record<string, OutputProperty>
|
||||
|
||||
/** Fields returned by LinkedIn to Business Profile. */
|
||||
export const RB2B_LINKEDIN_PROFILE_OUTPUT_PROPERTIES = {
|
||||
first_name: { type: 'string', description: 'First name', optional: true },
|
||||
last_name: { type: 'string', description: 'Last name', optional: true },
|
||||
full_name: { type: 'string', description: 'Full name', optional: true },
|
||||
headline: { type: 'string', description: 'LinkedIn headline', optional: true },
|
||||
title: { type: 'string', description: 'Job title', optional: true },
|
||||
seniority: { type: 'string', description: 'Seniority level', optional: true },
|
||||
country: { type: 'string', description: 'Country', optional: true },
|
||||
current_industry: { type: 'string', description: 'Current industry', optional: true },
|
||||
functional_area: {
|
||||
type: 'array',
|
||||
description: 'Functional areas',
|
||||
optional: true,
|
||||
items: { type: 'string' },
|
||||
},
|
||||
linkedin_url: { type: 'string', description: 'Personal LinkedIn profile URL', optional: true },
|
||||
business_email: { type: 'string', description: 'Business email address', optional: true },
|
||||
personal_email: { type: 'string', description: 'Personal email address', optional: true },
|
||||
company: {
|
||||
type: 'object',
|
||||
description: 'Current company details',
|
||||
optional: true,
|
||||
properties: RB2B_LINKEDIN_COMPANY_OUTPUT_PROPERTIES,
|
||||
},
|
||||
} as const satisfies Record<string, OutputProperty>
|
||||
|
||||
interface Rb2bMaidResult {
|
||||
device_id: string
|
||||
device_type: string
|
||||
}
|
||||
|
||||
export interface Rb2bCreditCheckParams {
|
||||
apiKey: string
|
||||
}
|
||||
|
||||
export interface Rb2bCreditCheckResponse extends ToolResponse {
|
||||
output: {
|
||||
credits_remaining: number
|
||||
}
|
||||
}
|
||||
|
||||
export interface Rb2bIpToHemParams {
|
||||
apiKey: string
|
||||
ip_address: string
|
||||
user_agent?: string
|
||||
include_sha256?: boolean
|
||||
}
|
||||
|
||||
export interface Rb2bIpToHemResponse extends ToolResponse {
|
||||
output: {
|
||||
results: Array<{
|
||||
md5: string
|
||||
sha256?: string
|
||||
score: number
|
||||
}>
|
||||
}
|
||||
}
|
||||
|
||||
export interface Rb2bIpToMaidParams {
|
||||
apiKey: string
|
||||
ip_address: string
|
||||
user_agent?: string
|
||||
}
|
||||
|
||||
export interface Rb2bIpToCompanyParams {
|
||||
apiKey: string
|
||||
ip_address: string
|
||||
}
|
||||
|
||||
export interface Rb2bIpToCompanyResponse extends ToolResponse {
|
||||
output: {
|
||||
results: Array<{
|
||||
domain: string
|
||||
percentage: string
|
||||
}>
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Params for HEM (hashed email) endpoints. The `email` field accepts either a
|
||||
* plaintext email address or an MD5 hash — the tool routes it to the correct
|
||||
* request key automatically.
|
||||
*/
|
||||
export interface Rb2bIdentifierParams {
|
||||
apiKey: string
|
||||
email: string
|
||||
}
|
||||
|
||||
export interface Rb2bMaidResponse extends ToolResponse {
|
||||
output: {
|
||||
results: Rb2bMaidResult[]
|
||||
}
|
||||
}
|
||||
|
||||
export interface Rb2bLinkedinUrlResponse extends ToolResponse {
|
||||
output: {
|
||||
linkedin_url: string | null
|
||||
}
|
||||
}
|
||||
|
||||
export interface Rb2bLinkedinSlugResponse extends ToolResponse {
|
||||
output: {
|
||||
linkedin_slug: string | null
|
||||
}
|
||||
}
|
||||
|
||||
export interface Rb2bBusinessProfileResponse extends ToolResponse {
|
||||
output: {
|
||||
first_name?: string
|
||||
last_name?: string
|
||||
title?: string
|
||||
seniority?: string
|
||||
linkedinurl?: string
|
||||
link_email?: string
|
||||
work_email_confirmed?: string
|
||||
personal_emails?: string[]
|
||||
current_company?: string
|
||||
current_company_url?: string
|
||||
current_company_linkedinurl?: string
|
||||
current_industry?: string
|
||||
functional_area?: string
|
||||
country?: string
|
||||
company_employee_count?: string
|
||||
company_employee_range?: string
|
||||
company_revenue_range?: string
|
||||
md5?: string
|
||||
}
|
||||
}
|
||||
|
||||
export interface Rb2bEmailActivityParams {
|
||||
apiKey: string
|
||||
email: string
|
||||
}
|
||||
|
||||
export interface Rb2bEmailActivityResponse extends ToolResponse {
|
||||
output: {
|
||||
results: Array<{
|
||||
email: string
|
||||
last_active: string
|
||||
}>
|
||||
match_count: number
|
||||
credits_charged: number
|
||||
credits_exhausted: boolean
|
||||
}
|
||||
}
|
||||
|
||||
export interface Rb2bLinkedinParams {
|
||||
apiKey: string
|
||||
linkedin_slug: string
|
||||
}
|
||||
|
||||
export interface Rb2bBestPersonalEmailResponse extends ToolResponse {
|
||||
output: {
|
||||
email: string | null
|
||||
}
|
||||
}
|
||||
|
||||
export interface Rb2bPersonalEmailsResponse extends ToolResponse {
|
||||
output: {
|
||||
emails: string[]
|
||||
}
|
||||
}
|
||||
|
||||
export interface Rb2bHashedEmailsResponse extends ToolResponse {
|
||||
output: {
|
||||
linkedin_slug: string | null
|
||||
business_md5_array: string[]
|
||||
business_sha256_array: string[]
|
||||
personal_md5_array: string[]
|
||||
personal_sha256_array: string[]
|
||||
}
|
||||
}
|
||||
|
||||
export interface Rb2bMobilePhoneResponse extends ToolResponse {
|
||||
output: {
|
||||
mobile_phone: string | null
|
||||
}
|
||||
}
|
||||
|
||||
export interface Rb2bLinkedinProfileResponse extends ToolResponse {
|
||||
output: {
|
||||
first_name?: string
|
||||
last_name?: string
|
||||
full_name?: string
|
||||
headline?: string
|
||||
title?: string
|
||||
seniority?: string
|
||||
country?: string
|
||||
current_industry?: string
|
||||
functional_area?: string[]
|
||||
linkedin_url?: string
|
||||
business_email?: string
|
||||
personal_email?: string
|
||||
company?: {
|
||||
name?: string
|
||||
industry?: string
|
||||
website_url?: string
|
||||
linkedin_url?: string
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export interface Rb2bLinkedinSlugSearchParams {
|
||||
apiKey: string
|
||||
first_name: string
|
||||
last_name: string
|
||||
company_domain: string
|
||||
}
|
||||
|
||||
export interface Rb2bLinkedinSlugSearchResponse extends ToolResponse {
|
||||
output: {
|
||||
linkedin_url: string | null
|
||||
}
|
||||
}
|
||||
|
||||
export type Rb2bResponse =
|
||||
| Rb2bCreditCheckResponse
|
||||
| Rb2bIpToHemResponse
|
||||
| Rb2bIpToCompanyResponse
|
||||
| Rb2bMaidResponse
|
||||
| Rb2bLinkedinUrlResponse
|
||||
| Rb2bLinkedinSlugResponse
|
||||
| Rb2bBusinessProfileResponse
|
||||
| Rb2bEmailActivityResponse
|
||||
| Rb2bBestPersonalEmailResponse
|
||||
| Rb2bPersonalEmailsResponse
|
||||
| Rb2bHashedEmailsResponse
|
||||
| Rb2bMobilePhoneResponse
|
||||
| Rb2bLinkedinProfileResponse
|
||||
| Rb2bLinkedinSlugSearchResponse
|
||||
@@ -0,0 +1,18 @@
|
||||
/** Base URL for all RB2B API v1 endpoints. */
|
||||
export const RB2B_API_BASE = 'https://api.rb2b.com/api/v1'
|
||||
|
||||
/** Standard headers for RB2B requests. Auth is an `Api-Key` header. */
|
||||
export function rb2bHeaders(apiKey: string): Record<string, string> {
|
||||
return {
|
||||
'Content-Type': 'application/json',
|
||||
'Api-Key': apiKey,
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* HEM endpoints accept either a plaintext email or an MD5 hash under the
|
||||
* `email` / `md5` body key respectively. Route the value to the correct key.
|
||||
*/
|
||||
export function buildIdentifierBody(value: string): Record<string, string> {
|
||||
return value.includes('@') ? { email: value } : { md5: value }
|
||||
}
|
||||
@@ -2170,6 +2170,23 @@ import {
|
||||
railwayUpdateProjectTool,
|
||||
railwayUpsertVariableTool,
|
||||
} from '@/tools/railway'
|
||||
import {
|
||||
rb2bCreditCheckTool,
|
||||
rb2bEmailToActivityTool,
|
||||
rb2bHemToBestLinkedinTool,
|
||||
rb2bHemToBusinessProfileTool,
|
||||
rb2bHemToLinkedinTool,
|
||||
rb2bHemToMaidTool,
|
||||
rb2bIpToCompanyTool,
|
||||
rb2bIpToHemTool,
|
||||
rb2bIpToMaidTool,
|
||||
rb2bLinkedinSlugSearchTool,
|
||||
rb2bLinkedinToBestPersonalEmailTool,
|
||||
rb2bLinkedinToBusinessProfileTool,
|
||||
rb2bLinkedinToHashedEmailsTool,
|
||||
rb2bLinkedinToMobilePhoneTool,
|
||||
rb2bLinkedinToPersonalEmailTool,
|
||||
} from '@/tools/rb2b'
|
||||
import {
|
||||
rdsDeleteTool,
|
||||
rdsExecuteTool,
|
||||
@@ -4356,6 +4373,21 @@ export const tools: Record<string, ToolConfig> = {
|
||||
parallel_search: parallelSearchTool,
|
||||
parallel_extract: parallelExtractTool,
|
||||
parallel_deep_research: parallelDeepResearchTool,
|
||||
rb2b_credit_check: rb2bCreditCheckTool,
|
||||
rb2b_ip_to_hem: rb2bIpToHemTool,
|
||||
rb2b_ip_to_maid: rb2bIpToMaidTool,
|
||||
rb2b_ip_to_company: rb2bIpToCompanyTool,
|
||||
rb2b_hem_to_business_profile: rb2bHemToBusinessProfileTool,
|
||||
rb2b_hem_to_best_linkedin: rb2bHemToBestLinkedinTool,
|
||||
rb2b_hem_to_linkedin: rb2bHemToLinkedinTool,
|
||||
rb2b_hem_to_maid: rb2bHemToMaidTool,
|
||||
rb2b_email_to_activity: rb2bEmailToActivityTool,
|
||||
rb2b_linkedin_to_business_profile: rb2bLinkedinToBusinessProfileTool,
|
||||
rb2b_linkedin_to_best_personal_email: rb2bLinkedinToBestPersonalEmailTool,
|
||||
rb2b_linkedin_to_personal_email: rb2bLinkedinToPersonalEmailTool,
|
||||
rb2b_linkedin_to_hashed_emails: rb2bLinkedinToHashedEmailsTool,
|
||||
rb2b_linkedin_to_mobile_phone: rb2bLinkedinToMobilePhoneTool,
|
||||
rb2b_linkedin_slug_search: rb2bLinkedinSlugSearchTool,
|
||||
reddit_hot_posts: redditHotPostsTool,
|
||||
reddit_get_posts: redditGetPostsTool,
|
||||
reddit_get_comments: redditGetCommentsTool,
|
||||
|
||||
Reference in New Issue
Block a user