Skip to content

For AI agents

Base salary ranges from open job postings on public Greenhouse, Ashby and Lever boards (pay-transparency ranges, with the posting URL) and certified H-1B LCA wages from US Department of Labor disclosure files, aggregated by title, level, company and city with sample counts, plus an append-only history of every range change.

Job boards read weekly (Wednesdays 13:45 UTC), and each run looks for new employer boards among fru.dev registry companies; H-1B wages loaded quarterly when DOL publishes a new file

Point your agent here

Call the API

  • GET /api/titlesfamily?, limit?, offset?titles with slug, name, family, titles.fru.dev link, posted-range count, company count, stats (p10, p25, median, p75, p90 of range midpoints; medians of posted min and max) and the H-1B summary (n, median, p25, p75)
  • GET /api/titles/{slug}slugthe title summary, byLevel, byCompany and byCity stats with H-1B medians, the weekly posted series and H-1B medians by fiscal quarter
  • GET /api/companiessince?, limit?, offset?companies with slug (companies.fru.dev slug), name, domain, page link, posted-range count and median, H-1B filings and median, and items: posted ranges with the date first seen, title and source posting
  • GET /api/companies/{slug}slugthe company summary, byTitle and byLevel stats, h1bByTitle, weekly series, H-1B by quarter and up to 200 open postings with range and URL
  • GET /api/citiesnonecities with slug, name, state, posted-range count, company count, stats and the H-1B summary
  • GET /api/postingscompany?, title?, city?, level?, q?, limit?, offset?postings with company, title, role slug, level, city, location, min and max (USD per year), first seen date and the posting URL
  • GET /api/h1bcompany?, title?, limit?, offset?rows with company and/or title, filings, median, p25 and p75 of the offered annual wage, the quarters covered and the DOL source files
  • GET /api/changessince?, company?, title?, limit?, offset?changes with time, posting id, company, title slug, field (added, salary_min, salary_max, title, closed, reopened), old and new value and the posting URL
  • GET /api/searchq, limit?up to 20 ranked results with title, link and one line

GET/api/titles

Pay by job title: posted ranges and H-1B wages

  • familyOnly this title family
  • limitItems per page, 1 to 200
  • offsetItems to skip, for the next page
Shell
curl -s "https://salaries.fru.dev/api/titles?limit=3"
Sample response
JSON
{
  "titles": [
    {
      "slug": "software-engineer",
      "name": "Software Engineer",
      "family": "engineering",
      "titlesUrl": "",
      "n": 1323,
      "companies": 78,
      "stats": {
        "n": 1323,
        "p10": 172500,
        "p25": 202483,
        "median": 237263,
        "p75": 287600,
        "p90": 360000,
        "medMin": 196000,
        "medMax": 275000
      },
      "lca": {
        "n": 35153,
        "median": 187726,
        "p25": 162600,
        "p75": 218825
      },
      "url": "https://salaries.fru.dev/titles/software-engineer"
    },
    {
      "slug": "engineering-manager",
      "name": "Engineering Manager",
      "family": "leadership",
      "titlesUrl": "https://titles.fru.dev/titles/engineering-manager",
      "n": 196,
      "companies": 49,
      "stats": {
        "n": 196,
        "p10": 216000,
        "p25": 245000,
        "median": 279500,
        "p75": 335000,
        "p90": 423000,
        "medMin": 238300,
        "medMax": 322000
      },
      "lca": {
        "n": 1225,
        "median": 250000,
        "p25": 212100,
        "p75": 280000
      },
      "url": "https://salaries.fru.dev/titles/engineering-manager"
    }
  ],
  "total": 37,
  "limit": 3,
  "offset": 0,
  "next": "/api/titles?limit=3&offset=3",
  "window": [
    "FY2025-Q4",
    "FY2026-Q1"
  ],
  "note": "Base salary in USD per year. Posted ranges as the employer published them; H-1B wages from certified US DOL LCA filings. Not total compen..."
}

GET/api/titles/{slug}

One title: pay by level, company and city, weekly and quarterly history

  • slugTitle slug, as in /titles/<slug> (see /api/titles)
