# ATS vs Job Board Fields

The two main job-listing endpoints (`active-ats` and `active-jb`) share most of their schema but each carries a small set of fields the other cannot. This page lists the differences so you can decide which feed (or combination) fits your use case.

`modified-ats` returns the same shape as `active-ats`; the only difference is that `date_modified` and `modified_fields` are required there (and always populated).

## Summary

| | Total fields | Shared | Endpoint-only |
| --- | ---: | ---: | ---: |
| `active-ats` | 72 | 64 | 8 |
| `active-jb` | 72 | 64 | 8 |

## Fields only on `active-ats` (and `modified-ats`)

These eight fields exist on the ATS feeds but **not** on the job board feed.

### Basic organization extras

Returned when `include_basic_organization_details=true`. These are the LinkedIn/Crunchbase enrichment fields that the JB feed does not currently expose at all - if you need them on JB rows, join by `org_linkedin_slug` against `organizations-advanced`.

| Field | Description |
| --- | --- |
| `org_linkedin_name` | Canonical company name from LinkedIn. (JB exposes the raw source name as `organization` instead.) |
| `org_crunchbase_categories` | List of Crunchbase categories the company is tagged with. |
| `org_crunchbase_total_investment` | Total investment in USD raised by the company according to Crunchbase. |
| `org_logo_permalink` | Stable Crustdata-hosted URL for the company logo. Aliased to match the equivalent field on `organizations-advanced`. |

### Modification tracking

Only populated when `time_frame=6m`, or when fetched via `modified-ats` (where they are always populated and required).

| Field | Description |
| --- | --- |
| `date_modified` | Date and time of the most recent modification of the listing. |
| `modified_fields` | Array of field names that changed in the most recent modification. |

### Source enrichment

| Field | Description |
| --- | --- |
| `domain_derived` | Employer domain, extracted from the job posting URL. Often more reliable for joining than the raw `organization` name. |
| `locations_alt` | Alternative source-supplied location strings. Hybrid origin: HTML-scraped for most ATS, AI-structured for a small subset. See the [location search guide](/documentation/nuances-of-location-search) for when to use this vs `locations` / `locations_derived`. |

## Fields only on `active-jb`

These eight fields exist on the job board feed but **not** on the ATS feeds. Most of them are signals only the source job board (LinkedIn) exposes.

### LinkedIn-specific identifiers and signals

| Field | Description |
| --- | --- |
| `linkedin_id` | LinkedIn's public job posting ID - the digits at the end of a `linkedin.com/jobs/view/{linkedin_id}` URL. Distinct from the internal `id`. |
| `direct_apply` | True if the job supports in-platform application on the source job board (e.g. LinkedIn Easy Apply). |
| `seniority` | Seniority level as listed by the job board. For more comprehensive coverage, use the AI-derived `ai_experience_level` (available on both endpoints). |

### Recruiter

LinkedIn job posts often expose the human recruiter who posted the listing. Drop these three fields by passing `exclude_recruiter_fields=true`.

| Field | Description |
| --- | --- |
| `recruiter_name` | Name of the recruiter who posted the job. |
| `recruiter_title` | Title of the recruiter. |
| `recruiter_url` | URL to the recruiter's profile. |

### Cross-feed deduplication and data quality

| Field | Description |
| --- | --- |
| `ats_duplicate` | True if this job board listing is a duplicate of an ATS listing in `active-ats`. Set `exclude_ats_duplicate=true` to drop the flagged duplicates. |
| `no_jb_schema` | True if the job board listing has no structured schema data (most AI-derived fields will be sparse or missing for these). |

## Note on shared fields

Although 64 fields appear on both endpoints, a couple of behaviors differ between them:

- **Organization fields are always-on for JB, opt-in for ATS.** On `active-jb` the LinkedIn organization is read directly from the job board, so the basic LinkedIn org fields (e.g. `org_linkedin_industry`, `org_linkedin_headcount`, `org_linkedin_website`, etc.) are returned with every row. On `active-ats` and `modified-ats` the same fields are matched via a domain/name lookup and are only returned when you set `include_basic_organization_details=true`.
- **Description search availability differs by `time_frame`.** `description` and `description_advanced` work with `time_frame=6m` on `active-ats` (with a slowness/timeout caveat) but return `400` when combined with `time_frame=6m` on `active-jb`.
