spb/company-atlas
Public
Python 66.3%
TypeScript 22.7%
JavaScript 8.6%
HTML 1.4%
CSS 0.7%
1"""Workable — public widget endpoint behind `apply.workable.com/<token>`:2`GET https://apply.workable.com/api/v1/widget/accounts/{token}` → {name, description, jobs:[{title, shortcode, code, employment_type,3telecommuting, department, url, published_on, created_at, country, city, state, function, locations:[{country, countryCode, city, region}]}]}.4Verified 2026-09-12 against `epignosis` (fixture trimmed, descriptions removed)."""5from __future__ import annotations67import re8from collections.abc import Mapping9from typing import Any1011from companyatlas.connectors._ats_base import AtsConnector12from companyatlas.connectors._util import country_code, parse_date, text_of13from companyatlas.sdk.connector import ConnectorMeta, register14from companyatlas.sdk.models import ExtractedJob15from companyatlas.taxonomy import FetchMode, Surface161718@register19class WorkableConnector(AtsConnector):20 vendor = "workable"21 token_re = re.compile(r"apply\.workable\.com/api/v1/widget/accounts/([a-z0-9_-]+)", re.IGNORECASE)22 meta = ConnectorMeta(connector_id="workable-v1", name="Workable widget", version="1", category=Surface.JOBS_BOARD, fetch_mode=FetchMode.JSON,23 default_interval_s=6 * 3600, url_pattern=r"apply\.workable\.com/api/v1/widget/accounts/", pattern_required=True, priority=50,24 accept="application/json", description="Public Workable widget API")2526 def parse_jobs(self, data: Any, sensor: Mapping[str, Any]) -> list[ExtractedJob]:27 out: list[ExtractedJob] = []28 for j in (data.get("jobs") if isinstance(data, dict) else []) or []:29 if not isinstance(j, dict) or not j.get("title"):30 continue31 locs = j.get("locations") or []32 first = locs[0] if locs and isinstance(locs[0], dict) else {}33 city, state, country = j.get("city") or first.get("city"), j.get("state") or first.get("region"), j.get("country") or first.get("country")34 out.append(ExtractedJob(35 title=str(j["title"]), url=j.get("url") or j.get("shortlink"), external_id=str(j.get("shortcode") or j.get("code") or ""),36 department=text_of(j.get("department")), location_text=", ".join(x for x in (city, state, country) if x) or None,37 city=text_of(city), region=text_of(state), country=country_code(first.get("countryCode")) or country_code(country),38 remote=bool(j.get("telecommuting")) if j.get("telecommuting") is not None else None, employment_type=text_of(j.get("employment_type")),39 posted_at=parse_date(j.get("published_on") or j.get("created_at")),40 raw={"function": j.get("function"), "experience": j.get("experience"), "industry": j.get("industry")},41 ))42 return out43