- Paginated HTML scraper (up to 6 pages, 400ms delay between requests) - Card-boundary-safe parsing to prevent field bleed across cards - Language filter: drops German (m/w/d, umlauts) and French (H/F, accents) titles - Software-role filter: requires title to contain a relevant tech term - Global deduplication by job ID across runs - 30-day recency filter via LinkedIn f_TPR parameter - CSV output: date_found, posted_at, search, title, company, link
65 lines
1.5 KiB
TypeScript
65 lines
1.5 KiB
TypeScript
export type WorkType = "onsite" | "remote" | "hybrid";
|
|
export type JobType = "full-time" | "part-time" | "contract" | "temporary" | "internship";
|
|
export type TimePosted = "day" | "week" | "month";
|
|
export type Seniority = "internship" | "entry" | "associate" | "mid-senior" | "director" | "executive";
|
|
|
|
export interface SearchConfig {
|
|
label: string;
|
|
/** Use a raw LinkedIn URL instead of building one from filters. */
|
|
url?: string;
|
|
keywords?: string;
|
|
geoId?: string;
|
|
location?: string;
|
|
workType?: WorkType[];
|
|
jobType?: JobType[];
|
|
timePosted?: TimePosted;
|
|
seniority?: Seniority[];
|
|
}
|
|
|
|
const KEYWORDS = [
|
|
"Software Engineer",
|
|
"Solutions Engineer",
|
|
"Full Stack Engineer",
|
|
"Backend Engineer",
|
|
"Data Engineer",
|
|
"AI Engineer",
|
|
"Platform Engineer",
|
|
"DevOps Engineer",
|
|
"Staff Engineer",
|
|
"Principal Engineer",
|
|
"Tech Lead",
|
|
"Developer",
|
|
"Ruby on Rails",
|
|
"Python",
|
|
"Node.js",
|
|
"TypeScript",
|
|
].join(" OR ");
|
|
|
|
// --- Define your searches here ---
|
|
export const searches: SearchConfig[] = [
|
|
{
|
|
label: "Basel (city)",
|
|
keywords: KEYWORDS,
|
|
geoId: "103383283",
|
|
location: "Basel",
|
|
workType: ["onsite", "hybrid"],
|
|
timePosted: "month",
|
|
},
|
|
{
|
|
label: "Basel Metropolitan Area",
|
|
keywords: KEYWORDS,
|
|
geoId: "90009885",
|
|
location: "Basel Metropolitan Area",
|
|
workType: ["onsite", "hybrid"],
|
|
timePosted: "month",
|
|
},
|
|
{
|
|
label: "Basel-Country",
|
|
keywords: KEYWORDS,
|
|
geoId: "107117530",
|
|
location: "Basel-Country",
|
|
workType: ["onsite", "hybrid"],
|
|
timePosted: "month",
|
|
},
|
|
];
|