{
  "feed": "jobs",
  "version": 1,
  "publisher": "Arcadium Data",
  "layout": "<cut>/<table>/dt=YYYY-MM-DD/part-<HHMMSS>.{parquet,jsonl.gz}",
  "formats": {
    "parquet": "Parquet, zstd, one row group per 50k rows",
    "jsonl_gz": "JSON Lines, gzip; timestamps as ISO 8601 UTC"
  },
  "cuts": [
    {
      "id": "global",
      "dir": "global",
      "label": "All jobs"
    },
    {
      "id": "eu",
      "dir": "region=eu",
      "label": "Jobs located in Europe (EU-27, EEA, UK, Switzerland)"
    },
    {
      "id": "us",
      "dir": "region=us",
      "label": "Jobs located in the United States"
    },
    {
      "id": "remote",
      "dir": "remote_only",
      "label": "Fully remote jobs (any country)"
    }
  ],
  "europe_countries": [
    "AT",
    "BE",
    "BG",
    "CH",
    "CY",
    "CZ",
    "DE",
    "DK",
    "EE",
    "ES",
    "FI",
    "FR",
    "GB",
    "GR",
    "HR",
    "HU",
    "IE",
    "IS",
    "IT",
    "LI",
    "LT",
    "LU",
    "LV",
    "MT",
    "NL",
    "NO",
    "PL",
    "PT",
    "RO",
    "SE",
    "SI",
    "SK"
  ],
  "personal_data": "none: no recruiter or contact names, emails or phone numbers; text fields pass a PII filter",
  "tables": {
    "jobs_delta": {
      "cadence": "daily (one part per run; several parts in a dt partition are all valid and ordered by name)",
      "description": "Jobs that entered, changed in or left the cut since the previous run. Append-only.",
      "columns": [
        {
          "name": "change_type",
          "type": "STRING",
          "nullable": false,
          "description": "`new` (job enters this cut), `updated` (content_hash changed, or a closed job reopened), `closed` (job left this cut)."
        },
        {
          "name": "removal_reason",
          "type": "STRING",
          "nullable": true,
          "description": "For `closed` rows: closed (gone from the board), duplicate (same job found on another source), excluded (employer now out of scope, e.g. a staffing agency), deleted (board removed), left_cut (still open, no longer in this cut)."
        },
        {
          "name": "job_id",
          "type": "STRING",
          "nullable": false,
          "description": "Stable job id `<ats>___<native id>`; the key of every delta row."
        },
        {
          "name": "title",
          "type": "STRING",
          "nullable": false,
          "description": "Job title as posted (emails, phone numbers and personal profile links removed)."
        },
        {
          "name": "company_name",
          "type": "STRING",
          "nullable": true,
          "description": "Employer display name (cleaned; careers-page slogans dropped)."
        },
        {
          "name": "company_domain",
          "type": "STRING",
          "nullable": true,
          "description": "Employer website domain, lower case, without www (null when not matched with confidence)."
        },
        {
          "name": "country",
          "type": "STRING",
          "nullable": true,
          "description": "Primary country, ISO 3166-1 alpha-2 (first of `countries`)."
        },
        {
          "name": "countries",
          "type": "STRING",
          "nullable": true,
          "description": "All countries of the job locations, ISO alpha-2, `;`-separated."
        },
        {
          "name": "locations",
          "type": "STRING",
          "nullable": true,
          "description": "Location texts as posted, `;`-separated."
        },
        {
          "name": "remote",
          "type": "BOOLEAN",
          "nullable": true,
          "description": "true = fully remote, false = on-site or hybrid, null = not stated."
        },
        {
          "name": "employment_type",
          "type": "STRING",
          "nullable": true,
          "description": "Employment type as stated by the ATS (full-time, part-time, contract ...)."
        },
        {
          "name": "seniority",
          "type": "STRING",
          "nullable": true,
          "description": "Seniority level when the ATS states one."
        },
        {
          "name": "department",
          "type": "STRING",
          "nullable": true,
          "description": "Primary department or team (first of `departments`)."
        },
        {
          "name": "departments",
          "type": "STRING",
          "nullable": true,
          "description": "All departments or teams, `;`-separated."
        },
        {
          "name": "salary_min",
          "type": "DOUBLE",
          "nullable": true,
          "description": "Lower pay bound, only when the posting states pay in a structured field or a clear text range."
        },
        {
          "name": "salary_max",
          "type": "DOUBLE",
          "nullable": true,
          "description": "Upper pay bound (same rule)."
        },
        {
          "name": "salary_currency",
          "type": "STRING",
          "nullable": true,
          "description": "ISO 4217 currency of the pay range."
        },
        {
          "name": "salary_period",
          "type": "STRING",
          "nullable": true,
          "description": "Pay period of the range (year, month, hour ...)."
        },
        {
          "name": "salary_source",
          "type": "STRING",
          "nullable": true,
          "description": "Where the pay range came from (structured ATS field or posting text)."
        },
        {
          "name": "ats",
          "type": "STRING",
          "nullable": false,
          "description": "Source system the job was read from (greenhouse, lever, workday, smartrecruiters, ...)."
        },
        {
          "name": "language",
          "type": "STRING",
          "nullable": true,
          "description": "Language of the posting when known (ISO 639-1)."
        },
        {
          "name": "posted_at",
          "type": "TIMESTAMP",
          "nullable": true,
          "description": "Posting date stated by the employer (UTC); null when the ATS gives none."
        },
        {
          "name": "updated_at",
          "type": "TIMESTAMP",
          "nullable": true,
          "description": "Last update stated by the employer (UTC)."
        },
        {
          "name": "first_seen_at",
          "type": "TIMESTAMP",
          "nullable": false,
          "description": "When we first saw the job (UTC). Point-in-time stamp: never moves."
        },
        {
          "name": "last_seen_at",
          "type": "TIMESTAMP",
          "nullable": false,
          "description": "Last crawl that still saw the job open (UTC)."
        },
        {
          "name": "closed_at",
          "type": "TIMESTAMP",
          "nullable": true,
          "description": "When the job disappeared from the employer board (UTC); null while open."
        },
        {
          "name": "url",
          "type": "STRING",
          "nullable": false,
          "description": "Public job posting URL on the employer careers site or ATS."
        },
        {
          "name": "content_hash",
          "type": "STRING",
          "nullable": false,
          "description": "Hash of the exported fields except `last_seen_at` and `description`; changes = an `updated` delta row."
        },
        {
          "name": "description",
          "type": "STRING",
          "nullable": true,
          "description": "Full job description, plain text (only in feeds built with --with-descriptions; off by default)."
        }
      ]
    },
    "jobs_snapshot": {
      "cadence": "weekly (and on the first run)",
      "description": "Every open job of the cut at export time. One part per dt partition.",
      "columns": [
        {
          "name": "job_id",
          "type": "STRING",
          "nullable": false,
          "description": "Stable job id `<ats>___<native id>`; the key of every delta row."
        },
        {
          "name": "title",
          "type": "STRING",
          "nullable": false,
          "description": "Job title as posted (emails, phone numbers and personal profile links removed)."
        },
        {
          "name": "company_name",
          "type": "STRING",
          "nullable": true,
          "description": "Employer display name (cleaned; careers-page slogans dropped)."
        },
        {
          "name": "company_domain",
          "type": "STRING",
          "nullable": true,
          "description": "Employer website domain, lower case, without www (null when not matched with confidence)."
        },
        {
          "name": "country",
          "type": "STRING",
          "nullable": true,
          "description": "Primary country, ISO 3166-1 alpha-2 (first of `countries`)."
        },
        {
          "name": "countries",
          "type": "STRING",
          "nullable": true,
          "description": "All countries of the job locations, ISO alpha-2, `;`-separated."
        },
        {
          "name": "locations",
          "type": "STRING",
          "nullable": true,
          "description": "Location texts as posted, `;`-separated."
        },
        {
          "name": "remote",
          "type": "BOOLEAN",
          "nullable": true,
          "description": "true = fully remote, false = on-site or hybrid, null = not stated."
        },
        {
          "name": "employment_type",
          "type": "STRING",
          "nullable": true,
          "description": "Employment type as stated by the ATS (full-time, part-time, contract ...)."
        },
        {
          "name": "seniority",
          "type": "STRING",
          "nullable": true,
          "description": "Seniority level when the ATS states one."
        },
        {
          "name": "department",
          "type": "STRING",
          "nullable": true,
          "description": "Primary department or team (first of `departments`)."
        },
        {
          "name": "departments",
          "type": "STRING",
          "nullable": true,
          "description": "All departments or teams, `;`-separated."
        },
        {
          "name": "salary_min",
          "type": "DOUBLE",
          "nullable": true,
          "description": "Lower pay bound, only when the posting states pay in a structured field or a clear text range."
        },
        {
          "name": "salary_max",
          "type": "DOUBLE",
          "nullable": true,
          "description": "Upper pay bound (same rule)."
        },
        {
          "name": "salary_currency",
          "type": "STRING",
          "nullable": true,
          "description": "ISO 4217 currency of the pay range."
        },
        {
          "name": "salary_period",
          "type": "STRING",
          "nullable": true,
          "description": "Pay period of the range (year, month, hour ...)."
        },
        {
          "name": "salary_source",
          "type": "STRING",
          "nullable": true,
          "description": "Where the pay range came from (structured ATS field or posting text)."
        },
        {
          "name": "ats",
          "type": "STRING",
          "nullable": false,
          "description": "Source system the job was read from (greenhouse, lever, workday, smartrecruiters, ...)."
        },
        {
          "name": "language",
          "type": "STRING",
          "nullable": true,
          "description": "Language of the posting when known (ISO 639-1)."
        },
        {
          "name": "posted_at",
          "type": "TIMESTAMP",
          "nullable": true,
          "description": "Posting date stated by the employer (UTC); null when the ATS gives none."
        },
        {
          "name": "updated_at",
          "type": "TIMESTAMP",
          "nullable": true,
          "description": "Last update stated by the employer (UTC)."
        },
        {
          "name": "first_seen_at",
          "type": "TIMESTAMP",
          "nullable": false,
          "description": "When we first saw the job (UTC). Point-in-time stamp: never moves."
        },
        {
          "name": "last_seen_at",
          "type": "TIMESTAMP",
          "nullable": false,
          "description": "Last crawl that still saw the job open (UTC)."
        },
        {
          "name": "closed_at",
          "type": "TIMESTAMP",
          "nullable": true,
          "description": "When the job disappeared from the employer board (UTC); null while open."
        },
        {
          "name": "url",
          "type": "STRING",
          "nullable": false,
          "description": "Public job posting URL on the employer careers site or ATS."
        },
        {
          "name": "content_hash",
          "type": "STRING",
          "nullable": false,
          "description": "Hash of the exported fields except `last_seen_at` and `description`; changes = an `updated` delta row."
        },
        {
          "name": "description",
          "type": "STRING",
          "nullable": true,
          "description": "Full job description, plain text (only in feeds built with --with-descriptions; off by default)."
        }
      ]
    },
    "companies_signals": {
      "cadence": "daily; every day is kept (the history is the asset). The latest two days are rewritten as they settle.",
      "description": "One row per company and day: open jobs, 7/30-day hiring change, openings, closures, market entries, remote and pay shares, department mix shift, tech stack and event counts.",
      "columns": [
        {
          "name": "company_domain",
          "type": "STRING",
          "nullable": false,
          "description": "Company website domain (the company key)."
        },
        {
          "name": "company_name",
          "type": "STRING",
          "nullable": true,
          "description": "Employer display name."
        },
        {
          "name": "as_of",
          "type": "STRING",
          "nullable": false,
          "description": "Day the signals describe (UTC, YYYY-MM-DD); equals the dt partition."
        },
        {
          "name": "provisional",
          "type": "BOOLEAN",
          "nullable": true,
          "description": "true while the company has under 28 days of history: trend columns are not final yet."
        },
        {
          "name": "history_days",
          "type": "INT64",
          "nullable": true,
          "description": "Days since the company was first tracked."
        },
        {
          "name": "ats",
          "type": "STRING",
          "nullable": true,
          "description": "Source systems of the company boards, `;`-separated."
        },
        {
          "name": "boards",
          "type": "INT64",
          "nullable": true,
          "description": "Number of job boards folded into the company."
        },
        {
          "name": "open_jobs",
          "type": "INT64",
          "nullable": false,
          "description": "Open jobs at the end of the day."
        },
        {
          "name": "net_change_7d",
          "type": "INT64",
          "nullable": true,
          "description": "Open jobs now minus 7 days ago (boards tracked on both days); null until 7 days of history."
        },
        {
          "name": "net_change_30d",
          "type": "INT64",
          "nullable": true,
          "description": "Open jobs now minus 30 days ago; null until 30 days of history."
        },
        {
          "name": "change_7d_pct",
          "type": "DOUBLE",
          "nullable": true,
          "description": "net_change_7d / open jobs 7 days ago."
        },
        {
          "name": "openings_7d",
          "type": "INT64",
          "nullable": true,
          "description": "Jobs posted in the 7 days to as_of."
        },
        {
          "name": "openings_30d",
          "type": "INT64",
          "nullable": true,
          "description": "Jobs posted in the 30 days to as_of."
        },
        {
          "name": "closures_7d",
          "type": "INT64",
          "nullable": true,
          "description": "Jobs that disappeared in the 7 days to as_of."
        },
        {
          "name": "closures_30d",
          "type": "INT64",
          "nullable": true,
          "description": "Jobs that disappeared in the 30 days to as_of."
        },
        {
          "name": "countries",
          "type": "INT64",
          "nullable": true,
          "description": "Countries with open jobs."
        },
        {
          "name": "cities",
          "type": "INT64",
          "nullable": true,
          "description": "Cities with open jobs."
        },
        {
          "name": "new_countries_30d",
          "type": "INT64",
          "nullable": true,
          "description": "Countries entered in the 30 days to as_of (market entries)."
        },
        {
          "name": "new_cities_30d",
          "type": "INT64",
          "nullable": true,
          "description": "Cities entered in the 30 days to as_of."
        },
        {
          "name": "remote_share",
          "type": "DOUBLE",
          "nullable": true,
          "description": "Share of open jobs that are fully remote."
        },
        {
          "name": "remote_share_change_30d",
          "type": "DOUBLE",
          "nullable": true,
          "description": "Change of remote_share against ~30 days ago."
        },
        {
          "name": "posted_pay_share",
          "type": "DOUBLE",
          "nullable": true,
          "description": "Share of open jobs that state pay."
        },
        {
          "name": "ghost_share",
          "type": "DOUBLE",
          "nullable": true,
          "description": "Share of open jobs posted (or first seen) over 90 days ago."
        },
        {
          "name": "top_department",
          "type": "STRING",
          "nullable": true,
          "description": "Department with the most open jobs."
        },
        {
          "name": "department_shift_30d",
          "type": "DOUBLE",
          "nullable": true,
          "description": "Total variation distance of the department mix against ~30 days ago (0-1)."
        },
        {
          "name": "top_country",
          "type": "STRING",
          "nullable": true,
          "description": "Country with the most open jobs (ISO alpha-2)."
        },
        {
          "name": "tech_tools",
          "type": "INT64",
          "nullable": true,
          "description": "Number of tools named in the open job posts (tech stack)."
        },
        {
          "name": "top_tech",
          "type": "STRING",
          "nullable": true,
          "description": "Most named tools, `;`-separated."
        },
        {
          "name": "events_30d",
          "type": "STRING",
          "nullable": true,
          "description": "Hiring-change events in the 30 days to as_of, `type:count;...` (market_entry, ats_switch, hiring_surge, hiring_freeze, new_department)."
        }
      ]
    }
  }
}