Shell
curl -s "https://salaries.fru.dev/api/titles/ml-engineer"
Sample response
JSON
{
  "title": {
    "slug": "ml-engineer",
    "name": "Machine Learning Engineer",
    "family": "engineering",
    "titlesUrl": "https://titles.fru.dev/titles/ml-engineer",
    "n": 129,
    "companies": 28,
    "stats": {
      "n": 129,
      "p10": 211900,
      "p25": 237500,
      "median": 270000,
      "p75": 302000,
      "p90": 338291,
      "medMin": 223000,
      "medMax": 305000
    },
    "lca": {
      "n": 1542,
      "median": 226138,
      "p25": 197293,
      "p75": 250325
    },
    "url": "https://salaries.fru.dev/titles/ml-engineer"
  },
  "byLevel": [
    {
      "level": "entry",
      "name": "Entry",
      "stats": {
        "n": 1,
        "p10": 193000,
        "p25": 193000,
        "median": 193000,
        "p75": 193000,
        "p90": 193000,
        "medMin": 170000,
        "medMax": 216000
      },
      "h1b": {
        "n": 9,
        "median": 163322,
        "p25": 158975,
        "p75": 169541
      }
    },
    {
      "level": "mid",
      "name": "Mid",
      "stats": null,
      "h1b": {
        "n": 51,
        "median": 174304,
        "p25": 158954,
        "p75": 187741
      }
    }
  ],
  "byCompany": [
    {
      "company": "waymo",
      "name": "Waymo",
      "stats": {
        "n": 39,
        "p10": 195000,
        "p25": 238000,
        "median": 238000,
        "p75": 280500,
        "p90": 282853,
        "medMin": 213000,
        "medMax": 263000
      },
      "h1b": {
        "n": 22,
        "median": 240000,
        "p25": 205000,
        "p75": 250000
      }
    },
    {
      "company": "zoox",
      "name": "Zoox",
      "stats": {
        "n": 15,
        "p10": 230500,
        "p25": 253250,
        "median": 302000,
        "p75": 302000,
        "p90": 323800,
        "medMin": 254000,
        "medMax": 350000
      },
      "h1b": {
        "n": 8,
        "median": 214118,
        "p25": 197358,
        "p75": 235127
      }
    }
  ],
  "byCity": [
    {
      "city": "sf-bay-area",
      "name": "San Francisco Bay Area",
      "stats": {
        "n": 97,
        "p10": 219500,
        "p25": 238000,
        "median": 270000,
        "p75": 308520,
        "p90": 366609,
        "medMin": 225000,
        "medMax": 305000
      },
      "h1b": {
        "n": 1059,
        "median": 233039,
        "p25": 203963,
        "p75": 257750
      }
    },
    {
      "city": "new-york",
      "name": "New York City",
      "stats": {
        "n": 11,
        "p10": 203500,
        "p25": 221245,
        "median": 265000,
        "p75": 272160,
        "p90": 272160,
        "medMin": 200000,
        "medMax": 300000
      },
      "h1b": {
        "n": 95,
        "median": 224100,
        "p25": 188519,
        "p75": 231351
      }
    }
  ],
  "weekly": [
    {
      "week": "2026-09-21",
      "n": 129,
      "p25": 237500,
      "median": 270000,
      "p75": 302000,
      "medMin": 223000,
      "medMax": 305000
    }
  ],
  "h1bByQuarter": [
    {
      "q": "FY2025-Q1",
      "n": 267,
      "median": 220543,
      "p25": 193000,
      "p75": 236992
    },
    {
      "q": "FY2025-Q2",
      "n": 494,
      "median": 197953,
      "p25": 179131,
      "p75": 227131
    }
  ],
  "window": [
    "FY2025-Q4",
    "FY2026-Q1"
  ],
  "note": "Base salary in USD per year. Posted ranges as the employer published them; H-1B wages from certified US DOL LCA filings. Not total compen..."
}

GET/api/companies

Employers with their pay summary and dated posted ranges (for the companies.fru.dev registry)

  • sinceOnly companies with a range first seen or changed at or after this date (YYYY-MM-DD); items are filtered the same way
  • limitItems per page, 1 to 200
  • offsetItems to skip, for the next page
