Salary Pages

The salary guide pages your board generates automatically from job data, organized by title, location, skill, and company.

Your board automatically generates salary guide pages from the pay data on your jobs. They give job seekers useful compensation context (which builds trust and repeat visits) and create a large set of indexable pages that rank for "[role] salary" searches.

What gets generated

Salary pages are organized into a taxonomy under /salaries, covering job titles, locations, skills, and companies, plus combinations such as a title in a specific location or a skill in a specific location. Each page shows salary ranges, medians, and related breakdowns drawn from the matching jobs on your board.

You do not create or maintain any of these pages. They are part of your board's programmatic SEO and update automatically as jobs are added and expire, and they are included in your sitemap.

Availability

  • Plan: All paid plans. Salary pages are part of your public board, which is live from the Starter plan upward.
  • Setting: None. Salary pages are generated automatically; there is no toggle.
  • Setup required: None beyond having jobs that include salary data. The more jobs with pay information, the richer the pages.

Limitations

  • Salary statistics are aggregated in US dollars. The figures are computed in USD regardless of the original posting currency.
  • A salary page is only as rich as the underlying jobs. Titles, locations, or skills with few salaried jobs will show limited or no statistics until more data exists.

Access salary data via API

Public read routes for salary data require no authentication. The :identifier segment is your board slug.

Index routes list the entries that have salary data on each axis:

  1. GET /v1/boards/:identifier/salaries/companies — list companies ranked by salary sample size
  2. GET /v1/boards/:identifier/salaries/titles — list job titles with salary data
  3. GET /v1/boards/:identifier/salaries/skills — list skills with salary data
  4. GET /v1/boards/:identifier/salaries/locations — list locations with salary data

Cross-axis routes return salary figures for one axis sliced by another:

  1. GET /v1/boards/:identifier/salaries/titles/:categorySlug/locations — salary for a title across locations
  2. GET /v1/boards/:identifier/salaries/titles/:categorySlug/:locationSlug — salary for a title in one location
  3. GET /v1/boards/:identifier/salaries/skills/:skillSlug/locations — salary for a skill across locations
  4. GET /v1/boards/:identifier/salaries/skills/:skillSlug/:locationSlug — salary for a skill in one location
  5. GET /v1/boards/:identifier/salaries/locations/:locationSlug/titles — titles with salary data in one location
  6. GET /v1/boards/:identifier/salaries/locations/:locationSlug/skills — skills with salary data in one location

Pass locale as a query parameter to get board-language names and canonical slugs.

Access salary data via the SDK

The @cavuno/board SDK exposes these routes on board.salaries:

ts
import { createBoardClient } from '@cavuno/board';
const board = createBoardClient({ board: 'your-board', baseUrl: 'https://api.cavuno.com' });
// index reads — each returns a ListEnvelope<T>
const { data: companies } = await board.salaries.companies.list();
const { data: titles } = await board.salaries.titles.list();
const { data: skills } = await board.salaries.skills.list();
const { data: locations } = await board.salaries.locations.list();
// cross-axis reads
const titleLocations = await board.salaries.titles.locations('software-engineer');
const titleInCity = await board.salaries.titles.location('software-engineer', 'new-york');
const skillLocations = await board.salaries.skills.locations('python');
const skillInCity = await board.salaries.skills.location('python', 'berlin');
const locationTitles = await board.salaries.locations.titles('new-york');
const locationSkills = await board.salaries.locations.skills('new-york');

The index list() methods return a ListEnvelope<T> where T is SalaryCompany, SalaryTitle, SalarySkill, or SalaryLocation.

Frequently asked questions