|
| 1 | +--- |
| 2 | +title: Harmonic |
| 3 | +description: Search and enrich private-market contacts |
| 4 | +--- |
| 5 | + |
| 6 | +import { BlockInfoCard } from "@/components/ui/block-info-card" |
| 7 | + |
| 8 | +<BlockInfoCard |
| 9 | + type="harmonic" |
| 10 | + color="#FFFFFF" |
| 11 | +/> |
| 12 | + |
| 13 | +{/* MANUAL-CONTENT-START:intro */} |
| 14 | +[Harmonic](https://harmonic.ai/) is a private-market intelligence platform for researching companies, people, and investors. Its Scout agent accepts a natural-language sourcing request—such as “find forward-deployed engineers in enterprise software”—and the Harmonic block converts the result into a predictable `contacts` table for downstream scoring, review, storage in Sim tables, or delivery to CRM and other integration blocks. |
| 15 | + |
| 16 | +### Authentication |
| 17 | + |
| 18 | +This integration uses a Harmonic **team API key**, sent only in the `apikey` request header. It does not use OAuth. You need an existing Harmonic workspace with API access; ask your Harmonic workspace administrator or [Harmonic support](mailto:support@harmonic.ai) for the team key, then paste it into the block's **Harmonic API Key** field. |
| 19 | + |
| 20 | +### Working with people data |
| 21 | + |
| 22 | +- **Scout search:** **Search People with Scout** uses an integration-owned schema so every successful request returns the same normalized contact fields. Scout task errors, timeouts, interruptions, and malformed structured results stop the workflow instead of returning an ambiguous partial result. |
| 23 | +- **Saved searches:** A team API key can read only saved searches shared with the team. Make a private people search shared in the Harmonic console before retrieving it through the API. Follow `pageInfo.nextCursor` while `pageInfo.hasNext` is true. |
| 24 | +- **URN-only rows:** Saved-search pages may contain person URNs without full profiles. Pass `personUrns` to **Batch Get People** to hydrate them into the common contact shape. |
| 25 | +- **Downstream workflows:** Pass `contacts` directly into Sim tables, scoring or approval steps, and other integrations such as a CRM. Every contact-producing action uses the same camelCase output shape. |
| 26 | +- **Workspace and list APIs:** This first version intentionally omits Harmonic's retiring V1 workspace and people-list endpoints. Harmonic says those APIs stop serving traffic on November 5, 2026 and already fail after a workspace completes its V2 migration. See Harmonic's [Workspace API migration guide](https://console.harmonic.ai/docs/api-reference/workspace/migration) for the V2 GraphQL replacement. |
| 27 | + |
| 28 | +Harmonic recommends no more than 100 saved-search results per page. Its general API limit is 10 requests per second, while Scout task creation is limited to 10 requests per minute and 100 per hour. Endpoint and field availability can also depend on your Harmonic subscription. |
| 29 | + |
| 30 | +Harmonic does not publish a webhook-registration contract for this workflow surface, so the integration has no native triggers. Use a **Schedule** block to poll a shared saved search when recurring synchronization is needed. |
| 31 | +{/* MANUAL-CONTENT-END */} |
| 32 | + |
| 33 | + |
| 34 | +## Usage Instructions |
| 35 | + |
| 36 | +Use Harmonic Scout to find people with natural-language criteria, retrieve team-visible people saved searches, and hydrate person identifiers into normalized contacts for downstream tables, CRM, scoring, and outreach workflows. |
| 37 | + |
| 38 | + |
| 39 | + |
| 40 | +## Actions |
| 41 | + |
| 42 | +### Harmonic Search People with Scout |
| 43 | + |
| 44 | +Ask Harmonic Scout to find people using natural language and return a stable, workflow-ready contacts table. |
| 45 | + |
| 46 | +#### Input |
| 47 | + |
| 48 | +| Parameter | Type | Required | Description | |
| 49 | +| --------- | ---- | -------- | ----------- | |
| 50 | +| `apiKey` | string | Yes | Harmonic team API key, sent in the apikey header | |
| 51 | +| `query` | string | Yes | Natural-language people research request, e.g. "Find forward-deployed engineers in enterprise software" | |
| 52 | + |
| 53 | +#### Output |
| 54 | + |
| 55 | +| Parameter | Type | Description | |
| 56 | +| --------- | ---- | ----------- | |
| 57 | +| `contacts` | array | People matching the Scout request, normalized for downstream workflow use | |
| 58 | +| ↳ `personUrn` | string | Harmonic person URN | |
| 59 | +| ↳ `personId` | number | Numeric Harmonic person ID | |
| 60 | +| ↳ `fullName` | string | Full name | |
| 61 | +| ↳ `firstName` | string | First name | |
| 62 | +| ↳ `lastName` | string | Last name | |
| 63 | +| ↳ `headline` | string | LinkedIn headline or current title | |
| 64 | +| ↳ `currentTitles` | array | Current job titles | |
| 65 | +| ↳ `currentCompanyNames` | array | Current company names | |
| 66 | +| ↳ `currentCompanyUrns` | array | Current Harmonic company URNs | |
| 67 | +| ↳ `primaryEmail` | string | Primary known email address | |
| 68 | +| ↳ `emails` | array | Known email addresses | |
| 69 | +| ↳ `phoneNumbers` | array | Known phone numbers | |
| 70 | +| ↳ `linkedinUrl` | string | LinkedIn profile URL | |
| 71 | +| ↳ `formattedLocation` | string | Formatted location | |
| 72 | +| ↳ `city` | string | City | |
| 73 | +| ↳ `state` | string | State or region | |
| 74 | +| ↳ `country` | string | Country | |
| 75 | +| ↳ `profilePictureUrl` | string | Profile picture URL | |
| 76 | +| ↳ `summary` | string | Scout-generated contact summary | |
| 77 | +| ↳ `isRedacted` | boolean | Whether Harmonic marks the person record as redacted | |
| 78 | +| `taskId` | string | Harmonic Scout task identifier | |
| 79 | +| `status` | string | Final Scout task status \(success\) | |
| 80 | +| `count` | number | Number of contacts returned | |
| 81 | + |
| 82 | +### Harmonic List People Saved Searches |
| 83 | + |
| 84 | +List the team-shared Harmonic saved searches that target people. Use a returned ID or URN to fetch results. |
| 85 | + |
| 86 | +#### Input |
| 87 | + |
| 88 | +| Parameter | Type | Required | Description | |
| 89 | +| --------- | ---- | -------- | ----------- | |
| 90 | +| `apiKey` | string | Yes | Harmonic team API key, sent in the apikey header | |
| 91 | + |
| 92 | +#### Output |
| 93 | + |
| 94 | +| Parameter | Type | Description | |
| 95 | +| --------- | ---- | ----------- | |
| 96 | +| `savedSearches` | array | Team-accessible Harmonic saved searches that target people | |
| 97 | +| ↳ `savedSearchId` | number | Saved search ID | |
| 98 | +| ↳ `savedSearchUrn` | string | Saved search URN | |
| 99 | +| ↳ `name` | string | Saved search name | |
| 100 | +| ↳ `isPrivate` | boolean | Whether the search is private | |
| 101 | +| ↳ `savedSearchType` | string | Saved search entity type | |
| 102 | +| ↳ `userSavedSearchType` | string | User-facing saved search type | |
| 103 | +| ↳ `creatorUrn` | string | Creator user URN | |
| 104 | +| ↳ `createdAt` | string | Creation timestamp | |
| 105 | +| ↳ `updatedAt` | string | Last update timestamp | |
| 106 | +| `count` | number | Number of people saved searches returned | |
| 107 | + |
| 108 | +### Harmonic Get People Saved Search Results |
| 109 | + |
| 110 | +Get one page of a Harmonic people saved search. Full records become contacts; URN-only rows are exposed for Batch Get People. |
| 111 | + |
| 112 | +#### Input |
| 113 | + |
| 114 | +| Parameter | Type | Required | Description | |
| 115 | +| --------- | ---- | -------- | ----------- | |
| 116 | +| `apiKey` | string | Yes | Harmonic team API key, sent in the apikey header | |
| 117 | +| `savedSearchId` | string | Yes | People saved-search ID or full Harmonic saved-search URN | |
| 118 | +| `size` | number | No | Results to return, 1-100 \(default 50\) | |
| 119 | +| `cursor` | string | No | Opaque next-page cursor from a previous response | |
| 120 | + |
| 121 | +#### Output |
| 122 | + |
| 123 | +| Parameter | Type | Description | |
| 124 | +| --------- | ---- | ----------- | |
| 125 | +| `contacts` | array | Full person records returned by the saved search, normalized as contacts | |
| 126 | +| ↳ `personUrn` | string | Harmonic person URN | |
| 127 | +| ↳ `personId` | number | Numeric Harmonic person ID | |
| 128 | +| ↳ `fullName` | string | Full name | |
| 129 | +| ↳ `firstName` | string | First name | |
| 130 | +| ↳ `lastName` | string | Last name | |
| 131 | +| ↳ `headline` | string | LinkedIn headline or current title | |
| 132 | +| ↳ `currentTitles` | array | Current job titles | |
| 133 | +| ↳ `currentCompanyNames` | array | Current company names | |
| 134 | +| ↳ `currentCompanyUrns` | array | Current Harmonic company URNs | |
| 135 | +| ↳ `primaryEmail` | string | Primary known email address | |
| 136 | +| ↳ `emails` | array | Known email addresses | |
| 137 | +| ↳ `phoneNumbers` | array | Known phone numbers | |
| 138 | +| ↳ `linkedinUrl` | string | LinkedIn profile URL | |
| 139 | +| ↳ `formattedLocation` | string | Formatted location | |
| 140 | +| ↳ `city` | string | City | |
| 141 | +| ↳ `state` | string | State or region | |
| 142 | +| ↳ `country` | string | Country | |
| 143 | +| ↳ `profilePictureUrl` | string | Profile picture URL | |
| 144 | +| ↳ `summary` | string | Scout-generated contact summary | |
| 145 | +| ↳ `isRedacted` | boolean | Whether Harmonic marks the person record as redacted | |
| 146 | +| `personUrns` | array | All person URNs in the page, including rows returned without full profiles | |
| 147 | +| `totalCount` | number | Total matching people | |
| 148 | +| `pageInfo` | object | Cursor pagination metadata | |
| 149 | +| ↳ `nextCursor` | string | Cursor for the next page | |
| 150 | +| ↳ `currentCursor` | string | Cursor for the current page | |
| 151 | +| ↳ `hasNext` | boolean | Whether another page is available | |
| 152 | + |
| 153 | +### Harmonic Batch Get People |
| 154 | + |
| 155 | +Fetch full Harmonic person profiles for up to 500 combined numeric IDs and person URNs. |
| 156 | + |
| 157 | +#### Input |
| 158 | + |
| 159 | +| Parameter | Type | Required | Description | |
| 160 | +| --------- | ---- | -------- | ----------- | |
| 161 | +| `apiKey` | string | Yes | Harmonic team API key, sent in the apikey header | |
| 162 | +| `personIds` | json | No | Array of numeric Harmonic person IDs; may be a JSON-array string | |
| 163 | +| `personUrns` | json | No | Array of Harmonic person URNs; may be a JSON-array string | |
| 164 | + |
| 165 | +#### Output |
| 166 | + |
| 167 | +| Parameter | Type | Description | |
| 168 | +| --------- | ---- | ----------- | |
| 169 | +| `contacts` | array | Fetched Harmonic person profiles normalized as contacts | |
| 170 | +| ↳ `personUrn` | string | Harmonic person URN | |
| 171 | +| ↳ `personId` | number | Numeric Harmonic person ID | |
| 172 | +| ↳ `fullName` | string | Full name | |
| 173 | +| ↳ `firstName` | string | First name | |
| 174 | +| ↳ `lastName` | string | Last name | |
| 175 | +| ↳ `headline` | string | LinkedIn headline or current title | |
| 176 | +| ↳ `currentTitles` | array | Current job titles | |
| 177 | +| ↳ `currentCompanyNames` | array | Current company names | |
| 178 | +| ↳ `currentCompanyUrns` | array | Current Harmonic company URNs | |
| 179 | +| ↳ `primaryEmail` | string | Primary known email address | |
| 180 | +| ↳ `emails` | array | Known email addresses | |
| 181 | +| ↳ `phoneNumbers` | array | Known phone numbers | |
| 182 | +| ↳ `linkedinUrl` | string | LinkedIn profile URL | |
| 183 | +| ↳ `formattedLocation` | string | Formatted location | |
| 184 | +| ↳ `city` | string | City | |
| 185 | +| ↳ `state` | string | State or region | |
| 186 | +| ↳ `country` | string | Country | |
| 187 | +| ↳ `profilePictureUrl` | string | Profile picture URL | |
| 188 | +| ↳ `summary` | string | Scout-generated contact summary | |
| 189 | +| ↳ `isRedacted` | boolean | Whether Harmonic marks the person record as redacted | |
| 190 | +| `count` | number | Number of contacts returned | |
| 191 | + |
| 192 | + |
0 commit comments