jd-intel 0.6.0 → 0.8.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.
- package/README.md +52 -39
- package/package.json +7 -3
- package/registry/ashby.json +35 -15
- package/registry/greenhouse.json +129 -77
- package/registry/lever.json +30 -15
- package/registry/recruitee.json +23 -11
- package/registry/smartrecruiters.json +28 -11
- package/registry/teamtailor.json +31 -16
- package/registry/workday.json +27 -6
- package/src/adapters/smartrecruiters.js +6 -1
- package/src/index.js +6 -1
- package/src/registry.js +70 -20
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
> **Stop pasting job descriptions into AI assistants. Let your AI fetch them directly.**
|
|
11
11
|
|
|
12
|
-
Full text. Clean structure. Across
|
|
12
|
+
Full text. Clean structure. Across seven major ATS. No copy-paste. No context loss.
|
|
13
13
|
|
|
14
14
|
---
|
|
15
15
|
|
|
@@ -40,9 +40,9 @@ Done.
|
|
|
40
40
|
Because scraping breaks where jd-intel doesn't:
|
|
41
41
|
|
|
42
42
|
- **Full JDs when browsing fails.** SPA-rendered boards, slow loads, auth walls, and geo-restrictions block a browser. They don't block a public API call.
|
|
43
|
-
- **Structured data, not HTML soup.** Salary, location type, department, and clean markdown, normalized across
|
|
43
|
+
- **Structured data, not HTML soup.** Salary, location type, department, and clean markdown, normalized across seven ATS.
|
|
44
44
|
- **No keys, no browser.** Public APIs only. Runs anywhere your AI does.
|
|
45
|
-
- **One schema, every platform.** Greenhouse, Lever, Ashby, SmartRecruiters,
|
|
45
|
+
- **One schema, every platform.** Greenhouse, Lever, Ashby, SmartRecruiters, Teamtailor, Recruitee, Workday return the same shape.
|
|
46
46
|
|
|
47
47
|
---
|
|
48
48
|
|
|
@@ -60,34 +60,57 @@ The toolkit fetches. Your AI thinks.
|
|
|
60
60
|
|
|
61
61
|
## Install
|
|
62
62
|
|
|
63
|
-
Works with MCP-aware AI clients: Claude Desktop, Claude Code, Cursor, Windsurf. ChatGPT, Gemini, and other non-MCP clients don't support this yet. They use different tool-calling systems. (We wish they did. The protocol works the same way regardless of which AI you talk to.)
|
|
63
|
+
Works with MCP-aware AI clients: Claude Desktop, Claude Code, Cursor, Windsurf, VS Code. ChatGPT, Gemini, and other non-MCP clients don't support this yet. They use different tool-calling systems. (We wish they did. The protocol works the same way regardless of which AI you talk to.)
|
|
64
64
|
|
|
65
|
-
|
|
65
|
+
### Claude Desktop (one-file install, no terminal)
|
|
66
66
|
|
|
67
|
-
|
|
67
|
+
The simplest path. No Node.js, no terminal: Claude Desktop runs the server on its own bundled runtime.
|
|
68
68
|
|
|
69
|
-
1. **
|
|
70
|
-
|
|
71
|
-
|
|
69
|
+
1. **Download** the extension: [jd-intel.mcpb](https://github.com/prPMDev/jd-intel/releases/latest/download/jd-intel.mcpb).
|
|
70
|
+
2. In Claude Desktop, open **Settings**, then **Extensions**, then **Advanced settings**, and click **Install Extension**. Pick the file you downloaded.
|
|
71
|
+
3. Review the access summary, click **Install**, then start a new chat. The tools appear automatically.
|
|
72
72
|
|
|
73
|
-
|
|
74
|
-
```bash
|
|
75
|
-
npx jd-intel-mcp install
|
|
76
|
-
```
|
|
73
|
+
Shortcuts: drag the `.mcpb` onto the Settings window, or double-click it when your system opens `.mcpb` files with Claude Desktop. The extension is open source and unsigned, so Claude Desktop shows an "unverified" notice. Choose **Install Anyway**.
|
|
77
74
|
|
|
78
|
-
|
|
75
|
+
Prefer the terminal, or on an older Claude Desktop? Install [Node.js 18+](https://nodejs.org/), run `npx jd-intel-mcp install`, then reopen Claude Desktop. Or edit the config file directly, see [Manual install](#manual-install-fallback).
|
|
79
76
|
|
|
80
|
-
|
|
77
|
+
### Other clients (Claude Code, Cursor, Windsurf, VS Code)
|
|
81
78
|
|
|
82
|
-
|
|
79
|
+
One-file `.mcpb` install is a Claude Desktop feature; these clients run the same server via `npx` and need [Node.js 18+](https://nodejs.org/).
|
|
83
80
|
|
|
84
|
-
|
|
81
|
+
**Claude Code**
|
|
82
|
+
```bash
|
|
83
|
+
claude mcp add jd-intel -- npx -y jd-intel-mcp
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
**Cursor** (Settings, then Tools & MCP, then New MCP Server, or edit `~/.cursor/mcp.json`):
|
|
87
|
+
```json
|
|
88
|
+
{
|
|
89
|
+
"mcpServers": {
|
|
90
|
+
"jd-intel": { "command": "npx", "args": ["-y", "jd-intel-mcp"] }
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
**Windsurf** (Settings, then Tools, then Windsurf Settings, then Add Server, or View Raw Config to edit `mcp_config.json`). Use the same `mcpServers` block as Cursor, then press refresh.
|
|
96
|
+
|
|
97
|
+
**VS Code** (Copilot agent mode): run the **MCP: Add Server** command, or create `.vscode/mcp.json`. The key is `servers` and the type is `stdio`:
|
|
98
|
+
```json
|
|
99
|
+
{
|
|
100
|
+
"servers": {
|
|
101
|
+
"jd-intel": { "type": "stdio", "command": "npx", "args": ["-y", "jd-intel-mcp"] }
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Confirm it's working
|
|
85
107
|
|
|
86
|
-
|
|
87
|
-
- Cursor: [docs.cursor.com](https://docs.cursor.com)
|
|
88
|
-
- Windsurf: [docs.windsurf.com](https://docs.windsurf.com)
|
|
108
|
+
Start a new chat and ask: **"What fintech companies are in your jd-intel registry?"** If it lists companies, you're set. Then try the real thing: *"Find senior PM roles open right now that I'd be a fit for."*
|
|
89
109
|
|
|
90
|
-
|
|
110
|
+
**Tools not appearing?**
|
|
111
|
+
- Fully quit and reopen the client (quit, do not just close the window). Claude Desktop: system tray then Quit (Windows), or ⌘Q (macOS).
|
|
112
|
+
- For npx clients (Claude Code, Cursor, Windsurf, VS Code), run `npx clear-npx-cache`, then restart.
|
|
113
|
+
- Confirm `node --version` is 18 or newer for the npx paths. The one-click `.mcpb` does not need Node.
|
|
91
114
|
|
|
92
115
|
### For developers
|
|
93
116
|
|
|
@@ -133,21 +156,11 @@ Restart Claude Desktop.
|
|
|
133
156
|
|
|
134
157
|
### Updating
|
|
135
158
|
|
|
136
|
-
`
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
npx clear-npx-cache
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
Then quit and reopen Claude Desktop.
|
|
159
|
+
- **Claude Desktop extension (`.mcpb`):** install a newer `.mcpb` over the current one, or manage it in Settings, then Extensions. Remove and reinstall to reset.
|
|
160
|
+
- **npx clients (Claude Code, Cursor, Windsurf, VS Code):** `npx -y jd-intel-mcp` picks up new versions from npm's cache (within ~24h). Force it now with `npx clear-npx-cache`, then restart the client.
|
|
161
|
+
- **Library or CLI:** `npm install jd-intel@latest` (force latest) or `npm update jd-intel` (respect semver).
|
|
143
162
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
```bash
|
|
147
|
-
npm install jd-intel@latest # force latest
|
|
148
|
-
# or
|
|
149
|
-
npm update jd-intel # respect semver
|
|
150
|
-
```
|
|
163
|
+
The company registry refreshes on its own: jd-intel fetches the current list at startup and falls back to the bundled copy offline, so new companies show up without reinstalling.
|
|
151
164
|
|
|
152
165
|
---
|
|
153
166
|
|
|
@@ -208,7 +221,7 @@ No custom parsing per company.
|
|
|
208
221
|
| Ashby | Shipped | Growing fast with startups |
|
|
209
222
|
| Lever | Shipped | Common at mid-stage companies |
|
|
210
223
|
| SmartRecruiters | Shipped | Enterprise and mid-market |
|
|
211
|
-
|
|
|
224
|
+
| Teamtailor | Shipped | European startups and scale-ups |
|
|
212
225
|
| Recruitee | Shipped | Dutch / EU SMBs and scale-ups |
|
|
213
226
|
| Workday | Shipped | Large enterprises (registry-keyed) |
|
|
214
227
|
| Personio | Planned | German / EU mid-market |
|
|
@@ -236,17 +249,17 @@ All filters AND together. Deep dive on patterns and gotchas: [docs/filters.md](d
|
|
|
236
249
|
|
|
237
250
|
**Shipped**
|
|
238
251
|
- Library, CLI, and MCP server (three surfaces of one toolkit)
|
|
239
|
-
- Greenhouse, Ashby, Lever, SmartRecruiters,
|
|
252
|
+
- Greenhouse, Ashby, Lever, SmartRecruiters, Teamtailor, Recruitee, Workday adapters
|
|
240
253
|
- Title, topic, location, and date filters
|
|
241
254
|
- Salary extraction from JD text
|
|
242
|
-
- Verified company registry (
|
|
255
|
+
- Verified company registry (300+ companies)
|
|
243
256
|
|
|
244
257
|
**Next**
|
|
245
258
|
- Personio adapter (German / EU mid-market)
|
|
259
|
+
- Workable adapter (widget API; broad SMB coverage)
|
|
246
260
|
- Anthropic MCP marketplace submission
|
|
247
261
|
|
|
248
262
|
**Planned**
|
|
249
|
-
- Workable adapter (parked — needs SPA shortcode resolution)
|
|
250
263
|
- Temporal tracking (when roles open, close, reopen)
|
|
251
264
|
- Change detection
|
|
252
265
|
- Resume-aware fit scoring
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "jd-intel",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Fetch and normalize job descriptions across every major ATS (Greenhouse, Lever, Ashby, Workday, and more)
|
|
3
|
+
"version": "0.8.0",
|
|
4
|
+
"description": "Fetch and normalize job descriptions across every major ATS (Greenhouse, Lever, Ashby, Workday, and more), for your AI assistant. No copy-paste.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "src/index.js",
|
|
7
7
|
"bin": {
|
|
@@ -15,7 +15,11 @@
|
|
|
15
15
|
"scripts": {
|
|
16
16
|
"test": "node --test test/*.test.js",
|
|
17
17
|
"fetch": "node src/cli.js fetch",
|
|
18
|
-
"search": "node src/cli.js search"
|
|
18
|
+
"search": "node src/cli.js search",
|
|
19
|
+
"verify:registry": "node scripts/verify-registry.mjs",
|
|
20
|
+
"sync:registry-pages": "node scripts/sync-pages-registry.mjs",
|
|
21
|
+
"pack:mcpb": "node scripts/build-mcpb.mjs",
|
|
22
|
+
"smoke:mcpb": "node scripts/smoke-mcpb.mjs"
|
|
19
23
|
},
|
|
20
24
|
"keywords": [
|
|
21
25
|
"jobs",
|
package/registry/ashby.json
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
[
|
|
2
|
-
{"slug": "notion",
|
|
3
|
-
{"slug": "linear",
|
|
4
|
-
{"slug": "ramp",
|
|
5
|
-
{"slug": "resend",
|
|
6
|
-
{"slug": "clerk",
|
|
7
|
-
{"slug": "railway",
|
|
8
|
-
{"slug": "drata",
|
|
9
|
-
{"slug": "watershed",
|
|
10
|
-
{"slug": "persona",
|
|
11
|
-
{"slug": "stytch",
|
|
12
|
-
{"slug": "shiftkey",
|
|
13
|
-
{"slug": "gorgias",
|
|
14
|
-
{"slug": "zapier",
|
|
15
|
-
{"slug": "clickup",
|
|
2
|
+
{"slug": "notion", "name": "Notion", "sector": "productivity"},
|
|
3
|
+
{"slug": "linear", "name": "Linear", "sector": "developer tools"},
|
|
4
|
+
{"slug": "ramp", "name": "Ramp", "sector": "fintech"},
|
|
5
|
+
{"slug": "resend", "name": "Resend", "sector": "developer tools"},
|
|
6
|
+
{"slug": "clerk", "name": "Clerk", "sector": "developer tools"},
|
|
7
|
+
{"slug": "railway", "name": "Railway", "sector": "developer tools"},
|
|
8
|
+
{"slug": "drata", "name": "Drata", "sector": "security"},
|
|
9
|
+
{"slug": "watershed", "name": "Watershed", "sector": "climate tech"},
|
|
10
|
+
{"slug": "persona", "name": "Persona", "sector": "identity"},
|
|
11
|
+
{"slug": "stytch", "name": "Stytch", "sector": "identity"},
|
|
12
|
+
{"slug": "shiftkey", "name": "ShiftKey", "sector": "healthcare staffing"},
|
|
13
|
+
{"slug": "gorgias", "name": "Gorgias", "sector": "customer support"},
|
|
14
|
+
{"slug": "zapier", "name": "Zapier", "sector": "integration platform"},
|
|
15
|
+
{"slug": "clickup", "name": "ClickUp", "sector": "productivity"},
|
|
16
16
|
{"slug": "higharc", "name": "Higharc", "sector": "architecture tech"},
|
|
17
17
|
{"slug": "mural", "name": "Mural", "sector": "collaboration"},
|
|
18
18
|
{"slug": "ironcladhq", "name": "Ironclad", "sector": "legal tech"},
|
|
@@ -25,5 +25,25 @@
|
|
|
25
25
|
{"slug": "scan-com", "name": "Scan.com", "sector": "healthcare imaging"},
|
|
26
26
|
{"slug": "hiive", "name": "Hiive", "sector": "marketplaces"},
|
|
27
27
|
{"slug": "virtuous", "name": "Virtuous", "sector": "nonprofit crm"},
|
|
28
|
-
{"slug": "jasper ai", "name": "Jasper", "sector": "ai writing"}
|
|
28
|
+
{"slug": "jasper ai", "name": "Jasper", "sector": "ai writing"},
|
|
29
|
+
{"slug": "openai", "name": "OpenAI", "sector": "ai research / llms"},
|
|
30
|
+
{"slug": "harvey", "name": "Harvey", "sector": "legal ai"},
|
|
31
|
+
{"slug": "elevenlabs", "name": "ElevenLabs", "sector": "ai voice / audio"},
|
|
32
|
+
{"slug": "sierra", "name": "Sierra", "sector": "conversational ai"},
|
|
33
|
+
{"slug": "cohere", "name": "Cohere", "sector": "ai / llms"},
|
|
34
|
+
{"slug": "decagon", "name": "Decagon", "sector": "ai support agents"},
|
|
35
|
+
{"slug": "vanta", "name": "Vanta", "sector": "security compliance"},
|
|
36
|
+
{"slug": "cursor", "name": "Cursor", "sector": "ai dev tools"},
|
|
37
|
+
{"slug": "replit", "name": "Replit", "sector": "ai coding platform"},
|
|
38
|
+
{"slug": "etched", "name": "Etched", "sector": "ai hardware / chips"},
|
|
39
|
+
{"slug": "perplexity", "name": "Perplexity", "sector": "ai search"},
|
|
40
|
+
{"slug": "baseten", "name": "Baseten", "sector": "ml serving"},
|
|
41
|
+
{"slug": "deepgram", "name": "Deepgram", "sector": "speech ai"},
|
|
42
|
+
{"slug": "mercor", "name": "Mercor", "sector": "ai data / talent"},
|
|
43
|
+
{"slug": "writer", "name": "Writer", "sector": "enterprise gen-ai"},
|
|
44
|
+
{"slug": "supabase", "name": "Supabase", "sector": "backend / postgres"},
|
|
45
|
+
{"slug": "sentry", "name": "Sentry", "sector": "observability"},
|
|
46
|
+
{"slug": "cartesia", "name": "Cartesia", "sector": "voice ai"},
|
|
47
|
+
{"slug": "workos", "name": "WorkOS", "sector": "auth / sso dev tools"},
|
|
48
|
+
{"slug": "posthog", "name": "PostHog", "sector": "product analytics"}
|
|
29
49
|
]
|
package/registry/greenhouse.json
CHANGED
|
@@ -1,79 +1,131 @@
|
|
|
1
1
|
[
|
|
2
|
-
{"slug": "stripe",
|
|
3
|
-
{"slug": "airbnb",
|
|
4
|
-
{"slug": "twitch",
|
|
5
|
-
{"slug": "pinterest",
|
|
6
|
-
{"slug": "cloudflare",
|
|
7
|
-
{"slug": "databricks",
|
|
8
|
-
{"slug": "figma",
|
|
9
|
-
{"slug": "airtable",
|
|
10
|
-
{"slug": "gusto",
|
|
11
|
-
{"slug": "brex",
|
|
12
|
-
{"slug": "vercel",
|
|
13
|
-
{"slug": "cockroachlabs",
|
|
14
|
-
{"slug": "datadog",
|
|
15
|
-
{"slug": "elastic",
|
|
16
|
-
{"slug": "reddit",
|
|
17
|
-
{"slug": "squarespace",
|
|
18
|
-
{"slug": "toast",
|
|
19
|
-
{"slug": "roku",
|
|
20
|
-
{"slug": "webflow",
|
|
21
|
-
{"slug": "mercury",
|
|
22
|
-
{"slug": "amplitude",
|
|
23
|
-
{"slug": "mixpanel",
|
|
24
|
-
{"slug": "expel",
|
|
25
|
-
{"slug": "calendly",
|
|
26
|
-
{"slug": "lattice",
|
|
27
|
-
{"slug": "samsara",
|
|
28
|
-
{"slug": "twilio",
|
|
29
|
-
{"slug": "pagerduty",
|
|
30
|
-
{"slug": "contentful",
|
|
31
|
-
{"slug": "sendbird",
|
|
32
|
-
{"slug": "workato",
|
|
33
|
-
{"slug": "merge",
|
|
34
|
-
{"slug": "pandadoc",
|
|
35
|
-
{"slug": "fivetran",
|
|
36
|
-
{"slug": "securityscorecard",
|
|
37
|
-
{"slug": "invoca",
|
|
38
|
-
{"slug": "intercom",
|
|
39
|
-
{"slug": "dialpad",
|
|
40
|
-
{"slug": "salesloft",
|
|
41
|
-
{"slug": "klaviyo",
|
|
42
|
-
{"slug": "cleo",
|
|
43
|
-
{"slug": "braze",
|
|
44
|
-
{"slug": "appsflyer",
|
|
45
|
-
{"slug": "attentive",
|
|
46
|
-
{"slug": "iterable",
|
|
47
|
-
{"slug": "nextroll", "name": "NextRoll",
|
|
48
|
-
{"slug": "cloudbeds", "name": "Cloudbeds",
|
|
49
|
-
{"slug": "headspacesourcing", "name": "Headspace (Sourcing)",
|
|
50
|
-
{"slug": "fleetio", "name": "Fleetio",
|
|
51
|
-
{"slug": "engine", "name": "Engine",
|
|
52
|
-
{"slug": "axon", "name": "Axon",
|
|
53
|
-
{"slug": "sparrow", "name": "Sparrow",
|
|
54
|
-
{"slug": "remotecom", "name": "Remote",
|
|
55
|
-
{"slug": "weedmaps77", "name": "Weedmaps",
|
|
56
|
-
{"slug": "patterndata", "name": "Pattern",
|
|
57
|
-
{"slug": "tubitv", "name": "Tubi",
|
|
58
|
-
{"slug": "future", "name": "Future",
|
|
59
|
-
{"slug": "eltropyinc", "name": "Eltropy",
|
|
60
|
-
{"slug": "ziprecruiter", "name": "ZipRecruiter",
|
|
61
|
-
{"slug": "cognitiv", "name": "Cognitiv",
|
|
62
|
-
{"slug": "maintainx", "name": "MaintainX",
|
|
63
|
-
{"slug": "betterhelpcom", "name": "BetterHelp",
|
|
64
|
-
{"slug": "shopmonkey", "name": "Shopmonkey",
|
|
65
|
-
{"slug": "ezcaterinc", "name": "ezCater",
|
|
66
|
-
{"slug": "trivelta", "name": "TriVelta",
|
|
67
|
-
{"slug": "firstconnectinsurance", "name": "First Connect Insurance",
|
|
68
|
-
{"slug": "justworks", "name": "Justworks",
|
|
69
|
-
{"slug": "starrez", "name": "StarRez",
|
|
70
|
-
{"slug": "upstart", "name": "Upstart",
|
|
71
|
-
{"slug": "affirm", "name": "Affirm",
|
|
72
|
-
{"slug": "houseaccount", "name": "House Account",
|
|
73
|
-
{"slug": "appdirect", "name": "AppDirect",
|
|
74
|
-
{"slug": "rubrik", "name": "Rubrik",
|
|
75
|
-
{"slug": "asana", "name": "Asana",
|
|
76
|
-
{"slug": "instacart", "name": "Instacart",
|
|
77
|
-
{"slug": "discord", "name": "Discord",
|
|
78
|
-
{"slug": "hs", "name": "Headspace",
|
|
2
|
+
{"slug": "stripe", "name": "Stripe", "sector": "fintech"},
|
|
3
|
+
{"slug": "airbnb", "name": "Airbnb", "sector": "travel"},
|
|
4
|
+
{"slug": "twitch", "name": "Twitch", "sector": "media"},
|
|
5
|
+
{"slug": "pinterest", "name": "Pinterest", "sector": "social"},
|
|
6
|
+
{"slug": "cloudflare", "name": "Cloudflare", "sector": "infrastructure"},
|
|
7
|
+
{"slug": "databricks", "name": "Databricks", "sector": "data"},
|
|
8
|
+
{"slug": "figma", "name": "Figma", "sector": "design tools"},
|
|
9
|
+
{"slug": "airtable", "name": "Airtable", "sector": "productivity"},
|
|
10
|
+
{"slug": "gusto", "name": "Gusto", "sector": "hr tech"},
|
|
11
|
+
{"slug": "brex", "name": "Brex", "sector": "fintech"},
|
|
12
|
+
{"slug": "vercel", "name": "Vercel", "sector": "developer tools"},
|
|
13
|
+
{"slug": "cockroachlabs", "name": "Cockroach Labs", "sector": "database"},
|
|
14
|
+
{"slug": "datadog", "name": "Datadog", "sector": "observability"},
|
|
15
|
+
{"slug": "elastic", "name": "Elastic", "sector": "search"},
|
|
16
|
+
{"slug": "reddit", "name": "Reddit", "sector": "social"},
|
|
17
|
+
{"slug": "squarespace", "name": "Squarespace", "sector": "web platform"},
|
|
18
|
+
{"slug": "toast", "name": "Toast", "sector": "restaurant tech"},
|
|
19
|
+
{"slug": "roku", "name": "Roku", "sector": "media"},
|
|
20
|
+
{"slug": "webflow", "name": "Webflow", "sector": "web platform"},
|
|
21
|
+
{"slug": "mercury", "name": "Mercury", "sector": "fintech"},
|
|
22
|
+
{"slug": "amplitude", "name": "Amplitude", "sector": "analytics"},
|
|
23
|
+
{"slug": "mixpanel", "name": "Mixpanel", "sector": "analytics"},
|
|
24
|
+
{"slug": "expel", "name": "Expel", "sector": "security"},
|
|
25
|
+
{"slug": "calendly", "name": "Calendly", "sector": "productivity"},
|
|
26
|
+
{"slug": "lattice", "name": "Lattice", "sector": "hr tech"},
|
|
27
|
+
{"slug": "samsara", "name": "Samsara", "sector": "iot"},
|
|
28
|
+
{"slug": "twilio", "name": "Twilio", "sector": "communications"},
|
|
29
|
+
{"slug": "pagerduty", "name": "PagerDuty", "sector": "devops"},
|
|
30
|
+
{"slug": "contentful", "name": "Contentful", "sector": "cms"},
|
|
31
|
+
{"slug": "sendbird", "name": "Sendbird", "sector": "communications"},
|
|
32
|
+
{"slug": "workato", "name": "Workato", "sector": "integration platform"},
|
|
33
|
+
{"slug": "merge", "name": "Merge", "sector": "integration platform"},
|
|
34
|
+
{"slug": "pandadoc", "name": "PandaDoc", "sector": "sales tech"},
|
|
35
|
+
{"slug": "fivetran", "name": "Fivetran", "sector": "data integration"},
|
|
36
|
+
{"slug": "securityscorecard", "name": "SecurityScorecard", "sector": "security"},
|
|
37
|
+
{"slug": "invoca", "name": "Invoca", "sector": "marketing tech"},
|
|
38
|
+
{"slug": "intercom", "name": "Intercom", "sector": "customer support"},
|
|
39
|
+
{"slug": "dialpad", "name": "Dialpad", "sector": "communications"},
|
|
40
|
+
{"slug": "salesloft", "name": "Salesloft", "sector": "sales tech"},
|
|
41
|
+
{"slug": "klaviyo", "name": "Klaviyo", "sector": "marketing tech"},
|
|
42
|
+
{"slug": "cleo", "name": "Cleo", "sector": "fintech"},
|
|
43
|
+
{"slug": "braze", "name": "Braze", "sector": "marketing tech"},
|
|
44
|
+
{"slug": "appsflyer", "name": "AppsFlyer", "sector": "marketing tech"},
|
|
45
|
+
{"slug": "attentive", "name": "Attentive", "sector": "marketing tech"},
|
|
46
|
+
{"slug": "iterable", "name": "Iterable", "sector": "marketing tech"},
|
|
47
|
+
{"slug": "nextroll", "name": "NextRoll", "sector": "adtech"},
|
|
48
|
+
{"slug": "cloudbeds", "name": "Cloudbeds", "sector": "hospitality tech"},
|
|
49
|
+
{"slug": "headspacesourcing", "name": "Headspace (Sourcing)", "sector": "mental health"},
|
|
50
|
+
{"slug": "fleetio", "name": "Fleetio", "sector": "fleet management"},
|
|
51
|
+
{"slug": "engine", "name": "Engine", "sector": "travel tech"},
|
|
52
|
+
{"slug": "axon", "name": "Axon", "sector": "public safety"},
|
|
53
|
+
{"slug": "sparrow", "name": "Sparrow", "sector": "hr tech"},
|
|
54
|
+
{"slug": "remotecom", "name": "Remote", "sector": "hr tech"},
|
|
55
|
+
{"slug": "weedmaps77", "name": "Weedmaps", "sector": "cannabis"},
|
|
56
|
+
{"slug": "patterndata", "name": "Pattern", "sector": "ecommerce data"},
|
|
57
|
+
{"slug": "tubitv", "name": "Tubi", "sector": "streaming"},
|
|
58
|
+
{"slug": "future", "name": "Future", "sector": "fitness"},
|
|
59
|
+
{"slug": "eltropyinc", "name": "Eltropy", "sector": "fintech"},
|
|
60
|
+
{"slug": "ziprecruiter", "name": "ZipRecruiter", "sector": "recruiting tech"},
|
|
61
|
+
{"slug": "cognitiv", "name": "Cognitiv", "sector": "adtech"},
|
|
62
|
+
{"slug": "maintainx", "name": "MaintainX", "sector": "industrial saas"},
|
|
63
|
+
{"slug": "betterhelpcom", "name": "BetterHelp", "sector": "mental health"},
|
|
64
|
+
{"slug": "shopmonkey", "name": "Shopmonkey", "sector": "automotive saas"},
|
|
65
|
+
{"slug": "ezcaterinc", "name": "ezCater", "sector": "food tech"},
|
|
66
|
+
{"slug": "trivelta", "name": "TriVelta", "sector": "saas"},
|
|
67
|
+
{"slug": "firstconnectinsurance", "name": "First Connect Insurance", "sector": "insurtech"},
|
|
68
|
+
{"slug": "justworks", "name": "Justworks", "sector": "hr tech"},
|
|
69
|
+
{"slug": "starrez", "name": "StarRez", "sector": "property management"},
|
|
70
|
+
{"slug": "upstart", "name": "Upstart", "sector": "fintech"},
|
|
71
|
+
{"slug": "affirm", "name": "Affirm", "sector": "fintech"},
|
|
72
|
+
{"slug": "houseaccount", "name": "House Account", "sector": "saas"},
|
|
73
|
+
{"slug": "appdirect", "name": "AppDirect", "sector": "cloud commerce"},
|
|
74
|
+
{"slug": "rubrik", "name": "Rubrik", "sector": "security"},
|
|
75
|
+
{"slug": "asana", "name": "Asana", "sector": "productivity"},
|
|
76
|
+
{"slug": "instacart", "name": "Instacart", "sector": "grocery delivery"},
|
|
77
|
+
{"slug": "discord", "name": "Discord", "sector": "social"},
|
|
78
|
+
{"slug": "hs", "name": "Headspace", "sector": "mental health"},
|
|
79
|
+
{"slug": "anthropic", "name": "Anthropic", "sector": "ai lab"},
|
|
80
|
+
{"slug": "okta", "name": "Okta", "sector": "security"},
|
|
81
|
+
{"slug": "verkada", "name": "Verkada", "sector": "physical security / iot"},
|
|
82
|
+
{"slug": "coreweave", "name": "CoreWeave", "sector": "ai cloud / gpu"},
|
|
83
|
+
{"slug": "block", "name": "Block", "sector": "fintech"},
|
|
84
|
+
{"slug": "adyen", "name": "Adyen", "sector": "payments"},
|
|
85
|
+
{"slug": "sezzle", "name": "Sezzle", "sector": "bnpl"},
|
|
86
|
+
{"slug": "scaleai", "name": "Scale AI", "sector": "ai data"},
|
|
87
|
+
{"slug": "clickhouse", "name": "ClickHouse", "sector": "database"},
|
|
88
|
+
{"slug": "gleanwork", "name": "Glean", "sector": "ai search"},
|
|
89
|
+
{"slug": "robinhood", "name": "Robinhood", "sector": "fintech"},
|
|
90
|
+
{"slug": "boxinc", "name": "Box", "sector": "productivity"},
|
|
91
|
+
{"slug": "gitlab", "name": "GitLab", "sector": "dev tools"},
|
|
92
|
+
{"slug": "postman", "name": "Postman", "sector": "dev tools"},
|
|
93
|
+
{"slug": "sofi", "name": "SoFi", "sector": "fintech"},
|
|
94
|
+
{"slug": "smartsheet", "name": "Smartsheet", "sector": "productivity"},
|
|
95
|
+
{"slug": "nubank", "name": "Nubank", "sector": "fintech"},
|
|
96
|
+
{"slug": "flexport", "name": "Flexport", "sector": "logistics tech"},
|
|
97
|
+
{"slug": "coinbase", "name": "Coinbase", "sector": "fintech / crypto"},
|
|
98
|
+
{"slug": "grafanalabs", "name": "Grafana Labs", "sector": "observability"},
|
|
99
|
+
{"slug": "zoominfo", "name": "ZoomInfo", "sector": "sales tech"},
|
|
100
|
+
{"slug": "abnormalsecurity", "name": "Abnormal Security", "sector": "security"},
|
|
101
|
+
{"slug": "chime", "name": "Chime", "sector": "fintech"},
|
|
102
|
+
{"slug": "faire", "name": "Faire", "sector": "ecommerce"},
|
|
103
|
+
{"slug": "hightouch", "name": "Hightouch", "sector": "data"},
|
|
104
|
+
{"slug": "dropbox", "name": "Dropbox", "sector": "productivity"},
|
|
105
|
+
{"slug": "togetherai", "name": "Together AI", "sector": "ai cloud"},
|
|
106
|
+
{"slug": "fireblocks", "name": "Fireblocks", "sector": "fintech"},
|
|
107
|
+
{"slug": "carta", "name": "Carta", "sector": "fintech"},
|
|
108
|
+
{"slug": "temporaltechnologies", "name": "Temporal", "sector": "dev tools"},
|
|
109
|
+
{"slug": "fastly", "name": "Fastly", "sector": "infrastructure"},
|
|
110
|
+
{"slug": "snorkelai", "name": "Snorkel AI", "sector": "ai data"},
|
|
111
|
+
{"slug": "launchdarkly", "name": "LaunchDarkly", "sector": "dev tools"},
|
|
112
|
+
{"slug": "pendo", "name": "Pendo", "sector": "product analytics"},
|
|
113
|
+
{"slug": "huntress", "name": "Huntress", "sector": "security"},
|
|
114
|
+
{"slug": "dbtlabsinc", "name": "dbt Labs", "sector": "data"},
|
|
115
|
+
{"slug": "tailscale", "name": "Tailscale", "sector": "networking"},
|
|
116
|
+
{"slug": "marqeta", "name": "Marqeta", "sector": "fintech"},
|
|
117
|
+
{"slug": "fireworksai", "name": "Fireworks AI", "sector": "ai inference"},
|
|
118
|
+
{"slug": "betterment", "name": "Betterment", "sector": "fintech"},
|
|
119
|
+
{"slug": "gemini", "name": "Gemini", "sector": "fintech / crypto"},
|
|
120
|
+
{"slug": "billcom", "name": "Bill.com", "sector": "fintech"},
|
|
121
|
+
{"slug": "yugabyte", "name": "YugabyteDB", "sector": "database"},
|
|
122
|
+
{"slug": "starburst", "name": "Starburst", "sector": "data"},
|
|
123
|
+
{"slug": "dashlane", "name": "Dashlane", "sector": "security"},
|
|
124
|
+
{"slug": "circleci", "name": "CircleCI", "sector": "dev tools"},
|
|
125
|
+
{"slug": "labelbox", "name": "Labelbox", "sector": "ai data"},
|
|
126
|
+
{"slug": "planetscale", "name": "PlanetScale", "sector": "database"},
|
|
127
|
+
{"slug": "modernhealth", "name": "Modern Health", "sector": "mental health"},
|
|
128
|
+
{"slug": "bitwarden", "name": "Bitwarden", "sector": "security"},
|
|
129
|
+
{"slug": "descript", "name": "Descript", "sector": "media tools"},
|
|
130
|
+
{"slug": "assemblyai", "name": "AssemblyAI", "sector": "ai speech"}
|
|
79
131
|
]
|
package/registry/lever.json
CHANGED
|
@@ -1,17 +1,32 @@
|
|
|
1
1
|
[
|
|
2
|
-
{"slug": "olo",
|
|
3
|
-
{"slug": "outreach",
|
|
4
|
-
{"slug": "whoop",
|
|
5
|
-
{"slug": "plaid",
|
|
6
|
-
{"slug": "clari",
|
|
7
|
-
{"slug": "netflix",
|
|
8
|
-
{"slug": "lever",
|
|
9
|
-
{"slug": "postman",
|
|
10
|
-
{"slug": "agiloft",
|
|
11
|
-
{"slug": "gohighlevel",
|
|
12
|
-
{"slug": "veeva",
|
|
13
|
-
{"slug": "caremessage",
|
|
14
|
-
{"slug": "rover",
|
|
15
|
-
{"slug": "LuminDigital",
|
|
16
|
-
{"slug": "redoxengine",
|
|
2
|
+
{"slug": "olo", "name": "Olo", "sector": "restaurant tech"},
|
|
3
|
+
{"slug": "outreach", "name": "Outreach", "sector": "sales tech"},
|
|
4
|
+
{"slug": "whoop", "name": "WHOOP", "sector": "wearables"},
|
|
5
|
+
{"slug": "plaid", "name": "Plaid", "sector": "fintech"},
|
|
6
|
+
{"slug": "clari", "name": "Clari", "sector": "sales tech"},
|
|
7
|
+
{"slug": "netflix", "name": "Netflix", "sector": "media"},
|
|
8
|
+
{"slug": "lever", "name": "Lever", "sector": "recruiting tech"},
|
|
9
|
+
{"slug": "postman", "name": "Postman", "sector": "developer tools"},
|
|
10
|
+
{"slug": "agiloft", "name": "Agiloft", "sector": "contract management"},
|
|
11
|
+
{"slug": "gohighlevel", "name": "HighLevel", "sector": "marketing saas"},
|
|
12
|
+
{"slug": "veeva", "name": "Veeva Systems", "sector": "life sciences"},
|
|
13
|
+
{"slug": "caremessage", "name": "CareMessage", "sector": "healthcare communications"},
|
|
14
|
+
{"slug": "rover", "name": "Rover", "sector": "pet care"},
|
|
15
|
+
{"slug": "LuminDigital", "name": "Lumin Digital", "sector": "fintech (banking)"},
|
|
16
|
+
{"slug": "redoxengine", "name": "Redox", "sector": "healthcare interop"},
|
|
17
|
+
{"slug": "lyrahealth", "name": "Lyra Health", "sector": "mental health benefits"},
|
|
18
|
+
{"slug": "palantir", "name": "Palantir", "sector": "data analytics / defense"},
|
|
19
|
+
{"slug": "mistral", "name": "Mistral AI", "sector": "ai / llms"},
|
|
20
|
+
{"slug": "spotify", "name": "Spotify", "sector": "audio streaming"},
|
|
21
|
+
{"slug": "shopback-2", "name": "ShopBack", "sector": "ecommerce rewards / fintech"},
|
|
22
|
+
{"slug": "tryjeeves", "name": "Jeeves", "sector": "fintech / corporate cards"},
|
|
23
|
+
{"slug": "AIFund", "name": "AI Fund", "sector": "ai venture studio"},
|
|
24
|
+
{"slug": "levelai", "name": "Level AI", "sector": "ai cx analytics"},
|
|
25
|
+
{"slug": "cloudwalk", "name": "CloudWalk", "sector": "fintech / payments"},
|
|
26
|
+
{"slug": "metaprise.ai", "name": "Metaprise", "sector": "b2b payments / ai"},
|
|
27
|
+
{"slug": "toptal", "name": "Toptal", "sector": "freelance marketplace"},
|
|
28
|
+
{"slug": "panopto", "name": "Panopto", "sector": "video saas"},
|
|
29
|
+
{"slug": "mulliganfunding", "name": "Mulligan Funding", "sector": "smb lending"},
|
|
30
|
+
{"slug": "immutable", "name": "Immutable", "sector": "web3 / blockchain gaming"},
|
|
31
|
+
{"slug": "fundrise", "name": "Fundrise", "sector": "real-estate investing"}
|
|
17
32
|
]
|
package/registry/recruitee.json
CHANGED
|
@@ -1,13 +1,25 @@
|
|
|
1
1
|
[
|
|
2
|
-
{"slug": "incentro",
|
|
3
|
-
{"slug": "channable",
|
|
4
|
-
{"slug": "vandebron",
|
|
5
|
-
{"slug": "effectory",
|
|
6
|
-
{"slug": "nmbrs",
|
|
7
|
-
{"slug": "shypple",
|
|
8
|
-
{"slug": "floryn",
|
|
9
|
-
{"slug": "bridgefund",
|
|
10
|
-
{"slug": "sendcloud",
|
|
11
|
-
{"slug": "brenger",
|
|
12
|
-
{"slug": "youwe",
|
|
2
|
+
{"slug": "incentro", "name": "Incentro", "sector": "it consultancy"},
|
|
3
|
+
{"slug": "channable", "name": "Channable", "sector": "ecommerce / feed management"},
|
|
4
|
+
{"slug": "vandebron", "name": "Vandebron", "sector": "energy"},
|
|
5
|
+
{"slug": "effectory", "name": "Effectory", "sector": "hr tech"},
|
|
6
|
+
{"slug": "nmbrs", "name": "Nmbrs", "sector": "hr / payroll"},
|
|
7
|
+
{"slug": "shypple", "name": "Shypple", "sector": "logistics / freight"},
|
|
8
|
+
{"slug": "floryn", "name": "Floryn", "sector": "fintech / financing"},
|
|
9
|
+
{"slug": "bridgefund", "name": "BridgeFund", "sector": "fintech / sme lending"},
|
|
10
|
+
{"slug": "sendcloud", "name": "Sendcloud", "sector": "shipping saas"},
|
|
11
|
+
{"slug": "brenger", "name": "Brenger", "sector": "logistics / delivery"},
|
|
12
|
+
{"slug": "youwe", "name": "Youwe", "sector": "digital commerce agency"},
|
|
13
|
+
{"slug": "trackman", "name": "Trackman A/S", "sector": "sports tech / hardware"},
|
|
14
|
+
{"slug": "fastned", "name": "Fastned", "sector": "ev charging / energy"},
|
|
15
|
+
{"slug": "iliabeauty", "name": "ILIA, Inc.", "sector": "beauty / cpg"},
|
|
16
|
+
{"slug": "livezoku", "name": "Zoku", "sector": "hospitality"},
|
|
17
|
+
{"slug": "optics11", "name": "Optics11", "sector": "photonics / deep tech"},
|
|
18
|
+
{"slug": "openmind", "name": "Constructive Dialogue Institute", "sector": "nonprofit / edtech"},
|
|
19
|
+
{"slug": "coreso", "name": "Coreso", "sector": "energy / power grid"},
|
|
20
|
+
{"slug": "agriplace", "name": "Simvia", "sector": "agritech saas"},
|
|
21
|
+
{"slug": "sovtech", "name": "Scrums.com", "sector": "software services"},
|
|
22
|
+
{"slug": "technicaengineeringgmbh", "name": "Technica Engineering", "sector": "automotive engineering"},
|
|
23
|
+
{"slug": "make", "name": "Make", "sector": "construction / property"},
|
|
24
|
+
{"slug": "luzmo", "name": "Luzmo", "sector": "embedded analytics saas"}
|
|
13
25
|
]
|
|
@@ -1,13 +1,30 @@
|
|
|
1
1
|
[
|
|
2
|
-
{"slug": "Visa",
|
|
3
|
-
{"slug": "Wise",
|
|
4
|
-
{"slug": "Wabtec",
|
|
5
|
-
{"slug": "Sutherland",
|
|
6
|
-
{"slug": "AveryDennison",
|
|
7
|
-
{"slug": "PublicStorage",
|
|
8
|
-
{"slug": "Sportradar",
|
|
9
|
-
{"slug": "Entain",
|
|
10
|
-
{"slug": "Picnic",
|
|
11
|
-
{"slug": "Hootsuite",
|
|
12
|
-
{"slug": "BusinessWire",
|
|
2
|
+
{"slug": "Visa", "name": "Visa", "sector": "payments"},
|
|
3
|
+
{"slug": "Wise", "name": "Wise", "sector": "fintech"},
|
|
4
|
+
{"slug": "Wabtec", "name": "Wabtec", "sector": "rail / industrial"},
|
|
5
|
+
{"slug": "Sutherland", "name": "Sutherland", "sector": "bpo / cx"},
|
|
6
|
+
{"slug": "AveryDennison", "name": "Avery Dennison", "sector": "materials"},
|
|
7
|
+
{"slug": "PublicStorage", "name": "Public Storage", "sector": "real estate"},
|
|
8
|
+
{"slug": "Sportradar", "name": "Sportradar", "sector": "sports data"},
|
|
9
|
+
{"slug": "Entain", "name": "Entain", "sector": "gaming"},
|
|
10
|
+
{"slug": "Picnic", "name": "Picnic", "sector": "grocery delivery"},
|
|
11
|
+
{"slug": "Hootsuite", "name": "Hootsuite", "sector": "social media management"},
|
|
12
|
+
{"slug": "BusinessWire", "name": "Business Wire", "sector": "pr / newswire"},
|
|
13
|
+
{"slug": "BoschGroup", "name": "Bosch Group", "sector": "industrial / engineering"},
|
|
14
|
+
{"slug": "alten", "name": "ALTEN", "sector": "engineering / IT consulting"},
|
|
15
|
+
{"slug": "MinorInternational", "name": "Minor International", "sector": "hospitality"},
|
|
16
|
+
{"slug": "westerndigital", "name": "Western Digital", "sector": "hardware / storage"},
|
|
17
|
+
{"slug": "ifs1", "name": "IFS", "sector": "enterprise software"},
|
|
18
|
+
{"slug": "aristanetworks", "name": "Arista Networks", "sector": "networking / cloud"},
|
|
19
|
+
{"slug": "linkedin3", "name": "LinkedIn", "sector": "professional network"},
|
|
20
|
+
{"slug": "xplor", "name": "Xplor", "sector": "payments / saas"},
|
|
21
|
+
{"slug": "InformaGroupPlc", "name": "Informa Group Plc", "sector": "media / events"},
|
|
22
|
+
{"slug": "JACOBSDOUWEEGBERTS", "name": "Jacobs Douwe Egberts", "sector": "cpg / food & beverage"},
|
|
23
|
+
{"slug": "AGTechnologies1", "name": "AG Technologies", "sector": "it services"},
|
|
24
|
+
{"slug": "standardbankgroup", "name": "Standard Bank Group", "sector": "banking"},
|
|
25
|
+
{"slug": "TheNielsenCompany", "name": "The Nielsen Company", "sector": "media / data"},
|
|
26
|
+
{"slug": "cityandcountyofsanfrancisco1", "name": "City & County of San Francisco", "sector": "government"},
|
|
27
|
+
{"slug": "DeltaElectronics", "name": "Delta Electronics", "sector": "electronics / power"},
|
|
28
|
+
{"slug": "PSLogistics", "name": "PS Logistics", "sector": "logistics"},
|
|
29
|
+
{"slug": "OECD", "name": "OECD", "sector": "intergovernmental"}
|
|
13
30
|
]
|
package/registry/teamtailor.json
CHANGED
|
@@ -1,18 +1,33 @@
|
|
|
1
1
|
[
|
|
2
|
-
{"slug": "polestar",
|
|
3
|
-
{"slug": "quinyx",
|
|
4
|
-
{"slug": "qliro",
|
|
5
|
-
{"slug": "tibber",
|
|
6
|
-
{"slug": "funnel",
|
|
7
|
-
{"slug": "anyfin",
|
|
8
|
-
{"slug": "hedvig",
|
|
9
|
-
{"slug": "juni",
|
|
10
|
-
{"slug": "bambuser",
|
|
11
|
-
{"slug": "karma",
|
|
12
|
-
{"slug": "mate",
|
|
13
|
-
{"slug": "billogram",
|
|
14
|
-
{"slug": "detectify",
|
|
15
|
-
{"slug": "storytel",
|
|
16
|
-
{"slug": "oneflow",
|
|
17
|
-
{"slug": "crunchbase",
|
|
2
|
+
{"slug": "polestar", "name": "Polestar", "sector": "automotive / ev"},
|
|
3
|
+
{"slug": "quinyx", "name": "Quinyx", "sector": "workforce management"},
|
|
4
|
+
{"slug": "qliro", "name": "Qliro", "sector": "payments"},
|
|
5
|
+
{"slug": "tibber", "name": "Tibber", "sector": "energy tech"},
|
|
6
|
+
{"slug": "funnel", "name": "Funnel", "sector": "marketing data"},
|
|
7
|
+
{"slug": "anyfin", "name": "Anyfin", "sector": "fintech"},
|
|
8
|
+
{"slug": "hedvig", "name": "Hedvig", "sector": "insurtech"},
|
|
9
|
+
{"slug": "juni", "name": "Juni", "sector": "fintech"},
|
|
10
|
+
{"slug": "bambuser", "name": "Bambuser", "sector": "live video commerce"},
|
|
11
|
+
{"slug": "karma", "name": "Karma", "sector": "sustainability"},
|
|
12
|
+
{"slug": "mate", "name": "Mate", "sector": "e-mobility"},
|
|
13
|
+
{"slug": "billogram", "name": "Billogram", "sector": "fintech / billing"},
|
|
14
|
+
{"slug": "detectify", "name": "Detectify", "sector": "security"},
|
|
15
|
+
{"slug": "storytel", "name": "Storytel", "sector": "audiobooks"},
|
|
16
|
+
{"slug": "oneflow", "name": "Oneflow", "sector": "contract management"},
|
|
17
|
+
{"slug": "crunchbase", "name": "Crunchbase", "sector": "company data"},
|
|
18
|
+
{"slug": "teamblue", "name": "team.blue", "sector": "web hosting / infrastructure"},
|
|
19
|
+
{"slug": "recruitgo", "name": "RecruitGo", "sector": "global eor / staffing"},
|
|
20
|
+
{"slug": "merlindigitalpartner-1613753675", "name": "Merlin Digital Partner", "sector": "tech recruitment"},
|
|
21
|
+
{"slug": "techseed", "name": "TechSeed", "sector": "tech staffing"},
|
|
22
|
+
{"slug": "nordicknotsab", "name": "Nordic Knots", "sector": "interior design / d2c"},
|
|
23
|
+
{"slug": "dfdsdenmark", "name": "DFDS Denmark", "sector": "shipping / logistics"},
|
|
24
|
+
{"slug": "career", "name": "Teamtailor", "sector": "hr tech / ats"},
|
|
25
|
+
{"slug": "ecoonline", "name": "EcoOnline", "sector": "ehs software"},
|
|
26
|
+
{"slug": "thestudio", "name": "THE/STUDIO", "sector": "custom manufacturing"},
|
|
27
|
+
{"slug": "tribes", "name": "TRIBES", "sector": "executive search"},
|
|
28
|
+
{"slug": "accrease", "name": "Accrease", "sector": "martech consultancy"},
|
|
29
|
+
{"slug": "finteqhub", "name": "FinteqHub", "sector": "fintech / payments"},
|
|
30
|
+
{"slug": "goodgamestudios", "name": "Goodgame Studios", "sector": "gaming"},
|
|
31
|
+
{"slug": "estonew", "name": "ESTO", "sector": "fintech / consumer credit"},
|
|
32
|
+
{"slug": "cigames", "name": "CI Games", "sector": "gaming"}
|
|
18
33
|
]
|
package/registry/workday.json
CHANGED
|
@@ -1,8 +1,29 @@
|
|
|
1
1
|
[
|
|
2
|
-
{"slug": "cisco",
|
|
3
|
-
{"slug": "salesforce",
|
|
4
|
-
{"slug": "bankofamerica",
|
|
5
|
-
{"slug": "adobe",
|
|
6
|
-
{"slug": "nvidia",
|
|
7
|
-
{"slug": "servicetitan",
|
|
2
|
+
{"slug": "cisco", "name": "Cisco", "sector": "networking", "config": {"tenant": "cisco", "env": "wd5", "site": "Cisco_Careers"}},
|
|
3
|
+
{"slug": "salesforce", "name": "Salesforce", "sector": "crm / saas", "config": {"tenant": "salesforce", "env": "wd12", "site": "External_Career_Site"}},
|
|
4
|
+
{"slug": "bankofamerica", "name": "Bank of America", "sector": "banking", "config": {"tenant": "ghr", "env": "wd1", "site": "Lateral-US"}},
|
|
5
|
+
{"slug": "adobe", "name": "Adobe", "sector": "creative software", "config": {"tenant": "adobe", "env": "wd5", "site": "external_experienced"}},
|
|
6
|
+
{"slug": "nvidia", "name": "Nvidia", "sector": "semiconductors", "config": {"tenant": "nvidia", "env": "wd5", "site": "NVIDIAExternalCareerSite"}},
|
|
7
|
+
{"slug": "servicetitan", "name": "ServiceTitan", "sector": "vertical saas", "config": {"tenant": "servicetitan", "env": "wd1", "site": "ServiceTitan"}},
|
|
8
|
+
{"slug": "cvshealth", "name": "CVS Health", "sector": "healthcare / pharmacy", "config": {"tenant": "cvshealth", "env": "wd1", "site": "CVS_Health_Careers"}},
|
|
9
|
+
{"slug": "target", "name": "Target", "sector": "retail", "config": {"tenant": "target", "env": "wd5", "site": "targetcareers"}},
|
|
10
|
+
{"slug": "rbc", "name": "Royal Bank of Canada", "sector": "banking", "config": {"tenant": "rbc", "env": "wd3", "site": "RBCGLOBAL1"}},
|
|
11
|
+
{"slug": "capitalone", "name": "Capital One", "sector": "banking / fintech", "config": {"tenant": "capitalone", "env": "wd12", "site": "Capital_One"}},
|
|
12
|
+
{"slug": "bmo", "name": "Bank of Montreal", "sector": "banking", "config": {"tenant": "bmo", "env": "wd3", "site": "External"}},
|
|
13
|
+
{"slug": "hpe", "name": "Hewlett Packard Enterprise", "sector": "enterprise tech", "config": {"tenant": "hpe", "env": "wd5", "site": "Jobsathpe"}},
|
|
14
|
+
{"slug": "mastercard", "name": "Mastercard", "sector": "payments", "config": {"tenant": "mastercard", "env": "wd1", "site": "CorporateCareers"}},
|
|
15
|
+
{"slug": "hp", "name": "HP Inc.", "sector": "personal computing", "config": {"tenant": "hp", "env": "wd5", "site": "ExternalCareerSite"}},
|
|
16
|
+
{"slug": "wolterskluwer", "name": "Wolters Kluwer", "sector": "information services", "config": {"tenant": "wk", "env": "wd3", "site": "External"}},
|
|
17
|
+
{"slug": "mckesson", "name": "McKesson", "sector": "healthcare distribution", "config": {"tenant": "mckesson", "env": "wd3", "site": "External_Careers"}},
|
|
18
|
+
{"slug": "thehartford", "name": "The Hartford", "sector": "insurance", "config": {"tenant": "thehartford", "env": "wd5", "site": "Careers_External"}},
|
|
19
|
+
{"slug": "equifax", "name": "Equifax", "sector": "credit data", "config": {"tenant": "equifax", "env": "wd5", "site": "External"}},
|
|
20
|
+
{"slug": "zillow", "name": "Zillow Group", "sector": "real estate tech", "config": {"tenant": "zillow", "env": "wd5", "site": "Zillow_Group_External"}},
|
|
21
|
+
{"slug": "nationwide", "name": "Nationwide", "sector": "insurance / financial services", "config": {"tenant": "nationwide", "env": "wd1", "site": "Nationwide_Career"}},
|
|
22
|
+
{"slug": "toyota", "name": "Toyota Motor North America", "sector": "automotive", "config": {"tenant": "toyota", "env": "wd503", "site": "TMNA"}},
|
|
23
|
+
{"slug": "progressiveleasing", "name": "Progressive Leasing", "sector": "fintech / lease-to-own", "config": {"tenant": "progleasing", "env": "wd5", "site": "ProgLeasingCareers"}},
|
|
24
|
+
{"slug": "fico", "name": "FICO", "sector": "analytics / credit", "config": {"tenant": "fico", "env": "wd1", "site": "External"}},
|
|
25
|
+
{"slug": "sonyglobal", "name": "Sony Group", "sector": "electronics / entertainment", "config": {"tenant": "sonyglobal", "env": "wd1", "site": "SonyGlobalCareers"}},
|
|
26
|
+
{"slug": "sonypictures", "name": "Sony Pictures Entertainment", "sector": "media / entertainment", "config": {"tenant": "spe", "env": "wd1", "site": "SonyPicturesEntertainment"}},
|
|
27
|
+
{"slug": "merative", "name": "Merative", "sector": "health data", "config": {"tenant": "merative", "env": "wd12", "site": "External_Career_Site"}},
|
|
28
|
+
{"slug": "duckcreek", "name": "Duck Creek Technologies", "sector": "insurance software", "config": {"tenant": "duckcreek", "env": "wd1", "site": "duckcreekcareers"}}
|
|
8
29
|
]
|
|
@@ -101,7 +101,12 @@ export async function fetchSmartrecruiters(slug) {
|
|
|
101
101
|
export async function hasSmartrecruiters(slug) {
|
|
102
102
|
try {
|
|
103
103
|
const resp = await fetch(`${BASE_URL}/${slug}/postings?limit=1`);
|
|
104
|
-
|
|
104
|
+
if (!resp.ok) return false;
|
|
105
|
+
// SmartRecruiters returns 200 with an empty page (not 404) for unknown
|
|
106
|
+
// companies, so resp.ok alone false-positives on any slug. Confirm at
|
|
107
|
+
// least one real posting exists before claiming a match.
|
|
108
|
+
const data = await resp.json();
|
|
109
|
+
return (data.totalFound || 0) > 0 || (data.content || []).length > 0;
|
|
105
110
|
} catch {
|
|
106
111
|
return false;
|
|
107
112
|
}
|
package/src/index.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import { ADAPTERS, ATS_NAMES } from './adapters/index.js';
|
|
10
|
-
import { loadRegistry, searchRegistry, detectAts, findAtsBySlug, findEntryBySlug } from './registry.js';
|
|
10
|
+
import { loadRegistry, searchRegistry, detectAts, findAtsBySlug, findEntryBySlug, getRegistrySource } from './registry.js';
|
|
11
11
|
import { applyFilters } from './filters.js';
|
|
12
12
|
|
|
13
13
|
/**
|
|
@@ -125,6 +125,7 @@ export const registry = {
|
|
|
125
125
|
detect: detectAts,
|
|
126
126
|
findAtsBySlug,
|
|
127
127
|
findEntryBySlug,
|
|
128
|
+
getSource: getRegistrySource,
|
|
128
129
|
};
|
|
129
130
|
|
|
130
131
|
// Re-export individual adapters for direct use
|
|
@@ -134,3 +135,7 @@ export { fetchAshby } from './adapters/ashby.js';
|
|
|
134
135
|
|
|
135
136
|
// Re-export filter logic for reuse (e.g., by the MCP server)
|
|
136
137
|
export { applyFilters } from './filters.js';
|
|
138
|
+
|
|
139
|
+
// Re-export the list of supported ATS names (e.g. so the MCP layer can report
|
|
140
|
+
// the full set detectAts probes, instead of hardcoding a stale subset).
|
|
141
|
+
export { ATS_NAMES };
|
package/src/registry.js
CHANGED
|
@@ -5,38 +5,88 @@ import { fileURLToPath } from 'node:url';
|
|
|
5
5
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
6
6
|
const REGISTRY_DIR = join(__dirname, '..', 'registry');
|
|
7
7
|
|
|
8
|
+
const PLATFORMS = ['greenhouse', 'lever', 'ashby', 'smartrecruiters', 'teamtailor', 'recruitee', 'workday'];
|
|
9
|
+
|
|
10
|
+
// Network-first registry. A hosted copy lets installed bundles AND npx users
|
|
11
|
+
// pick up newly-added companies without reinstalling; the on-disk copy that
|
|
12
|
+
// ships with the package is the guaranteed offline fallback. The base URL is
|
|
13
|
+
// resolved at call time so it stays overridable: point JD_INTEL_REGISTRY_URL
|
|
14
|
+
// at a different host, or set it to '' to force disk-only (tests, air-gapped).
|
|
15
|
+
const DEFAULT_REGISTRY_URL = 'https://prpmdev.github.io/jd-intel/registry';
|
|
16
|
+
const FETCH_TIMEOUT_MS = 2500;
|
|
17
|
+
|
|
18
|
+
function registryBaseUrl() {
|
|
19
|
+
return process.env.JD_INTEL_REGISTRY_URL !== undefined
|
|
20
|
+
? process.env.JD_INTEL_REGISTRY_URL
|
|
21
|
+
: DEFAULT_REGISTRY_URL;
|
|
22
|
+
}
|
|
23
|
+
|
|
8
24
|
let cache = {};
|
|
25
|
+
let sources = {}; // platform -> 'network' | 'disk-fallback'
|
|
9
26
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
if (
|
|
27
|
+
async function fetchPlatform(platform) {
|
|
28
|
+
const base = registryBaseUrl();
|
|
29
|
+
if (!base) throw new Error('registry network disabled');
|
|
30
|
+
const res = await fetch(`${base}/${platform}.json`, { signal: AbortSignal.timeout(FETCH_TIMEOUT_MS) });
|
|
31
|
+
if (!res.ok) throw new Error(`registry fetch ${platform}: HTTP ${res.status}`);
|
|
32
|
+
const data = await res.json();
|
|
33
|
+
if (!Array.isArray(data)) throw new Error(`registry fetch ${platform}: not an array`);
|
|
34
|
+
return data;
|
|
35
|
+
}
|
|
15
36
|
|
|
16
|
-
|
|
37
|
+
async function readPlatform(platform) {
|
|
38
|
+
const data = await readFile(join(REGISTRY_DIR, `${platform}.json`), 'utf-8');
|
|
39
|
+
return JSON.parse(data);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Load one platform: hosted copy first, on-disk fallback on ANY failure
|
|
43
|
+
// (offline, non-200, timeout, malformed). Cached per process after first load.
|
|
44
|
+
async function loadPlatform(platform) {
|
|
45
|
+
if (cache[platform]) return cache[platform];
|
|
46
|
+
try {
|
|
47
|
+
cache[platform] = await fetchPlatform(platform);
|
|
48
|
+
sources[platform] = 'network';
|
|
49
|
+
} catch {
|
|
17
50
|
try {
|
|
18
|
-
|
|
19
|
-
cache[ats] = JSON.parse(data);
|
|
20
|
-
return cache[ats];
|
|
51
|
+
cache[platform] = await readPlatform(platform);
|
|
21
52
|
} catch {
|
|
22
|
-
|
|
53
|
+
cache[platform] = [];
|
|
23
54
|
}
|
|
55
|
+
sources[platform] = 'disk-fallback';
|
|
24
56
|
}
|
|
57
|
+
return cache[platform];
|
|
58
|
+
}
|
|
25
59
|
|
|
26
|
-
|
|
60
|
+
/**
|
|
61
|
+
* Load company registry for a specific ATS or all ATS platforms.
|
|
62
|
+
* Network-first with on-disk fallback (see registryBaseUrl).
|
|
63
|
+
*/
|
|
64
|
+
export async function loadRegistry(ats) {
|
|
65
|
+
if (ats) return loadPlatform(ats);
|
|
27
66
|
const all = {};
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
all[platform] = JSON.parse(data);
|
|
32
|
-
cache[platform] = all[platform];
|
|
33
|
-
} catch {
|
|
34
|
-
all[platform] = [];
|
|
35
|
-
}
|
|
36
|
-
}
|
|
67
|
+
await Promise.all(PLATFORMS.map(async (platform) => {
|
|
68
|
+
all[platform] = await loadPlatform(platform);
|
|
69
|
+
}));
|
|
37
70
|
return all;
|
|
38
71
|
}
|
|
39
72
|
|
|
73
|
+
/**
|
|
74
|
+
* Where the registry data loaded this process came from:
|
|
75
|
+
* 'network' every loaded platform came from the hosted copy
|
|
76
|
+
* 'disk-fallback' every loaded platform fell back to the bundled copy
|
|
77
|
+
* 'mixed' some of each
|
|
78
|
+
* 'unknown' nothing loaded yet
|
|
79
|
+
* Surfaced in MCP response metadata so the AI can tell the user whether the
|
|
80
|
+
* company list is live or the bundled snapshot.
|
|
81
|
+
*/
|
|
82
|
+
export function getRegistrySource() {
|
|
83
|
+
const vals = Object.values(sources);
|
|
84
|
+
if (vals.length === 0) return 'unknown';
|
|
85
|
+
if (vals.every((v) => v === 'network')) return 'network';
|
|
86
|
+
if (vals.every((v) => v === 'disk-fallback')) return 'disk-fallback';
|
|
87
|
+
return 'mixed';
|
|
88
|
+
}
|
|
89
|
+
|
|
40
90
|
/**
|
|
41
91
|
* Search registry for companies matching a query.
|
|
42
92
|
*/
|