six-degrees 0.2.0 → 0.3.0-beta.1
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/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/app-path-routes-manifest.json +10 -0
- package/.next/standalone/.next/build-manifest.json +3 -3
- package/.next/standalone/.next/prerender-manifest.json +39 -11
- package/.next/standalone/.next/required-server-files.json +4 -1
- package/.next/standalone/.next/routes-manifest.json +60 -0
- package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_global-error.html +1 -1
- package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +1 -1
- package/.next/standalone/.next/server/app/_not-found.rsc +11 -11
- package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +11 -11
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +9 -9
- package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/api/admin-delete/route.js +3 -2
- package/.next/standalone/.next/server/app/api/admin-delete/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/admin-update/route.js +3 -2
- package/.next/standalone/.next/server/app/api/admin-update/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/bridges/route.js +3 -2
- package/.next/standalone/.next/server/app/api/bridges/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/bulk-import/route.js +3 -2
- package/.next/standalone/.next/server/app/api/bulk-import/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/company-scores/legacy/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/company-scores/legacy/route/build-manifest.json +12 -0
- package/.next/standalone/.next/server/app/api/company-scores/legacy/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/company-scores/legacy/route.js +9 -0
- package/.next/standalone/.next/server/app/api/company-scores/legacy/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/company-scores/legacy/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/company-scores/legacy/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/company-scores/route.js +3 -2
- package/.next/standalone/.next/server/app/api/company-scores/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/connections/route.js +3 -2
- package/.next/standalone/.next/server/app/api/connections/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/data/export/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/data/export/route/build-manifest.json +12 -0
- package/.next/standalone/.next/server/app/api/data/export/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/data/export/route.js +7 -0
- package/.next/standalone/.next/server/app/api/data/export/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/data/export/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/data/export/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/data/import/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/data/import/route/build-manifest.json +12 -0
- package/.next/standalone/.next/server/app/api/data/import/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/data/import/route.js +8 -0
- package/.next/standalone/.next/server/app/api/data/import/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/data/import/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/data/import/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/data/restart/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/data/restart/route/build-manifest.json +12 -0
- package/.next/standalone/.next/server/app/api/data/restart/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/data/restart/route.js +8 -0
- package/.next/standalone/.next/server/app/api/data/restart/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/data/restart/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/data/restart/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/data/reveal/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/data/reveal/route/build-manifest.json +12 -0
- package/.next/standalone/.next/server/app/api/data/reveal/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/data/reveal/route.js +7 -0
- package/.next/standalone/.next/server/app/api/data/reveal/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/data/reveal/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/data/reveal/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/data/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/data/route/build-manifest.json +12 -0
- package/.next/standalone/.next/server/app/api/data/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/data/route.js +7 -0
- package/.next/standalone/.next/server/app/api/data/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/data/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/data/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/delete-cluster/route.js +3 -2
- package/.next/standalone/.next/server/app/api/delete-cluster/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ingest/route.js +2 -2
- package/.next/standalone/.next/server/app/api/ingest/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/route.js +3 -2
- package/.next/standalone/.next/server/app/api/network/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/notifications/route.js +3 -2
- package/.next/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/outreach/route.js +3 -2
- package/.next/standalone/.next/server/app/api/outreach/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/queue/route.js +3 -2
- package/.next/standalone/.next/server/app/api/queue/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/scraper/route.js +3 -2
- package/.next/standalone/.next/server/app/api/scraper/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/settings/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/settings/route/build-manifest.json +12 -0
- package/.next/standalone/.next/server/app/api/settings/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/settings/route.js +9 -0
- package/.next/standalone/.next/server/app/api/settings/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/settings/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/settings/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/settings/sector-preview/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/settings/sector-preview/route/build-manifest.json +12 -0
- package/.next/standalone/.next/server/app/api/settings/sector-preview/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/settings/sector-preview/route.js +8 -0
- package/.next/standalone/.next/server/app/api/settings/sector-preview/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/settings/sector-preview/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/settings/sector-preview/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/settings/sector-suggestions/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/settings/sector-suggestions/route/build-manifest.json +12 -0
- package/.next/standalone/.next/server/app/api/settings/sector-suggestions/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/settings/sector-suggestions/route.js +8 -0
- package/.next/standalone/.next/server/app/api/settings/sector-suggestions/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/settings/sector-suggestions/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/settings/sector-suggestions/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/setup-profile/route.js +3 -2
- package/.next/standalone/.next/server/app/api/setup-profile/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/unlock/route.js +3 -2
- package/.next/standalone/.next/server/app/api/unlock/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/update/route.js +1 -1
- package/.next/standalone/.next/server/app/api/update/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/update-images/route.js +3 -2
- package/.next/standalone/.next/server/app/api/update-images/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/users/route.js +3 -2
- package/.next/standalone/.next/server/app/api/users/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/avatars/[file]/route.js +2 -1
- package/.next/standalone/.next/server/app/avatars/[file]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/favicon.ico/route.js +2 -1
- package/.next/standalone/.next/server/app/favicon.ico/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/import/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/import/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/import.html +1 -1
- package/.next/standalone/.next/server/app/import.rsc +13 -13
- package/.next/standalone/.next/server/app/import.segments/_full.segment.rsc +13 -13
- package/.next/standalone/.next/server/app/import.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/import.segments/import/__PAGE__.segment.rsc +11 -11
- package/.next/standalone/.next/server/app/index.html +1 -1
- package/.next/standalone/.next/server/app/index.rsc +13 -13
- package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +11 -11
- package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +13 -13
- package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/launch/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/launch/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/launch.html +2 -2
- package/.next/standalone/.next/server/app/launch.rsc +13 -13
- package/.next/standalone/.next/server/app/launch.segments/_full.segment.rsc +13 -13
- package/.next/standalone/.next/server/app/launch.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/launch.segments/launch/__PAGE__.segment.rsc +11 -11
- package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/paths/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/paths/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/paths.html +1 -1
- package/.next/standalone/.next/server/app/paths.rsc +13 -13
- package/.next/standalone/.next/server/app/paths.segments/_full.segment.rsc +13 -13
- package/.next/standalone/.next/server/app/paths.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/paths.segments/paths/__PAGE__.segment.rsc +11 -11
- package/.next/standalone/.next/server/app/profile/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/profile/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/profile.html +1 -1
- package/.next/standalone/.next/server/app/profile.rsc +13 -13
- package/.next/standalone/.next/server/app/profile.segments/_full.segment.rsc +13 -13
- package/.next/standalone/.next/server/app/profile.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/profile.segments/profile/__PAGE__.segment.rsc +11 -11
- package/.next/standalone/.next/server/app/queue/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/queue/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/queue.html +1 -1
- package/.next/standalone/.next/server/app/queue.rsc +13 -13
- package/.next/standalone/.next/server/app/queue.segments/_full.segment.rsc +13 -13
- package/.next/standalone/.next/server/app/queue.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/queue.segments/queue/__PAGE__.segment.rsc +11 -11
- package/.next/standalone/.next/server/app/settings/page/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/settings/page/build-manifest.json +20 -0
- package/.next/standalone/.next/server/app/settings/page/next-font-manifest.json +11 -0
- package/.next/standalone/.next/server/app/settings/page/react-loadable-manifest.json +1 -0
- package/.next/standalone/.next/server/app/settings/page/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/settings/page.js +13 -0
- package/.next/standalone/.next/server/app/settings/page.js.map +5 -0
- package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/settings.html +1 -0
- package/.next/standalone/.next/server/app/settings.meta +26 -0
- package/.next/standalone/.next/server/app/settings.rsc +24 -0
- package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +24 -0
- package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +4 -0
- package/.next/standalone/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +28 -0
- package/.next/standalone/.next/server/app/setup/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/setup.html +1 -1
- package/.next/standalone/.next/server/app/setup.rsc +13 -13
- package/.next/standalone/.next/server/app/setup.segments/_full.segment.rsc +13 -13
- package/.next/standalone/.next/server/app/setup.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +11 -11
- package/.next/standalone/.next/server/app-paths-manifest.json +10 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0-rnla2._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__00la_y0._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__07t47cm._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0cj5jqc._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0e0fei3._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0i5hdu4._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ljcioj._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ljnyho._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0o5-tcg._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0qrnous._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0t3v1a1._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0uag-k5._.js +8 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0um1uey._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0wmexuc._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0xu34sz._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__133knx1._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__14ou7j5._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__15-17hl._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__16iu0hv._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__19b7mig._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1bbcwub._.js +8 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1eris29._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1gjo_cq._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1kbl21f._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1qcm08_._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1rphsdk._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1t3rugi._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1w25q0m._.js +3 -0
- package/.next/standalone/.next/server/chunks/_072jl0y._.js +3 -0
- package/.next/standalone/.next/server/chunks/_0lw8_i0._.js +3 -0
- package/.next/standalone/.next/server/chunks/_1_fynia._.js +21 -3
- package/.next/standalone/.next/server/chunks/_1fn30_l._.js +3 -0
- package/.next/standalone/.next/server/chunks/_1itd1o_._.js +2 -1
- package/.next/standalone/.next/server/chunks/_1iwkh8t._.js +1 -1
- package/.next/standalone/.next/server/chunks/_1mxn_lb._.js +3 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_company-scores_legacy_route_actions_1ncspu_.js +3 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_data_export_route_actions_1lkimty.js +3 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_data_import_route_actions_1eji0kd.js +3 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_data_restart_route_actions_00_-u6o.js +3 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_data_reveal_route_actions_0-moqtn.js +3 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_data_route_actions_0j0w5ep.js +3 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_settings_route_actions_1bpm9ac.js +3 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_settings_sector-preview_route_actions_0w79454.js +3 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_settings_sector-suggestions_route_actions_1eoqugp.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_db-client_15le7cw.js +155 -0
- package/.next/standalone/.next/server/chunks/{lib_rpc_0mc73lk.js → lib_rpc_00tx2sm.js} +1 -1
- package/.next/standalone/.next/server/chunks/lib_rpc_02-qa4d.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_02ndsg2.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_08q5vp6.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0_8i3ft.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0c9d9ti.js +5 -2
- package/.next/standalone/.next/server/chunks/lib_rpc_0huvw-3.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0ip2vdh.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0jzisgh.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0yi9xvd.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1jyhd0o.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1kn59-i.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1q2jkza.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1vpm1sk.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1x6p_31.js +3 -0
- package/.next/standalone/.next/server/chunks/node_modules_next_1zc5q0a._.js +158 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0mocm6d._.js → [root-of-the-server]__0an6blh._.js} +3 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0h1_f_2._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1m0255u._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0bipr5s._.js → [root-of-the-server]__1z1j3ek._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_07u8byv._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_08r_mlf._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{_0ggabjc._.js → _0942v8n._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_1djpk8t._.js → _0hl_t7r._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_0tb83dw._.js +132 -0
- package/.next/standalone/.next/server/chunks/ssr/_1-87bs1._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_17gui6a._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_settings_page_actions_11x4dq5.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/app_import_page_1fmu6_l.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_launch_page_19t0dyd.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/app_page_1fazqbf.js +4 -4
- package/.next/standalone/.next/server/chunks/ssr/app_profile_page_0u3-l5y.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_queue_page_0c6znd6.js +5 -5
- package/.next/standalone/.next/server/chunks/ssr/app_settings_page_1f8mjj_.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/app_setup_page_1-282zx.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/lib_0i8v-s3._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/node_modules_1f8t_rp._.js +23 -0
- package/.next/standalone/.next/server/chunks/ssr/node_modules_1nkgb45._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_01xbj_9._.js → node_modules_1wax83z._.js} +3 -3
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_next_dist_00nap8h._.js → node_modules_next_dist_1bunoni._.js} +2 -2
- package/.next/standalone/.next/server/edge/chunks/[root-of-the-server]__0pco7a6._.js +2 -2
- package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
- package/.next/standalone/.next/server/middleware-manifest.json +15 -7
- package/.next/standalone/.next/server/next-font-manifest.js +1 -1
- package/.next/standalone/.next/server/next-font-manifest.json +4 -0
- package/.next/standalone/.next/server/pages/404.html +1 -1
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/prefetch-hints.json +14 -0
- package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/static/chunks/06x3jiiz96m5t.js +1 -0
- package/.next/{static/chunks/34at5d2ifl62i.js → standalone/.next/static/chunks/0ngx9s6-zgshe.js} +5 -5
- package/.next/standalone/.next/static/chunks/0q-_khndfxubv.js +2 -0
- package/.next/standalone/.next/static/chunks/1c79veqedvubt.js +1 -0
- package/.next/standalone/.next/static/chunks/1chp3nx45meg5.js +44 -0
- package/.next/standalone/.next/static/chunks/1irqj0lf-fu3d.js +1 -0
- package/.next/standalone/.next/static/chunks/1uadqylrod5_v.js +1 -0
- package/.next/standalone/.next/static/chunks/23u0zclgwpc4d.js +1 -0
- package/.next/standalone/.next/static/chunks/289ktj97di6zg.js +1 -0
- package/.next/standalone/.next/static/chunks/2b3lmf8e6uj8m.js +16 -0
- package/.next/standalone/.next/static/chunks/2jz311xl1pp_8.js +1 -0
- package/.next/standalone/.next/static/chunks/2ot61qsv6_0eq.js +1 -0
- package/.next/standalone/.next/static/chunks/3npq5yd7c4dmn.js +2 -0
- package/.next/standalone/.next/static/frfHFnRYTA0Wjrw8oZJtY/_clientMiddlewareManifest.js +14 -0
- package/.next/standalone/AGENTS.md +10 -0
- package/.next/standalone/CHANGELOG.md +325 -0
- package/.next/standalone/CONTRIBUTING.md +14 -2
- package/.next/standalone/README.md +181 -53
- package/.next/standalone/SECURITY.md +120 -10
- package/.next/standalone/app/api/company-scores/legacy/route.js +32 -0
- package/.next/standalone/app/api/company-scores/route.js +20 -11
- package/.next/standalone/app/api/data/export/route.js +49 -0
- package/.next/standalone/app/api/data/import/route.js +83 -0
- package/.next/standalone/app/api/data/restart/route.js +37 -0
- package/.next/standalone/app/api/data/reveal/route.js +14 -0
- package/.next/standalone/app/api/data/route.js +39 -0
- package/.next/standalone/app/api/ingest/route.js +15 -47
- package/.next/standalone/app/api/scraper/route.js +268 -128
- package/.next/standalone/app/api/settings/route.js +58 -0
- package/.next/standalone/app/api/settings/sector-preview/route.js +38 -0
- package/.next/standalone/app/api/settings/sector-suggestions/route.js +20 -0
- package/.next/standalone/app/api/update/route.js +197 -24
- package/.next/standalone/app/avatars/[file]/route.js +4 -2
- package/.next/standalone/app/components/CompanyScores.js +28 -7
- package/.next/standalone/app/components/EmptyState.js +8 -0
- package/.next/standalone/app/components/ForceGraph.js +40 -36
- package/.next/standalone/app/components/LegacyScoresCard.js +129 -0
- package/.next/standalone/app/components/Sidebar.js +19 -18
- package/.next/standalone/app/components/UpdatePanel.js +317 -99
- package/.next/standalone/app/components/UserProvider.js +4 -3
- package/.next/standalone/app/components/settings/DataSection.js +437 -0
- package/.next/standalone/app/components/settings/SectorSection.js +445 -0
- package/.next/standalone/app/components/ui.js +62 -0
- package/.next/standalone/app/import/page.js +3 -3
- package/.next/standalone/app/launch/page.js +30 -20
- package/.next/standalone/app/layout.js +2 -2
- package/.next/standalone/app/page.js +15 -2
- package/.next/standalone/app/paths/page.js +13 -5
- package/.next/standalone/app/profile/page.js +41 -186
- package/.next/standalone/app/queue/page.js +8 -2
- package/.next/standalone/app/settings/page.js +96 -0
- package/.next/standalone/app/setup/page.js +35 -19
- package/.next/standalone/bin/args.mjs +44 -0
- package/.next/standalone/bin/six-degrees.mjs +16 -17
- package/.next/standalone/install.sh +1 -1
- package/.next/standalone/lib/companies.js +44 -119
- package/.next/standalone/lib/csv.js +61 -27
- package/.next/standalone/lib/data-export.js +170 -0
- package/.next/standalone/lib/data-folder.js +238 -0
- package/.next/standalone/lib/data-import.js +878 -0
- package/.next/standalone/lib/db-client.js +48 -3
- package/.next/standalone/lib/durable.js +73 -0
- package/.next/standalone/lib/gate.js +90 -1
- package/.next/standalone/lib/ingest.js +40 -0
- package/.next/standalone/lib/legacy-offer.js +185 -0
- package/.next/standalone/lib/legacy-scores.js +77 -0
- package/.next/standalone/lib/linkedin-limits.js +124 -1
- package/.next/standalone/lib/release.js +5 -2
- package/.next/standalone/lib/rpc.js +121 -13
- package/.next/standalone/lib/sample-stats.js +16 -0
- package/.next/standalone/lib/scan-progress.js +13 -0
- package/.next/standalone/lib/scan-state.js +53 -0
- package/.next/standalone/lib/scanner-python.js +685 -0
- package/.next/standalone/lib/scanner-setup.js +104 -0
- package/.next/standalone/lib/scoring.js +747 -138
- package/.next/standalone/lib/scraper-client.js +10 -6
- package/.next/standalone/lib/sector-directory.js +1532 -0
- package/.next/standalone/lib/sector-focus.js +163 -0
- package/.next/standalone/lib/sector-labels.js +81 -0
- package/.next/standalone/lib/settings-effects.js +59 -0
- package/.next/standalone/lib/settings.js +83 -0
- package/.next/standalone/lib/updater-job.js +838 -0
- package/.next/standalone/lib/updater.js +494 -0
- package/.next/standalone/middleware.js +25 -28
- package/.next/standalone/next.config.mjs +19 -3
- package/.next/standalone/package-lock.json +103 -9
- package/.next/standalone/package.json +12 -11
- package/.next/standalone/public/demo-data.json +1 -1
- package/.next/standalone/scripts/apply-update.sh +482 -0
- package/.next/standalone/scripts/build-app.mjs +251 -9
- package/.next/standalone/scripts/gen-synthetic.mjs +16 -1
- package/.next/standalone/scripts/readme_buttons.py +89 -0
- package/.next/standalone/scripts/requirements.txt +106 -4
- package/.next/standalone/scripts/screenshots.py +2 -0
- package/.next/standalone/scripts/test-release-server.mjs +143 -0
- package/.next/standalone/server.js +1 -1
- package/.next/static/chunks/06x3jiiz96m5t.js +1 -0
- package/.next/{standalone/.next/static/chunks/34at5d2ifl62i.js → static/chunks/0ngx9s6-zgshe.js} +5 -5
- package/.next/static/chunks/0q-_khndfxubv.js +2 -0
- package/.next/static/chunks/1c79veqedvubt.js +1 -0
- package/.next/static/chunks/1chp3nx45meg5.js +44 -0
- package/.next/static/chunks/1irqj0lf-fu3d.js +1 -0
- package/.next/static/chunks/1uadqylrod5_v.js +1 -0
- package/.next/static/chunks/23u0zclgwpc4d.js +1 -0
- package/.next/static/chunks/289ktj97di6zg.js +1 -0
- package/.next/static/chunks/2b3lmf8e6uj8m.js +16 -0
- package/.next/static/chunks/2jz311xl1pp_8.js +1 -0
- package/.next/static/chunks/2ot61qsv6_0eq.js +1 -0
- package/.next/static/chunks/3npq5yd7c4dmn.js +2 -0
- package/.next/static/frfHFnRYTA0Wjrw8oZJtY/_clientMiddlewareManifest.js +14 -0
- package/CHANGELOG.md +325 -0
- package/README.md +181 -53
- package/SECURITY.md +120 -10
- package/bin/args.mjs +44 -0
- package/bin/six-degrees.mjs +16 -17
- package/lib/companies.js +44 -119
- package/lib/csv.js +61 -27
- package/lib/data-export.js +170 -0
- package/lib/data-folder.js +238 -0
- package/lib/data-import.js +878 -0
- package/lib/db-client.js +48 -3
- package/lib/durable.js +73 -0
- package/lib/gate.js +90 -1
- package/lib/ingest.js +40 -0
- package/lib/legacy-offer.js +185 -0
- package/lib/legacy-scores.js +77 -0
- package/lib/linkedin-limits.js +124 -1
- package/lib/release.js +5 -2
- package/lib/rpc.js +121 -13
- package/lib/sample-stats.js +16 -0
- package/lib/scan-progress.js +13 -0
- package/lib/scan-state.js +53 -0
- package/lib/scanner-python.js +685 -0
- package/lib/scanner-setup.js +104 -0
- package/lib/scoring.js +747 -138
- package/lib/scraper-client.js +10 -6
- package/lib/sector-directory.js +1532 -0
- package/lib/sector-focus.js +163 -0
- package/lib/sector-labels.js +81 -0
- package/lib/settings-effects.js +59 -0
- package/lib/settings.js +83 -0
- package/lib/updater-job.js +838 -0
- package/lib/updater.js +494 -0
- package/package.json +12 -11
- package/public/demo-data.json +1 -1
- package/scripts/requirements.txt +106 -4
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0jrmmj-._.js +0 -150
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0qx548g._.js +0 -151
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1an3leo._.js +0 -150
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1m8zedk._.js +0 -155
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1zor0ys._.js +0 -3
- package/.next/standalone/.next/server/chunks/_0_rp-01._.js +0 -3
- package/.next/standalone/.next/server/chunks/_0hzdk79._.js +0 -3
- package/.next/standalone/.next/server/chunks/_0ow7u5r._.js +0 -3
- package/.next/standalone/.next/server/chunks/_0t0zc2d._.js +0 -3
- package/.next/standalone/.next/server/chunks/_0wa631d._.js +0 -3
- package/.next/standalone/.next/server/chunks/_13ccnao._.js +0 -3
- package/.next/standalone/.next/server/chunks/_13es063._.js +0 -3
- package/.next/standalone/.next/server/chunks/_142872j._.js +0 -3
- package/.next/standalone/.next/server/chunks/_18wsb_a._.js +0 -8
- package/.next/standalone/.next/server/chunks/_1e-4h5h._.js +0 -3
- package/.next/standalone/.next/server/chunks/_1gvvd7n._.js +0 -158
- package/.next/standalone/.next/server/chunks/_1moda66._.js +0 -3
- package/.next/standalone/.next/server/chunks/_1p6ghzv._.js +0 -3
- package/.next/standalone/.next/server/chunks/_1xmmi_v._.js +0 -3
- package/.next/standalone/.next/server/chunks/_1z-yrlf._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0bf3x4q._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/app_paths_page_1ol90m7.js +0 -4
- package/.next/standalone/.next/static/N9wokeIiC9rUIGmzBhj6T/_clientMiddlewareManifest.js +0 -6
- package/.next/standalone/.next/static/chunks/1odow92u6wxz0.js +0 -1
- package/.next/standalone/.next/static/chunks/1wb_is4wsdm-u.js +0 -1
- package/.next/standalone/.next/static/chunks/1zmpcmngg5c7-.js +0 -2
- package/.next/standalone/.next/static/chunks/220-ne82aus0c.js +0 -44
- package/.next/standalone/.next/static/chunks/2rrf5kzx2fhin.js +0 -2
- package/.next/standalone/.next/static/chunks/2s_k9x4d0gi9h.js +0 -16
- package/.next/standalone/.next/static/chunks/3hsi90cejq2dg.js +0 -1
- package/.next/standalone/.next/static/chunks/3pfyuezyqd9ob.js +0 -1
- package/.next/standalone/.next/static/chunks/3ts-_4i6bfkh2.js +0 -1
- package/.next/standalone/scripts/score-connections.sql +0 -80
- package/.next/standalone/scripts/score_new_connections.sql +0 -77
- package/.next/static/N9wokeIiC9rUIGmzBhj6T/_clientMiddlewareManifest.js +0 -6
- package/.next/static/chunks/1odow92u6wxz0.js +0 -1
- package/.next/static/chunks/1wb_is4wsdm-u.js +0 -1
- package/.next/static/chunks/1zmpcmngg5c7-.js +0 -2
- package/.next/static/chunks/220-ne82aus0c.js +0 -44
- package/.next/static/chunks/2rrf5kzx2fhin.js +0 -2
- package/.next/static/chunks/2s_k9x4d0gi9h.js +0 -16
- package/.next/static/chunks/3hsi90cejq2dg.js +0 -1
- package/.next/static/chunks/3pfyuezyqd9ob.js +0 -1
- package/.next/static/chunks/3ts-_4i6bfkh2.js +0 -1
- package/scripts/score_new_connections.sql +0 -77
- /package/.next/standalone/.next/static/{N9wokeIiC9rUIGmzBhj6T → frfHFnRYTA0Wjrw8oZJtY}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{N9wokeIiC9rUIGmzBhj6T → frfHFnRYTA0Wjrw8oZJtY}/_ssgManifest.js +0 -0
- /package/.next/static/{N9wokeIiC9rUIGmzBhj6T → frfHFnRYTA0Wjrw8oZJtY}/_buildManifest.js +0 -0
- /package/.next/static/{N9wokeIiC9rUIGmzBhj6T → frfHFnRYTA0Wjrw8oZJtY}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,1532 @@
|
|
|
1
|
+
// The sector directory: the most common sectors people work in, each with the
|
|
2
|
+
// words that mark a company or a headline as that sector. Settings → Your
|
|
3
|
+
// sector picks from it (lib/sector-focus.js), and scoring leans toward the
|
|
4
|
+
// companies it places (lib/scoring.js companyScore).
|
|
5
|
+
//
|
|
6
|
+
// It is a list, not a model: the same words match the same way on every
|
|
7
|
+
// computer, every time, with no AI and nothing sent anywhere. Anyone can
|
|
8
|
+
// improve it: docs/brain/SCORING.md, "How to add or fix a sector". Every
|
|
9
|
+
// sector has examples it must match and must not, in
|
|
10
|
+
// tests/sector-directory.test.mjs.
|
|
11
|
+
//
|
|
12
|
+
// Each sector:
|
|
13
|
+
// key Saved in people's settings: never rename or remove one.
|
|
14
|
+
// label What the page shows.
|
|
15
|
+
// group The broad industry it sits under (lib/companies.js INDUSTRIES).
|
|
16
|
+
// It takes that industry's colour; Paths' colours don't change.
|
|
17
|
+
// kind 'industry' or 'function'. In an industry sector, people's jobs
|
|
18
|
+
// say where they work: a dentist works at a dental practice, a
|
|
19
|
+
// realtor at a real estate firm. A function sector is work every
|
|
20
|
+
// kind of company has people for (recruiting, marketing,
|
|
21
|
+
// accounting, law, software): a recruiter works at a staffing
|
|
22
|
+
// agency and at Acme Widgets alike, so a job never places a
|
|
23
|
+
// company in a function sector from a headline (roles, below).
|
|
24
|
+
// words Whole words or phrases, any case, that mark a company's name or
|
|
25
|
+
// someone's headline as this sector: in an industry sector, job
|
|
26
|
+
// titles, credentials and kinds of business; in a function
|
|
27
|
+
// sector, kinds of business only (staffing agency, law firm, CPA
|
|
28
|
+
// firm, SaaS). "dentist(s)" means dentist and dentists.
|
|
29
|
+
// Precision over recall: a word that means something else in
|
|
30
|
+
// another field lifts the wrong people, while a missing word
|
|
31
|
+
// only means no lean. So no words every field uses (manager,
|
|
32
|
+
// director, engineer, analyst, sales, associate, partner,
|
|
33
|
+
// agent, broker, producer, consultant...; the tests refuse them).
|
|
34
|
+
// roles A function sector's jobs: titles and the names of the work
|
|
35
|
+
// (recruiter, recruiting, attorney, accountant, tax, JavaScript).
|
|
36
|
+
// They count in a company's name ("Acme Recruiting", "Smith
|
|
37
|
+
// CPA", "Jones Law Group") and never in a headline: "Recruiter at
|
|
38
|
+
// Acme Widgets" doesn't make Acme a recruiting firm. (An industry
|
|
39
|
+
// sector keeps its job titles in words, where they count
|
|
40
|
+
// everywhere; roles it lists would count the same way.)
|
|
41
|
+
// names Optional. Words that count in a company's name only: "AI" in
|
|
42
|
+
// "Quillon AI" says what the company is, in a headline it is as
|
|
43
|
+
// often a buzzword.
|
|
44
|
+
// companies Well-known companies, matched from the start of the name as
|
|
45
|
+
// whole words: "aspen dental" is also Aspen Dental Management.
|
|
46
|
+
// End one with $ to match the whole name only: "box$" is Box,
|
|
47
|
+
// not Box Hill Hospital. A leading "the" is ignored.
|
|
48
|
+
// not Optional. Phrases that cancel this sector's words where they
|
|
49
|
+
// appear: in a company's name, or in the part of a headline
|
|
50
|
+
// that is being read for that company. "food bank" isn't banking.
|
|
51
|
+
//
|
|
52
|
+
// How a company matches is under the list (sectorMatcher).
|
|
53
|
+
|
|
54
|
+
import { INDUSTRIES } from './companies.js';
|
|
55
|
+
import { headlineParts, cleanCompany } from './scoring.js';
|
|
56
|
+
|
|
57
|
+
// Parts of a headline that say someone is a fan, not in the business.
|
|
58
|
+
const HOBBY = ['fan(s)', 'enthusiast(s)', 'lover(s)', 'junkie(s)', 'nerd(s)', 'buff(s)', 'addict(s)', 'hobbyist(s)', 'geek(s)',
|
|
59
|
+
'aficionado(s)'];
|
|
60
|
+
|
|
61
|
+
export const DIRECTORY = [
|
|
62
|
+
// ── Tech, Software & AI ───────────────────────────────────────────────────
|
|
63
|
+
{
|
|
64
|
+
key: 'software', label: 'Software & SaaS', group: 'tech', kind: 'function',
|
|
65
|
+
// Banks, shops and hospitals all employ software engineers: a company is
|
|
66
|
+
// in software when it sells software.
|
|
67
|
+
words: [
|
|
68
|
+
'saas', 'b2b saas', 'paas', 'iaas', 'software as a service', 'software company', 'software companies', 'software startup(s)',
|
|
69
|
+
'software firm(s)', 'software vendor(s)', 'dev shop(s)',
|
|
70
|
+
],
|
|
71
|
+
roles: [
|
|
72
|
+
'software engineer(s)', 'software developer(s)', 'software engineering', 'swe', 'sde',
|
|
73
|
+
'full stack', 'fullstack', 'front end developer(s)', 'frontend developer(s)', 'front end engineer(s)', 'frontend engineer(s)',
|
|
74
|
+
'back end developer(s)', 'backend developer(s)', 'back end engineer(s)', 'backend engineer(s)', 'web developer(s)',
|
|
75
|
+
'mobile developer(s)', 'ios developer(s)', 'ios engineer(s)', 'android developer(s)', 'android engineer(s)', 'app developer(s)',
|
|
76
|
+
'devops', 'site reliability', 'sre', 'platform engineering', 'cloud engineer(s)', 'cloud architect(s)', 'solutions architect(s)',
|
|
77
|
+
'developer relations', 'devrel', 'developer advocate(s)', 'qa engineer(s)', 'sdet', 'test automation',
|
|
78
|
+
'javascript', 'typescript', 'kubernetes', 'open source',
|
|
79
|
+
],
|
|
80
|
+
// In a headline "software" is as often part of a job title.
|
|
81
|
+
names: ['software'],
|
|
82
|
+
companies: [
|
|
83
|
+
'microsoft', 'google', 'meta$', 'apple$', 'linkedin', 'salesforce', 'oracle$', 'adobe$', 'sap$', 'servicenow', 'workday',
|
|
84
|
+
'atlassian', 'hubspot',
|
|
85
|
+
'zoom$', 'zoom video', 'slack$', 'dropbox', 'box$', 'twilio', 'datadog', 'mongodb', 'github', 'gitlab', 'autodesk', 'intuit',
|
|
86
|
+
'docusign', 'zendesk', 'asana$', 'notion$', 'notion labs', 'figma', 'canva', 'airtable', 'monday com', 'squarespace', 'wix$',
|
|
87
|
+
'wix com', 'webflow', 'vercel', 'netlify', 'red hat', 'vmware', 'citrix', 'jetbrains', 'postman$', 'confluent', 'hashicorp',
|
|
88
|
+
'new relic', 'pagerduty', 'freshworks', 'zoho', 'calendly', 'clickup', 'smartsheet', 'retool', 'supabase', 'replit', 'procore',
|
|
89
|
+
'veeva', 'epic systems', 'klaviyo', 'rippling', 'gusto$', 'deel$', 'discord',
|
|
90
|
+
],
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
key: 'ai-data', label: 'AI & Data', group: 'tech', kind: 'function',
|
|
94
|
+
// Data scientists and ML engineers work at banks and retailers too, and
|
|
95
|
+
// "AI" is in every other headline: a company is in AI when it is an AI
|
|
96
|
+
// company.
|
|
97
|
+
words: ['ai lab(s)', 'ai research lab(s)', 'ai startup(s)', 'ai company', 'ai companies'],
|
|
98
|
+
roles: [
|
|
99
|
+
'artificial intelligence', 'machine learning', 'deep learning', 'reinforcement learning', 'generative ai', 'gen ai', 'genai',
|
|
100
|
+
'llm(s)', 'large language model(s)', 'nlp', 'natural language processing', 'computer vision', 'applied ai', 'head of ai',
|
|
101
|
+
'ai engineer(s)', 'ai engineering', 'ai researcher(s)', 'ai research', 'ai scientist(s)',
|
|
102
|
+
'ml engineer(s)', 'ml engineering', 'ml researcher(s)', 'ml scientist(s)', 'ml infrastructure', 'ml platform', 'mlops',
|
|
103
|
+
'machine learning engineer(s)', 'data science', 'data scientist(s)', 'data engineer(s)', 'data engineering', 'data analytics',
|
|
104
|
+
'data analyst(s)', 'analytics engineer(s)', 'big data', 'business intelligence', 'data warehouse', 'data warehousing',
|
|
105
|
+
'data governance', 'data platform(s)',
|
|
106
|
+
],
|
|
107
|
+
names: ['ai'],
|
|
108
|
+
companies: [
|
|
109
|
+
'openai', 'open ai', 'anthropic', 'cohere$', 'mistral$', 'hugging face', 'huggingface',
|
|
110
|
+
'databricks', 'snowflake$', 'palantir', 'nvidia', 'perplexity$', 'xai$', 'midjourney', 'runway ml', 'runwayml', 'datarobot',
|
|
111
|
+
'dataiku', 'alteryx', 'tableau', 'fivetran', 'dbt labs', 'weights & biases', 'labelbox', 'groq$', 'cerebras',
|
|
112
|
+
],
|
|
113
|
+
// "NLP" is also a coaching method, and an LLM also a law degree.
|
|
114
|
+
not: ['neuro linguistic programming', 'nlp practitioner(s)', 'nlp coach', 'nlp coaches', 'llm in tax', 'llm in taxation', 'llm taxation'],
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
key: 'cybersecurity', label: 'Cybersecurity', group: 'tech', kind: 'function',
|
|
118
|
+
// Every bank and hospital has a security team: a company is in
|
|
119
|
+
// cybersecurity when security is what it sells.
|
|
120
|
+
words: [
|
|
121
|
+
'cybersecurity company', 'cybersecurity companies', 'cybersecurity firm(s)', 'cybersecurity startup(s)', 'cybersecurity vendor(s)',
|
|
122
|
+
'cyber security firm(s)', 'managed security', 'mssp(s)',
|
|
123
|
+
],
|
|
124
|
+
roles: [
|
|
125
|
+
'cybersecurity', 'cyber security', 'cyber', 'infosec', 'information security', 'security engineer(s)', 'security analyst(s)',
|
|
126
|
+
'security architect(s)', 'security researcher(s)', 'security operations', 'soc analyst(s)', 'penetration tester(s)',
|
|
127
|
+
'penetration testing', 'pentester(s)', 'pen tester(s)', 'red team', 'blue team', 'appsec', 'application security', 'cloud security',
|
|
128
|
+
'network security', 'threat intelligence', 'threat hunter(s)', 'incident response', 'vulnerability management',
|
|
129
|
+
'vulnerability research', 'vulnerability researcher(s)', 'malware', 'ciso', 'zero trust', 'osint', 'dfir', 'cissp', 'oscp', 'ceh',
|
|
130
|
+
'comptia security', 'bug bounty', 'ethical hacker(s)', 'ethical hacking', 'devsecops', 'secops',
|
|
131
|
+
],
|
|
132
|
+
companies: [
|
|
133
|
+
'crowdstrike', 'palo alto networks', 'fortinet', 'okta', 'zscaler', 'sentinelone', 'cloudflare', 'proofpoint', 'rapid7', 'tenable',
|
|
134
|
+
'qualys', 'splunk', 'mandiant', 'cyberark', 'check point software', 'sophos', 'darktrace', 'wiz$', 'snyk', 'vanta$', 'drata',
|
|
135
|
+
'1password', 'lastpass', 'arctic wolf', 'huntress', 'mcafee', 'gen digital', 'trend micro', 'kaspersky', 'abnormal security',
|
|
136
|
+
'knowbe4', 'secureworks', 'recorded future', 'bishop fox', 'trail of bits', 'hackerone', 'bugcrowd', 'cisa$',
|
|
137
|
+
],
|
|
138
|
+
not: ['cyber monday'],
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
key: 'telecom', label: 'Telecom', group: 'tech', kind: 'industry',
|
|
142
|
+
words: [
|
|
143
|
+
'telecom', 'telecoms', 'telecommunication(s)', 'telco(s)', 'wireless carrier(s)', 'mobile network(s)', '5g', 'broadband',
|
|
144
|
+
'fiber optic(s)', 'fiber network(s)', 'rf engineer(s)', 'cell tower(s)', 'voip', 'unified communications', 'satellite communications',
|
|
145
|
+
],
|
|
146
|
+
companies: [
|
|
147
|
+
'at&t', 'verizon', 't mobile', 'tmobile', 'sprint$', 'comcast', 'xfinity', 'charter communications', 'spectrum$',
|
|
148
|
+
'cox communications', 'lumen$', 'lumen technologies', 'centurylink', 'frontier communications', 'dish network', 'ericsson', 'nokia',
|
|
149
|
+
'cisco', 'juniper networks', 'qualcomm', 'american tower', 'crown castle', 'vodafone', 'telefonica', 'bt group',
|
|
150
|
+
'deutsche telekom', 'rogers communications', 'bell canada', 'telus', 'starlink', 'viasat', 'iridium',
|
|
151
|
+
],
|
|
152
|
+
},
|
|
153
|
+
|
|
154
|
+
// ── Finance & Investing ───────────────────────────────────────────────────
|
|
155
|
+
{
|
|
156
|
+
key: 'fintech', label: 'Fintech & Payments', group: 'finance', kind: 'industry',
|
|
157
|
+
words: [
|
|
158
|
+
'fintech', 'fin tech', 'payments', 'payment processing', 'merchant services', 'digital banking', 'neobank(s)', 'embedded finance',
|
|
159
|
+
'insurtech', 'regtech', 'wealthtech', 'buy now pay later', 'bnpl', 'card issuing', 'open banking', 'digital wallet(s)',
|
|
160
|
+
'mobile payments',
|
|
161
|
+
],
|
|
162
|
+
names: ['pay'],
|
|
163
|
+
companies: [
|
|
164
|
+
'stripe', 'paypal', 'venmo', 'square$', 'block$', 'cash app', 'plaid$', 'brex', 'ramp$', 'mercury$', 'chime$', 'affirm$',
|
|
165
|
+
'klarna', 'afterpay', 'marqeta', 'adyen', 'checkout com', 'sofi$', 'wise$', 'revolut', 'n26', 'nubank', 'monzo', 'bill com',
|
|
166
|
+
'expensify', 'carta$', 'fiserv', 'fis$', 'global payments', 'worldpay', 'visa$', 'mastercard', 'american express', 'amex$',
|
|
167
|
+
'discover financial', 'green dot', 'melio', 'payoneer', 'remitly', 'western union', 'moneygram', 'zelle', 'shift4', 'nuvei',
|
|
168
|
+
'paysafe', 'lithic', 'synctera', 'modern treasury', 'rapyd', 'dwolla', 'credit karma', 'nerdwallet', 'kalshi',
|
|
169
|
+
],
|
|
170
|
+
not: ['pay per click', 'pay it forward'],
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
key: 'banking', label: 'Banking & Lending', group: 'finance', kind: 'industry',
|
|
174
|
+
words: [
|
|
175
|
+
'bank', 'banking', 'banker(s)', 'investment banking', 'investment banker(s)', 'commercial banking', 'commercial banker(s)',
|
|
176
|
+
'retail banking', 'community bank(s)', 'credit union(s)', 'bank teller(s)', 'loan officer(s)', 'mortgage(s)', 'mortgage lender(s)',
|
|
177
|
+
'mortgage lending', 'mortgage broker(s)', 'mortgage advisor(s)', 'mortgage underwriter(s)', 'lending', 'lender(s)',
|
|
178
|
+
'loan processor(s)', 'loan originator(s)', 'credit analyst(s)', 'nmls',
|
|
179
|
+
],
|
|
180
|
+
companies: [
|
|
181
|
+
'jpmorgan', 'jp morgan', 'j p morgan', 'chase$', 'chase bank', 'bank of america', 'wells fargo', 'citi$', 'citibank', 'citigroup',
|
|
182
|
+
'goldman sachs', 'morgan stanley', 'us bancorp', 'pnc', 'truist', 'capital one', 'td bank', 'td securities', 'hsbc', 'barclays',
|
|
183
|
+
'santander', 'bny', 'state street', 'fifth third', 'keybank', 'ally$', 'ally financial', 'navy federal', 'rocket mortgage',
|
|
184
|
+
'rocket companies', 'quicken loans', 'united wholesale mortgage', 'lendingtree', 'lendingclub', 'upstart$', 'lazard', 'evercore',
|
|
185
|
+
'jefferies', 'moelis', 'houlihan lokey', 'piper sandler', 'rbc', 'royal bank of canada', 'bmo', 'scotiabank', 'ubs$',
|
|
186
|
+
'credit suisse', 'deutsche bank', 'bnp paribas', 'mufg', 'societe generale', 'nomura', 'federal reserve', 'fdic$',
|
|
187
|
+
'freddie mac', 'fannie mae',
|
|
188
|
+
],
|
|
189
|
+
// Coldwell Banker sells houses; the other banks keep no money.
|
|
190
|
+
not: ['coldwell banker', 'bankers life', 'food bank(s)', 'blood bank(s)', 'data bank(s)', 'sperm bank(s)', 'seed bank(s)',
|
|
191
|
+
'memory bank(s)', 'piggy bank(s)', 'question bank(s)', 'image bank(s)', 'time bank(s)', 'west bank', 'left bank', 'river bank(s)'],
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
key: 'vc-pe', label: 'Venture Capital & Private Equity', group: 'finance', kind: 'industry',
|
|
195
|
+
words: [
|
|
196
|
+
'venture capital', 'venture capitalist(s)', 'vc', 'vcs', 'vc fund(s)', 'venture fund(s)', 'venture partner(s)', 'private equity',
|
|
197
|
+
'growth equity', 'pe fund(s)', 'buyout(s)', 'leveraged buyout(s)', 'lbo', 'fund of funds', 'search fund(s)', 'venture studio(s)',
|
|
198
|
+
],
|
|
199
|
+
companies: [
|
|
200
|
+
'sequoia$', 'sequoia capital', 'andreessen horowitz', 'a16z', 'accel$', 'accel partners', 'kleiner perkins', 'greylock',
|
|
201
|
+
'lightspeed venture', 'general catalyst', 'founders fund', 'y combinator', 'yc$', 'techstars', '500 startups', 'first round capital',
|
|
202
|
+
'insight partners', 'tiger global', 'thrive capital', 'khosla ventures', 'bessemer venture', 'ggv capital', 'nea$',
|
|
203
|
+
'new enterprise associates', 'battery ventures', 'union square ventures', 'softbank vision fund', 'blackstone$', 'kkr$',
|
|
204
|
+
'kohlberg kravis roberts', 'carlyle group', 'apollo global', 'tpg$', 'tpg capital', 'bain capital', 'warburg pincus',
|
|
205
|
+
'vista equity', 'thoma bravo', 'silver lake', 'advent international', 'hellman & friedman', 'general atlantic', 'ares management',
|
|
206
|
+
'blue owl', 'cvc capital', 'permira', 'l catterton', 'leonard green', 'clayton dubilier',
|
|
207
|
+
],
|
|
208
|
+
// A startup that says who backs it doesn't work in venture capital.
|
|
209
|
+
not: ['vc backed', 'venture backed', 'pe backed', 'backed by'],
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
key: 'wealth', label: 'Wealth & Asset Management', group: 'finance', kind: 'industry',
|
|
213
|
+
words: [
|
|
214
|
+
'wealth management', 'wealth manager(s)', 'wealth advisor(s)', 'private wealth', 'private banking', 'financial advisor(s)',
|
|
215
|
+
'financial adviser(s)', 'financial planner(s)', 'financial planning', 'certified financial planner(s)', 'cfp', 'chfc',
|
|
216
|
+
'registered investment advisor(s)', 'investment advisor(s)', 'asset management', 'investment management', 'portfolio manager(s)',
|
|
217
|
+
'portfolio management', 'hedge fund(s)', 'family office(s)', 'retirement planning', 'cfa', 'cfa charterholder(s)',
|
|
218
|
+
'equity research', 'investment research', 'trader(s)', 'quantitative trader(s)', 'quant trader(s)', 'trading desk', 'prop trading',
|
|
219
|
+
'proprietary trading', 'equities', 'fixed income', 'derivatives', 'securities', 'finra', 'series 7', 'series 65', 'series 66',
|
|
220
|
+
],
|
|
221
|
+
companies: [
|
|
222
|
+
'blackrock', 'vanguard$', 'vanguard group', 'fidelity$', 'fidelity investments', 'charles schwab', 'schwab$', 'edward jones',
|
|
223
|
+
'ameriprise', 'raymond james', 'lpl financial', 'northwestern mutual', 'pimco', 't rowe price',
|
|
224
|
+
'franklin templeton', 'invesco', 'capital group', 'wellington management', 'nuveen', 'bridgewater$', 'bridgewater associates',
|
|
225
|
+
'citadel$',
|
|
226
|
+
'citadel securities', 'two sigma', 'de shaw', 'd e shaw', 'renaissance technologies', 'millennium management', 'point72',
|
|
227
|
+
'jane street', 'hudson river trading', 'jump trading', 'optiver', 'susquehanna international', 'virtu financial', 'drw$', 'aqr',
|
|
228
|
+
'man group',
|
|
229
|
+
'elliott management', 'pershing square', 'robinhood', 'wealthfront', 'betterment', 'stifel',
|
|
230
|
+
],
|
|
231
|
+
not: ['trader joe(s)', 'securities law', 'securities litigation', 'securities attorney(s)', 'securities lawyer(s)', 'social security'],
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
key: 'insurance', label: 'Insurance', group: 'finance', kind: 'industry',
|
|
235
|
+
words: [
|
|
236
|
+
'insurance', 'insurer(s)', 'insurtech', 'reinsurance', 'insurance underwriter(s)', 'claims adjuster(s)', 'insurance adjuster(s)',
|
|
237
|
+
'public adjuster(s)', 'actuary', 'actuaries', 'actuarial', 'p&c', 'property and casualty', 'annuity', 'annuities', 'cpcu',
|
|
238
|
+
'title insurance',
|
|
239
|
+
],
|
|
240
|
+
companies: [
|
|
241
|
+
'state farm', 'allstate', 'geico', 'progressive$', 'liberty mutual', 'nationwide$', 'usaa', 'farmers insurance', 'travelers$',
|
|
242
|
+
'hartford$', 'chubb', 'aig$', 'american international group', 'metlife', 'prudential', 'new york life', 'northwestern mutual',
|
|
243
|
+
'massmutual', 'mass mutual', 'aflac', 'oscar health', 'root insurance', 'humana', 'unitedhealth', 'aetna', 'cigna', 'anthem$', 'anthem blue cross',
|
|
244
|
+
'elevance', 'centene', 'molina healthcare', 'blue cross', 'bcbs', 'marsh$', 'marsh mclennan', 'aon$',
|
|
245
|
+
'willis towers watson', 'wtw$', 'gallagher$', 'arthur j gallagher', 'brown & brown', 'lockton', 'hub international', 'swiss re',
|
|
246
|
+
'munich re', 'assurant', 'erie insurance', 'american family insurance', 'primerica', 'globe life', 'mutual of omaha',
|
|
247
|
+
'guardian life', 'lincoln financial', 'transamerica', 'john hancock', 'pacific life', 'protective life', 'unum',
|
|
248
|
+
],
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
key: 'accounting', label: 'Accounting & Tax', group: 'finance', kind: 'function',
|
|
252
|
+
// Every company has an accountant: a company is in accounting when it is
|
|
253
|
+
// an accounting firm.
|
|
254
|
+
words: [
|
|
255
|
+
'accounting firm(s)', 'cpa firm(s)', 'public accounting', 'tax preparation', 'external audit', 'audit & assurance', 'big four',
|
|
256
|
+
'big 4',
|
|
257
|
+
],
|
|
258
|
+
roles: [
|
|
259
|
+
'accounting', 'accountant(s)', 'cpa', 'cpas', 'certified public accountant(s)', 'chartered accountant(s)', 'acca', 'tax',
|
|
260
|
+
'tax preparer(s)', 'tax advisor(s)', 'enrolled agent(s)', 'bookkeeper(s)', 'bookkeeping', 'auditor(s)', 'internal audit',
|
|
261
|
+
'accounts payable', 'accounts receivable', 'financial controller(s)', 'corporate controller(s)', 'fractional cfo(s)',
|
|
262
|
+
'forensic accounting', 'forensic accountant(s)', 'quickbooks',
|
|
263
|
+
],
|
|
264
|
+
companies: [
|
|
265
|
+
'deloitte', 'pwc$', 'pricewaterhousecoopers', 'ey$', 'ernst & young', 'kpmg', 'grant thornton', 'bdo$', 'bdo usa', 'rsm$',
|
|
266
|
+
'rsm us', 'crowe$', 'baker tilly', 'cliftonlarsonallen', 'moss adams', 'cbiz', 'marcum$', 'eisneramper', 'cherry bekaert',
|
|
267
|
+
'plante moran', 'h&r block', 'jackson hewitt', 'liberty tax',
|
|
268
|
+
],
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
key: 'crypto', label: 'Crypto & Web3', group: 'finance', kind: 'industry',
|
|
272
|
+
words: [
|
|
273
|
+
'crypto', 'cryptocurrency', 'cryptocurrencies', 'blockchain', 'web3', 'web 3', 'defi', 'nft(s)', 'bitcoin', 'ethereum', 'solana',
|
|
274
|
+
'stablecoin(s)', 'digital asset(s)', 'smart contract(s)', 'dapp(s)', 'on chain', 'onchain', 'crypto exchange(s)',
|
|
275
|
+
],
|
|
276
|
+
companies: [
|
|
277
|
+
'coinbase', 'binance', 'kraken$', 'ripple$', 'chainalysis', 'consensys', 'opensea', 'uniswap', 'polygon labs', 'fireblocks',
|
|
278
|
+
'anchorage digital', 'paxos', 'bitgo', 'crypto com', 'ledger$', 'metamask', 'polymarket', 'tether$', 'galaxy digital',
|
|
279
|
+
'grayscale investments', 'blockchain com', 'bitpay', 'moonpay', 'dydx', 'aave', 'chainlink labs', 'mysten labs',
|
|
280
|
+
],
|
|
281
|
+
not: ['digital asset management'],
|
|
282
|
+
},
|
|
283
|
+
|
|
284
|
+
// ── Healthcare & Biotech ──────────────────────────────────────────────────
|
|
285
|
+
{
|
|
286
|
+
key: 'hospitals', label: 'Hospitals & Clinics', group: 'health', kind: 'industry',
|
|
287
|
+
words: [
|
|
288
|
+
'hospital(s)', 'clinic(s)', 'medical center(s)', 'health system(s)', 'healthcare system(s)', 'urgent care', 'emergency room',
|
|
289
|
+
'emergency department', 'emergency medicine', 'physician(s)', 'doctor(s)', 'surgeon(s)', 'surgery', 'nurse(s)', 'nursing',
|
|
290
|
+
'registered nurse(s)', 'rn', 'bsn', 'lpn', 'certified nursing assistant(s)', 'nurse practitioner(s)', 'physician assistant(s)',
|
|
291
|
+
'pa c', 'medical assistant(s)', 'patient care', 'hospitalist(s)', 'pediatrician(s)', 'cardiologist(s)', 'oncologist(s)',
|
|
292
|
+
'radiologist(s)', 'anesthesiologist(s)', 'dermatologist(s)', 'neurologist(s)', 'obgyn', 'ob gyn', 'family medicine',
|
|
293
|
+
'internal medicine', 'primary care', 'pediatrics', 'oncology', 'cardiology', 'radiology', 'paramedic(s)', 'emt(s)',
|
|
294
|
+
'respiratory therapist(s)', 'physical therapist(s)', 'physical therapy', 'occupational therapist(s)', 'occupational therapy',
|
|
295
|
+
'speech language pathologist(s)', 'radiologic technologist(s)', 'sonographer(s)', 'phlebotomist(s)', 'pharmacist(s)',
|
|
296
|
+
'pharmacy', 'home health', 'hospice', 'nursing home(s)', 'assisted living', 'senior living', 'skilled nursing',
|
|
297
|
+
'healthcare administration', 'hospital administrator(s)', 'medical practice(s)', 'medical group(s)', 'telehealth', 'telemedicine',
|
|
298
|
+
'concierge medicine', 'chiropractor(s)', 'chiropractic', 'optometrist(s)', 'optometry', 'ophthalmologist(s)', 'podiatrist(s)',
|
|
299
|
+
'medical billing', 'medical coding', 'medical coder(s)', 'revenue cycle',
|
|
300
|
+
],
|
|
301
|
+
companies: [
|
|
302
|
+
'kaiser permanente', 'hca$', 'hca healthcare', 'tenet healthcare', 'commonspirit', 'ascension$', 'ascension health',
|
|
303
|
+
'providence health', 'trinity health', 'mass general', 'massachusetts general', 'mount sinai', 'nyu langone',
|
|
304
|
+
'johns hopkins medicine', 'ucla health', 'stanford health', 'memorial sloan kettering', 'md anderson', 'dana farber',
|
|
305
|
+
'cedars sinai', 'city of hope', 'one medical', 'oak street health', 'carbon health', 'teladoc',
|
|
306
|
+
'amwell', 'davita', 'fresenius', 'lifepoint health', 'universal health services',
|
|
307
|
+
],
|
|
308
|
+
// Animal hospitals are veterinary; a legal clinic is law.
|
|
309
|
+
not: ['animal hospital(s)', 'animal clinic(s)', 'pet hospital(s)', 'veterinary', 'veterinarian(s)', 'legal clinic(s)', 'law clinic(s)',
|
|
310
|
+
'doctor of philosophy', 'computer doctor(s)', 'script doctor(s)', 'tree surgery'],
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
key: 'dental', label: 'Dental', group: 'health', kind: 'industry',
|
|
314
|
+
words: [
|
|
315
|
+
'dental', 'dentist(s)', 'dentistry', 'dds', 'dmd', 'orthodontist(s)', 'orthodontic(s)', 'orthodontia', 'periodontist(s)',
|
|
316
|
+
'periodontics', 'periodontal', 'endodontist(s)', 'endodontics', 'prosthodontist(s)', 'prosthodontics', 'pedodontist(s)',
|
|
317
|
+
'pediatric dentist(s)', 'oral surgeon(s)', 'oral surgery', 'oral and maxillofacial', 'maxillofacial', 'dental hygienist(s)', 'rdh',
|
|
318
|
+
'dental assistant(s)', 'dso', 'dsos', 'dental support organization(s)', 'invisalign',
|
|
319
|
+
],
|
|
320
|
+
companies: [
|
|
321
|
+
'align technology', 'henry schein', 'dentsply', 'smile direct club', 'smiledirectclub', 'clearchoice', 'sonrava', 'envista$', 'envista holdings',
|
|
322
|
+
'straumann', 'ivoclar', 'nobel biocare', 'great expressions', 'smile brands', 'bright now', 'affordable dentures',
|
|
323
|
+
],
|
|
324
|
+
},
|
|
325
|
+
{
|
|
326
|
+
key: 'pharma-biotech', label: 'Pharma & Biotech', group: 'health', kind: 'industry',
|
|
327
|
+
words: [
|
|
328
|
+
'pharma', 'pharmaceutical(s)', 'biotech', 'biotechnology', 'biopharma', 'biopharmaceutical(s)', 'therapeutics', 'bioscience(s)',
|
|
329
|
+
'biologics', 'drug discovery', 'drug development', 'clinical trial(s)', 'clinical research', 'clinical research associate(s)',
|
|
330
|
+
'medical science liaison(s)', 'pharmaceutical sales', 'pharma sales', 'regulatory affairs', 'pharmacovigilance', 'drug safety',
|
|
331
|
+
'gene therapy', 'cell therapy', 'genomics', 'bioinformatics', 'molecular biology', 'immunology', 'vaccine(s)', 'life sciences',
|
|
332
|
+
'antibody', 'antibodies', 'crispr', 'mrna', 'biostatistics', 'biostatistician(s)', 'medicinal chemistry',
|
|
333
|
+
],
|
|
334
|
+
companies: [
|
|
335
|
+
'pfizer', 'moderna', 'johnson & johnson', 'j&j$', 'janssen', 'merck', 'msd$', 'abbvie', 'bristol myers squibb', 'eli lilly',
|
|
336
|
+
'lilly$', 'novartis', 'roche$', 'roche diagnostics', 'genentech', 'astrazeneca', 'gsk$', 'glaxosmithkline', 'sanofi', 'novo nordisk',
|
|
337
|
+
'bayer', 'amgen', 'gilead', 'regeneron', 'vertex pharmaceuticals', 'biogen', 'takeda', 'boehringer ingelheim', 'viatris',
|
|
338
|
+
'mylan', 'biontech', 'illumina', 'thermo fisher', 'iqvia', 'syneos', 'parexel', 'charles river laboratories', 'catalent', 'lonza',
|
|
339
|
+
'danaher', 'alnylam', 'incyte', 'seagen', 'bluebird bio', 'intellia', 'editas', 'insitro', '23andme', 'ginkgo bioworks', 'zoetis',
|
|
340
|
+
],
|
|
341
|
+
},
|
|
342
|
+
{
|
|
343
|
+
key: 'medical-devices', label: 'Medical Devices', group: 'health', kind: 'industry',
|
|
344
|
+
words: [
|
|
345
|
+
'medical device(s)', 'medical technology', 'medtech', 'med tech', 'medical equipment', 'durable medical equipment',
|
|
346
|
+
'surgical robotics', 'surgical device(s)', 'orthopedic implant(s)', 'medical diagnostics', 'in vitro diagnostics',
|
|
347
|
+
'medical imaging', 'biomedical engineer(s)', 'biomedical engineering', 'regulatory affairs', 'medical device sales', '510 k',
|
|
348
|
+
],
|
|
349
|
+
companies: [
|
|
350
|
+
'medtronic', 'stryker', 'boston scientific', 'abbott$', 'abbott laboratories', 'abbott diagnostics', 'becton dickinson',
|
|
351
|
+
'baxter international', 'baxter healthcare', 'zimmer biomet', 'smith & nephew',
|
|
352
|
+
'edwards lifesciences', 'intuitive surgical', 'ge healthcare', 'philips healthcare', 'siemens healthineers', 'hologic', 'dexcom',
|
|
353
|
+
'insulet', 'resmed', 'masimo', 'teleflex', 'hillrom', 'hill rom', 'steris', 'conmed', 'globus medical', 'nuvasive',
|
|
354
|
+
'integra lifesciences', 'penumbra$', 'abiomed', 'karl storz', 'arthrex', 'exactech', 'butterfly network', 'outset medical',
|
|
355
|
+
'shockwave medical', 'inari medical', 'axonics', 'tandem diabetes', 'varian',
|
|
356
|
+
],
|
|
357
|
+
},
|
|
358
|
+
{
|
|
359
|
+
key: 'mental-health', label: 'Mental Health', group: 'health', kind: 'industry',
|
|
360
|
+
words: [
|
|
361
|
+
'mental health', 'behavioral health', 'psychologist(s)', 'psychiatrist(s)', 'psychiatry', 'psychiatric', 'psychotherapist(s)',
|
|
362
|
+
'psychotherapy', 'therapist(s)', 'lmft', 'lcsw', 'lpc', 'lmhc', 'lcpc', 'lpcc', 'psyd', 'licensed clinical social worker(s)',
|
|
363
|
+
'clinical social worker(s)', 'licensed professional counselor(s)', 'marriage and family therapist(s)', 'mental health counselor(s)',
|
|
364
|
+
'addiction counselor(s)', 'addiction treatment', 'addiction medicine', 'substance abuse', 'behavioral therapist(s)',
|
|
365
|
+
'aba therapist(s)', 'applied behavior analysis', 'bcba', 'eating disorder(s)', 'emdr', 'cognitive behavioral therapy',
|
|
366
|
+
'teletherapy', 'online therapy',
|
|
367
|
+
],
|
|
368
|
+
companies: [
|
|
369
|
+
'betterhelp', 'talkspace', 'headspace', 'lyra health', 'spring health', 'modern health', 'acadia healthcare', 'nami$',
|
|
370
|
+
'national alliance on mental illness', 'the jed foundation', 'crisis text line',
|
|
371
|
+
],
|
|
372
|
+
// A therapist of the body is not a therapist of the mind.
|
|
373
|
+
not: ['physical therapist(s)', 'physical therapy', 'occupational therapist(s)', 'occupational therapy', 'respiratory therapist(s)',
|
|
374
|
+
'respiratory therapy', 'massage therapist(s)', 'massage therapy', 'speech therapist(s)', 'speech therapy', 'radiation therapist(s)',
|
|
375
|
+
'radiation therapy', 'infusion therapy'],
|
|
376
|
+
},
|
|
377
|
+
{
|
|
378
|
+
key: 'fitness-wellness', label: 'Fitness & Wellness', group: 'health', kind: 'industry',
|
|
379
|
+
words: [
|
|
380
|
+
'fitness', 'gym(s)', 'personal trainer(s)', 'personal training', 'fitness coach', 'fitness coaches', 'strength and conditioning',
|
|
381
|
+
'crossfit', 'pilates', 'yoga', 'yoga teacher(s)', 'yoga instructor(s)', 'wellness', 'massage therapist(s)', 'massage therapy',
|
|
382
|
+
'nutritionist(s)', 'dietitian(s)', 'registered dietitian(s)', 'health coach', 'health coaches', 'wellness coach', 'wellness coaches',
|
|
383
|
+
'meditation', 'mindfulness', 'group fitness', 'fitness instructor(s)', 'bodybuilding', 'athletic trainer(s)',
|
|
384
|
+
],
|
|
385
|
+
companies: [
|
|
386
|
+
'planet fitness', 'la fitness', 'equinox$', 'equinox fitness', 'orangetheory', 'orange theory', 'f45', 'crunch fitness', 'anytime fitness', 'golds gym',
|
|
387
|
+
'24 hour fitness', 'life time fitness', 'soulcycle', 'peloton', 'barrys bootcamp', 'corepower yoga', 'club pilates',
|
|
388
|
+
'xponential fitness', 'whoop$', 'oura$', 'strava', 'myfitnesspal', 'noom$', 'weightwatchers', 'ww international', 'beachbody',
|
|
389
|
+
'hydrow', 'tonal$', 'classpass', 'mindbody', 'ymca',
|
|
390
|
+
],
|
|
391
|
+
not: ['corporate wellness', 'employee wellness', 'financial wellness', ...HOBBY],
|
|
392
|
+
},
|
|
393
|
+
{
|
|
394
|
+
key: 'veterinary', label: 'Veterinary & Animal Care', group: 'health', kind: 'industry',
|
|
395
|
+
words: [
|
|
396
|
+
'veterinary', 'veterinarian(s)', 'veterinary medicine', 'veterinary technician(s)', 'veterinary assistant(s)', 'vet tech(s)',
|
|
397
|
+
'vet assistant(s)', 'vet clinic(s)', 'vet hospital(s)', 'emergency vet', 'dvm', 'animal hospital(s)', 'animal clinic(s)',
|
|
398
|
+
'pet hospital(s)', 'animal care', 'animal shelter(s)', 'animal rescue', 'animal welfare', 'animal control', 'pet care',
|
|
399
|
+
'pet grooming', 'pet groomer(s)', 'dog groomer(s)', 'groomer(s)', 'dog trainer(s)', 'dog training', 'pet sitter(s)', 'pet sitting',
|
|
400
|
+
'dog walker(s)', 'kennel(s)', 'doggy daycare', 'zookeeper(s)', 'zoo(s)', 'aquarium(s)', 'equine', 'farrier(s)',
|
|
401
|
+
'animal behaviorist(s)',
|
|
402
|
+
],
|
|
403
|
+
companies: [
|
|
404
|
+
'banfield', 'vca$', 'vca animal hospitals', 'bluepearl', 'mars veterinary health', 'national veterinary associates',
|
|
405
|
+
'thrive pet healthcare', 'heartland veterinary partners', 'petvet care centers', 'idexx', 'elanco', 'aspca',
|
|
406
|
+
'humane society', 'best friends animal society', 'rover$', 'trupanion', 'american veterinary medical association',
|
|
407
|
+
],
|
|
408
|
+
not: [...HOBBY],
|
|
409
|
+
},
|
|
410
|
+
|
|
411
|
+
// ── Education ─────────────────────────────────────────────────────────────
|
|
412
|
+
{
|
|
413
|
+
key: 'k12', label: 'K-12 Education', group: 'education', kind: 'industry',
|
|
414
|
+
words: [
|
|
415
|
+
'k 12', 'k12', 'elementary school(s)', 'middle school(s)', 'high school(s)', 'junior high', 'primary school(s)',
|
|
416
|
+
'secondary school(s)', 'public school(s)', 'charter school(s)', 'private school(s)', 'school district(s)',
|
|
417
|
+
'independent school district', 'isd', 'montessori', 'preschool(s)', 'pre k', 'prek', 'kindergarten', 'early childhood', 'teacher(s)',
|
|
418
|
+
'substitute teacher(s)', 'assistant principal(s)', 'vice principal(s)', 'school principal(s)', 'head of school', 'headmaster',
|
|
419
|
+
'superintendent of schools', 'school superintendent(s)', 'school board', 'guidance counselor(s)', 'school counselor(s)',
|
|
420
|
+
'school psychologist(s)', 'school nurse(s)', 'special education', 'special ed', 'ese teacher(s)', 'sped', 'paraprofessional(s)',
|
|
421
|
+
'homeschool', 'tutor(s)', 'tutoring', 'intermediate school(s)', 'preparatory school(s)', 'prep school(s)',
|
|
422
|
+
],
|
|
423
|
+
// In a company's name only: "Oak Elementary" is a school, and a headline's
|
|
424
|
+
// "elementary" is as often something else.
|
|
425
|
+
names: ['elementary'],
|
|
426
|
+
companies: [
|
|
427
|
+
'teach for america', 'kipp', 'success academy', 'idea public schools', 'khan academy', 'kumon', 'sylvan learning', 'mathnasium',
|
|
428
|
+
'huntington learning', 'varsity tutors', 'connections academy', 'kindercare', 'bright horizons', 'learning care group',
|
|
429
|
+
],
|
|
430
|
+
not: ['yoga teacher(s)', 'dance teacher(s)', 'piano teacher(s)'],
|
|
431
|
+
},
|
|
432
|
+
{
|
|
433
|
+
key: 'higher-ed', label: 'Higher Education', group: 'education', kind: 'industry',
|
|
434
|
+
words: [
|
|
435
|
+
'university', 'universities', 'universidad', 'college', 'colleges', 'community college(s)', 'higher education', 'higher ed',
|
|
436
|
+
'academia', 'professor(s)', 'assistant professor(s)', 'associate professor(s)', 'adjunct professor(s)', 'adjunct faculty',
|
|
437
|
+
'adjunct instructor(s)', 'lecturer(s)', 'senior lecturer(s)', 'faculty member(s)', 'postdoc(s)', 'postdoctoral', 'post doctoral',
|
|
438
|
+
'phd candidate(s)', 'phd student(s)', 'doctoral candidate(s)', 'doctoral student(s)', 'graduate student(s)', 'grad student(s)',
|
|
439
|
+
'graduate assistant(s)', 'graduate research assistant(s)', 'research assistant(s)', 'graduate teaching assistant(s)', 'provost',
|
|
440
|
+
'dean of', 'associate dean(s)', 'assistant dean(s)', 'registrar', 'bursar', 'financial aid', 'admissions counselor(s)',
|
|
441
|
+
'college admissions', 'university admissions', 'student affairs', 'residence life', 'academic advisor(s)', 'academic advising',
|
|
442
|
+
'career services', 'alumni relations', 'tenure track', 'tenured', 'chancellor', 'vice chancellor', 'undergraduate', 'undergrad',
|
|
443
|
+
'mba candidate(s)', 'mba student(s)', 'business school(s)', 'school of business', 'law school(s)', 'school of law',
|
|
444
|
+
'medical school(s)', 'school of medicine', 'graduate school(s)', 'school of management',
|
|
445
|
+
],
|
|
446
|
+
companies: [
|
|
447
|
+
'mit$', 'massachusetts institute of technology', 'caltech', 'california institute of technology', 'georgia tech',
|
|
448
|
+
'georgia institute of technology', 'virginia tech', 'texas a&m', 'ucla$', 'uc berkeley', 'uc davis', 'uc san diego', 'uc irvine',
|
|
449
|
+
'purdue$', 'purdue global', 'rutgers', 'cornell$', 'yale$', 'princeton$',
|
|
450
|
+
'harvard$', 'harvard business school', 'harvard law school', 'harvard medical school', 'harvard kennedy school', 'stanford$',
|
|
451
|
+
'stanford gsb', 'penn state', 'ohio state$', 'arizona state$', 'georgetown$', 'vanderbilt$', 'emory$', 'tulane$',
|
|
452
|
+
'wharton$', 'wharton school', 'kellogg school of management', 'insead', 'london business school', 'columbia business school',
|
|
453
|
+
'mit sloan', 'duke$', 'coursera', 'edx$',
|
|
454
|
+
],
|
|
455
|
+
// "College Park" is a place; a credit union named after a university is a
|
|
456
|
+
// bank, and a hospital named for one (University Health) is a hospital.
|
|
457
|
+
not: ['college park', 'college hunks', 'credit union(s)', 'university health', 'health system(s)', 'hospital(s)', 'medical center(s)'],
|
|
458
|
+
},
|
|
459
|
+
|
|
460
|
+
// ── Marketing & Media ─────────────────────────────────────────────────────
|
|
461
|
+
{
|
|
462
|
+
key: 'marketing-advertising', label: 'Marketing & Advertising', group: 'media', kind: 'function',
|
|
463
|
+
// Every company markets itself: a company is in marketing when it is an
|
|
464
|
+
// agency or sells marketing tools.
|
|
465
|
+
words: [
|
|
466
|
+
'ad agency', 'ad agencies', 'advertising agency', 'advertising agencies', 'digital agency', 'digital agencies', 'creative agency',
|
|
467
|
+
'creative agencies', 'marketing agency', 'marketing agencies', 'marketing firm(s)', 'media agency', 'media agencies', 'martech',
|
|
468
|
+
'adtech', 'ad tech',
|
|
469
|
+
],
|
|
470
|
+
roles: [
|
|
471
|
+
'marketing', 'marketer(s)', 'advertising', 'branding', 'brand strategy', 'brand strategist(s)', 'brand manager(s)',
|
|
472
|
+
'brand marketing', 'copywriter(s)', 'copywriting', 'seo', 'sem', 'ppc', 'search engine optimization', 'paid media', 'paid social',
|
|
473
|
+
'paid search', 'performance marketing', 'growth marketing', 'digital marketing', 'content marketing', 'email marketing',
|
|
474
|
+
'social media marketing', 'social media manager(s)', 'influencer marketing', 'affiliate marketing', 'demand generation',
|
|
475
|
+
'demand gen', 'lifecycle marketing', 'product marketing', 'marketing operations', 'marketing ops', 'media buyer(s)',
|
|
476
|
+
'media buying', 'media planner(s)', 'media planning', 'programmatic', 'ad operations', 'ad ops', 'market research',
|
|
477
|
+
],
|
|
478
|
+
companies: [
|
|
479
|
+
'wpp$', 'omnicom', 'publicis', 'interpublic', 'ipg$', 'ipg mediabrands', 'dentsu', 'havas', 'ogilvy', 'bbdo', 'tbwa', 'mccann$', 'mccann worldgroup',
|
|
480
|
+
'leo burnett', 'saatchi', 'grey group', 'droga5', 'wieden & kennedy', 'r ga', 'vaynermedia', 'vayner media', 'vaynerx',
|
|
481
|
+
'the trade desk', 'mediamonks', 'media monks', 'monks$', 'razorfish', 'digitas',
|
|
482
|
+
'wunderman thompson', 'vml', 'vmly&r', 'groupm', 'group m', 'mindshare$', 'mindshare worldwide', 'wavemaker', 'horizon media', 'starcom', 'spark foundry',
|
|
483
|
+
'kantar', 'nielsen$', 'nielsen holdings', 'nielseniq', 'ipsos', 'semrush', 'criteo', 'taboola', 'outbrain', 'applovin', 'integral ad science', 'doubleverify',
|
|
484
|
+
'magnite', 'pubmatic', '72andsunny', 'crispin porter', 'goodby silverstein', 'isobar', 'iprospect', 'merkle$', 'acxiom',
|
|
485
|
+
],
|
|
486
|
+
},
|
|
487
|
+
{
|
|
488
|
+
key: 'pr-comms', label: 'PR & Communications', group: 'media', kind: 'function',
|
|
489
|
+
// Most companies have a communications team: a company is in PR when it
|
|
490
|
+
// is a PR or communications agency.
|
|
491
|
+
words: [
|
|
492
|
+
'pr agency', 'pr agencies', 'pr firm(s)', 'public relations agency', 'public relations agencies', 'public relations firm(s)',
|
|
493
|
+
'communications agency', 'communications agencies', 'communications firm(s)',
|
|
494
|
+
],
|
|
495
|
+
roles: [
|
|
496
|
+
'public relations', 'pr manager(s)', 'pr director(s)', 'pr specialist(s)', 'pr lead',
|
|
497
|
+
'pr strategist(s)', 'pr professional(s)', 'pr executive(s)', 'pr comms', 'pr communications', 'comms', 'corporate communications',
|
|
498
|
+
'strategic communications', 'internal communications', 'external communications', 'crisis communications',
|
|
499
|
+
'marketing communications', 'communications manager(s)', 'communications director(s)', 'director of communications',
|
|
500
|
+
'head of communications', 'communications specialist(s)', 'communications coordinator(s)', 'communications lead',
|
|
501
|
+
'communications strategist(s)', 'vp communications', 'vp of communications', 'media relations', 'press secretary', 'spokesperson',
|
|
502
|
+
'spokeswoman', 'spokesman', 'publicist(s)',
|
|
503
|
+
],
|
|
504
|
+
names: ['pr'],
|
|
505
|
+
companies: [
|
|
506
|
+
'edelman$', 'weber shandwick', 'fleishmanhillard', 'fleishman hillard', 'ketchum$', 'burson', 'bcw$', 'hill & knowlton',
|
|
507
|
+
'brunswick group', 'finsbury', 'teneo$', 'golin$', 'porter novelli', 'ruder finn', 'apco worldwide', 'sard verbinnen', 'kekst',
|
|
508
|
+
'mww$', 'praytell', 'prosek', 'zeno group', 'allison worldwide', 'cision', 'meltwater', 'muck rack', 'pr newswire', 'business wire',
|
|
509
|
+
],
|
|
510
|
+
},
|
|
511
|
+
{
|
|
512
|
+
key: 'media-publishing', label: 'Media & Publishing', group: 'media', kind: 'industry',
|
|
513
|
+
words: [
|
|
514
|
+
'journalist(s)', 'journalism', 'reporter(s)', 'editor(s)', 'editor in chief', 'managing editor(s)', 'copy editor(s)', 'news',
|
|
515
|
+
'newsroom(s)', 'newspaper(s)', 'magazine(s)', 'publishing', 'publisher(s)', 'book publishing', 'broadcast journalist(s)',
|
|
516
|
+
'news anchor(s)', 'correspondent(s)', 'columnist(s)', 'staff writer(s)', 'freelance writer(s)', 'podcast(s)',
|
|
517
|
+
],
|
|
518
|
+
companies: [
|
|
519
|
+
'new york times', 'nyt$', 'washington post', 'wall street journal', 'wsj$', 'dow jones', 'news corp', 'gannett', 'usa today',
|
|
520
|
+
'tribune', 'hearst', 'conde nast', 'axel springer', 'politico', 'axios', 'the atlantic$', 'vox media', 'buzzfeed', 'vice media',
|
|
521
|
+
'bustle', 'the athletic$', 'bloomberg$', 'reuters', 'thomson reuters', 'associated press', 'cnn$', 'msnbc', 'cbs news', 'abc news',
|
|
522
|
+
'npr$', 'national public radio', 'bbc', 'the guardian$', 'the economist', 'financial times', 'forbes$',
|
|
523
|
+
'forbes media', 'fortune$', 'business insider', 'insider$', 'techcrunch', 'the verge$', 'wired$', 'penguin random house',
|
|
524
|
+
'harpercollins', 'simon & schuster', 'hachette', 'macmillan publishers', 'macmillan learning', 'scholastic', 'mcgraw hill', 'pearson$', 'wiley$', 'john wiley',
|
|
525
|
+
'elsevier', 'springer nature', 'sinclair broadcast', 'nexstar', 'tegna', 'iheartmedia', 'audacy',
|
|
526
|
+
],
|
|
527
|
+
// Newport News builds ships, and good news is a church's.
|
|
528
|
+
not: ['video editor(s)', 'photo editor(s)', 'film editor(s)', 'newport news', 'good news'],
|
|
529
|
+
},
|
|
530
|
+
{
|
|
531
|
+
key: 'creator-economy', label: 'Creator Economy', group: 'media', kind: 'industry',
|
|
532
|
+
words: [
|
|
533
|
+
'content creator(s)', 'creator economy', 'digital creator(s)', 'ugc', 'ugc creator(s)', 'influencer(s)', 'youtuber(s)',
|
|
534
|
+
'tiktoker(s)', 'streamer(s)', 'podcast(s)', 'podcaster(s)', 'podcast host(s)', 'podcasting', 'blogger(s)', 'vlogger(s)',
|
|
535
|
+
'creator partnership(s)', 'influencer marketing', 'content creation',
|
|
536
|
+
],
|
|
537
|
+
companies: [
|
|
538
|
+
'youtube', 'tiktok', 'bytedance', 'snap$', 'patreon', 'substack', 'twitch$', 'linktree',
|
|
539
|
+
'kajabi', 'teachable', 'cameo$', 'whop$', 'beehiiv', 'convertkit', 'jellysmack', 'dude perfect', 'mrbeast', 'beast industries',
|
|
540
|
+
'fourthwall', 'captiv8', 'creatoriq', 'ltk$', 'rewardstyle',
|
|
541
|
+
],
|
|
542
|
+
},
|
|
543
|
+
|
|
544
|
+
// ── Entertainment & Gaming ────────────────────────────────────────────────
|
|
545
|
+
{
|
|
546
|
+
key: 'film-tv-music', label: 'Film, TV & Music', group: 'entertainment', kind: 'industry',
|
|
547
|
+
words: [
|
|
548
|
+
'film', 'films', 'filmmaker(s)', 'filmmaking', 'film production', 'movie(s)', 'motion picture(s)', 'cinematographer(s)',
|
|
549
|
+
'cinematography', 'screenwriter(s)', 'screenwriting', 'showrunner(s)', 'tv', 'television', 'broadcasting', 'post production',
|
|
550
|
+
'vfx', 'visual effects', 'animator(s)', 'animation studio(s)', 'music', 'musician(s)', 'songwriter(s)', 'record label(s)',
|
|
551
|
+
'recording artist(s)', 'recording studio(s)', 'music producer(s)', 'audio engineer(s)', 'sound engineer(s)', 'dj', 'djs',
|
|
552
|
+
'actor(s)', 'actress', 'actresses', 'casting director(s)', 'talent agency', 'hollywood', 'production company', 'production companies',
|
|
553
|
+
'theatre', 'theater', 'broadway', 'performing arts', 'live music', 'music festival(s)', 'orchestra', 'symphony', 'opera',
|
|
554
|
+
'video editor(s)', 'film editor(s)',
|
|
555
|
+
],
|
|
556
|
+
names: ['records', 'pictures'],
|
|
557
|
+
companies: [
|
|
558
|
+
'netflix', 'disney', 'walt disney', 'pixar', 'lucasfilm', 'marvel', 'warner bros', 'warner music', 'wbd$', 'hbo', 'paramount$',
|
|
559
|
+
'paramount global', 'paramount pictures', 'paramount skydance',
|
|
560
|
+
'nbcuniversal', 'nbc universal', 'universal music', 'umg$', 'sony$', 'lionsgate', 'mgm$',
|
|
561
|
+
'metro goldwyn mayer', 'a24', 'blumhouse', 'legendary entertainment', 'dreamworks', 'fox$', 'fox corporation',
|
|
562
|
+
'fox entertainment', '20th century', 'amc networks', 'regal cinemas', 'cinemark', 'imax', 'roku', 'hulu', 'peacock$', 'spotify',
|
|
563
|
+
'soundcloud', 'siriusxm', 'sirius xm', 'live nation', 'ticketmaster', 'aeg$', 'aeg presents', 'caa$', 'creative artists agency',
|
|
564
|
+
'wme$', 'william morris endeavor', 'united talent agency', 'def jam', 'interscope', 'bmg$', 'ascap', 'recording academy',
|
|
565
|
+
'viacom', 'cbs$', 'cbs studios', 'showtime', 'starz', 'a&e networks', 'univision', 'telemundo', 'tubi$', 'crunchyroll',
|
|
566
|
+
'illumination entertainment', 'skydance',
|
|
567
|
+
],
|
|
568
|
+
not: ['home theater', 'home theatre', 'operating theatre', 'medical records', 'window film', 'window tint', 'plastic film',
|
|
569
|
+
'threat actor(s)', 'bad actor(s)', ...HOBBY],
|
|
570
|
+
},
|
|
571
|
+
{
|
|
572
|
+
key: 'gaming-esports', label: 'Gaming & Esports', group: 'entertainment', kind: 'industry',
|
|
573
|
+
words: [
|
|
574
|
+
'gaming', 'video game(s)', 'videogame(s)', 'game developer(s)', 'game development', 'game designer(s)', 'game design',
|
|
575
|
+
'game studio(s)', 'game artist(s)', 'game producer(s)', 'gameplay', 'esports', 'e sports', 'esport', 'unreal engine',
|
|
576
|
+
'unity developer(s)', 'level designer(s)', 'game engine(s)', 'indie game(s)', 'mobile games', 'mobile gaming', 'pro gamer(s)',
|
|
577
|
+
'professional gamer(s)', 'twitch streamer(s)',
|
|
578
|
+
],
|
|
579
|
+
companies: [
|
|
580
|
+
'electronic arts', 'ea$', 'ea sports', 'activision', 'blizzard entertainment', 'riot games', 'epic games', 'valve$', 'valve corporation',
|
|
581
|
+
'ubisoft', 'nintendo', 'playstation', 'xbox', 'take two', 'rockstar games', '2k$', '2k games',
|
|
582
|
+
'bungie', 'bethesda softworks', 'bethesda game studios', 'zynga', 'roblox', 'unity$', 'unity technologies', 'supercell',
|
|
583
|
+
'king digital', 'niantic', 'square enix', 'bandai namco', 'sega', 'capcom', 'konami', 'nexon', 'netease games', 'tencent games',
|
|
584
|
+
'scopely', 'playtika', 'jam city', 'moon active', 'twitch$', 'faze clan', 'team liquid', '100 thieves', 'cloud9', 'optic gaming',
|
|
585
|
+
'dreamhack', 'gamestop', 'mojang', 'insomniac games', 'naughty dog', 'respawn entertainment',
|
|
586
|
+
],
|
|
587
|
+
// Casino "gaming" is gambling.
|
|
588
|
+
not: ['casino(s)', 'sportsbook(s)', 'sports betting', 'igaming', 'gaming commission', 'gaming control', 'slot machine(s)', ...HOBBY],
|
|
589
|
+
},
|
|
590
|
+
{
|
|
591
|
+
key: 'sports', label: 'Sports', group: 'entertainment', kind: 'industry',
|
|
592
|
+
words: [
|
|
593
|
+
'sports', 'athlete(s)', 'athletics', 'athletic director(s)', 'athletic trainer(s)', 'professional athlete(s)', 'pro athlete(s)',
|
|
594
|
+
'nfl', 'nba', 'mlb', 'nhl', 'wnba', 'ncaa', 'nwsl', 'pga', 'lpga', 'nascar', 'ufc', 'wwe', 'fifa', 'olympic(s)', 'olympian(s)',
|
|
595
|
+
'football', 'basketball', 'baseball', 'soccer', 'hockey', 'golf', 'tennis', 'volleyball', 'lacrosse', 'softball', 'wrestling',
|
|
596
|
+
'rugby', 'boxing', 'mma', 'track and field', 'head coach', 'head coaches', 'assistant coach', 'assistant coaches',
|
|
597
|
+
'sports marketing', 'sports medicine', 'sports management', 'sports business', 'sports betting', 'sportsbook(s)', 'fantasy sports',
|
|
598
|
+
'stadium(s)', 'sports broadcaster(s)', 'sportscaster(s)',
|
|
599
|
+
],
|
|
600
|
+
companies: [
|
|
601
|
+
'national football league', 'national basketball association', 'major league baseball', 'national hockey league',
|
|
602
|
+
'major league soccer', 'espn', 'cbs sports', 'turner sports', 'dazn', 'the athletic$', 'bleacher report',
|
|
603
|
+
'barstool sports', 'draftkings', 'fanduel', 'fanatics', 'img academy', 'wasserman$', 'wasserman media', 'excel sports', 'klutch sports',
|
|
604
|
+
'genius sports', 'sportradar', 'hudl', 'special olympics',
|
|
605
|
+
// NFL
|
|
606
|
+
'arizona cardinals', 'atlanta falcons', 'baltimore ravens', 'buffalo bills', 'carolina panthers', 'chicago bears',
|
|
607
|
+
'cincinnati bengals', 'cleveland browns', 'dallas cowboys', 'denver broncos', 'detroit lions', 'green bay packers',
|
|
608
|
+
'houston texans', 'indianapolis colts', 'jacksonville jaguars', 'kansas city chiefs', 'las vegas raiders', 'los angeles chargers',
|
|
609
|
+
'los angeles rams', 'miami dolphins', 'minnesota vikings', 'new england patriots', 'new orleans saints', 'new york giants',
|
|
610
|
+
'new york jets', 'philadelphia eagles', 'pittsburgh steelers', 'san francisco 49ers', 'seattle seahawks', 'tampa bay buccaneers',
|
|
611
|
+
'tennessee titans', 'washington commanders',
|
|
612
|
+
// NBA
|
|
613
|
+
'atlanta hawks', 'boston celtics', 'brooklyn nets', 'charlotte hornets', 'chicago bulls', 'cleveland cavaliers', 'dallas mavericks',
|
|
614
|
+
'denver nuggets', 'detroit pistons', 'golden state warriors', 'houston rockets', 'indiana pacers', 'la clippers',
|
|
615
|
+
'los angeles clippers', 'los angeles lakers', 'memphis grizzlies', 'miami heat', 'milwaukee bucks', 'minnesota timberwolves',
|
|
616
|
+
'new orleans pelicans', 'new york knicks', 'oklahoma city thunder', 'orlando magic', 'philadelphia 76ers', 'phoenix suns',
|
|
617
|
+
'portland trail blazers', 'sacramento kings', 'san antonio spurs', 'toronto raptors', 'utah jazz', 'washington wizards',
|
|
618
|
+
// MLB
|
|
619
|
+
'arizona diamondbacks', 'atlanta braves', 'baltimore orioles', 'boston red sox', 'chicago cubs', 'chicago white sox',
|
|
620
|
+
'cincinnati reds', 'cleveland guardians', 'colorado rockies', 'detroit tigers', 'houston astros', 'kansas city royals',
|
|
621
|
+
'los angeles angels', 'los angeles dodgers', 'miami marlins', 'milwaukee brewers', 'minnesota twins', 'new york mets',
|
|
622
|
+
'new york yankees', 'oakland athletics', 'philadelphia phillies', 'pittsburgh pirates', 'san diego padres', 'san francisco giants',
|
|
623
|
+
'seattle mariners', 'st louis cardinals', 'tampa bay rays', 'texas rangers baseball', 'toronto blue jays', 'washington nationals',
|
|
624
|
+
// NHL
|
|
625
|
+
'anaheim ducks', 'boston bruins', 'buffalo sabres', 'calgary flames', 'carolina hurricanes', 'chicago blackhawks',
|
|
626
|
+
'colorado avalanche', 'columbus blue jackets', 'dallas stars', 'detroit red wings', 'edmonton oilers', 'florida panthers',
|
|
627
|
+
'los angeles kings', 'minnesota wild', 'montreal canadiens', 'nashville predators', 'new jersey devils', 'new york islanders',
|
|
628
|
+
'new york rangers', 'ottawa senators', 'philadelphia flyers', 'pittsburgh penguins', 'san jose sharks', 'seattle kraken',
|
|
629
|
+
'st louis blues', 'tampa bay lightning', 'toronto maple leafs', 'utah mammoth', 'utah hockey club', 'vancouver canucks',
|
|
630
|
+
'vegas golden knights', 'washington capitals', 'winnipeg jets',
|
|
631
|
+
// MLS
|
|
632
|
+
'atlanta united fc', 'austin fc', 'charlotte fc', 'chicago fire fc', 'fc cincinnati', 'colorado rapids', 'columbus crew',
|
|
633
|
+
'dc united', 'd c united', 'fc dallas', 'houston dynamo', 'inter miami', 'la galaxy', 'lafc', 'los angeles fc',
|
|
634
|
+
'minnesota united fc', 'cf montreal', 'nashville sc', 'new england revolution', 'new york city fc', 'new york red bulls',
|
|
635
|
+
'orlando city sc', 'orlando city soccer', 'philadelphia union$', 'portland timbers', 'real salt lake', 'san diego fc',
|
|
636
|
+
'san jose earthquakes', 'seattle sounders', 'sporting kansas city', 'st louis city sc', 'toronto fc', 'vancouver whitecaps',
|
|
637
|
+
],
|
|
638
|
+
// A fan or a sports parent isn't in the business, and an ex-player's new company isn't a team.
|
|
639
|
+
not: ['cricket wireless', 'alumni', 'alum', 'veteran(s)', 'soccer mom(s)', 'hockey mom(s)', 'baseball mom(s)', 'football mom(s)',
|
|
640
|
+
'sports mom(s)', 'soccer dad(s)', 'hockey dad(s)', 'sports dad(s)', ...HOBBY],
|
|
641
|
+
},
|
|
642
|
+
|
|
643
|
+
// ── Retail, Consumer & Hospitality ────────────────────────────────────────
|
|
644
|
+
{
|
|
645
|
+
key: 'ecommerce-retail', label: 'E-commerce & Retail', group: 'consumer', kind: 'industry',
|
|
646
|
+
words: [
|
|
647
|
+
'e commerce', 'ecommerce', 'ecom', 'online store(s)', 'online retail', 'online retailer(s)', 'retail', 'retailer(s)',
|
|
648
|
+
'amazon seller(s)', 'amazon fba', 'fba', 'dtc', 'd2c', 'direct to consumer', 'marketplace seller(s)', 'store manager(s)',
|
|
649
|
+
'retail associate(s)', 'merchandising', 'merchandiser(s)', 'visual merchandiser(s)', 'retail buyer(s)', 'category manager(s)',
|
|
650
|
+
'omnichannel', 'loss prevention', 'cashier(s)', 'grocery', 'supermarket(s)', 'convenience store(s)', 'department store(s)',
|
|
651
|
+
],
|
|
652
|
+
companies: [
|
|
653
|
+
'amazon$', 'amazon com', 'walmart', 'target$', 'target corporation', 'costco', 'home depot', 'lowes$', 'best buy', 'kroger',
|
|
654
|
+
'albertsons', 'safeway', 'whole foods', 'trader joes', 'aldi$', 'walgreens', 'cvs health', 'macys',
|
|
655
|
+
'nordstrom', 'kohls', 'tj maxx', 'tjx', 'ross stores', 'dollar general', 'dollar tree', 'family dollar', 'ikea', 'wayfair', 'etsy',
|
|
656
|
+
'ebay', 'shopify', 'chewy', 'instacart', 'temu$', 'shein', 'alibaba', 'zappos', 'sephora', 'ulta', 'bath & body works',
|
|
657
|
+
'victorias secret', 'gap$', 'gap inc', 'old navy', 'banana republic', 'h&m', 'zara$', 'inditex', 'uniqlo', 'petsmart', 'petco',
|
|
658
|
+
'dicks sporting goods', 'academy sports', 'sams club', '7 eleven', 'circle k', 'office depot', 'whatnot', 'poshmark', 'depop',
|
|
659
|
+
'stockx', 'bigcommerce', 'woocommerce',
|
|
660
|
+
],
|
|
661
|
+
not: ['retail banking', 'retail bank(s)', 'retail investor(s)', 'retail real estate'],
|
|
662
|
+
},
|
|
663
|
+
{
|
|
664
|
+
key: 'consumer-goods', label: 'Consumer Goods', group: 'consumer', kind: 'industry',
|
|
665
|
+
words: [
|
|
666
|
+
'cpg', 'consumer goods', 'consumer packaged goods', 'consumer products', 'fmcg', 'packaged food(s)', 'beverage brand(s)',
|
|
667
|
+
'beverage company', 'brewery', 'breweries', 'winery', 'wineries', 'distillery', 'distilleries', 'craft beer', 'cosmetics', 'skincare',
|
|
668
|
+
'skin care', 'beauty brand(s)', 'fragrance(s)', 'apparel', 'fashion', 'fashion brand(s)', 'fashion designer(s)', 'footwear',
|
|
669
|
+
'jewelry', 'jewellery', 'consumer electronics', 'toy company', 'toys', 'home goods', 'household products', 'personal care',
|
|
670
|
+
'pet food', 'confectionery', 'dtc brand(s)',
|
|
671
|
+
],
|
|
672
|
+
companies: [
|
|
673
|
+
'procter & gamble', 'p&g', 'unilever', 'nestle', 'pepsico', 'pepsi', 'coca cola', 'kraft heinz', 'general mills', 'kelloggs',
|
|
674
|
+
'kellanova', 'mondelez', 'mars$', 'mars wrigley', 'hershey$', 'hershey company', 'colgate palmolive', 'kimberly clark', 'clorox', 'church & dwight',
|
|
675
|
+
'estee lauder', 'loreal', 'lvmh', 'kering', 'nike', 'adidas', 'puma$', 'under armour', 'lululemon', 'new balance', 'levi strauss',
|
|
676
|
+
'levis$', 'ralph lauren', 'tapestry$', 'michael kors', 'pvh$', 'tommy hilfiger', 'calvin klein', 'hanesbrands', 'vf$',
|
|
677
|
+
'the north face', 'patagonia', 'yeti$', 'kenvue', 'haleon', 'reckitt', 'henkel', 'beiersdorf', 'shiseido', 'coty$', 'revlon',
|
|
678
|
+
'elf beauty', 'glossier', 'fenty', 'rare beauty', 'olaplex', 'anheuser busch', 'ab inbev', 'molson coors', 'constellation brands',
|
|
679
|
+
'diageo', 'pernod ricard', 'bacardi', 'brown forman', 'boston beer', 'heineken', 'red bull', 'monster beverage', 'celsius holdings',
|
|
680
|
+
'keurig dr pepper', 'tyson foods', 'conagra', 'campbell$', 'hormel', 'smucker', 'j m smucker', 'post holdings', 'danone',
|
|
681
|
+
'chobani', 'hasbro', 'mattel', 'lego', 'spin master', 'funko', 'dyson$', 'whirlpool', 'sharkninja', 'newell brands', 'energizer',
|
|
682
|
+
'duracell', 'gillette', 'dollar shave club', 'warby parker', 'allbirds',
|
|
683
|
+
],
|
|
684
|
+
not: ['personal care aide(s)', 'personal care assistant(s)'],
|
|
685
|
+
},
|
|
686
|
+
{
|
|
687
|
+
key: 'restaurants', label: 'Restaurants & Food Service', group: 'consumer', kind: 'industry',
|
|
688
|
+
words: [
|
|
689
|
+
'restaurant(s)', 'restaurateur(s)', 'chef(s)', 'sous chef(s)', 'executive chef(s)', 'head chef(s)', 'pastry chef(s)', 'line cook(s)',
|
|
690
|
+
'culinary', 'catering', 'caterer(s)', 'food service', 'foodservice', 'food truck(s)', 'bakery', 'bakeries', 'pastry', 'cafe(s)',
|
|
691
|
+
'coffee shop(s)', 'barista(s)', 'bartender(s)', 'bartending', 'mixologist(s)', 'sommelier(s)', 'waiter(s)', 'waitress',
|
|
692
|
+
'waitresses', 'front of house', 'back of house', 'qsr', 'quick service restaurant(s)', 'fast casual', 'fast food', 'pizzeria',
|
|
693
|
+
'diner', 'bistro', 'brewpub', 'taproom', 'grill', 'steakhouse', 'tavern', 'eatery', 'bbq', 'sushi', 'taqueria',
|
|
694
|
+
],
|
|
695
|
+
companies: [
|
|
696
|
+
'mcdonalds', 'starbucks', 'chick fil a', 'chipotle', 'taco bell', 'yum brands', 'kfc$', 'pizza hut', 'dominos', 'papa johns',
|
|
697
|
+
'subway$', 'wendys', 'burger king', 'restaurant brands international', 'popeyes', 'tim hortons', 'dunkin', 'panera', 'darden',
|
|
698
|
+
'olive garden', 'bloomin brands', 'outback steakhouse', 'texas roadhouse', 'cheesecake factory', 'chilis', 'brinker',
|
|
699
|
+
'applebees', 'dine brands', 'ihop$', 'dennys', 'cracker barrel', 'red lobster', 'shake shack', 'sweetgreen', 'cava group',
|
|
700
|
+
'wingstop', 'raising canes', 'five guys', 'in n out', 'jersey mikes', 'jimmy johns', 'firehouse subs', 'zaxbys', 'sysco',
|
|
701
|
+
'us foods', 'aramark', 'compass group', 'sodexo', 'gordon food service', 'doordash', 'grubhub', 'opentable',
|
|
702
|
+
'first watch', 'buffalo wild wings', 'dave & busters',
|
|
703
|
+
],
|
|
704
|
+
},
|
|
705
|
+
{
|
|
706
|
+
key: 'hospitality-travel', label: 'Hospitality & Travel', group: 'consumer', kind: 'industry',
|
|
707
|
+
words: [
|
|
708
|
+
'hospitality', 'hotel(s)', 'hotelier(s)', 'resort(s)', 'motel(s)', 'inn', 'lodging', 'vacation rental(s)', 'short term rental(s)',
|
|
709
|
+
'airbnb host(s)', 'travel', 'travel agent(s)', 'travel agency', 'travel agencies', 'travel advisor(s)', 'tourism', 'tour operator(s)',
|
|
710
|
+
'tour guide(s)', 'cruises', 'cruise line(s)', 'cruise ship(s)', 'cruise director(s)', 'airline(s)', 'flight attendant(s)',
|
|
711
|
+
'airline pilot(s)',
|
|
712
|
+
'commercial pilot(s)', 'concierge', 'guest services', 'guest experience', 'event planner(s)', 'event planning',
|
|
713
|
+
'wedding planner(s)', 'venue(s)', 'theme park(s)', 'amusement park(s)', 'casino(s)', 'bed and breakfast', 'b&b', 'hostel(s)',
|
|
714
|
+
'timeshare(s)',
|
|
715
|
+
],
|
|
716
|
+
companies: [
|
|
717
|
+
'marriott', 'hilton$', 'hilton hotels', 'hilton worldwide', 'hilton grand vacations', 'hyatt', 'ihg$', 'intercontinental hotels',
|
|
718
|
+
'wyndham', 'choice hotels', 'best western', 'accor$', 'four seasons', 'ritz carlton', 'mgm resorts', 'caesars', 'wynn',
|
|
719
|
+
'las vegas sands', 'hard rock', 'airbnb', 'vrbo', 'expedia', 'booking com', 'booking holdings', 'priceline', 'kayak$', 'tripadvisor',
|
|
720
|
+
'navan$', 'delta air lines', 'delta airlines', 'american airlines', 'united airlines', 'southwest airlines', 'jetblue',
|
|
721
|
+
'alaska airlines', 'spirit airlines', 'frontier airlines', 'allegiant', 'hawaiian airlines', 'lufthansa', 'british airways',
|
|
722
|
+
'emirates$', 'qatar airways', 'air canada', 'carnival$', 'carnival cruise',
|
|
723
|
+
'carnival corporation', 'royal caribbean', 'norwegian cruise line', 'universal destinations', 'universal parks', 'seaworld',
|
|
724
|
+
'united parks', 'six flags',
|
|
725
|
+
'cedar fair', 'legoland', 'great wolf lodge', 'omni hotels', 'loews hotels', 'kimpton', 'vacasa', 'evolve vacation', 'hertz',
|
|
726
|
+
'enterprise rent a car', 'enterprise mobility', 'avis', 'aimbridge', 'highgate hotels', 'sabre$',
|
|
727
|
+
],
|
|
728
|
+
// A travel nurse works in a hospital, and concierge medicine is a clinic.
|
|
729
|
+
not: ['travel nurse(s)', 'travel nursing', 'travel therapist(s)', 'travel rn', 'travel healthcare', 'concierge medicine',
|
|
730
|
+
'concierge doctor(s)', ...HOBBY],
|
|
731
|
+
},
|
|
732
|
+
{
|
|
733
|
+
key: 'beauty-personal-care', label: 'Beauty & Personal Care', group: 'consumer', kind: 'industry',
|
|
734
|
+
// Salons, barbers and spas: the services. Beauty brands are Consumer Goods.
|
|
735
|
+
words: [
|
|
736
|
+
'salon(s)', 'hair salon(s)', 'nail salon(s)', 'beauty salon(s)', 'salon owner(s)', 'hair stylist(s)', 'hairstylist(s)',
|
|
737
|
+
'hairdresser(s)', 'barber(s)', 'barbershop(s)', 'barber shop(s)', 'master barber(s)', 'esthetician(s)', 'aesthetician(s)',
|
|
738
|
+
'cosmetologist(s)', 'cosmetology', 'nail technician(s)', 'nail tech(s)', 'manicurist(s)', 'lash artist(s)', 'lash technician(s)',
|
|
739
|
+
'lash extensions', 'brow artist(s)', 'microblading', 'makeup artist(s)', 'med spa(s)', 'medspa(s)', 'medical spa(s)', 'day spa(s)',
|
|
740
|
+
'beauty school(s)', 'skin care specialist(s)', 'skincare specialist(s)', 'hair removal', 'tanning salon(s)', 'spray tan',
|
|
741
|
+
],
|
|
742
|
+
companies: [
|
|
743
|
+
'great clips', 'supercuts', 'sport clips', 'fantastic sams', 'regis$', 'drybar', 'european wax center',
|
|
744
|
+
'sola salon studios', 'sola salons', 'ideal image', 'hand & stone', 'massage envy', 'the lash lounge',
|
|
745
|
+
],
|
|
746
|
+
// Salon the magazine, and companies named for a Barber.
|
|
747
|
+
not: ['salon com', 'salon media', 'barber foods', 'barber motorsports', 'barber nichols', ...HOBBY],
|
|
748
|
+
},
|
|
749
|
+
|
|
750
|
+
// ── Manufacturing, Energy & Logistics ─────────────────────────────────────
|
|
751
|
+
{
|
|
752
|
+
key: 'logistics', label: 'Logistics & Supply Chain', group: 'industry', kind: 'industry',
|
|
753
|
+
words: [
|
|
754
|
+
'logistics', 'supply chain', 'freight', 'freight broker(s)', 'freight brokerage', 'trucking', 'truck driver(s)', 'cdl',
|
|
755
|
+
'truck dispatcher(s)', 'freight dispatcher(s)', 'fleet manager(s)', 'shipping', 'warehouse', 'warehouses', 'warehousing',
|
|
756
|
+
'distribution center(s)', 'fulfillment', 'fulfillment center(s)', 'order fulfillment', 'last mile', '3pl',
|
|
757
|
+
'third party logistics', 'transportation management', 'freight forwarding', 'freight forwarder(s)', 'customs broker(s)',
|
|
758
|
+
'customs brokerage', 'import export', 'maritime', 'rail freight', 'railroad(s)', 'courier(s)', 'delivery driver(s)', 'forklift',
|
|
759
|
+
'material handler(s)', 'logistician(s)',
|
|
760
|
+
],
|
|
761
|
+
companies: [
|
|
762
|
+
'fedex', 'ups$', 'united parcel service', 'usps$', 'united states postal service', 'dhl', 'xpo', 'ch robinson', 'c h robinson',
|
|
763
|
+
'j b hunt', 'jb hunt', 'schneider national', 'werner enterprises', 'knight swift', 'old dominion freight', 'ryder',
|
|
764
|
+
'penske logistics', 'penske truck', 'maersk', 'flexport', 'uber freight', 'project44', 'fourkites', 'samsara$',
|
|
765
|
+
'manhattan associates', 'blue yonder', 'kinaxis', 'expeditors', 'kuehne nagel', 'db schenker', 'geodis', 'ceva logistics', 'gxo',
|
|
766
|
+
'union pacific', 'bnsf', 'csx$', 'norfolk southern', 'landstar', 'echo global logistics', 'coyote logistics', 'tql$',
|
|
767
|
+
'total quality logistics', 'estes express', 'saia$', 'shipbob', 'shipmonk', 'ontrac', 'lasership',
|
|
768
|
+
],
|
|
769
|
+
not: ['data warehouse(s)', 'data warehousing'],
|
|
770
|
+
},
|
|
771
|
+
{
|
|
772
|
+
key: 'manufacturing', label: 'Manufacturing', group: 'industry', kind: 'industry',
|
|
773
|
+
words: [
|
|
774
|
+
'manufacturing', 'manufacturer(s)', 'factory worker(s)', 'factory manager(s)', 'factory floor', 'plant manager(s)',
|
|
775
|
+
'production supervisor(s)', 'machinist(s)', 'cnc', 'cnc machinist(s)', 'cnc programmer(s)', 'welder(s)', 'welding',
|
|
776
|
+
'fabrication', 'fabricator(s)', 'metal fabrication', 'assembly line', 'industrial engineer(s)', 'manufacturing engineer(s)',
|
|
777
|
+
'process engineer(s)', 'lean manufacturing', 'injection molding', 'plastics', 'machining', 'industrial automation', 'tool and die',
|
|
778
|
+
'chemical company', 'chemical manufacturing', 'specialty chemicals', 'industrial manufacturing', 'steel', 'aluminum',
|
|
779
|
+
'semiconductor manufacturing',
|
|
780
|
+
],
|
|
781
|
+
companies: [
|
|
782
|
+
'general electric', 'ge$', 'honeywell', '3m$', '3m company', 'siemens$', 'caterpillar', 'john deere', 'deere & company',
|
|
783
|
+
'emerson electric', 'emerson$', 'rockwell automation', 'parker hannifin', 'eaton$', 'eaton corporation', 'illinois tool works',
|
|
784
|
+
'itw$', 'dover$', 'cummins$', 'cummins inc', 'paccar', 'dow$', 'dow chemical', 'dupont$', 'dupont de nemours', 'basf',
|
|
785
|
+
'lyondellbasell', 'eastman chemical',
|
|
786
|
+
'celanese', 'nucor', 'us steel', 'united states steel', 'alcoa', 'jabil', 'flex$', 'foxconn', 'hon hai', 'tsmc$',
|
|
787
|
+
'taiwan semiconductor', 'applied materials', 'lam research', 'asml', 'corning', 'owens corning', 'ppg', 'sherwin williams',
|
|
788
|
+
'kohler$', 'stanley black & decker', 'milwaukee tool', 'bosch', 'abb$', 'schneider electric', 'mitsubishi$',
|
|
789
|
+
'hitachi', 'komatsu', 'trane', 'carrier global', 'lennox$', 'lennox international', 'johnson controls', 'westinghouse',
|
|
790
|
+
],
|
|
791
|
+
},
|
|
792
|
+
{
|
|
793
|
+
key: 'energy', label: 'Energy & Utilities', group: 'industry', kind: 'industry',
|
|
794
|
+
words: [
|
|
795
|
+
'energy', 'utilities', 'utility company', 'utility companies', 'electric utility', 'power plant(s)', 'power generation',
|
|
796
|
+
'power grid', 'transmission and distribution', 'oil and gas', 'oil', 'petroleum', 'natural gas', 'lng', 'drilling', 'refinery',
|
|
797
|
+
'refineries', 'oil pipeline(s)', 'gas pipeline(s)', 'renewable energy', 'renewables', 'solar', 'solar panel(s)', 'photovoltaic',
|
|
798
|
+
'wind energy', 'wind power', 'wind farm(s)', 'offshore wind', 'hydroelectric', 'hydrogen', 'nuclear energy', 'nuclear power',
|
|
799
|
+
'nuclear plant(s)', 'geothermal', 'battery storage', 'energy storage', 'ev charging', 'lineman', 'linemen', 'lineworker(s)',
|
|
800
|
+
'energy efficiency', 'cleantech', 'clean energy', 'carbon capture', 'petroleum engineer(s)', 'reservoir engineer(s)', 'landman',
|
|
801
|
+
'roughneck(s)',
|
|
802
|
+
],
|
|
803
|
+
companies: [
|
|
804
|
+
'exxonmobil', 'exxon', 'chevron', 'shell$', 'shell plc', 'shell oil', 'bp$', 'conocophillips', 'occidental petroleum',
|
|
805
|
+
'marathon petroleum', 'valero', 'phillips 66', 'halliburton', 'schlumberger', 'slb$', 'baker hughes', 'kinder morgan',
|
|
806
|
+
'enterprise products', 'southern company', 'edison international', 'entergy', 'aep$',
|
|
807
|
+
'american electric power', 'exelon', 'sunrun', 'sunpower', 'sunnova', 'enphase', 'orsted', 'ørsted', 'vestas', 'siemens gamesa',
|
|
808
|
+
'ge vernova', 'brookfield renewable', 'invenergy', 'avangrid', 'plug power',
|
|
809
|
+
],
|
|
810
|
+
// Energy drinks, olive oil and "energy healing" aren't energy.
|
|
811
|
+
not: ['energy drink(s)', 'monster energy', 'energy healer(s)', 'energy healing', 'energy work', 'positive energy', 'high energy',
|
|
812
|
+
'olive oil', 'essential oil(s)', 'oil painting(s)', 'oil painter(s)', 'offensive lineman', 'defensive lineman'],
|
|
813
|
+
},
|
|
814
|
+
{
|
|
815
|
+
key: 'automotive', label: 'Automotive', group: 'industry', kind: 'industry',
|
|
816
|
+
words: [
|
|
817
|
+
'automotive', 'dealership(s)', 'car dealership(s)', 'auto dealership(s)', 'auto dealer(s)', 'car dealer(s)', 'car sales',
|
|
818
|
+
'auto sales', 'automobile(s)', 'auto parts', 'auto repair', 'auto body', 'collision repair', 'automotive technician(s)',
|
|
819
|
+
'auto mechanic(s)', 'car mechanic(s)', 'diesel mechanic(s)', 'service advisor(s)', 'f&i', 'electric vehicle(s)',
|
|
820
|
+
'autonomous vehicle(s)', 'autonomous driving', 'self driving', 'adas', 'motorsport(s)', 'car wash', 'car washes', 'tire', 'tires',
|
|
821
|
+
'ev charging',
|
|
822
|
+
],
|
|
823
|
+
companies: [
|
|
824
|
+
'tesla', 'ford$', 'ford motor', 'general motors', 'stellantis', 'chrysler', 'jeep$', 'toyota', 'honda', 'nissan', 'hyundai', 'kia$',
|
|
825
|
+
'kia motors', 'bmw', 'mercedes benz', 'volkswagen', 'audi$', 'porsche', 'volvo', 'subaru', 'mazda', 'rivian',
|
|
826
|
+
'lucid motors', 'lucid group', 'polestar', 'waymo', 'cruise automation', 'zoox', 'aurora innovation', 'carvana', 'carmax',
|
|
827
|
+
'autonation', 'penske automotive', 'lithia', 'autozone', 'pep boys', 'goodyear', 'bridgestone', 'michelin', 'firestone$', 'firestone complete auto care',
|
|
828
|
+
'magna international', 'aptiv', 'borgwarner', 'lear$', 'denso', 'harley davidson', 'polaris industries', 'cars com',
|
|
829
|
+
'autotrader', 'truecar', 'copart', 'manheim',
|
|
830
|
+
],
|
|
831
|
+
not: ['customer service advisor(s)', 'client service advisor(s)', 'financial service advisor(s)', 'member service advisor(s)',
|
|
832
|
+
'guest service advisor(s)'],
|
|
833
|
+
},
|
|
834
|
+
{
|
|
835
|
+
key: 'agriculture', label: 'Agriculture & Farming', group: 'industry', kind: 'industry',
|
|
836
|
+
words: [
|
|
837
|
+
'agriculture', 'agricultural', 'agribusiness', 'agtech', 'ag tech', 'agronomy', 'agronomist(s)', 'farming', 'farmer(s)', 'farm(s)',
|
|
838
|
+
'farmland', 'farm manager(s)', 'farmworker(s)', 'farm worker(s)', 'ranching', 'rancher(s)', 'cattle', 'livestock', 'poultry',
|
|
839
|
+
'dairy farm(s)', 'dairy farmer(s)', 'aquaculture', 'fishery', 'fisheries', 'horticulture', 'horticulturist(s)', 'viticulture',
|
|
840
|
+
'grower(s)', 'crop science', 'crop production', 'crop protection', 'crop consultant(s)', 'precision agriculture', 'irrigation',
|
|
841
|
+
'hydroponics', 'vertical farming', 'agricultural engineer(s)', 'farm equipment', 'grain elevator(s)', 'fertilizer(s)',
|
|
842
|
+
'feed mill(s)', 'forestry', 'forester(s)',
|
|
843
|
+
],
|
|
844
|
+
companies: [
|
|
845
|
+
'cargill', 'archer daniels midland', 'bunge$', 'corteva', 'syngenta', 'nutrien', 'cf industries', 'agco$', 'land o lakes',
|
|
846
|
+
'farm credit', 'indigo ag', 'john deere', 'driscolls', 'dole food', 'fresh del monte', 'simplot', 'j r simplot',
|
|
847
|
+
'the mosaic company',
|
|
848
|
+
],
|
|
849
|
+
// Insurers, banks and the rest named for farms and farmers; farms of servers, wind and trolls.
|
|
850
|
+
not: ['state farm', 'farm bureau', 'farmers insurance', 'farmers mutual', 'farmers bank', 'farmers state bank', 'farmers national bank',
|
|
851
|
+
'farmers savings bank', 'farmers trust', 'farmers merchants', 'farmer mac', 'farmer bros', 'farmer brothers', 'farmers dog',
|
|
852
|
+
'server farm(s)', 'wind farm(s)', 'solar farm(s)', 'content farm(s)', 'link farm(s)', 'click farm(s)', 'troll farm(s)',
|
|
853
|
+
'bot farm(s)', 'farm to table', 'farm team(s)', ...HOBBY],
|
|
854
|
+
},
|
|
855
|
+
|
|
856
|
+
// ── Government, Defense & Aerospace ───────────────────────────────────────
|
|
857
|
+
{
|
|
858
|
+
key: 'aerospace-defense', label: 'Aerospace & Defense', group: 'defense', kind: 'industry',
|
|
859
|
+
words: [
|
|
860
|
+
'aerospace', 'aerospace engineer(s)', 'aerospace engineering', 'defense', 'defence', 'defense contractor(s)', 'defense industry',
|
|
861
|
+
'department of defense', 'dod', 'avionics', 'aviation', 'aircraft', 'aircraft mechanic(s)', 'a&p mechanic(s)', 'airframe',
|
|
862
|
+
'propulsion', 'rocketry', 'spacecraft', 'satellite(s)', 'space industry', 'space systems', 'launch vehicle(s)', 'missile(s)',
|
|
863
|
+
'munitions', 'weapons systems', 'uav', 'uavs', 'unmanned aircraft', 'unmanned aerial', 'counter uas', 'security clearance',
|
|
864
|
+
'top secret', 'ts sci', 'secret clearance', 'itar', 'flight test', 'flight software', 'astronaut(s)',
|
|
865
|
+
],
|
|
866
|
+
companies: [
|
|
867
|
+
'lockheed', 'northrop grumman', 'boeing', 'raytheon', 'rtx$', 'general dynamics', 'l3harris', 'l3 harris', 'bae systems',
|
|
868
|
+
'leidos', 'saic$', 'science applications international', 'booz allen', 'caci', 'mantech', 'parsons$',
|
|
869
|
+
'huntington ingalls', 'textron', 'bell textron', 'sikorsky', 'pratt & whitney', 'spacex', 'blue origin', 'rocket lab',
|
|
870
|
+
'relativity space', 'sierra space', 'axiom space', 'anduril', 'shield ai', 'palantir', 'kratos', 'aerovironment', 'elbit', 'thales',
|
|
871
|
+
'airbus', 'embraer', 'bombardier', 'gulfstream', 'cessna', 'spirit aerosystems', 'nasa$', 'national aeronautics and space administration',
|
|
872
|
+
'jpl$', 'jet propulsion laboratory', 'sandia', 'los alamos', 'lawrence livermore', 'mitre$', 'darpa', 'navair', 'navsea',
|
|
873
|
+
'united launch alliance', 'maxar', 'planet labs', 'curtiss wright', 'heico', 'transdigm', 'hexcel',
|
|
874
|
+
],
|
|
875
|
+
// A defense attorney is a lawyer, and a satellite office is just an office.
|
|
876
|
+
not: ['defense attorney(s)', 'defense lawyer(s)', 'criminal defense', 'defense counsel', 'self defense', 'insurance defense',
|
|
877
|
+
'dui defense', 'legal defense', 'defense litigation', 'public defender(s)', 'satellite office(s)', 'satellite campus',
|
|
878
|
+
'satellite location(s)'],
|
|
879
|
+
},
|
|
880
|
+
{
|
|
881
|
+
key: 'military', label: 'Military', group: 'defense', kind: 'industry',
|
|
882
|
+
words: [
|
|
883
|
+
'military', 'army', 'navy', 'air force', 'marine corps', 'usmc', 'marines', 'coast guard', 'uscg', 'national guard',
|
|
884
|
+
'army national guard', 'air national guard', 'space force', 'armed forces', 'active duty', 'soldier(s)', 'airman', 'airmen',
|
|
885
|
+
'infantry', 'infantryman', 'paratrooper(s)', 'special forces', 'green beret(s)', 'navy seal(s)', 'army ranger(s)',
|
|
886
|
+
'commissioned officer(s)', 'noncommissioned officer(s)', 'nco', 'army officer(s)', 'naval officer(s)', 'navy officer(s)',
|
|
887
|
+
'air force officer(s)', 'marine officer(s)', 'drill sergeant(s)', 'sergeant major', 'platoon', 'battalion', 'squadron',
|
|
888
|
+
'reservist(s)', 'army reserve', 'navy reserve', 'air force reserve', 'rotc', 'cadet(s)', 'west point', 'naval academy',
|
|
889
|
+
'air force academy', 'military intelligence',
|
|
890
|
+
],
|
|
891
|
+
companies: [
|
|
892
|
+
'us army', 'u s army', 'united states army', 'us navy', 'u s navy', 'united states navy', 'us air force', 'u s air force',
|
|
893
|
+
'united states air force', 'usaf$', 'us marine corps', 'united states marine corps', 'us coast guard', 'united states coast guard',
|
|
894
|
+
'us space force', 'u s space force', 'united states space force', 'british army', 'royal navy', 'royal air force', 'raf$',
|
|
895
|
+
'royal marines', 'canadian armed forces', 'nato$',
|
|
896
|
+
],
|
|
897
|
+
// Veterans work somewhere else now; the rest only borrow the words.
|
|
898
|
+
not: ['veteran(s)', 'military spouse(s)', 'salvation army', 'old navy', 'navy federal', 'navy blue', 'navy pier', 'army of',
|
|
899
|
+
'swiss army', 'battalion chief(s)'],
|
|
900
|
+
},
|
|
901
|
+
{
|
|
902
|
+
key: 'government', label: 'Government & Public Sector', group: 'defense', kind: 'industry',
|
|
903
|
+
words: [
|
|
904
|
+
'government', 'federal government', 'state government', 'local government', 'public sector', 'public servant(s)',
|
|
905
|
+
'civil servant(s)', 'civil service', 'municipal', 'municipality', 'municipalities', 'city council', 'council member(s)',
|
|
906
|
+
'councilmember(s)', 'councilwoman', 'councilman', 'city manager(s)', 'county manager(s)', 'county commissioner(s)',
|
|
907
|
+
'county commission', 'board of county commissioners', 'mayor', 'mayors office', 'legislator(s)', 'legislature', 'legislative',
|
|
908
|
+
'state senator(s)', 'state representative(s)', 'congressman', 'congresswoman', 'congressional', 'member of congress',
|
|
909
|
+
'house of representatives', 'white house', 'governors office', 'office of the governor', 'lieutenant governor',
|
|
910
|
+
'federal agency', 'state agency', 'government agency', 'government agencies', 'police', 'police officer(s)',
|
|
911
|
+
'police department(s)', 'sheriff', 'sheriffs office', 'deputy sheriff(s)', 'law enforcement', 'state trooper(s)',
|
|
912
|
+
'highway patrol', 'firefighter(s)', 'fire department(s)', 'fire rescue', 'fire chief(s)', 'battalion chief(s)', 'public safety',
|
|
913
|
+
'911 dispatcher(s)', 'emergency management', 'corrections officer(s)', 'correctional officer(s)', 'department of corrections',
|
|
914
|
+
'probation officer(s)', 'parole officer(s)', 'postal service', 'veterans affairs', 'foreign service', 'foreign service officer(s)',
|
|
915
|
+
'diplomat(s)', 'embassy', 'consulate', 'city planner(s)', 'urban planning', 'public administration', 'federal employee(s)',
|
|
916
|
+
'state employee(s)', 'public works', 'parks and recreation',
|
|
917
|
+
],
|
|
918
|
+
companies: [
|
|
919
|
+
'city of', 'county of', 'town of', 'township of', 'village of', 'borough of', 'commonwealth of', 'government of',
|
|
920
|
+
'usps$', 'united states postal service', 'internal revenue service', 'irs$', 'fbi$', 'federal bureau of investigation', 'cia$',
|
|
921
|
+
'central intelligence agency', 'nsa$', 'national security agency', 'department of homeland security', 'dhs$', 'fema$', 'tsa$',
|
|
922
|
+
'transportation security administration', 'us department of', 'u s department of', 'united states department of',
|
|
923
|
+
'department of veterans affairs', 'social security administration', 'us census bureau', 'census bureau', 'gao$',
|
|
924
|
+
'government accountability office', 'us senate', 'u s senate', 'united states senate', 'gsa$', 'general services administration',
|
|
925
|
+
'epa$', 'environmental protection agency', 'fda$', 'food and drug administration', 'cdc$', 'centers for disease control',
|
|
926
|
+
'nih$', 'national institutes of health', 'securities and exchange commission', 'ftc$', 'federal trade commission', 'fcc$',
|
|
927
|
+
'federal communications commission', 'state department', 'department of state', 'united nations', 'european commission',
|
|
928
|
+
'state of alabama', 'state of alaska', 'state of arizona', 'state of arkansas', 'state of california', 'state of colorado',
|
|
929
|
+
'state of connecticut', 'state of delaware', 'state of florida', 'state of georgia', 'state of hawaii', 'state of idaho',
|
|
930
|
+
'state of illinois', 'state of indiana', 'state of iowa', 'state of kansas', 'state of kentucky', 'state of louisiana',
|
|
931
|
+
'state of maine', 'state of maryland', 'state of massachusetts', 'state of michigan', 'state of minnesota', 'state of mississippi',
|
|
932
|
+
'state of missouri', 'state of montana', 'state of nebraska', 'state of nevada', 'state of new hampshire', 'state of new jersey',
|
|
933
|
+
'state of new mexico', 'state of new york', 'state of north carolina', 'state of north dakota', 'state of ohio',
|
|
934
|
+
'state of oklahoma', 'state of oregon', 'state of pennsylvania', 'state of rhode island', 'state of south carolina',
|
|
935
|
+
'state of south dakota', 'state of tennessee', 'state of texas', 'state of utah', 'state of vermont', 'state of virginia',
|
|
936
|
+
'state of washington', 'state of west virginia', 'state of wisconsin', 'state of wyoming',
|
|
937
|
+
],
|
|
938
|
+
// Companies have public policy and government affairs teams of their own.
|
|
939
|
+
not: ['student government', 'city of hope', 'government affairs', 'government relations', 'government sales'],
|
|
940
|
+
},
|
|
941
|
+
|
|
942
|
+
// ── Consulting, Legal & Services ──────────────────────────────────────────
|
|
943
|
+
{
|
|
944
|
+
key: 'legal', label: 'Legal', group: 'consulting', kind: 'function',
|
|
945
|
+
// Companies of every kind have lawyers: a company is in legal when it is a
|
|
946
|
+
// law firm, a legal service or a bar.
|
|
947
|
+
words: [
|
|
948
|
+
'law firm(s)', 'law office(s)', 'law group', 'legal services', 'attorney at law', 'attorneys at law', 'legaltech', 'legal tech',
|
|
949
|
+
'bar association',
|
|
950
|
+
],
|
|
951
|
+
roles: [
|
|
952
|
+
'law', 'lawyer(s)', 'attorney(s)', 'legal', 'esq', 'esquire', 'paralegal(s)', 'legal assistant(s)', 'legal secretary',
|
|
953
|
+
'litigator(s)', 'litigation', 'counsel', 'of counsel', 'legal counsel', 'associate attorney(s)', 'juris doctor', 'jd candidate(s)',
|
|
954
|
+
'law student(s)', 'law clerk(s)', 'judicial clerk(s)', 'circuit judge(s)', 'district judge(s)', 'federal judge(s)', 'magistrate(s)',
|
|
955
|
+
'district attorney(s)', 'public defender(s)', 'prosecutor(s)', 'e discovery', 'ediscovery', 'intellectual property',
|
|
956
|
+
'patent attorney(s)', 'patent agent(s)', 'notary public', 'mediator(s)', 'arbitrator(s)', 'arbitration',
|
|
957
|
+
],
|
|
958
|
+
companies: [
|
|
959
|
+
'kirkland & ellis', 'latham & watkins', 'skadden', 'baker mckenzie', 'dla piper', 'sidley austin', 'white & case', 'jones day',
|
|
960
|
+
'sullivan & cromwell', 'cravath', 'wachtell', 'davis polk', 'gibson dunn', 'paul weiss', 'simpson thacher', 'cooley$',
|
|
961
|
+
'cooley llp', 'wilson sonsini', 'goodwin procter', 'ropes & gray', 'morgan lewis', 'morgan & morgan', 'greenberg traurig',
|
|
962
|
+
'holland & knight', 'hogan lovells', 'norton rose fulbright', 'clifford chance',
|
|
963
|
+
'freshfields', 'linklaters', 'allen & overy', 'a&o shearman', 'mayer brown', 'king & spalding', 'orrick', 'perkins coie',
|
|
964
|
+
'fenwick & west', 'quinn emanuel', 'williams & connolly', 'weil gotshal', 'proskauer', 'debevoise', 'milbank',
|
|
965
|
+
'covington & burling', 'arnold & porter', 'mcdermott will', 'fish & richardson', 'foley & lardner', 'bryan cave', 'littler',
|
|
966
|
+
'jackson lewis', 'ogletree', 'fisher phillips', 'legalzoom', 'rocket lawyer', 'clio$', 'lexisnexis', 'westlaw',
|
|
967
|
+
],
|
|
968
|
+
// In-house lawyers work for companies in every sector, the police enforce
|
|
969
|
+
// the law, and a seafood chain and an insurer only share the word.
|
|
970
|
+
not: ['law enforcement', 'general counsel', 'in house counsel', 'corporate counsel', 'chief legal officer(s)', 'legal sea foods',
|
|
971
|
+
'legal & general'],
|
|
972
|
+
},
|
|
973
|
+
{
|
|
974
|
+
key: 'management-consulting', label: 'Management Consulting', group: 'consulting', kind: 'function',
|
|
975
|
+
// Consultants work inside companies too: a company is in consulting when
|
|
976
|
+
// consulting is what it sells.
|
|
977
|
+
words: ['management consulting', 'strategy consulting', 'business consulting', 'operations consulting', 'mbb', 'big four', 'big 4'],
|
|
978
|
+
roles: ['management consultant(s)', 'strategy consultant(s)'],
|
|
979
|
+
companies: [
|
|
980
|
+
'mckinsey', 'boston consulting group', 'bcg$', 'bcg x', 'bain$', 'bain & company', 'deloitte', 'accenture', 'pwc$',
|
|
981
|
+
'pricewaterhousecoopers', 'ey$', 'ey parthenon', 'ernst & young', 'kpmg', 'oliver wyman', 'kearney$', 'a t kearney',
|
|
982
|
+
'roland berger', 'l e k consulting', 'lek consulting', 'booz allen hamilton', 'capgemini', 'huron consulting',
|
|
983
|
+
'alvarez & marsal', 'fti consulting', 'guidehouse', 'protiviti', 'west monroe partners', 'slalom', 'zs associates', 'gartner',
|
|
984
|
+
'simon kucher', 'putnam associates', 'charles river associates', 'cornerstone research', 'analysis group', 'navigant', 'ankura',
|
|
985
|
+
'the bridgespan group', 'dalberg',
|
|
986
|
+
],
|
|
987
|
+
},
|
|
988
|
+
{
|
|
989
|
+
key: 'hr-recruiting', label: 'HR & Recruiting', group: 'consulting', kind: 'function',
|
|
990
|
+
// Every company hires: a company is in recruiting when it is a staffing
|
|
991
|
+
// agency, a search firm or an HR service.
|
|
992
|
+
words: [
|
|
993
|
+
'staffing agency', 'staffing agencies', 'staffing firm(s)', 'staffing company', 'staffing companies', 'recruitment agency',
|
|
994
|
+
'recruitment agencies', 'recruiting agency', 'recruiting agencies', 'recruiting firm(s)', 'executive search', 'peo',
|
|
995
|
+
'professional employer organization', 'rpo', 'recruitment process outsourcing', 'workforce solutions', 'hr tech', 'hrtech',
|
|
996
|
+
'hr consulting',
|
|
997
|
+
],
|
|
998
|
+
roles: [
|
|
999
|
+
'human resources', 'human resource', 'hr', 'hris', 'hrbp', 'hr business partner(s)', 'people operations', 'people ops',
|
|
1000
|
+
'people & culture', 'talent acquisition', 'talent management', 'recruiter(s)', 'recruiting', 'recruitment', 'technical recruiter(s)',
|
|
1001
|
+
'headhunter(s)', 'staffing', 'talent sourcing', 'sourcer(s)', 'employer branding', 'compensation and benefits', 'total rewards',
|
|
1002
|
+
'benefits administration', 'payroll', 'hr consultant(s)', 'shrm', 'shrm cp', 'shrm scp', 'sphr', 'phr', 'learning and development',
|
|
1003
|
+
'l&d', 'organizational development', 'dei', 'diversity equity and inclusion', 'employee relations', 'labor relations',
|
|
1004
|
+
],
|
|
1005
|
+
companies: [
|
|
1006
|
+
'robert half', 'randstad', 'adecco', 'manpowergroup', 'manpower$', 'kelly services', 'kforce', 'insight global', 'teksystems',
|
|
1007
|
+
'aerotek', 'allegis', 'korn ferry', 'spencer stuart', 'heidrick', 'egon zehnder', 'russell reynolds', 'michael page', 'pagegroup',
|
|
1008
|
+
'express employment', 'aya healthcare', 'amn healthcare', 'cross country healthcare', 'indeed$', 'glassdoor', 'ziprecruiter',
|
|
1009
|
+
'adp$', 'automatic data processing', 'paychex', 'paylocity', 'paycom', 'paycor', 'ukg$', 'justworks', 'trinet', 'insperity',
|
|
1010
|
+
'bamboohr', 'greenhouse software', 'culture amp', 'hirevue', 'cielo talent', 'alexander mann', 'hudson rpo', 'workday',
|
|
1011
|
+
],
|
|
1012
|
+
not: ['24 hr'],
|
|
1013
|
+
},
|
|
1014
|
+
{
|
|
1015
|
+
key: 'security-services', label: 'Security Services', group: 'consulting', kind: 'function',
|
|
1016
|
+
// Guards and private security, not cybersecurity (Tech's own sector). Many
|
|
1017
|
+
// companies employ their own guards: a company is in security services
|
|
1018
|
+
// when it is a security firm.
|
|
1019
|
+
words: [
|
|
1020
|
+
'security company', 'security companies', 'security firm(s)', 'security services', 'private security', 'security guard company',
|
|
1021
|
+
'guard services', 'security patrol', 'executive protection', 'close protection', 'alarm company', 'alarm monitoring',
|
|
1022
|
+
],
|
|
1023
|
+
roles: [
|
|
1024
|
+
'security guard(s)', 'security officer(s)', 'armed security', 'unarmed security', 'armed guard(s)', 'unarmed guard(s)',
|
|
1025
|
+
'bodyguard(s)', 'event security', 'campus security', 'site security', 'security supervisor(s)', 'personal protection',
|
|
1026
|
+
'protection agent(s)', 'loss prevention officer(s)',
|
|
1027
|
+
],
|
|
1028
|
+
companies: [
|
|
1029
|
+
'allied universal', 'securitas', 'gardaworld', 'garda world', 'g4s', 'adt$', 'adt security', 'brinks', 'brinks home', 'pinkerton',
|
|
1030
|
+
'prosegur', 'vivint', 'simplisafe', 'us security associates', 'guardsmark',
|
|
1031
|
+
],
|
|
1032
|
+
// Security of data, of a country or of an income is another thing.
|
|
1033
|
+
not: ['information security', 'cyber security', 'it security', 'data security', 'network security', 'cloud security',
|
|
1034
|
+
'application security', 'managed security', 'national security', 'homeland security', 'social security', 'food security',
|
|
1035
|
+
'job security', 'financial security', 'security clearance', 'security operations center', 'chief security officer(s)',
|
|
1036
|
+
'security token(s)', 'security analyst(s)', 'security engineer(s)', 'security architect(s)', 'security researcher(s)'],
|
|
1037
|
+
},
|
|
1038
|
+
|
|
1039
|
+
// ── Real Estate & Construction ────────────────────────────────────────────
|
|
1040
|
+
{
|
|
1041
|
+
key: 'real-estate', label: 'Real Estate', group: 'realestate', kind: 'industry',
|
|
1042
|
+
words: [
|
|
1043
|
+
'real estate', 'realtor(s)', 'realty', 'real estate agent(s)', 'property management', 'property manager(s)',
|
|
1044
|
+
'commercial real estate', 'cre', 'residential real estate', 'real estate investor(s)', 'real estate investing',
|
|
1045
|
+
'real estate investment(s)', 'reit(s)', 'leasing agent(s)', 'leasing consultant(s)', 'leasing specialist(s)', 'apartment leasing',
|
|
1046
|
+
'listing agent(s)', 'buyers agent(s)', 'title company', 'title insurance', 'escrow', 'land acquisition', 'real estate developer(s)',
|
|
1047
|
+
'real estate development', 'property development', 'property developer(s)', 'multifamily', 'multi family', 'investment property',
|
|
1048
|
+
'rental property', 'rental properties', 'home inspector(s)',
|
|
1049
|
+
],
|
|
1050
|
+
names: ['properties'],
|
|
1051
|
+
companies: [
|
|
1052
|
+
'keller williams', 'coldwell banker', 're max', 'remax', 'century 21', 'compass$', 'redfin', 'zillow', 'opendoor', 'offerpad',
|
|
1053
|
+
'berkshire hathaway homeservices', 'howard hanna', 'douglas elliman', 'corcoran$', 'corcoran group', 'cbre', 'jll$',
|
|
1054
|
+
'jones lang lasalle', 'cushman & wakefield', 'colliers', 'newmark', 'marcus & millichap', 'eastdil', 'prologis',
|
|
1055
|
+
'simon property group', 'greystar', 'equity residential', 'avalonbay', 'camden property', 'invitation homes',
|
|
1056
|
+
'american homes 4 rent', 'costar', 'loopnet', 'apartments com', 'realpage', 'yardi', 'appfolio', 'wework', 'regus', 'iwg$',
|
|
1057
|
+
'first american', 'fidelity national financial', 'fidelity national title', 'old republic title', 'stewart title',
|
|
1058
|
+
],
|
|
1059
|
+
},
|
|
1060
|
+
{
|
|
1061
|
+
key: 'construction-trades', label: 'Construction & Trades', group: 'realestate', kind: 'industry',
|
|
1062
|
+
words: [
|
|
1063
|
+
'construction', 'general contractor(s)', 'roofing contractor(s)', 'building contractor(s)', 'licensed contractor(s)',
|
|
1064
|
+
'electrical contractor(s)', 'plumbing contractor(s)', 'hvac contractor(s)', 'home builder(s)', 'homebuilder(s)',
|
|
1065
|
+
'custom home builder(s)', 'construction superintendent(s)', 'site superintendent(s)', 'project superintendent(s)',
|
|
1066
|
+
'general superintendent(s)', 'foreman', 'foremen', 'carpenter(s)', 'carpentry', 'electrician(s)', 'plumber(s)', 'plumbing', 'hvac',
|
|
1067
|
+
'roofer(s)', 'roofing', 'masonry', 'drywall', 'concrete', 'excavation', 'paving', 'landscaping', 'landscaper(s)',
|
|
1068
|
+
'landscape architect(s)', 'painting contractor(s)', 'handyman', 'remodeling', 'renovation(s)', 'home improvement', 'cabinetry',
|
|
1069
|
+
'flooring', 'estimator(s)', 'preconstruction', 'civil engineer(s)', 'civil engineering', 'structural engineer(s)',
|
|
1070
|
+
'structural engineering', 'architecture firm(s)', 'architectural', 'licensed architect(s)', 'registered architect(s)', 'bim',
|
|
1071
|
+
'journeyman', 'journeymen', 'ironworker(s)', 'welder(s)', 'heavy equipment operator(s)', 'crane operator(s)',
|
|
1072
|
+
'building inspector(s)',
|
|
1073
|
+
],
|
|
1074
|
+
names: ['builders', 'contractors', 'contracting'],
|
|
1075
|
+
companies: [
|
|
1076
|
+
'bechtel', 'fluor', 'kiewit', 'skanska', 'whiting turner', 'gilbane', 'mortenson', 'mccarthy building', 'hensel phelps', 'aecom',
|
|
1077
|
+
'jacobs$', 'jacobs engineering', 'stantec', 'wsp$', 'wsp global', 'kimley horn', 'gensler', 'hok$', 'perkins&will',
|
|
1078
|
+
'perkins and will', 'skidmore owings', 'lennar', 'dr horton', 'd r horton', 'pulte', 'pultegroup', 'toll brothers', 'nvr$',
|
|
1079
|
+
'kb home', 'taylor morrison', 'meritage homes', 'david weekley homes', 'm i homes', 'ashton woods', 'vulcan materials',
|
|
1080
|
+
'martin marietta', 'cemex', 'summit materials', 'quikrete', 'united rentals', 'sunbelt rentals', 'herc rentals', 'angi$',
|
|
1081
|
+
'homeadvisor', 'thumbtack', 'emcor', 'quanta services', 'mastec', 'dycom', 'comfort systems', 'roto rooter', 'mr rooter',
|
|
1082
|
+
],
|
|
1083
|
+
// Builders of brands and teams, and contractors to the government, aren't in construction.
|
|
1084
|
+
not: ['concrete results', 'under construction', 'brand builder(s)', 'team builder(s)', 'community builder(s)',
|
|
1085
|
+
'government contractor(s)', 'defense contractor(s)', 'independent contractor(s)', 'government contracting', 'damage estimator(s)',
|
|
1086
|
+
'collision estimator(s)', 'auto estimator(s)'],
|
|
1087
|
+
},
|
|
1088
|
+
|
|
1089
|
+
// ── Nonprofit & Community ─────────────────────────────────────────────────
|
|
1090
|
+
{
|
|
1091
|
+
key: 'charities', label: 'Nonprofits & Charities', group: 'nonprofit', kind: 'industry',
|
|
1092
|
+
words: [
|
|
1093
|
+
'nonprofit(s)', 'non profit(s)', 'not for profit', 'not for profits', '501 c 3', '501c3', 'ngo', 'ngos', 'charity', 'charities',
|
|
1094
|
+
'charitable', 'philanthropy', 'philanthropies', 'philanthropic', 'humanitarian', 'grant writer(s)', 'grant writing',
|
|
1095
|
+
'grants manager(s)', 'major gifts', 'annual giving', 'planned giving', 'donor relations', 'volunteer coordinator(s)',
|
|
1096
|
+
'volunteer management', 'food bank(s)', 'food pantry', 'homeless shelter(s)', 'community organizer(s)', 'community foundation(s)',
|
|
1097
|
+
'social services',
|
|
1098
|
+
],
|
|
1099
|
+
names: ['foundation'],
|
|
1100
|
+
companies: [
|
|
1101
|
+
'american red cross', 'red cross', 'united way', 'habitat for humanity', 'salvation army', 'goodwill$', 'goodwill industries', 'ymca', 'ywca',
|
|
1102
|
+
'boys & girls club', 'big brothers big sisters', 'make a wish', 'feeding america', 'meals on wheels', 'unicef', 'save the children',
|
|
1103
|
+
'world vision', 'doctors without borders', 'medecins sans frontieres', 'oxfam', 'world wildlife fund', 'the nature conservancy',
|
|
1104
|
+
'sierra club', 'american cancer society', 'american heart association', 'alzheimers association', 'march of dimes',
|
|
1105
|
+
'susan g komen', 'teach for america', 'americorps', 'peace corps', 'kiva$', 'givedirectly', 'wikimedia', 'aclu$',
|
|
1106
|
+
'american civil liberties union', 'amnesty international', 'human rights watch', 'special olympics', 'national urban league',
|
|
1107
|
+
'naacp', 'junior achievement', 'city year',
|
|
1108
|
+
],
|
|
1109
|
+
// Companies named "Foundation" that aren't charities.
|
|
1110
|
+
not: ['foundation medicine', 'foundation capital', 'foundation building', 'foundation financial', 'foundation repair',
|
|
1111
|
+
'foundation model(s)'],
|
|
1112
|
+
},
|
|
1113
|
+
{
|
|
1114
|
+
key: 'social-work', label: 'Social Work & Human Services', group: 'nonprofit', kind: 'industry',
|
|
1115
|
+
words: [
|
|
1116
|
+
'social work', 'social worker(s)', 'msw', 'bsw', 'lmsw', 'human services', 'social services', 'child welfare',
|
|
1117
|
+
'child protective services', 'foster care', 'adoption agency', 'adoption agencies', 'family services', 'youth services',
|
|
1118
|
+
'community services', 'case worker(s)', 'caseworker(s)', 'family support', 'homeless services', 'housing assistance',
|
|
1119
|
+
'refugee resettlement', 'domestic violence', 'victim advocate(s)', 'victim services', 'youth worker(s)', 'residential counselor(s)',
|
|
1120
|
+
'direct support professional(s)', 'group home(s)', 'developmental disabilities', 'intellectual disabilities',
|
|
1121
|
+
'reentry services', 'reentry specialist(s)',
|
|
1122
|
+
],
|
|
1123
|
+
companies: [
|
|
1124
|
+
'catholic charities', 'volunteers of america', 'boys town', 'national association of social workers', 'nasw$',
|
|
1125
|
+
'childrens home society',
|
|
1126
|
+
],
|
|
1127
|
+
not: [...HOBBY],
|
|
1128
|
+
},
|
|
1129
|
+
{
|
|
1130
|
+
key: 'faith', label: 'Faith & Ministry', group: 'nonprofit', kind: 'industry',
|
|
1131
|
+
words: [
|
|
1132
|
+
'church', 'churches', 'ministry', 'ministries', 'pastor(s)', 'senior pastor(s)', 'associate pastor(s)', 'youth pastor(s)',
|
|
1133
|
+
'worship leader(s)', 'worship pastor(s)', 'chaplain(s)', 'missionary', 'missionaries', 'ordained minister(s)', 'youth minister(s)',
|
|
1134
|
+
'priest(s)', 'deacon(s)', 'diocese', 'archdiocese', 'parish', 'parishes', 'synagogue(s)', 'rabbi(s)', 'mosque(s)', 'imam(s)',
|
|
1135
|
+
'seminary', 'seminarian(s)', 'theology', 'faith based', 'christian ministry',
|
|
1136
|
+
],
|
|
1137
|
+
companies: [
|
|
1138
|
+
'the church of jesus christ', 'hillsong', 'cru$', 'campus crusade', 'young life', 'fellowship of christian athletes',
|
|
1139
|
+
'intervarsity', 'samaritans purse', 'compassion international', 'focus on the family', 'world relief', 'catholic relief services',
|
|
1140
|
+
'lutheran services',
|
|
1141
|
+
],
|
|
1142
|
+
// A government ministry isn't a church.
|
|
1143
|
+
not: ['ministry of', 'ministries of'],
|
|
1144
|
+
},
|
|
1145
|
+
];
|
|
1146
|
+
|
|
1147
|
+
// ── compiled once, when this file loads ─────────────────────────────────────
|
|
1148
|
+
|
|
1149
|
+
// Bump when how a pick matches changes (this file's code, not its lists, or
|
|
1150
|
+
// how lib/scoring.js leanToward uses its answers): the version below then
|
|
1151
|
+
// changes, and scores stamped with it are redone.
|
|
1152
|
+
// 2: a function sector's roles count in a company's name only.
|
|
1153
|
+
// 3: a headline part that holds a function sector's role counts no industry
|
|
1154
|
+
// sector's words; a broad pick counts a company's one industry only when
|
|
1155
|
+
// the curated list or its name gave it, not its people's headlines.
|
|
1156
|
+
const MATCHING = 3;
|
|
1157
|
+
|
|
1158
|
+
// "Ex-", "Former", "Retired" parts of a headline say where someone was, the
|
|
1159
|
+
// way lib/scoring.js reads them.
|
|
1160
|
+
const FORMER = /^\s*(ex[-\s]|former(ly)?\b|previously\b|prev\b|past\b|retired\b)/i;
|
|
1161
|
+
// "at Quillon", "@ Quillon": the company a part of a headline names, as
|
|
1162
|
+
// lib/scoring.js finds it.
|
|
1163
|
+
const AT = /(?:\s(?:at\s+|@\s*)|^@|\s@)(.+)$/i;
|
|
1164
|
+
// After these, a headline says who someone works for, not what they do:
|
|
1165
|
+
// "Marketing for dentists" is marketing, not dental.
|
|
1166
|
+
const STOP = new Set(['for', 'helping', 'helps', 'serving', 'serves', 'supporting', 'empowering']);
|
|
1167
|
+
// A name that says one of these only matches an education sector's companies.
|
|
1168
|
+
const SCHOOL = new Set(['school', 'college', 'university', 'universidad']);
|
|
1169
|
+
|
|
1170
|
+
const APOSTROPHES = /['‘’ʼ]/g;
|
|
1171
|
+
const ASCII = /^[\x00-\x7f]*$/;
|
|
1172
|
+
const TOKENS_ASCII = /[a-z0-9]+(?:&[a-z0-9]+)*/g;
|
|
1173
|
+
const TOKENS_ANY = /[\p{L}\p{N}]+(?:&[\p{L}\p{N}]+)*/gu;
|
|
1174
|
+
const MARKS = /\p{M}+/gu;
|
|
1175
|
+
|
|
1176
|
+
/**
|
|
1177
|
+
* Text → the lowercase whole words every word, name and headline is compared
|
|
1178
|
+
* by. Accents and apostrophes go ("Nestlé" nestle, "McDonald's" mcdonalds);
|
|
1179
|
+
* other punctuation separates ("e-commerce" is e commerce, "RE/MAX" re max);
|
|
1180
|
+
* & joins only inside a word ("AT&T", "P&C"). "and" and a lone & are
|
|
1181
|
+
* dropped, so "Oil & Gas" and "oil and gas" are the same.
|
|
1182
|
+
*/
|
|
1183
|
+
export function wordsOf(text) {
|
|
1184
|
+
let s = String(text ?? '').toLowerCase().replace(APOSTROPHES, '');
|
|
1185
|
+
let re = TOKENS_ASCII;
|
|
1186
|
+
if (!ASCII.test(s)) {
|
|
1187
|
+
s = s.normalize('NFKD').replace(MARKS, '');
|
|
1188
|
+
re = TOKENS_ANY;
|
|
1189
|
+
}
|
|
1190
|
+
const out = [];
|
|
1191
|
+
for (const t of s.match(re) || []) if (t !== 'and') out.push(t);
|
|
1192
|
+
return out;
|
|
1193
|
+
}
|
|
1194
|
+
|
|
1195
|
+
const variants = (w) => (w.endsWith('(s)') ? [w.slice(0, -3), `${w.slice(0, -3)}s`] : [w]);
|
|
1196
|
+
|
|
1197
|
+
const N = DIRECTORY.length;
|
|
1198
|
+
const KEYS = DIRECTORY.map((s) => s.key);
|
|
1199
|
+
const INDEX = new Map(KEYS.map((k, i) => [k, i]));
|
|
1200
|
+
const EDUCATION = DIRECTORY.map((s) => s.group === 'education');
|
|
1201
|
+
const FUNCTION = DIRECTORY.map((s) => s.kind === 'function');
|
|
1202
|
+
|
|
1203
|
+
// Phrase (words joined by one space) → the sectors it marks.
|
|
1204
|
+
const WORDS = new Map();
|
|
1205
|
+
const NAME_WORDS = new Map();
|
|
1206
|
+
const NOT = new Map();
|
|
1207
|
+
// A function sector's roles (recruiter, attorney, marketing…) → their sectors:
|
|
1208
|
+
// a headline part that holds one is about that work.
|
|
1209
|
+
const ROLES = new Map();
|
|
1210
|
+
// Every phrase's leading words, so a scan stops as soon as nothing can follow.
|
|
1211
|
+
const LEADS = new Set();
|
|
1212
|
+
// First word of a company pattern → [{ words, exact, sector }].
|
|
1213
|
+
const PATTERNS = new Map();
|
|
1214
|
+
let LONGEST = 1;
|
|
1215
|
+
|
|
1216
|
+
function index(map, list, i) {
|
|
1217
|
+
for (const w of list || []) {
|
|
1218
|
+
for (const v of variants(w)) {
|
|
1219
|
+
const words = wordsOf(v);
|
|
1220
|
+
if (!words.length) continue;
|
|
1221
|
+
const key = words.join(' ');
|
|
1222
|
+
const at = map.get(key) || [];
|
|
1223
|
+
if (!at.includes(i)) at.push(i);
|
|
1224
|
+
map.set(key, at);
|
|
1225
|
+
for (let n = 1; n < words.length; n++) LEADS.add(words.slice(0, n).join(' '));
|
|
1226
|
+
LONGEST = Math.max(LONGEST, words.length);
|
|
1227
|
+
}
|
|
1228
|
+
}
|
|
1229
|
+
}
|
|
1230
|
+
|
|
1231
|
+
DIRECTORY.forEach((s, i) => {
|
|
1232
|
+
index(WORDS, s.words, i);
|
|
1233
|
+
index(NAME_WORDS, s.names, i);
|
|
1234
|
+
// A function sector's roles are jobs every kind of company has: they say
|
|
1235
|
+
// what a company is in its name ("Acme Recruiting"), never in a headline.
|
|
1236
|
+
index(s.kind === 'function' ? NAME_WORDS : WORDS, s.roles, i);
|
|
1237
|
+
if (s.kind === 'function') index(ROLES, s.roles, i);
|
|
1238
|
+
index(NOT, s.not, i);
|
|
1239
|
+
for (const c of s.companies || []) {
|
|
1240
|
+
const exact = c.endsWith('$');
|
|
1241
|
+
let words = wordsOf(exact ? c.slice(0, -1) : c);
|
|
1242
|
+
if (words[0] === 'the') words = words.slice(1);
|
|
1243
|
+
if (!words.length) continue;
|
|
1244
|
+
const at = PATTERNS.get(words[0]) || [];
|
|
1245
|
+
at.push({ words, exact, sector: i });
|
|
1246
|
+
PATTERNS.set(words[0], at);
|
|
1247
|
+
}
|
|
1248
|
+
});
|
|
1249
|
+
|
|
1250
|
+
const EMPTY = Object.freeze([]);
|
|
1251
|
+
|
|
1252
|
+
/**
|
|
1253
|
+
* Scan words for the list's phrases. Word hits count before `stop` (a
|
|
1254
|
+
* headline's "for", "helping"...); a phrase that cancels a sector counts
|
|
1255
|
+
* anywhere. `hits` and `vetoes` collect sector indexes, and `roles` (when
|
|
1256
|
+
* given) the function sectors whose roles appear before `stop`, except a
|
|
1257
|
+
* role inside a longer phrase of the list: "marketing" in "sports marketing"
|
|
1258
|
+
* is that phrase's.
|
|
1259
|
+
*/
|
|
1260
|
+
function scan(words, stop, withNames, hits, vetoes, roles) {
|
|
1261
|
+
const phrases = roles && []; // [start, end] of each longer word phrase found
|
|
1262
|
+
const found = roles && []; // [start, end, sectors] of each role found
|
|
1263
|
+
for (let i = 0; i < words.length; i++) {
|
|
1264
|
+
let phrase = words[i];
|
|
1265
|
+
for (let n = 1; ; n++) {
|
|
1266
|
+
if (i < stop) {
|
|
1267
|
+
const w = WORDS.get(phrase);
|
|
1268
|
+
if (w) {
|
|
1269
|
+
for (const s of w) hits.add(s);
|
|
1270
|
+
if (phrases && n > 1) phrases.push([i, i + n]);
|
|
1271
|
+
}
|
|
1272
|
+
if (withNames) {
|
|
1273
|
+
const nw = NAME_WORDS.get(phrase);
|
|
1274
|
+
if (nw) for (const s of nw) hits.add(s);
|
|
1275
|
+
}
|
|
1276
|
+
if (found) {
|
|
1277
|
+
const r = ROLES.get(phrase);
|
|
1278
|
+
if (r) found.push([i, i + n, r]);
|
|
1279
|
+
}
|
|
1280
|
+
}
|
|
1281
|
+
const no = NOT.get(phrase);
|
|
1282
|
+
if (no) for (const s of no) vetoes.add(s);
|
|
1283
|
+
if (n >= LONGEST || i + n >= words.length || !LEADS.has(phrase)) break;
|
|
1284
|
+
phrase += ` ${words[i + n]}`;
|
|
1285
|
+
}
|
|
1286
|
+
}
|
|
1287
|
+
if (!found) return;
|
|
1288
|
+
for (const [a, b, sectors] of found) {
|
|
1289
|
+
if (phrases.some(([x, y]) => x <= a && b <= y && y - x > b - a)) continue;
|
|
1290
|
+
for (const s of sectors) roles.add(s);
|
|
1291
|
+
}
|
|
1292
|
+
}
|
|
1293
|
+
|
|
1294
|
+
/** Sector indexes found, less those cancelled, in the directory's order. */
|
|
1295
|
+
function settle(hits, vetoes) {
|
|
1296
|
+
if (!hits.size) return EMPTY;
|
|
1297
|
+
const out = [];
|
|
1298
|
+
for (const s of hits) if (!vetoes.has(s)) out.push(s);
|
|
1299
|
+
return out.length ? out.sort((a, b) => a - b) : EMPTY;
|
|
1300
|
+
}
|
|
1301
|
+
|
|
1302
|
+
// A company's name followed by one of these is a venue named for it ("State
|
|
1303
|
+
// Farm Arena", "FedEx Field", "AT&T Performing Arts Center"): its staff aren't
|
|
1304
|
+
// the company's, so an open-ended entry doesn't claim it.
|
|
1305
|
+
const VENUE = new Set(['arena', 'stadium', 'center', 'centre', 'field', 'park', 'ballpark', 'dome', 'amphitheater', 'amphitheatre',
|
|
1306
|
+
'theater', 'theatre', 'pavilion', 'forum', 'coliseum', 'speedway', 'performing']);
|
|
1307
|
+
|
|
1308
|
+
/** The sectors a company's name places it in: its words, and the companies lists. */
|
|
1309
|
+
function nameSectors(name) {
|
|
1310
|
+
const words = wordsOf(name);
|
|
1311
|
+
if (!words.length) return EMPTY;
|
|
1312
|
+
const hits = new Set();
|
|
1313
|
+
const vetoes = new Set();
|
|
1314
|
+
scan(words, words.length, true, hits, vetoes);
|
|
1315
|
+
// Aliases match from the start of a name, so a school's name could read as
|
|
1316
|
+
// another company's: "Chase College of Law" is not Chase the bank.
|
|
1317
|
+
const school = words.some((w) => SCHOOL.has(w));
|
|
1318
|
+
const start = words[0] === 'the' ? 1 : 0;
|
|
1319
|
+
for (const p of PATTERNS.get(words[start]) || []) {
|
|
1320
|
+
if (school && !EDUCATION[p.sector]) continue;
|
|
1321
|
+
const left = words.length - start;
|
|
1322
|
+
if (left < p.words.length || (p.exact && left !== p.words.length)) continue;
|
|
1323
|
+
if (VENUE.has(words[start + p.words.length])) continue;
|
|
1324
|
+
let same = true;
|
|
1325
|
+
for (let k = 1; k < p.words.length && same; k++) same = words[start + k] === p.words[k];
|
|
1326
|
+
if (same) hits.add(p.sector);
|
|
1327
|
+
}
|
|
1328
|
+
return settle(hits, vetoes);
|
|
1329
|
+
}
|
|
1330
|
+
|
|
1331
|
+
/**
|
|
1332
|
+
* A headline read once: its current parts ("Ex-" parts dropped), each with
|
|
1333
|
+
* the company it names (cleaned the way scoring cleans it, or null), and the
|
|
1334
|
+
* sectors its words say and cancel. `first` is the first part that names a
|
|
1335
|
+
* company, or -1. `clean` memoizes lib/scoring.js cleanCompany.
|
|
1336
|
+
*/
|
|
1337
|
+
function readHeadline(headline, clean) {
|
|
1338
|
+
const parts = [];
|
|
1339
|
+
let first = -1;
|
|
1340
|
+
for (const text of headlineParts(headline)) {
|
|
1341
|
+
if (FORMER.test(text)) continue;
|
|
1342
|
+
const at = AT.exec(text);
|
|
1343
|
+
const company = at ? clean(at[1]) : null;
|
|
1344
|
+
const words = wordsOf(text);
|
|
1345
|
+
let stop = words.length;
|
|
1346
|
+
for (let i = 0; i < words.length; i++) if (STOP.has(words[i])) { stop = i; break; }
|
|
1347
|
+
const hits = new Set();
|
|
1348
|
+
const vetoes = new Set();
|
|
1349
|
+
const roles = new Set();
|
|
1350
|
+
scan(words, stop, false, hits, vetoes, roles);
|
|
1351
|
+
// A part that holds a function sector's role ("University Recruiter",
|
|
1352
|
+
// "Insurance Defense Attorney", "Dental Marketing Manager") says what the
|
|
1353
|
+
// person does, work every kind of company has, so the industry words
|
|
1354
|
+
// beside it don't place the company. A role its own sector cancels
|
|
1355
|
+
// ("law" in "law enforcement") doesn't count.
|
|
1356
|
+
for (const s of roles) {
|
|
1357
|
+
if (vetoes.has(s)) continue;
|
|
1358
|
+
for (const h of hits) if (!FUNCTION[h]) hits.delete(h);
|
|
1359
|
+
break;
|
|
1360
|
+
}
|
|
1361
|
+
if (company && first < 0) first = parts.length;
|
|
1362
|
+
parts.push({ company, hits, vetoes });
|
|
1363
|
+
}
|
|
1364
|
+
return { parts, first };
|
|
1365
|
+
}
|
|
1366
|
+
|
|
1367
|
+
/**
|
|
1368
|
+
* What a read headline says about one company its person works at. A part
|
|
1369
|
+
* that names a company counts for that company only: "Founder at Quillon |
|
|
1370
|
+
* Host at The Long Table Podcast" doesn't make Quillon a podcast. The parts
|
|
1371
|
+
* before the first one that names a company describe the role there
|
|
1372
|
+
* ("Dentist | Owner at Smith Family Practice"); the parts after it are side
|
|
1373
|
+
* notes and don't count. When no part names a company, or not this one (it
|
|
1374
|
+
* came from a company scan), the leading parts are all there is, so they count.
|
|
1375
|
+
*/
|
|
1376
|
+
function sectorsAt(read, company) {
|
|
1377
|
+
const { parts, first } = read;
|
|
1378
|
+
const named = first >= 0 && parts.some((p) => p.company === company);
|
|
1379
|
+
const lead = first < 0 || !named || parts[first].company === company;
|
|
1380
|
+
const hits = new Set();
|
|
1381
|
+
const vetoes = new Set();
|
|
1382
|
+
for (let i = 0; i < parts.length; i++) {
|
|
1383
|
+
const p = parts[i];
|
|
1384
|
+
const counts = first < 0 || (lead && i < first) || (named && p.company === company);
|
|
1385
|
+
if (!counts) continue;
|
|
1386
|
+
for (const s of p.hits) hits.add(s);
|
|
1387
|
+
for (const s of p.vetoes) vetoes.add(s);
|
|
1388
|
+
}
|
|
1389
|
+
return settle(hits, vetoes);
|
|
1390
|
+
}
|
|
1391
|
+
|
|
1392
|
+
const keysOf = (ids) => (ids.length ? ids.map((i) => KEYS[i]) : EMPTY);
|
|
1393
|
+
|
|
1394
|
+
/** The sectors a company's name alone places it in (keys, in the directory's order). */
|
|
1395
|
+
export const sectorsInName = (name) => keysOf(nameSectors(name));
|
|
1396
|
+
|
|
1397
|
+
/**
|
|
1398
|
+
* The sectors a headline says someone works in (keys, in the directory's
|
|
1399
|
+
* order): at `company` if given, else across all its current parts.
|
|
1400
|
+
*/
|
|
1401
|
+
export function sectorsInHeadline(headline, company) {
|
|
1402
|
+
const read = readHeadline(headline, cleanCompany);
|
|
1403
|
+
return keysOf(sectorsAt(company === undefined ? { parts: read.parts, first: -1 } : read, company));
|
|
1404
|
+
}
|
|
1405
|
+
|
|
1406
|
+
/**
|
|
1407
|
+
* A company's sectors, for one read of the network: pass the result to
|
|
1408
|
+
* lib/scoring.js readNetwork as `sectorsOf`, the way lib/companies.js
|
|
1409
|
+
* industryKeyOf is passed as `industryOf`. A company matches a sector when
|
|
1410
|
+
* - its name has one of the sector's words (or names, or a function
|
|
1411
|
+
* sector's roles: "Acme Recruiting"), or is one of its companies, or
|
|
1412
|
+
* - at least half of its people here, and at least one, say one of the
|
|
1413
|
+
* sector's words in what their headline says about this company
|
|
1414
|
+
* (sectorsAt). For a one-person company, that person decides. A function
|
|
1415
|
+
* sector's roles don't count here: "Recruiter at Acme Widgets" says what
|
|
1416
|
+
* the person does, not what Acme is.
|
|
1417
|
+
* A company can match several sectors. `headlines` are those of the people
|
|
1418
|
+
* who work there now, one each (networkCompanies collects them). Each
|
|
1419
|
+
* headline is read once per matcher, however many companies it names.
|
|
1420
|
+
* @returns (name, headlines) → sector keys, in the directory's order
|
|
1421
|
+
*/
|
|
1422
|
+
export function sectorMatcher() {
|
|
1423
|
+
const cleaned = new Map();
|
|
1424
|
+
const clean = (text) => {
|
|
1425
|
+
if (!cleaned.has(text)) cleaned.set(text, cleanCompany(text));
|
|
1426
|
+
return cleaned.get(text);
|
|
1427
|
+
};
|
|
1428
|
+
const reads = new Map();
|
|
1429
|
+
const readOf = (h) => {
|
|
1430
|
+
let read = reads.get(h);
|
|
1431
|
+
if (!read) {
|
|
1432
|
+
read = readHeadline(h, clean);
|
|
1433
|
+
reads.set(h, read);
|
|
1434
|
+
}
|
|
1435
|
+
return read;
|
|
1436
|
+
};
|
|
1437
|
+
return function sectorsOf(name, headlines = []) {
|
|
1438
|
+
const byName = nameSectors(name);
|
|
1439
|
+
let counts = null;
|
|
1440
|
+
for (const h of headlines) {
|
|
1441
|
+
if (!h) continue;
|
|
1442
|
+
const ids = sectorsAt(readOf(h), name);
|
|
1443
|
+
if (!ids.length) continue;
|
|
1444
|
+
counts ||= new Uint32Array(N);
|
|
1445
|
+
for (const i of ids) counts[i]++;
|
|
1446
|
+
}
|
|
1447
|
+
if (!counts) return keysOf(byName);
|
|
1448
|
+
const out = [];
|
|
1449
|
+
for (let i = 0; i < N; i++) {
|
|
1450
|
+
if (byName.includes(i) || (counts[i] >= 1 && counts[i] * 2 >= headlines.length)) out.push(KEYS[i]);
|
|
1451
|
+
}
|
|
1452
|
+
return out.length ? out : EMPTY;
|
|
1453
|
+
};
|
|
1454
|
+
}
|
|
1455
|
+
|
|
1456
|
+
// ── the directory as the page and the setting see it ───────────────────────
|
|
1457
|
+
|
|
1458
|
+
// Labels and colours come from lib/sector-labels.js, so a page that only names
|
|
1459
|
+
// a pick needn't load the word lists; a test keeps the two files the same.
|
|
1460
|
+
export { sectorByKey, sectorLabel } from './sector-labels.js';
|
|
1461
|
+
|
|
1462
|
+
/**
|
|
1463
|
+
* Everything Settings → Your sector can pick, in the order a choice is stored:
|
|
1464
|
+
* each broad industry, then its sectors.
|
|
1465
|
+
*/
|
|
1466
|
+
export const SECTOR_KEYS = Object.freeze(INDUSTRIES.flatMap((g) => [g.key, ...DIRECTORY.filter((s) => s.group === g.key).map((s) => s.key)]));
|
|
1467
|
+
|
|
1468
|
+
/** Is this a sector from the directory (rather than a broad industry)? */
|
|
1469
|
+
export const isDirectoryKey = (key) => INDEX.has(key);
|
|
1470
|
+
|
|
1471
|
+
/**
|
|
1472
|
+
* The broad industry a directory sector sits under ('dental' → 'health'), or
|
|
1473
|
+
* nothing for a key that isn't one. Passed to lib/scoring.js readNetwork as
|
|
1474
|
+
* `groupOf` beside `sectorsOf`, so a pick of a whole industry includes the
|
|
1475
|
+
* companies placed in any of its sectors.
|
|
1476
|
+
*/
|
|
1477
|
+
export const sectorGroup = (key) => (INDEX.has(key) ? DIRECTORY[INDEX.get(key)].group : undefined);
|
|
1478
|
+
|
|
1479
|
+
/**
|
|
1480
|
+
* The directory sectors most of your people work in, worked out locally from
|
|
1481
|
+
* the rows and their read (lib/scoring.js readNetwork with a sectorMatcher):
|
|
1482
|
+
* how many people (each once) work now at a company that matches, and how
|
|
1483
|
+
* many such companies there are. The biggest first; ties in the directory's
|
|
1484
|
+
* order. Sectors nobody matches are left out.
|
|
1485
|
+
* @returns [{ key, label, group, people, companies }]
|
|
1486
|
+
*/
|
|
1487
|
+
export function suggestSectors(rows = [], read, { limit = 5 } = {}) {
|
|
1488
|
+
if (!read) return [];
|
|
1489
|
+
const people = KEYS.map(() => new Set());
|
|
1490
|
+
const companies = new Uint32Array(N);
|
|
1491
|
+
for (const c of read.companies.values()) {
|
|
1492
|
+
if (!c.headcount || !c.sectors?.length) continue;
|
|
1493
|
+
for (const k of c.sectors) companies[INDEX.get(k)]++;
|
|
1494
|
+
}
|
|
1495
|
+
for (const r of rows) {
|
|
1496
|
+
const who = r.profile_url || `id:${r.id}`;
|
|
1497
|
+
for (const role of read.people.get(r)?.roles || []) {
|
|
1498
|
+
if (role.former || !role.company) continue;
|
|
1499
|
+
for (const k of read.companies.get(role.company)?.sectors || EMPTY) people[INDEX.get(k)].add(who);
|
|
1500
|
+
}
|
|
1501
|
+
}
|
|
1502
|
+
return DIRECTORY
|
|
1503
|
+
.map((s, i) => ({ key: s.key, label: s.label, group: s.group, people: people[i].size, companies: companies[i] }))
|
|
1504
|
+
.filter((s) => s.people > 0)
|
|
1505
|
+
.sort((a, b) => b.people - a.people || b.companies - a.companies || INDEX.get(a.key) - INDEX.get(b.key))
|
|
1506
|
+
.slice(0, limit);
|
|
1507
|
+
}
|
|
1508
|
+
|
|
1509
|
+
// ── the version ─────────────────────────────────────────────────────────────
|
|
1510
|
+
|
|
1511
|
+
function fnv1a(text) {
|
|
1512
|
+
let h = 0x811c9dc5;
|
|
1513
|
+
for (let i = 0; i < text.length; i++) {
|
|
1514
|
+
h ^= text.charCodeAt(i);
|
|
1515
|
+
h = Math.imul(h, 0x01000193);
|
|
1516
|
+
}
|
|
1517
|
+
return (h >>> 0).toString(16).padStart(8, '0');
|
|
1518
|
+
}
|
|
1519
|
+
|
|
1520
|
+
/**
|
|
1521
|
+
* Worked out from the list itself (and MATCHING), so any edit changes it and
|
|
1522
|
+
* nobody has to remember to bump it. A sector focus that picks from the
|
|
1523
|
+
* directory is stamped with it (lib/sector-focus.js focusFingerprint), so
|
|
1524
|
+
* scores computed with an older list are redone on the next load.
|
|
1525
|
+
*/
|
|
1526
|
+
export const DIRECTORY_VERSION = fnv1a(JSON.stringify([MATCHING, [...STOP], [...SCHOOL], [...VENUE], DIRECTORY]));
|
|
1527
|
+
|
|
1528
|
+
for (const s of DIRECTORY) {
|
|
1529
|
+
for (const list of [s.words, s.roles, s.names, s.companies, s.not]) if (list) Object.freeze(list);
|
|
1530
|
+
Object.freeze(s);
|
|
1531
|
+
}
|
|
1532
|
+
Object.freeze(DIRECTORY);
|