Shell
curl -s "https://salaries.fru.dev/api/companies?since=2026-09-01&limit=2"
Sample response
JSON
{
  "companies": [
    {
      "slug": "databricks",
      "name": "Databricks",
      "domain": "databricks.com",
      "url": "https://salaries.fru.dev/companies/databricks",
      "postedRanges": 298,
      "medianPosted": 216104,
      "h1bFilings": 420,
      "medianH1b": 180913,
      "updated": "2026-09-24",
      "items": [
        {
          "type": "pay_range",
          "date": "2026-09-24",
          "title": "AI Engineer - Forward Deployed Engineering (AI FDE): $152,900 to $210,155",
          "url": "https://salaries.fru.dev/companies/databricks",
          "source": "https://databricks.com/company/careers/open-positions/job?gh_jid=8546367002"
        },
        {
          "type": "pay_range",
          "date": "2026-09-24",
          "title": "AI Engineer - Forward Deployed Engineering (AI FDE), U.S. Public Sector (Federal Focus): $182,000 to $250,208",
          "url": "https://salaries.fru.dev/companies/databricks",
          "source": "https://databricks.com/company/careers/open-positions/job?gh_jid=8760167002"
        }
      ]
    },
    {
      "slug": "openai",
      "name": "OpenAI",
      "domain": "openai.com",
      "url": "https://salaries.fru.dev/companies/openai",
      "postedRanges": 248,
      "medianPosted": 355500,
      "h1bFilings": 140,
      "medianH1b": 325000,
      "updated": "2026-09-24",
      "items": [
        {
          "type": "pay_range",
          "date": "2026-09-24",
          "title": "Research Engineer: $250,000 to $445,000",
          "url": "https://salaries.fru.dev/companies/openai",
          "source": "https://jobs.ashbyhq.com/openai/240d459b-696d-43eb-8497-fab3e56ecd9b"
        },
        {
          "type": "pay_range",
          "date": "2026-09-24",
          "title": "Research Engineer, Retrieval & Search, Applied Engineering: $293,000 to $585,000",
          "url": "https://salaries.fru.dev/companies/openai",
          "source": "https://jobs.ashbyhq.com/openai/7322d344-9325-4a92-8445-0a2c4e9272f8"
        }
      ]
    }
  ],
  "total": 146,
  "limit": 2,
  "offset": 0,
  "next": "/api/companies?since=2026-09-01&limit=2&offset=2",
  "note": "Base salary in USD per year. Posted ranges as the employer published them; H-1B wages from certified US DOL LCA filings. Not total compen..."
}

GET/api/companies/{slug}

One employer: pay by title and level, H-1B by title, open posted ranges

  • slugCompany slug (companies.fru.dev)
Shell
curl -s "https://salaries.fru.dev/api/companies/databricks"
Sample response
JSON
{
  "company": {
    "slug": "databricks",
    "name": "Databricks",
    "domain": "databricks.com",
    "industry": "data",
    "board": true,
    "policy": "ok",
    "n": 298,
    "open": 301,
    "stats": {
      "n": 298,
      "p10": 187413,
      "p25": 213750,
      "median": 216104,
      "p75": 234384,
      "p90": 260993,
      "medMin": 182000,
      "medMax": 250208
    },
    "lca": {
      "n": 420,
      "median": 180913,
      "p25": 159300,
      "p75": 211629
    },
    "url": "https://salaries.fru.dev/companies/databricks",
    "registry": "https://companies.fru.dev/companies/databricks"
  },
  "byTitle": [
    {
      "title": "software-engineer",
      "name": "Software Engineer",
      "stats": {
        "n": 83,
        "p10": 185750,
        "p25": 195500,
        "median": 221000,
        "p75": 227500,
        "p90": 265780,
        "medMin": 190000,
        "medMax": 248150
      },
      "h1b": {
        "n": 273,
        "median": 187505,
        "p25": 171770,
        "p75": 216971
      }
    },
    {
      "title": "forward-deployed-engineer",
      "name": "Forward Deployed Engineer",
      "stats": {
        "n": 78,
        "p10": 212325,
        "p25": 216104,
        "median": 216104,
        "p75": 216104,
        "p90": 232737,
        "medMin": 182000,
        "medMax": 250208
      },
      "h1b": {
        "n": 2,
        "median": 194723,
        "p25": 184212,
        "p75": 205235
      }
    }
  ],
  "byLevel": [
    {
      "level": "senior",
      "name": "Senior",
      "stats": {
        "n": 131,
        "p10": 185400,
        "p25": 195500,
        "median": 216104,
        "p75": 216104,
        "p90": 260200,
        "medMin": 182000,
        "medMax": 250208
      }
    },
    {
      "level": "staff",
      "name": "Staff",
      "stats": {
        "n": 70,
        "p10": 214078,
        "p25": 222325,
        "median": 226000,
        "p75": 235175,
        "p90": 265098,
        "medMin": 192000,
        "medMax": 260000
      }
    }
  ],
  "h1bByTitle": [
    {
      "title": "solutions-engineer",
      "n": 127,
      "median": 173987,
      "p25": 157500,
      "p75": 189291
    },
    {
      "title": "software-engineer",
      "n": 273,
      "median": 187505,
      "p25": 171770,
      "p75": 216971
    }
  ],
  "weekly": [
    {
      "week": "2026-09-21",
      "n": 298,
      "p25": 213750,
      "median": 216104,
      "p75": 234384,
      "medMin": 182000,
      "medMax": 250208
    }
  ],
  "h1bByQuarter": [
    {
      "q": "FY2025-Q1",
      "n": 57,
      "median": 185826,
      "p25": 168158,
      "p75": 212267
    },
    {
      "q": "FY2025-Q2",
      "n": 68,
      "median": 192413,
      "p25": 170000,
      "p75": 212267
    }
  ],
  "postings": [
    {
      "id": "gh:databricks:7882009002",
      "company": "databricks",
      "companyName": "Databricks",
      "title": "Staff Security Software Engineer, Agentic Security Engineering",
      "role": "agent-engineer",
      "level": "staff",
      "metro": "remote-us",
      "location": "Remote - California",
      "min": 289200,
      "max": 397650,
      "currency": "USD",
      "period": "year",
      "firstSeen": "2026-09-24",
      "url": "https://databricks.com/company/careers/open-positions/job?gh_jid=7882009002"
    },
    {
      "id": "gh:databricks:8400559002",
      "company": "databricks",
      "companyName": "Databricks",
      "title": "Principal Engineer, Authentication",
      "role": "software-engineer",
      "level": "principal",
      "metro": "sf-bay-area",
      "location": "Mountain View, California; San Francisco, California",
      "min": 280000,
      "max": 385000,
      "currency": "USD",
      "period": "year",
      "firstSeen": "2026-09-24",
      "url": "https://databricks.com/company/careers/open-positions/job?gh_jid=8400559002"
    }
  ],
  "note": "Base salary in USD per year. Posted ranges as the employer published them; H-1B wages from certified US DOL LCA filings. Not total compen..."
}

