"""Recruitee careers-site API — public, keyless endpoint behind `.recruitee.com`: `GET https://{token}.recruitee.com/api/offers/` → {"offers":[{id, slug, title, careers_url, city, country, country_code, state_name, department, published_at, created_at, remote, hybrid, on_site, employment_type_code, category_code, experience_code, location, salary?, tags}]}. Verified 2026-09-12 against `vandebron` (fixture trimmed to 20 offers, descriptions removed).""" from __future__ import annotations import re from collections.abc import Mapping from typing import Any from companyatlas.connectors._ats_base import AtsConnector from companyatlas.connectors._util import country_code, parse_date, text_of from companyatlas.sdk.connector import ConnectorMeta, register from companyatlas.sdk.models import ExtractedJob from companyatlas.taxonomy import FetchMode, Surface @register class RecruiteeConnector(AtsConnector): vendor = "recruitee" token_re = re.compile(r"https?://([a-z0-9-]+)\.recruitee\.com/api/offers", re.IGNORECASE) meta = ConnectorMeta(connector_id="recruitee-v1", name="Recruitee offers", version="1", category=Surface.JOBS_BOARD, fetch_mode=FetchMode.JSON, default_interval_s=6 * 3600, url_pattern=r"\.recruitee\.com/api/offers", pattern_required=True, priority=50, accept="application/json", description="Public Recruitee careers-site API") def parse_jobs(self, data: Any, sensor: Mapping[str, Any]) -> list[ExtractedJob]: out: list[ExtractedJob] = [] for o in (data.get("offers") if isinstance(data, dict) else []) or []: if not isinstance(o, dict) or not o.get("title"): continue if o.get("status") not in (None, "published"): continue sal = o.get("salary") or {} remote = True if o.get("remote") else (False if (o.get("on_site") or o.get("hybrid")) else None) out.append(ExtractedJob( title=str(o["title"]), url=o.get("careers_url"), external_id=str(o.get("id") or o.get("slug") or ""), department=text_of(o.get("department")), location_text=text_of(o.get("location")) or ", ".join(x for x in (o.get("city"), o.get("country")) if x) or None, city=text_of(o.get("city")), region=text_of(o.get("state_name")), country=country_code(o.get("country_code")) or country_code(o.get("country")), remote=remote, employment_type=text_of(o.get("employment_type_code")), posted_at=parse_date(o.get("published_at") or o.get("created_at")), salary_min=sal.get("min") if isinstance(sal, dict) else None, salary_max=sal.get("max") if isinstance(sal, dict) else None, salary_currency=sal.get("currency") if isinstance(sal, dict) else None, salary_period=sal.get("period") if isinstance(sal, dict) else None, raw={"category_code": o.get("category_code"), "experience_code": o.get("experience_code"), "tags": (o.get("tags") or [])[:10]}, )) return out