Search Organization

Searches for an organization by vanity name or email domain. [See the docs here](https://docs.microsoft.com/en-us/linkedin/marketing/integrations/community-management/organizations/organization-lookup-api)

Script linkedin Verified

by hugo697 ยท 7/17/2024

The script

Submitted by hugo697 Typescript (fetch-only)
Verified 689 days ago
1
// Requires apiVersion 202311 or lower.
2
type Linkedin = {
3
	token: string
4
	apiVersion: string
5
}
6

7
export async function main(
8
	resource: Linkedin,
9
	searchBy: 'vanity' | 'email',
10
	searchQuery: string, // must be either vanity name or email domain
11
	maxResults: number = 100
12
) {
13
	const count = 50 // Number of results per request
14
	const results: any[] = []
15

16
	const params = new URLSearchParams()
17

18
	if (searchBy === 'vanity') {
19
		params.append('q', 'vanityName')
20
		params.append('vanityName', searchQuery)
21
	} else {
22
		params.append('q', 'emailDomain')
23
		params.append('emailDomain', searchQuery)
24
	}
25

26
	params.append('count', count.toString())
27
	params.append('start', '0')
28

29
	let done = false
30
	do {
31
		const endpoint = `https://api.linkedin.com/rest/organizations?${params.toString()}`
32

33
		const response = await fetch(endpoint, {
34
			method: 'GET',
35
			headers: {
36
				Authorization: `Bearer ${resource.token}`,
37
				'LinkedIn-Version': `${resource.apiVersion}`,
38
				'X-Restli-Protocol-Version': '2.0.0'
39
			}
40
		})
41

42
		if (!response.ok) {
43
			throw new Error(`HTTP error! status: ${response.status}`)
44
		}
45

46
		const data = await response.json()
47
		results.push(...data.elements)
48

49
		params.set('start', (parseInt(params.get('start')!) + count).toString())
50
		if (data.elements.length < count || results.length >= maxResults) {
51
			done = true
52
		}
53
	} while (!done)
54

55
	return results.slice(0, maxResults)
56
}
57