GET/api/cities

Pay by US metro and remote

Shell
curl -s "https://salaries.fru.dev/api/cities"
Sample response
JSON
{
  "cities": [
    {
      "slug": "sf-bay-area",
      "name": "San Francisco Bay Area",
      "state": "CA",
      "n": 1750,
      "companies": 70,
      "stats": {
        "n": 1750,
        "p10": 194250,
        "p25": 220537,
        "median": 265000,
        "p75": 318570,
        "p90": 372257,
        "medMin": 213000,
        "medMax": 306865
      },
      "lca": {
        "n": 20432,
        "median": 212319,
        "p25": 186200,
        "p75": 240296
      },
      "url": "https://salaries.fru.dev/cities/sf-bay-area"
    },
    {
      "slug": "new-york",
      "name": "New York City",
      "state": "NY",
      "n": 352,
      "companies": 41,
      "stats": {
        "n": 352,
        "p10": 167500,
        "p25": 185713,
        "median": 216104,
        "p75": 259625,
        "p90": 294820,
        "medMin": 182000,
        "medMax": 250208
      },
      "lca": {
        "n": 3389,
        "median": 193600,
        "p25": 170000,
        "p75": 222950
      },
      "url": "https://salaries.fru.dev/cities/new-york"
    }
  ],
  "window": [
    "FY2025-Q4",
    "FY2026-Q1"
  ],
  "note": "Base salary in USD per year. Posted ranges as the employer published them; H-1B wages from certified US DOL LCA filings. Not total compen..."
}

GET/api/postings

Open postings with a stated range, newest first

  • companyCompany slug
  • titleTitle slug (see /api/titles)
  • cityCity slug (see /api/cities)
  • levelLevel read from the job title
  • qWords in the job title
  • limitItems per page, 1 to 200
  • offsetItems to skip, for the next page
Shell
curl -s "https://salaries.fru.dev/api/postings?title=data-engineer&limit=2"
Sample response
JSON
{
  "postings": [
    {
      "id": "gh:anthropic:4973067008",
      "company": "anthropic",
      "companyName": "Anthropic",
      "title": "Pre-training Data Infrastructure Engineer",
      "role": "data-engineer",
      "level": "none",
      "metro": "sf-bay-area",
      "location": "San Francisco, CA",
      "min": 500000,
      "max": 850000,
      "currency": "USD",
      "period": "year",
      "firstSeen": "2026-09-24",
      "url": "https://job-boards.greenhouse.io/anthropic/jobs/4973067008"
    },
    {
      "id": "ashby:mercor:7d9d9439-848b-4fb4-b276-9efc71bb7148",
      "company": "mercor",
      "companyName": "Mercor",
      "title": "Data Engineer",
      "role": "data-engineer",
      "level": "none",
      "metro": "sf-bay-area",
      "location": "San Francisco",
      "min": 160000,
      "max": 500000,
      "currency": "USD",
      "period": "year",
      "firstSeen": "2026-09-24",
      "url": "https://jobs.ashbyhq.com/mercor/7d9d9439-848b-4fb4-b276-9efc71bb7148"
    }
  ],
  "total": 42,
  "limit": 2,
  "offset": 0,
  "next": "/api/postings?title=data-engineer&limit=2&offset=2",
  "note": "Base salary in USD per year. Posted ranges as the employer published them; H-1B wages from certified US DOL LCA filings. Not total compen..."
}

