Skip to content

Commit 278d570

Browse files
feat(integrations): add SMARTe enrichment
1 parent 81f4086 commit 278d570

29 files changed

Lines changed: 2857 additions & 4 deletions

File tree

apps/docs/components/icons.tsx

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9712,6 +9712,25 @@ export function SmartleadIcon(props: SVGProps<SVGSVGElement>) {
97129712
)
97139713
}
97149714

9715+
/**
9716+
* SMARTe's official connected-node mark, adapted from the reverse primary
9717+
* logo to use the surrounding text color on light and dark surfaces.
9718+
*/
9719+
export function SmarteIcon(props: SVGProps<SVGSVGElement>) {
9720+
return (
9721+
<svg
9722+
{...props}
9723+
viewBox='0 0 44 44'
9724+
fill='currentColor'
9725+
xmlns='http://www.w3.org/2000/svg'
9726+
aria-hidden='true'
9727+
>
9728+
<path d='M38.904 32.768a7.56 7.56 0 0 1-7.436-.34l.008.02c-.064-.056-1.672-1.404-4.72.048-1.156.552-2.232 1.416-2.704 2.64s-.296 2.6-.82 3.812a7.6 7.6 0 0 1-3.532 3.788A7.57 7.57 0 0 1 9.292 38.88c-1.4-3.36-.168-7.3 2.9-9.256a7.6 7.6 0 0 1 5.124-1.128c1.836.256 3.264 1.496 5.108 1.716 1.248.152 3.14-.108 3.78-1.364.524-1.028.076-2.324-.976-2.796a30 30 0 0 0-3.46-1.288 29 29 0 0 0-3.048-.776c-1.784-.344-3.588-.108-5.296.46-1.632.544-3.112 1.58-4.828 1.812-3.048.412-6.152-1.132-7.644-3.828a7.56 7.56 0 0 1 3.124-10.376c1.216-.632 2.636-.896 4-.784 1.496.12 2.62.84 3.968 1.42 1.916.82 3.816.336 5.48-.82.552-.384 1.084-.84 1.376-1.444.672-1.392.208-3.032.856-4.48.752-1.664 1.948-3.06 3.596-3.892a7.564 7.564 0 0 1 10.172 3.348c1.808 3.588.452 8.04-3.056 10a7.56 7.56 0 0 1-7.44-.024c-1.82-1.036-5.212-1.132-6.26 1.084-.596 1.256-.092 2.788 1.136 3.432 1.116.584 2.592 1.208 4.536 1.808 1.096.34 2.076.584 2.952.756 1.636.324 3.344-.22 4.452-1.468.68-.76 1.524-1.4 2.516-1.852 3.564-1.624 7.844-.208 9.74 3.216 2.088 3.772.616 8.492-3.196 10.42z' />
9729+
<path d='M35.5 33.6a7.576 7.576 0 1 0 0-15.152 7.576 7.576 0 0 0 0 15.152M26.768 16.352a7.56 7.56 0 1 0 0-15.12 7.56 7.56 0 0 0 0 15.12M16.28 43.552a7.592 7.592 0 1 0 0-15.184 7.592 7.592 0 0 0 0 15.184' />
9730+
</svg>
9731+
)
9732+
}
9733+
97159734
export function ZohoDeskIcon(props: SVGProps<SVGSVGElement>) {
97169735
return (
97179736
<svg

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,7 @@ import {
223223
SimTriggerIcon,
224224
SixtyfourIcon,
225225
SlackIcon,
226+
SmarteIcon,
226227
SmartleadIcon,
227228
SmtpIcon,
228229
SnowflakeIcon,
@@ -527,6 +528,7 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
527528
slack: SlackIcon,
528529
slack_app: SlackIcon,
529530
slack_v2: SlackIcon,
531+
smarte: SmarteIcon,
530532
smartlead: SmartleadIcon,
531533
smtp: SmtpIcon,
532534
snowflake: SnowflakeIcon,

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,7 @@
236236
"similarweb",
237237
"sixtyfour",
238238
"slack",
239+
"smarte",
239240
"smartlead",
240241
"smtp",
241242
"snowflake",
Lines changed: 175 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
1+
---
2+
title: SMARTe
3+
description: Enrich people and companies with contact, funding, and technology data
4+
---
5+
6+
import { BlockInfoCard } from "@/components/ui/block-info-card"
7+
8+
<BlockInfoCard
9+
type="smarte"
10+
color="#4622FF"
11+
/>
12+
13+
## Usage Instructions
14+
15+
Use SMARTe to enrich person and company profiles, retrieve work emails and mobile numbers, research company funding, and identify technologies used by a company.
16+
17+
18+
19+
## Actions
20+
21+
### SMARTe Enrich Company
22+
23+
Enrich a company with firmographic, financial, corporate hierarchy, and geographic attributes.
24+
25+
#### Input
26+
27+
| Parameter | Type | Required | Description |
28+
| --------- | ---- | -------- | ----------- |
29+
| `apiKey` | string | Yes | SMARTe API key |
30+
| `recordId` | string | No | Client-side reference identifier |
31+
| `companyId` | string | Yes | SMARTe company identifier |
32+
| `companyName` | string | Yes | Company name |
33+
| `companyWebsite` | string | Yes | Company website |
34+
| `companyLinkedinUrl` | string | Yes | Company LinkedIn profile URL |
35+
36+
#### Output
37+
38+
| Parameter | Type | Description |
39+
| --------- | ---- | ----------- |
40+
| `records` | array | Enriched records using the selected operation documented response schema |
41+
| `creditsDeducted` | number | Credits charged by SMARTe for the request |
42+
43+
### SMARTe Enrich Email
44+
45+
Retrieve enriched work email data without returning a full person profile.
46+
47+
#### Input
48+
49+
| Parameter | Type | Required | Description |
50+
| --------- | ---- | -------- | ----------- |
51+
| `apiKey` | string | Yes | SMARTe API key |
52+
| `recordId` | string | No | Client-side reference identifier |
53+
| `experienceId` | string | No | SMARTe person experience identifier |
54+
| `firstName` | string | No | First name of the person |
55+
| `lastName` | string | No | Last name of the person |
56+
| `fullName` | string | No | Full name of the person |
57+
| `email` | string | No | Known work email address |
58+
| `jobTitle` | string | No | Current job title |
59+
| `linkedinUrl` | string | No | LinkedIn profile URL |
60+
| `companyId` | string | No | SMARTe company identifier |
61+
| `companyName` | string | No | Company name |
62+
| `companyWebsite` | string | No | Company website |
63+
| `companyLinkedinUrl` | string | No | Company LinkedIn profile URL |
64+
65+
#### Output
66+
67+
| Parameter | Type | Description |
68+
| --------- | ---- | ----------- |
69+
| `records` | array | Enriched records using the selected operation documented response schema |
70+
| `creditsDeducted` | number | Credits charged by SMARTe for the request |
71+
72+
### SMARTe Enrich Funding
73+
74+
Retrieve funding and investment data for a company.
75+
76+
#### Input
77+
78+
| Parameter | Type | Required | Description |
79+
| --------- | ---- | -------- | ----------- |
80+
| `apiKey` | string | Yes | SMARTe API key |
81+
| `companyId` | string | No | SMARTe company identifier |
82+
| `companyName` | string | No | Company name |
83+
| `companyWebsite` | string | No | Company website |
84+
| `companyLinkedinUrl` | string | No | Company LinkedIn profile URL |
85+
86+
#### Output
87+
88+
| Parameter | Type | Description |
89+
| --------- | ---- | ----------- |
90+
| `records` | array | Enriched records using the selected operation documented response schema |
91+
| `creditsDeducted` | number | Credits charged by SMARTe for the request |
92+
93+
### SMARTe Enrich Mobile
94+
95+
Retrieve direct dial and mobile phone fields without returning a full person profile.
96+
97+
#### Input
98+
99+
| Parameter | Type | Required | Description |
100+
| --------- | ---- | -------- | ----------- |
101+
| `apiKey` | string | Yes | SMARTe API key |
102+
| `recordId` | string | No | Client-side reference identifier |
103+
| `experienceId` | string | No | SMARTe person experience identifier |
104+
| `firstName` | string | No | First name of the person |
105+
| `lastName` | string | No | Last name of the person |
106+
| `fullName` | string | No | Full name of the person |
107+
| `email` | string | No | Work email address |
108+
| `jobTitle` | string | No | Current job title |
109+
| `linkedinUrl` | string | No | LinkedIn profile URL |
110+
| `companyId` | string | No | SMARTe company identifier |
111+
| `companyName` | string | No | Company name |
112+
| `companyWebsite` | string | No | Company website |
113+
| `companyLinkedinUrl` | string | No | Company LinkedIn profile URL |
114+
115+
#### Output
116+
117+
| Parameter | Type | Description |
118+
| --------- | ---- | ----------- |
119+
| `records` | array | Enriched records using the selected operation documented response schema |
120+
| `creditsDeducted` | number | Credits charged by SMARTe for the request |
121+
122+
### SMARTe Enrich Person
123+
124+
Enrich a person with professional details, current and past experience, and associated company context.
125+
126+
#### Input
127+
128+
| Parameter | Type | Required | Description |
129+
| --------- | ---- | -------- | ----------- |
130+
| `apiKey` | string | Yes | SMARTe API key |
131+
| `recordId` | string | No | Client-side reference identifier |
132+
| `experienceId` | string | No | Identifier for a specific experience |
133+
| `firstName` | string | Yes | First name of the person |
134+
| `lastName` | string | Yes | Last name of the person |
135+
| `fullName` | string | Yes | Full name of the person |
136+
| `email` | string | Yes | Business email address |
137+
| `jobTitle` | string | Yes | Current job title |
138+
| `linkedinUrl` | string | Yes | LinkedIn profile URL |
139+
| `companyId` | string | No | SMARTe company identifier |
140+
| `companyName` | string | No | Company name |
141+
| `companyWebsite` | string | No | Company website |
142+
| `companyLinkedinUrl` | string | No | Company LinkedIn profile URL |
143+
144+
#### Output
145+
146+
| Parameter | Type | Description |
147+
| --------- | ---- | ----------- |
148+
| `records` | array | Enriched records using the selected operation documented response schema |
149+
| `creditsDeducted` | number | Credits charged by SMARTe for the request |
150+
151+
### SMARTe Enrich Technographics
152+
153+
Retrieve company technology stack data for segmentation and targeting.
154+
155+
#### Input
156+
157+
| Parameter | Type | Required | Description |
158+
| --------- | ---- | -------- | ----------- |
159+
| `apiKey` | string | Yes | SMARTe API key |
160+
| `companyId` | string | No | SMARTe company identifier |
161+
| `companyName` | string | No | Company name |
162+
| `companyWebsite` | string | No | Company website |
163+
| `companyLinkedinUrl` | string | No | Company LinkedIn profile URL |
164+
| `product` | string | No | Technology product name filter |
165+
| `vendor` | string | No | Technology vendor name filter |
166+
| `category` | string | No | Technology product category filter |
167+
168+
#### Output
169+
170+
| Parameter | Type | Description |
171+
| --------- | ---- | ----------- |
172+
| `records` | array | Enriched records using the selected operation documented response schema |
173+
| `creditsDeducted` | number | Credits charged by SMARTe for the request |
174+
175+

apps/sim/app/workspace/[workspaceId]/settings/components/byok/byok.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import {
3636
PerplexityIcon,
3737
ProspeoIcon,
3838
SerperIcon,
39+
SmarteIcon,
3940
TogetherIcon,
4041
WizaIcon,
4142
xAIIcon,
@@ -260,6 +261,13 @@ const PROVIDERS: (BYOKManagerProvider & { id: BYOKProviderId })[] = [
260261
description: 'Person and company enrichment and search',
261262
placeholder: 'Enter your Prospeo API key',
262263
},
264+
{
265+
id: 'smarte',
266+
name: 'SMARTe',
267+
icon: SmarteIcon,
268+
description: 'Person, company, email, mobile, funding, and technology enrichment',
269+
placeholder: 'Enter your SMARTe API key',
270+
},
263271
{
264272
id: 'wiza',
265273
name: 'Wiza',
@@ -371,6 +379,7 @@ const PROVIDER_SECTIONS: BYOKProviderSection[] = [
371379
'peopledatalabs',
372380
'findymail',
373381
'prospeo',
382+
'smarte',
374383
'wiza',
375384
'datagma',
376385
'dropcontact',
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/**
2+
* @vitest-environment node
3+
*/
4+
import { describe, expect, it } from 'vitest'
5+
import { SmarteBlock } from '@/blocks/blocks/smarte'
6+
7+
function getToolParamsMapper() {
8+
const mapper = SmarteBlock.tools.config?.params
9+
if (!mapper) throw new Error('SMARTe block is missing its tool parameter mapper')
10+
return mapper
11+
}
12+
13+
describe('SMARTe block tool mapping', () => {
14+
it('maps only inputs belonging to the selected operation', () => {
15+
expect(
16+
getToolParamsMapper()({
17+
operation: 'smarte_enrich_email',
18+
apiKey: 'key',
19+
e_fullName: 'Ada Lovelace',
20+
p_email: 'stale@example.com',
21+
})
22+
).toEqual({ apiKey: 'key', fullName: 'Ada Lovelace' })
23+
})
24+
25+
it('fails fast for invalid operations and unknown active inputs', () => {
26+
expect(() => getToolParamsMapper()({ operation: 'smarte_unknown' })).toThrow(
27+
'Invalid SMARTe operation'
28+
)
29+
expect(() =>
30+
getToolParamsMapper()({
31+
operation: 'smarte_enrich_email',
32+
e_unknown: 'value',
33+
})
34+
).toThrow('Unknown SMARTe input')
35+
})
36+
})

0 commit comments

Comments
 (0)