orangeslice 2.1.5 → 2.3.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of orangeslice might be problematic. Click here for more details.
- package/README.md +3 -1
- package/dist/careers.d.ts +47 -0
- package/dist/careers.js +11 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.js +29 -3
- package/dist/integrations.d.ts +60 -0
- package/dist/integrations.js +106 -0
- package/dist/ocean.d.ts +160 -0
- package/dist/ocean.js +23 -0
- package/dist/skills.d.ts +57 -0
- package/dist/skills.js +33 -0
- package/docs/data-enrichement/index.md +10 -2
- package/docs/integrations/gmail/createDraft.md +54 -0
- package/docs/integrations/gmail/fetchEmails.md +50 -0
- package/docs/integrations/gmail/fetchMessageByMessageId.md +36 -0
- package/docs/integrations/gmail/fetchMessageByThreadId.md +37 -0
- package/docs/integrations/gmail/getProfile.md +37 -0
- package/docs/integrations/gmail/index.md +19 -2
- package/docs/integrations/gmail/listLabels.md +34 -0
- package/docs/integrations/gmail/replyToThread.md +51 -0
- package/docs/integrations/index.md +14 -1
- package/docs/lookalike-search/index.md +24 -12
- package/docs/prospecting/index.md +2 -2
- package/docs/services/builtWith/index.md +2 -2
- package/docs/services/company/findCareersPage.md +137 -0
- package/docs/services/company/findCareersPage.ts +37 -0
- package/docs/services/company/linkedin/enrich.md +47 -1
- package/docs/services/company/scrapeCareersPage.md +150 -0
- package/docs/services/index.md +2 -2
- package/docs/services/ocean/search/companies.ts +122 -119
- package/docs/services/person/linkedin/findUrl.md +2 -2
- package/docs/services/predictLeads/companyJobOpenings.ts +168 -94
- package/docs/services/web/search.md +29 -14
- package/package.json +1 -1
|
@@ -1,102 +1,176 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Retrieve company's Job Openings
|
|
3
3
|
* Returns a list of company's Job Openings.
|
|
4
|
+
*
|
|
5
|
+
* Use this as a prospecting/enrichment signal, not as source-of-truth validation
|
|
6
|
+
* that a known company is currently hiring. For current validation, prefer the
|
|
7
|
+
*
|
|
8
|
+
* company's official careers page / ATS via services.company.findCareersPage and
|
|
9
|
+
* services.company.scrapeCareersPage.
|
|
4
10
|
* HTTP GET /companies/{company_id_or_domain}/job_openings
|
|
5
11
|
*/
|
|
6
12
|
type companyJobOpenings = (params: {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
13
|
+
/** Company's ID or domain. */
|
|
14
|
+
company_id_or_domain: string;
|
|
15
|
+
/** Set to true if you'd like to receive JobOpenings that are not closed, have last_seen_at more recent than 5 days and were found in the last year. */
|
|
16
|
+
active_only?: boolean;
|
|
17
|
+
/** Similar to `active_only`, but without considering `last_seen_at` timestamp. */
|
|
18
|
+
not_closed?: boolean;
|
|
19
|
+
/** Only return `JobOpenings` first seen after given date (ISO 8601). */
|
|
20
|
+
first_seen_at_from?: string;
|
|
21
|
+
/** Only return `JobOpenings` first seen before given date (ISO 8601). */
|
|
22
|
+
first_seen_at_until?: string;
|
|
23
|
+
/** Only return `JobOpenings` last seen after given date (ISO 8601). */
|
|
24
|
+
last_seen_at_from?: string;
|
|
25
|
+
/** Only return `JobOpenings` last seen before given date (ISO 8601). */
|
|
26
|
+
last_seen_at_until?: string;
|
|
27
|
+
/** Only return JobOpenings that have description. */
|
|
28
|
+
with_description_only?: boolean;
|
|
29
|
+
/** Only return JobOpenings that have location. */
|
|
30
|
+
with_location_only?: boolean;
|
|
31
|
+
/** Comma-separated (,) `JobOpening` categories. */
|
|
32
|
+
categories?: Array<
|
|
33
|
+
| "administration"
|
|
34
|
+
| "consulting"
|
|
35
|
+
| "data_analysis"
|
|
36
|
+
| "design"
|
|
37
|
+
| "directors"
|
|
38
|
+
| "education"
|
|
39
|
+
| "engineering"
|
|
40
|
+
| "finance"
|
|
41
|
+
| "healthcare_services"
|
|
42
|
+
| "human_resources"
|
|
43
|
+
| "information_technology"
|
|
44
|
+
| "internship"
|
|
45
|
+
| "legal"
|
|
46
|
+
| "management"
|
|
47
|
+
| "marketing"
|
|
48
|
+
| "military_and_protective_services"
|
|
49
|
+
| "operations"
|
|
50
|
+
| "purchasing"
|
|
51
|
+
| "product_management"
|
|
52
|
+
| "quality_assurance"
|
|
53
|
+
| "real_estate"
|
|
54
|
+
| "research"
|
|
55
|
+
| "sales"
|
|
56
|
+
| "software_development"
|
|
57
|
+
| "support"
|
|
58
|
+
| "manual_work"
|
|
59
|
+
| "food"
|
|
60
|
+
>;
|
|
61
|
+
/** Page number of shown items. **NOTE**: If the parameter is not provided, the meta property `count` will be omitted from response for performance reasons. */
|
|
62
|
+
page?: number;
|
|
63
|
+
/** Limit the number of shown items per page. */
|
|
64
|
+
limit?: number;
|
|
31
65
|
}) => Promise<{
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
66
|
+
data: Array<{
|
|
67
|
+
id: string;
|
|
68
|
+
type: "job_opening";
|
|
69
|
+
attributes: {
|
|
70
|
+
title: string;
|
|
71
|
+
description: string | null;
|
|
72
|
+
url: string;
|
|
73
|
+
first_seen_at: string;
|
|
74
|
+
last_seen_at: string;
|
|
75
|
+
last_processed_at: string;
|
|
76
|
+
contract_types: Array<Record<string, unknown>>;
|
|
77
|
+
categories: Array<
|
|
78
|
+
| "administration"
|
|
79
|
+
| "consulting"
|
|
80
|
+
| "data_analysis"
|
|
81
|
+
| "design"
|
|
82
|
+
| "directors"
|
|
83
|
+
| "education"
|
|
84
|
+
| "engineering"
|
|
85
|
+
| "finance"
|
|
86
|
+
| "healthcare_services"
|
|
87
|
+
| "human_resources"
|
|
88
|
+
| "information_technology"
|
|
89
|
+
| "internship"
|
|
90
|
+
| "legal"
|
|
91
|
+
| "management"
|
|
92
|
+
| "marketing"
|
|
93
|
+
| "military_and_protective_services"
|
|
94
|
+
| "operations"
|
|
95
|
+
| "purchasing"
|
|
96
|
+
| "product_management"
|
|
97
|
+
| "quality_assurance"
|
|
98
|
+
| "real_estate"
|
|
99
|
+
| "research"
|
|
100
|
+
| "sales"
|
|
101
|
+
| "software_development"
|
|
102
|
+
| "support"
|
|
103
|
+
| "manual_work"
|
|
104
|
+
| "food"
|
|
105
|
+
>;
|
|
106
|
+
onet_data: {
|
|
107
|
+
code: string | null;
|
|
108
|
+
family: string | null;
|
|
109
|
+
occupation_name: string | null;
|
|
110
|
+
};
|
|
111
|
+
posted_at: string | null;
|
|
112
|
+
recruiter_data: {
|
|
113
|
+
name: string | null;
|
|
114
|
+
title: string | null;
|
|
115
|
+
contact: string | null;
|
|
116
|
+
};
|
|
117
|
+
salary: string | null;
|
|
118
|
+
salary_data: {
|
|
119
|
+
salary_low: number | null;
|
|
120
|
+
salary_high: number | null;
|
|
121
|
+
salary_currency: string | null;
|
|
122
|
+
salary_low_usd: number | null;
|
|
123
|
+
salary_high_usd: number | null;
|
|
124
|
+
salary_time_unit: "hour" | "day" | "week" | "month" | "year" | null;
|
|
125
|
+
};
|
|
126
|
+
seniority:
|
|
127
|
+
| "not_set"
|
|
128
|
+
| "founder"
|
|
129
|
+
| "c_level"
|
|
130
|
+
| "partner"
|
|
131
|
+
| "president"
|
|
132
|
+
| "vice_president"
|
|
133
|
+
| "head"
|
|
134
|
+
| "director"
|
|
135
|
+
| "manager"
|
|
136
|
+
| "mid_senior"
|
|
137
|
+
| "junior"
|
|
138
|
+
| "non_manager";
|
|
139
|
+
status: "closed" | null;
|
|
140
|
+
language: string | null;
|
|
141
|
+
location: string | null;
|
|
142
|
+
location_data: Array<{
|
|
143
|
+
city: unknown;
|
|
144
|
+
state: unknown;
|
|
145
|
+
zip_code: unknown;
|
|
146
|
+
country: unknown;
|
|
147
|
+
region: unknown;
|
|
148
|
+
continent: unknown;
|
|
149
|
+
fuzzy_match: unknown;
|
|
150
|
+
}>;
|
|
151
|
+
tags: Array<Record<string, unknown>>;
|
|
152
|
+
};
|
|
153
|
+
relationships: {
|
|
154
|
+
company: {
|
|
155
|
+
data: {
|
|
156
|
+
id: string;
|
|
157
|
+
type: "company";
|
|
158
|
+
};
|
|
159
|
+
};
|
|
160
|
+
};
|
|
161
|
+
}>;
|
|
162
|
+
included: Array<{
|
|
163
|
+
id: string;
|
|
164
|
+
type: "company";
|
|
165
|
+
attributes: {
|
|
166
|
+
domain: string;
|
|
167
|
+
company_name: string | null;
|
|
168
|
+
ticker: string | null;
|
|
169
|
+
};
|
|
170
|
+
}>;
|
|
171
|
+
meta?: {
|
|
172
|
+
schema_version: string;
|
|
173
|
+
record_state: "active";
|
|
174
|
+
count?: number;
|
|
175
|
+
};
|
|
76
176
|
}>;
|
|
77
|
-
tags: Array<Record<string, unknown>>;
|
|
78
|
-
};
|
|
79
|
-
relationships: {
|
|
80
|
-
company: {
|
|
81
|
-
data: {
|
|
82
|
-
id: string;
|
|
83
|
-
type: "company";
|
|
84
|
-
};
|
|
85
|
-
};
|
|
86
|
-
};
|
|
87
|
-
}>;
|
|
88
|
-
included: Array<{
|
|
89
|
-
id: string;
|
|
90
|
-
type: "company";
|
|
91
|
-
attributes: {
|
|
92
|
-
domain: string;
|
|
93
|
-
company_name: string | null;
|
|
94
|
-
ticker: string | null;
|
|
95
|
-
};
|
|
96
|
-
}>;
|
|
97
|
-
meta?: {
|
|
98
|
-
schema_version: string;
|
|
99
|
-
record_state: "active";
|
|
100
|
-
count?: number;
|
|
101
|
-
};
|
|
102
|
-
}>;
|
|
@@ -67,6 +67,22 @@ Web search returns URLs based on keywords, **not confirmed matches**. Scrape the
|
|
|
67
67
|
|
|
68
68
|
---
|
|
69
69
|
|
|
70
|
+
## Company Subpage Discovery Rule
|
|
71
|
+
|
|
72
|
+
To find pages on a company's own website, **never search Google by company name**. Always start from the verified domain and dork with `site:` plus `inurl:` hints.
|
|
73
|
+
|
|
74
|
+
```ts
|
|
75
|
+
await services.web.search({ query: "site:stripe.com inurl:team OR inurl:about OR inurl:careers" });
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Never do this for subpage discovery:
|
|
79
|
+
|
|
80
|
+
```ts
|
|
81
|
+
await services.web.search({ query: '"Stripe" careers' });
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
70
86
|
## Parallel Query Permutations
|
|
71
87
|
|
|
72
88
|
Always run multiple query variations for better coverage.
|
|
@@ -87,17 +103,17 @@ const allResults = await services.web.batchSearch({
|
|
|
87
103
|
const uniqueLinks = [...new Set(allResults.flatMap((r) => r.results.map((x) => x.link)))];
|
|
88
104
|
```
|
|
89
105
|
|
|
90
|
-
| Use Case | Permutation Ideas
|
|
91
|
-
| -------------- |
|
|
92
|
-
| Person search | Full name, initials, nicknames, with/without middle name
|
|
93
|
-
| Company search |
|
|
94
|
-
| Title search | CEO/Founder/Chief, VP/Director, formal/informal titles
|
|
106
|
+
| Use Case | Permutation Ideas |
|
|
107
|
+
| -------------- | --------------------------------------------------------------------------- |
|
|
108
|
+
| Person search | Full name, initials, nicknames, with/without middle name |
|
|
109
|
+
| Company search | Prefer verified domain first; use name variants only for off-site discovery |
|
|
110
|
+
| Title search | CEO/Founder/Chief, VP/Director, formal/informal titles |
|
|
95
111
|
|
|
96
112
|
---
|
|
97
113
|
|
|
98
114
|
## Google Dorking
|
|
99
115
|
|
|
100
|
-
Use `site:` and `inurl:` to target specific platforms.
|
|
116
|
+
Use `site:` and `inurl:` to target specific platforms and verified company domains.
|
|
101
117
|
|
|
102
118
|
| Platform | Dork | Example |
|
|
103
119
|
| ------------------ | --------------------------- | -------------------------------------------- |
|
|
@@ -107,20 +123,19 @@ Use `site:` and `inurl:` to target specific platforms.
|
|
|
107
123
|
| Reddit | `site:reddit.com` | `site:reddit.com/r/sales "cold email"` |
|
|
108
124
|
|
|
109
125
|
```ts
|
|
110
|
-
// Find company
|
|
111
|
-
const
|
|
126
|
+
// Find company subpages from a verified domain
|
|
127
|
+
const domain = "stripe.com";
|
|
112
128
|
const queries = [
|
|
113
|
-
`
|
|
114
|
-
`
|
|
115
|
-
`
|
|
116
|
-
`
|
|
117
|
-
`stripe.com site:linkedin.com/in`
|
|
129
|
+
`site:${domain} inurl:team OR inurl:about OR inurl:leadership`,
|
|
130
|
+
`site:${domain} inurl:careers OR inurl:jobs`,
|
|
131
|
+
`site:${domain} inurl:blog OR inurl:news OR inurl:press`,
|
|
132
|
+
`site:${domain} inurl:contact OR inurl:locations`
|
|
118
133
|
];
|
|
119
134
|
|
|
120
135
|
const results = await services.web.batchSearch({
|
|
121
136
|
queries: queries.map((query) => ({ query }))
|
|
122
137
|
});
|
|
123
|
-
const
|
|
138
|
+
const subpages = [...new Set(results.flatMap((r) => r.results.map((x) => x.link)))];
|
|
124
139
|
```
|
|
125
140
|
|
|
126
141
|
---
|