GET/api/h1b

H-1B LCA wages by employer and title over the last four fiscal quarters

  • companyCompany slug; alone, returns one row per company
  • titleTitle slug; alone, returns one row per title
  • limitItems per page, 1 to 200
  • offsetItems to skip, for the next page
Shell
curl -s "https://salaries.fru.dev/api/h1b?company=google&title=data-scientist"
Sample response
JSON
{
  "h1b": [
    {
      "company": "google",
      "title": "data-scientist",
      "filings": 192,
      "median": 200000,
      "p25": 188000,
      "p75": 222000
    }
  ],
  "total": 1,
  "limit": 200,
  "offset": 0,
  "next": null,
  "window": [
    "FY2025-Q4",
    "FY2026-Q1"
  ],
  "files": [
    {
      "file": "LCA_Disclosure_Data_FY2025_Q1.xlsx",
      "url": "https://www.dol.gov/sites/dolgov/files/ETA/oflc/pdfs/LCA_Disclosure_Data_FY2025_Q1.xlsx",
      "first": "2024-10-01",
      "last": "2024-12-31"
    },
    {
      "file": "LCA_Disclosure_Data_FY2025_Q2.xlsx",
      "url": "https://www.dol.gov/sites/dolgov/files/ETA/oflc/pdfs/LCA_Disclosure_Data_FY2025_Q2.xlsx",
      "first": "2025-01-02",
      "last": "2025-03-31"
    }
  ],
  "note": "Certified full-time H-1B LCA filings, offered annual wage (midpoint when a range is stated), last four fiscal quarters on file."
}

GET/api/changes

The append-only history: ranges added, minimums and maximums changed, postings closed

  • sinceOnly changes at or after this date (YYYY-MM-DD)
  • companyCompany slug
  • titleTitle slug
  • limitItems per page, 1 to 200
  • offsetItems to skip, for the next page
Shell
curl -s "https://salaries.fru.dev/api/changes?since=2026-09-01&limit=3"
Sample response
JSON
{
  "changes": [
    {
      "at": "2026-09-24 22:59:25",
      "posting": "ashby:insitro:ec4a278a-dd78-4e9c-a203-87e3e2f59e60",
      "company": "insitro",
      "role": "data-scientist",
      "field": "added",
      "old": "",
      "new": "Senior Data Scientist, CompBio",
      "source": "https://jobs.ashbyhq.com/insitro/ec4a278a-dd78-4e9c-a203-87e3e2f59e60"
    },
    {
      "at": "2026-09-24 22:59:25",
      "posting": "ashby:insitro:ff6605ae-4961-4a06-b656-6d7dc665d990",
      "company": "insitro",
      "role": "software-engineer",
      "field": "added",
      "old": "",
      "new": "Staff Software Engineer, Imaging",
      "source": "https://jobs.ashbyhq.com/insitro/ff6605ae-4961-4a06-b656-6d7dc665d990"
    }
  ],
  "total": 400,
  "limit": 3,
  "offset": 0,
  "next": "/api/changes?since=2026-09-01&limit=3&offset=3",
  "history": {
    "changes": 3412,
    "closed": 0,
    "rangeEdits": 0,
    "weeks": 1,
    "since": "2026-09-24"
  },
  "note": "Newest 400 changes; the history is append-only (fields: added, salary_min, salary_max, title, closed, reopened)."
}

Add to your agent

System prompt
For what data, AI and engineering roles pay (base salary) by company, title, level and US city, from posted pay ranges and H-1B filings, fetch https://salaries.fru.dev/llms.txt and use https://salaries.fru.dev/api/titles (spec: https://salaries.fru.dev/openapi.json). Cite "Salaries (salaries.fru.dev)" with a link.

Usage terms

  • Free to read, no key needed
  • Cite "Salaries (salaries.fru.dev)" with a link
  • Responses are cached; job boards read weekly (Wednesdays 13:45 UTC), and each run looks for new employer boards among fru.dev registry companies; H-1B wages loaded quarterly when DOL publishes a new file
  • Keep to 60 requests a minute or fewer
  • Employer boards found automatically are marked Unverified until the board is confirmed as that company's own.

Pay range changes by email

Wednesdays, only in weeks when a tracked company moves a posted range.

Double opt-in. Unsubscribe any time.