Back to guides
Normalization

Experience Level Mapping for Job Listings

CleanJobData Engineering

Job titles vary widely between companies. One company's Senior Engineer might be another company's Staff Engineer, Lead Developer, or Principal Engineer. JobsDataAPI maps these titles into canonical experience-level tokens so your product can filter by career stage.

Canonical Tokens

The API uses these seniority tokens:

  • EN — Entry level
  • MI — Mid level
  • SE — Senior level
  • EX — Executive level

A job can expose both:

  • experience_level — the primary inferred level
  • experience_levels — an array of matched levels

Example:

{
  "title": "Staff Software Engineer",
  "experience_level": "SE",
  "experience_levels": ["SE"]
}

Filtering by Experience Level

Use experience_level to request one or more levels:

curl "$CLEANJOBDATA_API_BASE_URL/jobs?experience_level=SE&title=engineer" \
  -H "Authorization: Bearer $CLEANJOBDATA_API_KEY"

You can request multiple levels with comma-separated values:

curl "$CLEANJOBDATA_API_BASE_URL/jobs?experience_level=MI,SE&remote=true" \
  -H "Authorization: Bearer $CLEANJOBDATA_API_KEY"

The backend normalizes these values and returns the applied filters in meta.filters_applied.

Why Mapping Matters

Raw title matching is brittle. A search for senior misses titles such as:

  • Staff
  • Principal
  • Lead
  • Head of
  • Director

Experience-level mapping lets your UI expose clean filters instead of relying on keyword heuristics.

UI Patterns

Common UI labels map to API tokens like this:

| UI Label | API Token | | --- | --- | | Entry | EN | | Mid | MI | | Senior | SE | | Executive | EX |

Example:

const seniorityOptions = [
  { label: "Entry", value: "EN" },
  { label: "Mid", value: "MI" },
  { label: "Senior", value: "SE" },
  { label: "Executive", value: "EX" },
];

Combining with Other Filters

Experience-level filters work best with title, location, salary, and remote filters:

curl "$CLEANJOBDATA_API_BASE_URL/jobs?title=frontend&experience_level=SE&remote=true&location=US" \
  -H "Authorization: Bearer $CLEANJOBDATA_API_KEY"

This lets you build focused feeds such as:

  • senior remote engineers
  • mid-level product roles
  • executive technology jobs
  • entry-level design roles

Recommended Implementation

  1. Map your UI labels to EN, MI, SE, and EX.
  2. Send the selected values as a comma-separated experience_level query parameter.
  3. Use experience_level for server-side filtering.
  4. Use experience_levels when you need to display all matched seniority buckets.
  5. Avoid client-side title heuristics for filtering.

Experience-level mapping gives your job board a cleaner, more consistent way to help users find roles that match their career stage.