Skip to content

Commit f3cf8fc

Browse files
authored
feat(findymail): add Findymail B2B contact data integration (#4654)
* feat(findymail): add Findymail B2B contact data integration Adds 11 tools covering verified email lookup (by name, LinkedIn, domain roles), email verification, reverse email lookup with profile enrichment, company info, employee discovery, phone lookup, technology stack detection, and credit checks. Single API-key block with operation dropdown, gradient-rendered icon, and generated docs. * fix(findymail): handle HTTP errors and surface last_detected_at - All 11 tools now check response.ok and return success:false with the API error message on non-2xx responses - search_technologies now maps last_detected_at to match lookup_technologies and the shared output schema - Restore file_v3 in docs icon-mapping (translated docs still reference it) * improvement(findymail): exclude operation from params transform Match the convention used by enrich/apify/box/calendly — destructure out operation before forwarding the rest to the tool call, so the operation key doesn't leak into the tool payload.
1 parent b276672 commit f3cf8fc

23 files changed

Lines changed: 2035 additions & 0 deletions

apps/docs/components/icons.tsx

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2283,6 +2283,49 @@ export function ElevenLabsIcon(props: SVGProps<SVGSVGElement>) {
22832283
)
22842284
}
22852285

2286+
export function FindymailIcon(props: SVGProps<SVGSVGElement>) {
2287+
return (
2288+
<svg {...props} xmlns='http://www.w3.org/2000/svg' viewBox='0 0 45.4462 31.2952' fill='none'>
2289+
<path
2290+
fillRule='evenodd'
2291+
clipRule='evenodd'
2292+
d='M27.7788 8.18066C26.628 8.18066 25.479 8.62026 24.6016 9.49766L22.7235 11.0666L20.8454 9.49766C19.968 8.62026 18.8189 8.18066 17.6681 8.18066C16.5191 8.18066 15.3683 8.62026 14.4909 9.49766C12.7361 11.2525 12.7361 14.0991 14.4909 15.8521L20.9722 22.0922C21.9497 23.0339 23.4972 23.0339 24.4747 22.0922L30.9578 15.8521C32.7126 14.0991 32.7126 11.2525 30.9578 9.49766C30.0804 8.62026 28.9296 8.18066 27.7788 8.18066Z'
2293+
fill='url(#findymail_paint0)'
2294+
/>
2295+
<path
2296+
fillRule='evenodd'
2297+
clipRule='evenodd'
2298+
d='M42.3815 27.2995C42.3815 27.8571 41.9312 28.3074 41.3737 28.3074H4.0725C3.51497 28.3074 3.06644 27.8571 3.06644 27.2995V7.29083C3.06644 6.39914 4.1279 5.9381 4.77835 6.54745L9.53884 11.0042C9.95341 11.3937 10.6182 11.1971 10.7718 10.6485C10.8791 10.2715 11.0167 9.90338 11.1846 9.54956C11.4062 9.08138 11.2579 8.51848 10.8791 8.16466L7.1854 4.70509C6.52958 4.09037 6.96382 2.9896 7.86445 2.9896H37.58C38.4806 2.9896 38.9166 4.09216 38.259 4.70688L34.5671 8.16109C34.1901 8.51491 34.04 9.07959 34.2633 9.54777C34.4295 9.90159 34.5671 10.2679 34.6743 10.645C34.828 11.1918 35.4928 11.3884 35.9073 11.0006L40.6678 6.54567C41.3183 5.93631 42.3815 6.39735 42.3815 7.28726V27.2995ZM42.9141 0H2.53213C1.13294 0 0 1.13294 0 2.53213V28.7631C0 30.1622 1.13294 31.2952 2.53213 31.2952H42.9141C44.3132 31.2952 45.4462 30.1622 45.4462 28.7631V2.53213C45.4462 1.13294 44.3132 0 42.9141 0Z'
2299+
fill='url(#findymail_paint1)'
2300+
/>
2301+
<defs>
2302+
<linearGradient
2303+
id='findymail_paint0'
2304+
x1='20.5769'
2305+
y1='8.68821'
2306+
x2='24.6922'
2307+
y2='23.0919'
2308+
gradientUnits='userSpaceOnUse'
2309+
>
2310+
<stop stopColor='#F04249' />
2311+
<stop offset='0.289072' stopColor='#DE2337' />
2312+
<stop offset='1' stopColor='#B91C1C' />
2313+
</linearGradient>
2314+
<linearGradient
2315+
id='findymail_paint1'
2316+
x1='22.7231'
2317+
y1='0'
2318+
x2='22.7231'
2319+
y2='31.2952'
2320+
gradientUnits='userSpaceOnUse'
2321+
>
2322+
<stop stopColor='#18181B' />
2323+
<stop offset='1' />
2324+
</linearGradient>
2325+
</defs>
2326+
</svg>
2327+
)
2328+
}
22862329
export function FathomIcon(props: SVGProps<SVGSVGElement>) {
22872330
return (
22882331
<svg {...props} xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1000 1000' fill='none'>

apps/docs/components/ui/icon-mapping.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ import {
5858
ExtendIcon,
5959
EyeIcon,
6060
FathomIcon,
61+
FindymailIcon,
6162
FirecrawlIcon,
6263
FirefliesIcon,
6364
GammaIcon,
@@ -262,7 +263,9 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
262263
extend_v2: ExtendIcon,
263264
fathom: FathomIcon,
264265
file: DocumentIcon,
266+
file_v3: DocumentIcon,
265267
file_v4: DocumentIcon,
268+
findymail: FindymailIcon,
266269
firecrawl: FirecrawlIcon,
267270
fireflies: FirefliesIcon,
268271
fireflies_v2: FirefliesIcon,
Lines changed: 286 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,286 @@
1+
---
2+
title: Findymail
3+
description: Find and verify B2B emails, phones, employees, and company data
4+
---
5+
6+
import { BlockInfoCard } from "@/components/ui/block-info-card"
7+
8+
<BlockInfoCard
9+
type="findymail"
10+
color="#FFFFFF"
11+
/>
12+
13+
{/* MANUAL-CONTENT-START:intro */}
14+
[Findymail](https://findymail.com/) is a B2B contact data platform for finding and verifying work emails, phone numbers, and enriched profile data on company employees. It combines real-time email finding, deliverability verification, reverse-lookup, and technology stack detection in a single API.
15+
16+
With Findymail, you can:
17+
18+
- **Find work emails by name and company:** Resolve a verified work email from a person's name plus a company domain or company name.
19+
- **Find emails from LinkedIn:** Look up the verified work email behind any LinkedIn profile URL.
20+
- **Find contacts by role:** Search a company domain for verified emails matching specific target roles (e.g., CEO, Founder).
21+
- **Verify deliverability:** Check whether an email is deliverable and identify the underlying mail provider.
22+
- **Reverse-lookup profiles:** Given an email, return the matching LinkedIn URL and an optional enriched profile (job, education, skills, certificates).
23+
- **Enrich companies and employees:** Look up company metadata by LinkedIn URL, domain, or name, and find employees by website and target job titles.
24+
- **Find phone numbers:** Retrieve a contact's phone number (US-only) from a LinkedIn profile URL.
25+
- **Detect technology stacks:** Search the technology catalog or look up the full tech stack of a company by domain.
26+
27+
In Sim, the Findymail integration lets your agents programmatically build verified contact lists, enrich CRMs, qualify leads, and gather technographic data without leaving your workflow. Use it to automate outbound prospecting, augment incoming form submissions, validate email captures before sending, and trigger downstream actions when a verified contact is found.
28+
{/* MANUAL-CONTENT-END */}
29+
30+
31+
## Usage Instructions
32+
33+
Integrate Findymail to find verified work emails by name, domain, or LinkedIn URL, verify deliverability, reverse-lookup profiles from emails, enrich company data, find employees by job title, look up phone numbers, search technology stacks, and check credit usage.
34+
35+
36+
37+
## Tools
38+
39+
### `findymail_verify_email`
40+
41+
Verifies the deliverability of an email address. Uses one verifier credit.
42+
43+
#### Input
44+
45+
| Parameter | Type | Required | Description |
46+
| --------- | ---- | -------- | ----------- |
47+
| `email` | string | Yes | Email address to verify \(e.g., john@example.com\) |
48+
| `apiKey` | string | Yes | Findymail API Key |
49+
50+
#### Output
51+
52+
| Parameter | Type | Description |
53+
| --------- | ---- | ----------- |
54+
| `email` | string | The verified email address |
55+
| `verified` | boolean | Whether the email is verified as deliverable |
56+
| `provider` | string | Email service provider \(e.g., Google, Microsoft\) |
57+
58+
### `findymail_find_email_from_name`
59+
60+
Find someone
61+
62+
#### Input
63+
64+
| Parameter | Type | Required | Description |
65+
| --------- | ---- | -------- | ----------- |
66+
| `name` | string | Yes | Person's full name \(e.g., 'John Doe'\) |
67+
| `domain` | string | Yes | Company domain \(preferred\) or company name \(e.g., stripe.com\) |
68+
| `apiKey` | string | Yes | Findymail API Key |
69+
70+
#### Output
71+
72+
| Parameter | Type | Description |
73+
| --------- | ---- | ----------- |
74+
| `contact` | object | Contact information |
75+
|`name` | string | Contact full name |
76+
|`email` | string | Contact email address |
77+
|`domain` | string | Email domain |
78+
79+
### `findymail_find_emails_by_domain`
80+
81+
Find verified contacts at a given domain matching one or more target roles (max 3 roles). Limited to 5 concurrent synchronous requests.
82+
83+
#### Input
84+
85+
| Parameter | Type | Required | Description |
86+
| --------- | ---- | -------- | ----------- |
87+
| `domain` | string | Yes | Company domain \(e.g., stripe.com\) |
88+
| `roles` | array | Yes | Target roles at the company \(max 3, e.g., \["CEO", "Founder"\]\) |
89+
| `items` | string | No | No description |
90+
| `apiKey` | string | Yes | Findymail API Key |
91+
92+
#### Output
93+
94+
| Parameter | Type | Description |
95+
| --------- | ---- | ----------- |
96+
| `contacts` | array | List of contacts found |
97+
|`name` | string | Contact full name |
98+
|`email` | string | Contact email address |
99+
|`domain` | string | Email domain |
100+
101+
### `findymail_find_email_from_linkedin`
102+
103+
Find someone
104+
105+
#### Input
106+
107+
| Parameter | Type | Required | Description |
108+
| --------- | ---- | -------- | ----------- |
109+
| `linkedin_url` | string | Yes | Person's LinkedIn URL or username \(e.g., 'https://linkedin.com/in/johndoe' or 'johndoe'\) |
110+
| `apiKey` | string | Yes | Findymail API Key |
111+
112+
#### Output
113+
114+
| Parameter | Type | Description |
115+
| --------- | ---- | ----------- |
116+
| `contact` | object | Contact information |
117+
|`name` | string | Contact full name |
118+
|`email` | string | Contact email address |
119+
|`domain` | string | Email domain |
120+
121+
### `findymail_reverse_email_lookup`
122+
123+
Find a business profile from an email address. Uses 1 finder credit if a profile is found, 2 credits if returning full profile data.
124+
125+
#### Input
126+
127+
| Parameter | Type | Required | Description |
128+
| --------- | ---- | -------- | ----------- |
129+
| `email` | string | Yes | Work or personal email address to look up |
130+
| `with_profile` | boolean | No | Whether to return enriched profile metadata \(default: false\) |
131+
| `apiKey` | string | Yes | Findymail API Key |
132+
133+
#### Output
134+
135+
| Parameter | Type | Description |
136+
| --------- | ---- | ----------- |
137+
| `email` | string | The email address that was looked up |
138+
| `linkedin_url` | string | LinkedIn profile URL |
139+
| `fullName` | string | Full name from profile |
140+
| `username` | string | LinkedIn username |
141+
| `headline` | string | Profile headline |
142+
| `jobTitle` | string | Current job title |
143+
| `summary` | string | Profile summary |
144+
| `city` | string | City |
145+
| `region` | string | Region or state |
146+
| `country` | string | Country |
147+
| `companyLinkedinUrl` | string | Current company LinkedIn URL |
148+
| `companyName` | string | Current company name |
149+
| `companyWebsite` | string | Current company website |
150+
| `isPremium` | boolean | Whether the profile has LinkedIn Premium |
151+
| `isOpenProfile` | boolean | Whether the profile is an Open Profile |
152+
| `skills` | array | List of profile skills |
153+
| `jobs` | array | Job history entries |
154+
| `educations` | array | Education history \(school, degree, fieldOfStudy, startDate, endDate\) |
155+
| `certificates` | array | Certifications \(name, issuingOrganization, issueDate, expirationDate\) |
156+
157+
### `findymail_get_company`
158+
159+
Retrieve company information from a LinkedIn URL, domain, or company name. Uses 1 finder credit per successful response.
160+
161+
#### Input
162+
163+
| Parameter | Type | Required | Description |
164+
| --------- | ---- | -------- | ----------- |
165+
| `linkedin_url` | string | No | Company LinkedIn URL \(e.g., https://www.linkedin.com/company/stripe/\) |
166+
| `domain` | string | No | Company domain \(e.g., stripe.com\) |
167+
| `name` | string | No | Company name \(e.g., Stripe\) |
168+
| `apiKey` | string | Yes | Findymail API Key |
169+
170+
#### Output
171+
172+
| Parameter | Type | Description |
173+
| --------- | ---- | ----------- |
174+
| `name` | string | Company name |
175+
| `domain` | string | Company domain |
176+
| `company_size` | string | Employee headcount range \(e.g., 1001-5000\) |
177+
| `industry` | string | Industry classification |
178+
| `linkedin_url` | string | Company LinkedIn URL |
179+
| `description` | string | Company description |
180+
181+
### `findymail_find_employees`
182+
183+
Find employees at a company by website and target job titles. Uses 1 credit per found contact. Does not return email addresses.
184+
185+
#### Input
186+
187+
| Parameter | Type | Required | Description |
188+
| --------- | ---- | -------- | ----------- |
189+
| `website` | string | Yes | Company website or domain \(e.g., google.com\) |
190+
| `job_titles` | array | Yes | Target job titles to search for \(max 10, e.g., \["Software Engineer", "CEO"\]\) |
191+
| `items` | string | No | No description |
192+
| `count` | number | No | Number of contacts to return \(max 5, default 1\) |
193+
| `apiKey` | string | Yes | Findymail API Key |
194+
195+
#### Output
196+
197+
| Parameter | Type | Description |
198+
| --------- | ---- | ----------- |
199+
| `employees` | array | List of employees matching the search criteria |
200+
|`name` | string | Employee full name |
201+
|`linkedinUrl` | string | LinkedIn profile URL |
202+
|`companyWebsite` | string | Company website |
203+
|`companyName` | string | Company name |
204+
|`jobTitle` | string | Job title |
205+
206+
### `findymail_find_phone`
207+
208+
Find someone
209+
210+
#### Input
211+
212+
| Parameter | Type | Required | Description |
213+
| --------- | ---- | -------- | ----------- |
214+
| `linkedin_url` | string | Yes | Person's LinkedIn URL or username \(e.g., 'https://linkedin.com/in/johndoe' or 'johndoe'\) |
215+
| `apiKey` | string | Yes | Findymail API Key |
216+
217+
#### Output
218+
219+
| Parameter | Type | Description |
220+
| --------- | ---- | ----------- |
221+
| `phone` | string | Phone number in E.164 format. Only available for US numbers. |
222+
| `line_type` | string | Phone line type \(e.g., "Mobile", "Landline"\) |
223+
224+
### `findymail_search_technologies`
225+
226+
Search the technology catalog by name. Returns up to 25 technologies. Free endpoint, rate limited to 10 requests per minute.
227+
228+
#### Input
229+
230+
| Parameter | Type | Required | Description |
231+
| --------- | ---- | -------- | ----------- |
232+
| `q` | string | Yes | Search term \(min 2 characters, e.g., "React"\) |
233+
| `apiKey` | string | Yes | Findymail API Key |
234+
235+
#### Output
236+
237+
| Parameter | Type | Description |
238+
| --------- | ---- | ----------- |
239+
| `technologies` | array | List of technologies |
240+
|`name` | string | Technology name |
241+
|`category` | string | Technology category |
242+
|`subcategory` | string | Technology subcategory |
243+
|`last_detected_at` | string | Last detection timestamp \(ISO 8601\) |
244+
245+
### `findymail_lookup_technologies`
246+
247+
Get the technology stack for a company by domain. Optionally filter by technology names. 1 finder credit if technologies are found, free otherwise.
248+
249+
#### Input
250+
251+
| Parameter | Type | Required | Description |
252+
| --------- | ---- | -------- | ----------- |
253+
| `domain` | string | Yes | Company domain to look up \(e.g., stripe.com\) |
254+
| `technologies` | array | No | Filter by technology names, case-insensitive \(e.g., \["React", "TypeScript"\]\) |
255+
| `items` | string | No | No description |
256+
| `apiKey` | string | Yes | Findymail API Key |
257+
258+
#### Output
259+
260+
| Parameter | Type | Description |
261+
| --------- | ---- | ----------- |
262+
| `technologies` | array | List of technologies |
263+
|`name` | string | Technology name |
264+
|`category` | string | Technology category |
265+
|`subcategory` | string | Technology subcategory |
266+
|`last_detected_at` | string | Last detection timestamp \(ISO 8601\) |
267+
| `domain` | string | The resolved company domain |
268+
269+
### `findymail_get_credits`
270+
271+
Retrieve the remaining finder and verifier credits for the authenticated account.
272+
273+
#### Input
274+
275+
| Parameter | Type | Required | Description |
276+
| --------- | ---- | -------- | ----------- |
277+
| `apiKey` | string | Yes | Findymail API Key |
278+
279+
#### Output
280+
281+
| Parameter | Type | Description |
282+
| --------- | ---- | ----------- |
283+
| `credits` | number | Remaining finder credits |
284+
| `verifier_credits` | number | Remaining verifier credits |
285+
286+

apps/docs/content/docs/en/tools/meta.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
"extend",
5454
"fathom",
5555
"file",
56+
"findymail",
5657
"firecrawl",
5758
"fireflies",
5859
"gamma",

apps/sim/app/(landing)/integrations/data/icon-mapping.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ import {
5858
ExtendIcon,
5959
EyeIcon,
6060
FathomIcon,
61+
FindymailIcon,
6162
FirecrawlIcon,
6263
FirefliesIcon,
6364
GammaIcon,
@@ -259,6 +260,7 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
259260
extend_v2: ExtendIcon,
260261
fathom: FathomIcon,
261262
file_v4: DocumentIcon,
263+
findymail: FindymailIcon,
262264
firecrawl: FirecrawlIcon,
263265
fireflies_v2: FirefliesIcon,
264266
gamma: GammaIcon,

0 commit comments

Comments
 (0)