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.

Files changed (34) hide show
  1. package/README.md +3 -1
  2. package/dist/careers.d.ts +47 -0
  3. package/dist/careers.js +11 -0
  4. package/dist/index.d.ts +41 -0
  5. package/dist/index.js +29 -3
  6. package/dist/integrations.d.ts +60 -0
  7. package/dist/integrations.js +106 -0
  8. package/dist/ocean.d.ts +160 -0
  9. package/dist/ocean.js +23 -0
  10. package/dist/skills.d.ts +57 -0
  11. package/dist/skills.js +33 -0
  12. package/docs/data-enrichement/index.md +10 -2
  13. package/docs/integrations/gmail/createDraft.md +54 -0
  14. package/docs/integrations/gmail/fetchEmails.md +50 -0
  15. package/docs/integrations/gmail/fetchMessageByMessageId.md +36 -0
  16. package/docs/integrations/gmail/fetchMessageByThreadId.md +37 -0
  17. package/docs/integrations/gmail/getProfile.md +37 -0
  18. package/docs/integrations/gmail/index.md +19 -2
  19. package/docs/integrations/gmail/listLabels.md +34 -0
  20. package/docs/integrations/gmail/replyToThread.md +51 -0
  21. package/docs/integrations/index.md +14 -1
  22. package/docs/lookalike-search/index.md +24 -12
  23. package/docs/prospecting/index.md +2 -2
  24. package/docs/services/builtWith/index.md +2 -2
  25. package/docs/services/company/findCareersPage.md +137 -0
  26. package/docs/services/company/findCareersPage.ts +37 -0
  27. package/docs/services/company/linkedin/enrich.md +47 -1
  28. package/docs/services/company/scrapeCareersPage.md +150 -0
  29. package/docs/services/index.md +2 -2
  30. package/docs/services/ocean/search/companies.ts +122 -119
  31. package/docs/services/person/linkedin/findUrl.md +2 -2
  32. package/docs/services/predictLeads/companyJobOpenings.ts +168 -94
  33. package/docs/services/web/search.md +29 -14
  34. 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
- /** Company's ID or domain. */
8
- company_id_or_domain: string;
9
- /** 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. */
10
- active_only?: boolean;
11
- /** Similar to `active_only`, but without considering `last_seen_at` timestamp. */
12
- not_closed?: boolean;
13
- /** Only return `JobOpenings` first seen after given date (ISO 8601). */
14
- first_seen_at_from?: string;
15
- /** Only return `JobOpenings` first seen before given date (ISO 8601). */
16
- first_seen_at_until?: string;
17
- /** Only return `JobOpenings` last seen after given date (ISO 8601). */
18
- last_seen_at_from?: string;
19
- /** Only return `JobOpenings` last seen before given date (ISO 8601). */
20
- last_seen_at_until?: string;
21
- /** Only return JobOpenings that have description. */
22
- with_description_only?: boolean;
23
- /** Only return JobOpenings that have location. */
24
- with_location_only?: boolean;
25
- /** Comma-separated (,) `JobOpening` categories. */
26
- categories?: Array<"administration" | "consulting" | "data_analysis" | "design" | "directors" | "education" | "engineering" | "finance" | "healthcare_services" | "human_resources" | "information_technology" | "internship" | "legal" | "management" | "marketing" | "military_and_protective_services" | "operations" | "purchasing" | "product_management" | "quality_assurance" | "real_estate" | "research" | "sales" | "software_development" | "support" | "manual_work" | "food">;
27
- /** Page number of shown items. **NOTE**: If the parameter is not provided, the meta property `count` will be omitted from response for performance reasons. */
28
- page?: number;
29
- /** Limit the number of shown items per page. */
30
- limit?: number;
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
- data: Array<{
33
- id: string;
34
- type: "job_opening";
35
- attributes: {
36
- title: string;
37
- description: string | null;
38
- url: string;
39
- first_seen_at: string;
40
- last_seen_at: string;
41
- last_processed_at: string;
42
- contract_types: Array<Record<string, unknown>>;
43
- categories: Array<"administration" | "consulting" | "data_analysis" | "design" | "directors" | "education" | "engineering" | "finance" | "healthcare_services" | "human_resources" | "information_technology" | "internship" | "legal" | "management" | "marketing" | "military_and_protective_services" | "operations" | "purchasing" | "product_management" | "quality_assurance" | "real_estate" | "research" | "sales" | "software_development" | "support" | "manual_work" | "food">;
44
- onet_data: {
45
- code: string | null;
46
- family: string | null;
47
- occupation_name: string | null;
48
- };
49
- posted_at: string | null;
50
- recruiter_data: {
51
- name: string | null;
52
- title: string | null;
53
- contact: string | null;
54
- };
55
- salary: string | null;
56
- salary_data: {
57
- salary_low: number | null;
58
- salary_high: number | null;
59
- salary_currency: string | null;
60
- salary_low_usd: number | null;
61
- salary_high_usd: number | null;
62
- salary_time_unit: "hour" | "day" | "week" | "month" | "year" | null;
63
- };
64
- seniority: "not_set" | "founder" | "c_level" | "partner" | "president" | "vice_president" | "head" | "director" | "manager" | "mid_senior" | "junior" | "non_manager";
65
- status: "closed" | null;
66
- language: string | null;
67
- location: string | null;
68
- location_data: Array<{
69
- city: unknown;
70
- state: unknown;
71
- zip_code: unknown;
72
- country: unknown;
73
- region: unknown;
74
- continent: unknown;
75
- fuzzy_match: unknown;
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 | Full name, abbreviations, domain, Inc/LLC variations |
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 employees with multiple dork variations
111
- const company = "Stripe";
126
+ // Find company subpages from a verified domain
127
+ const domain = "stripe.com";
112
128
  const queries = [
113
- `"${company}" site:linkedin.com/in`,
114
- `"${company}" CEO OR Founder site:linkedin.com/in`,
115
- `"${company}" VP OR Director site:linkedin.com/in`,
116
- `"${company}" Engineer site:linkedin.com/in`,
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 profiles = [...new Set(results.flatMap((r) => r.results.map((x) => x.link)))];
138
+ const subpages = [...new Set(results.flatMap((r) => r.results.map((x) => x.link)))];
124
139
  ```
125
140
 
126
141
  ---
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "orangeslice",
3
- "version": "2.1.5",
3
+ "version": "2.3.0-beta.0",
4
4
  "description": "B2B LinkedIn database prospector - 1.15B profiles, 85M companies",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",