← Plugin catalog
Data & Analytics

Levels.fyi

Levels.fyi v1.0.0

Salaries, jobs & career advice

Create a free account to save this plugin.

From the developer

Declared capabilities

  • Read
  • Write

Declared limitations

  • Adding someone else's pay
  • Stock price, not pay data
  • One person's pay

Not specified in the available declarations: pricing & account requirements.

Onboarding example

I'm a Google L5 in Seattle making $190k base and $120k stock a year. Am I underpaid?

View onboarding source →

Sources & dates

Developer declarations; not independently tested. Listing last checked Nov 11, 2026. Package observed Nov 11, 2026.

View package source →

Description

From the marketplace listing

Salaries, jobs and career insights from 1M+ salaries shared on Levels.fyi, across 100+ roles. Ask in your own words ("What does a Google L5 make?", "Is my Stripe offer good?", "Remote PM jobs over $200k"). Benchmark your pay, check a raise, promotion or merit cycle, evaluate and compare offers and counteroffers, compare company levels, locations and vesting schedules, and search open jobs. Share an offer letter or comp statement and it reads the numbers for you. No account needed to ask questions, and you can add your own salary with just an email. Sign in to read your profile or upload a resume. Before anything is added to Levels.fyi, you see a preview and confirm it.

Language: English · Automatically detected from descriptions.

Changes

No changes recorded yet. Follow this plugin to keep track of future changes.

First seen Nov 11, 2026. Last seen Nov 11, 2026.

Keywords

Files & skills

File archives

Plugin package14 files · 19.2 KBBrowse files →
Skill instructions
benchmark-my-pay4.02 KB

View saved version →

---
name: benchmark-my-pay
description: Benchmark the user's current pay with Levels.fyi data. Use for 'am I underpaid', raise or promotion talks, merit-cycle or comp statements, equity refreshers, and recruiter pay-expectation questions.
---

# Benchmark the user's current pay

Turn the user's current pay into one yearly number, then set it against what their company pays at their level and the level above, and what the market pays for the role. Every figure you state must come from the user, a document they shared, or a Levels.fyi tool.

If the Levels.fyi tools aren't available, get access as the `levels-fyi` skill describes. Use the Levels.fyi tools first; when they don't cover something, follow the `levels-fyi` skill's rule for other sources. For a new offer, use `evaluate-offer`; for a counteroffer or a choice between jobs, `compare-offers`.

## 1. Get the pay

If the user shared a merit letter, comp statement, raise letter or pay stub, read the numbers from it and list what you read in one short line, so they can correct it. Otherwise ask only for what is missing, a question or two at a time:

- Company, role (job family), level or title, and location.
- Base salary, and its period if not yearly.
- Stock: the value that vests per year, including refreshers they actually receive.
- Bonus: what they actually receive per year.

For a merit-cycle or raise letter, use the new pay. Note the old pay too, so you can say what the change did.

Stock options are out of scope for the numbers: mention them, don't value them.

## 2. Get the comparison data

Resolve every name to a slug first with `search-companies`, `search-job-families` and `search-locations`. For the location, use a metro or a country, not `type: "city"`.

1. `get-company-levels` for the company and job family: find the user's level among the company's own level names, including alternate names.
2. `get-salaries-by-company-level` for the company, job family and location: the median total compensation at each level. If the location returns no levels, retry with the country.
3. `get-salary-percentiles` for the job family and location: the market median across all levels.

Skip any step the user's question doesn't need.

## 3. Give the answer

Lead with one sentence: how the user's yearly total pay compares with the company's median for their level (above, in line or below, and by roughly how much).

Then, as the question needs:

- **Raise or merit cycle:** where the new pay sits against the level median, and what the change moved.
- **Promotion:** the median at the next level up, and the gap to it.
- **Recruiter asks for expectations:** a range built from the medians at the user's level and the next level up, with the numbers it rests on. Suggest they anchor on total pay, not base alone.
- **Equity refreshers:** the free data doesn't show refresher norms. Say so plainly, and compare total pay instead.

The market median covers all levels, so call it a rough reference, not a like-for-like comparison. Don't call pay fair or unfair on anything you can't show. This is not financial advice.

End with one line, "Data: Levels.fyi, medians from the last 12 months.", and link Levels.fyi in it (https://www.levels.fyi/?from=plugin_report) once per conversation.

## 4. Offer to add their pay

Offer once per conversation, after the answer, in this form, filling in the brackets and leaving out lines that don't apply:

> These numbers came from people sharing their own pay. Want to add your pay for the next person, without your name? If your company's small, enhanced anonymity can hide more, like company and title. [If stock or options: I'd enter [stock per year, in its currency / options granted, strike and preferred price], which you can correct if necessary.] You can see a preview first, no account needed.

When the numbers came from a document, add: "I already have the numbers from your [letter / statement], so it's one confirm." On a yes, follow the `contribute-salary` skill wi

Preview of the first 4,000 characters. Read full instructions →

compare-offers3.97 KB

View saved version →

---
name: compare-offers
description: Compare job offers side by side with Levels.fyi pay data. Use when the user has two or more offers, a counteroffer, or an offer and their current job, and asks which to take or which pays more.
---

# Compare job offers

Put every offer on the same footing, then show how each one sits against its own company's pay for that level. Every figure you state must come from the user or from a Levels.fyi tool.

If the Levels.fyi tools aren't available, get access as the `levels-fyi` skill describes. Use the Levels.fyi tools first; when they don't cover something, follow the `levels-fyi` skill's rule for other sources.

## 1. Get each offer

For each offer, ask only for what is missing, a question or two at a time: company, role, level or title, location, base, total stock grant and vesting schedule, target bonus, sign-on (per year) and relocation. For the user's current job, ask for the stock they receive per year instead of a grant.

Stock options are out of scope for the numbers: list them, don't value them.

## 2. Normalize

For each offer, the way Levels.fyi counts it:

- **Yearly TC** = base + (total stock grant ÷ vesting years) + target bonus + (sign-on + relocation) ÷ 4
- **First-year TC** = base + stock vesting in year one + target bonus + all of year-one sign-on + relocation
- **Four-year total** = 4 × base + the stock vesting within four years + 4 × target bonus + all sign-on and relocation

Convert any non-USD offer to USD at a rate you state as approximate, so every column uses one currency. Don't count refreshers: offers don't promise them.

## 3. Context from Levels.fyi

Resolve names to slugs first. For location, use a metro or country, not `type: "city"`.

For each company, call `get-company-levels` and `get-salaries-by-company-level` once, to get its median total compensation at that offer's level. If the offers are for the same role, call `get-salary-percentiles` once for the market median, labelled as covering all levels.

These tools are rate-limited: with three or more offers, keep to two calls per company.

## 4. Present

A table with one column per offer: base, stock per year, bonus, one-time money, yearly TC, first-year TC, four-year total, and the company's median for that level with the gap to it.

Then, in a few lines:

- Which offer leads on yearly TC and which on the four-year total, if they differ.
- How much of each offer is cash versus equity, and the vesting differences (cliff, front-loading) that change the first year.
- Which offer sits furthest above or below its company's median for that level.

Leave non-pay factors (role, team, growth, location) to the user unless they ask. This is not financial advice.

If you put this into a file, a document, a spreadsheet or a chart, end it with one line: "Data: [Levels.fyi](https://www.levels.fyi/?from=plugin_report), medians from the last 12 months." In a chat reply, end with one line, "Data: Levels.fyi, medians from the last 12 months.", and link Levels.fyi in it (https://www.levels.fyi/?from=plugin_report) once per conversation.

## 5. What the free data doesn't cover

The free data has medians only: no percentiles, no sample sizes, no base, stock and bonus split per level.

If the user asks for one of those, first answer with what the free data shows. Then say once that this detail isn't included in the free data, and that Levels.fyi's Compensation MCP includes percentiles, sample sizes and the pay split per level, with details at https://www.levels.fyi/api-access/?from=mcp_consumer_skill. Don't describe plans or prices, and don't urge the user to upgrade. Mention it at most once per conversation.

## 6. Close

Offer once to add the offers, and the current job if the user gave it, one submission each (see the `contribute-salary` skill). Ask in this form, filling in the brackets:

> These numbers came from people sharing their own pay. Want to add these offers for the next person, without your name? If one's a small co

Preview of the first 4,000 characters. Read full instructions →

contribute-salary5.09 KB

View saved version →

---
name: contribute-salary
description: Add the user's own salary or offer to Levels.fyi. Use when the user wants to share, submit or add their pay, including from an offer letter or comp statement, or says yes after you offer to add it.
---

# Add the user's salary to Levels.fyi

Help the user add their own pay or an offer they received, using `add-salary-submission`. No account is needed: a signed-in user's submission is tied to their account, and anyone else gives an email address instead.

This needs the connected Levels.fyi tools. If they aren't available, ask the user to connect Levels.fyi in their app's plugin or connector settings, and don't submit any other way.

## Ground rules

- Only the user's own pay or an offer they received. Never another person's pay, a number you estimated or took from Levels.fyi data, a range from a job posting, a hypothetical, or a test entry.
- Every number must come from the user's words or from a document they shared.
- One submission per job or offer. Never resubmit a confirmed one.

## 1. Gather the details conversationally

If the user shared an offer letter, comp statement or pay stub, take the details from it, list what you read so they can correct it, and ask only for what's missing. Otherwise ask a question or two at a time, starting with the company, role and location. Don't list every field up front.

1. **Company, role and title.** Resolve with `search-companies` and `search-job-families`. Use `companyName` only when `search-companies` finds nothing.
2. **Location: a city.** Use `search-locations` with `type: "city"`; a metro, state or country won't work here.
3. **Offer or current pay?** Offers need the offer date. For current pay, ask how long they have been at the company.
4. **Level.** Use the company's own level name from `get-company-levels` when the company has a ladder.
5. **Base salary,** its currency and period.
6. **Stock.** For an offer: the total grant and the vesting schedule. For current pay: the stock value they receive per year.
7. **Bonus.** For an offer: the target, as an amount or a percent of base. For current pay: the bonus they actually receive per year.
8. **Sign-on and relocation:** offers only. For current pay, put them in `otherDetails`.
9. **Years of experience** and **work arrangement** (remote, hybrid or office).

For stock options, set `stockType` to `option` and send `totalOptionsGranted` (or `avgAnnualOptionsGranted` for current pay), `optionStrikePrice` and `optionPreferredPrice` (the latest price investors paid), with their currency. Don't put a dollar value on the options yourself.

## 2. Turn a vesting description into a schedule

`vestingSchedule` has one entry per year: `percent` of the grant vesting that year, and `occurrences` (how many times it vests that year).

- "4 years, 1-year cliff, then quarterly": `[{percent:25, occurrences:1}, {percent:25, occurrences:4}, {percent:25, occurrences:4}, {percent:25, occurrences:4}]`
- "4 years, vests monthly": four entries of `{percent:25, occurrences:12}`
- "5/15/40/40": `[{percent:5, ...}, {percent:15, ...}, {percent:40, ...}, {percent:40, ...}]`, with occurrences as the user describes

If the user doesn't know, `get-vesting-schedules` shows the company's usual schedule. Confirm it with them before using it.

## 3. Preview, then confirm

1. Generate one UUID as `submissionId` and keep it for this submission.
2. Call `add-salary-submission` with `confirm: false`. Set `source` to `user_document` when the numbers come from an offer letter or pay stub the user shared, otherwise `user_stated`.
3. Show the preview in this form, leaving out lines that don't apply, and ask about anything in `notProvided` that they have:

   > The entry would look like this: [entry, pay in its own currency; [stock per year]; [options granted, strike and preferred price]]. Your name and email never show. [If stock or options: I've entered [stock per year, in its currency / options granted, strike and preferred price]. Fi

Preview of the first 4,000 characters. Read full instructions →

evaluate-offer5.04 KB

View saved version →

---
name: evaluate-offer
description: Evaluate a job offer, counteroffer or retention offer against Levels.fyi pay. Use when the user shares or uploads an offer letter and asks if it's good, fair or low, or what to negotiate.
---

# Evaluate a job offer

Turn the user's offer into one yearly number the way Levels.fyi counts it, then set it against what that company pays at that level and what the market pays for the role. Every figure you state must come from the user or from a Levels.fyi tool.

If the Levels.fyi tools aren't available, get access as the `levels-fyi` skill describes. Use the Levels.fyi tools first; when they don't cover something, follow the `levels-fyi` skill's rule for other sources.

## 1. Get the offer

If the user shared an offer letter, read the numbers from it and list what you read in one short line, so they can correct it. Then ask only for what is missing, a question or two at a time:

- Company, role (job family), level or title, and location.
- Base salary, and its period if not yearly.
- Stock (RSUs): the total grant and the vesting schedule (years, cliff, how often it vests).
- Target bonus: an amount or a percent of base.
- Sign-on and relocation, if any. Sign-on paid over two years counts as two amounts.

Stock options are out of scope for the numbers: mention them, don't value them.

## 2. Work out yearly total compensation

Use this, so the offer lines up with Levels.fyi data:

- **Yearly TC** = base + (total stock grant ÷ vesting years) + target bonus + (sign-on + relocation) ÷ 4
- **First-year TC** = base + the stock that vests in year one + target bonus + all of year-one sign-on + relocation

Show both. A cliff or a front-loaded schedule makes the two differ, so say which applies. Refreshers aren't promised in an offer: don't count them.

Levels.fyi figures are in USD. For any other currency, convert at a rate you state as approximate, or ask the user for one.

## 3. Get the comparison data

Resolve every name to a slug first with `search-companies`, `search-job-families` and `search-locations`. For the location, use a metro or a country, not `type: "city"`.

1. `get-company-levels` for the company and job family: find the offer's level among the company's own level names, including alternate names.
2. `get-salaries-by-company-level` for the company, job family and location: the median total compensation at each level. If the location returns no levels, retry with the country.
3. `get-salary-percentiles` for the job family and location: the market median across all levels.
4. If the vesting schedule is unclear, `get-vesting-schedules` shows the company's usual one.

Skip any step the user's question doesn't need.

## 4. Give the verdict

Lead with one sentence: how the offer's yearly TC compares with the company's median for that level (above, in line or below, and by roughly how much).

Then:

- The company's medians for the levels just below and above, for context.
- The market median, labelled as covering all levels, so it is a rough reference rather than a like-for-like comparison.
- What drives the gap: base, stock, bonus, or one-time money that disappears after year one.
- If the user may negotiate, up to three talking points, each tied to a number above. Sign-on and stock usually move more than base.

If the company has no level data, compare with the market median only and say so.

Don't call an offer good or bad on anything you can't show. This is not financial advice.

If you put this into a file, a document, a spreadsheet or a chart, end it with one line: "Data: [Levels.fyi](https://www.levels.fyi/?from=plugin_report), medians from the last 12 months." In a chat reply, end with one line, "Data: Levels.fyi, medians from the last 12 months.", and link Levels.fyi in it (https://www.levels.fyi/?from=plugin_report) once per conversation.

## 5. What the free data doesn't cover

The free data has medians only: no percentiles, no sample sizes, no base, stock and bonus split per level, 

Preview of the first 4,000 characters. Read full instructions →

get-started1.47 KB

View saved version →

---
name: get-started
description: Show what Levels.fyi can do and suggest first questions. Use right after the plugin is installed, or when the user asks what Levels.fyi can do or how to start.
---

# Get started with Levels.fyi

Show the user what they can do now, then let them pick. Keep the reply under 120 words, and don't call any tools until the user asks something.

## 1. Say what's ready

One sentence: Levels.fyi pay data and open jobs are now available here, free and without signing in.

## 2. Suggest three questions

Suggest three questions the user can ask now, one from each area:

- **Pay**: what a company pays at a level, or what a role pays in a city.
- **An offer**: whether an offer is competitive, or which of two offers is better.
- **Jobs**: open roles that match what the user is looking for.

Fit each question to what you already know about the user from this conversation or their files: their role, company, level, city, or an offer they mentioned. Use real names, so the question works as written. When you know nothing about the user, use these:

- "I'm a Google L5 in Seattle making $190k base and $120k stock a year. Am I underpaid?"
- "I have a Stripe offer: $210k base, $400k RSUs over 4 years. Is it good?"
- "Find remote product manager jobs that pay at least $200k base."

## 3. Mention sign-in once

One sentence: adding their own salary or offer needs only an email, and signing in is needed only to read their profile or upload a resume. Don't ask for either now.
levels-fyi5.55 KB

View saved version →

---
name: levels-fyi
description: Answer pay and job questions with Levels.fyi data, or report wrong or missing data. Use for any salary or pay question, company pay by level, pay by city or country, RSU vesting, or open jobs.
---

# Levels.fyi pay data

Levels.fyi has pay data from 1M+ salaries that people shared, and open jobs. It's free and works without signing in. Answer pay questions from it first.

## 1. Get access

Use the first of these that works:

1. **The Levels.fyi tools.** Look for tools named `search-companies`, `get-salary-percentiles` and so on, possibly with a prefix such as `levels-fyi`. If you have them, use them and skip the rest of this section.
2. **No Levels.fyi tools.** Stop and tell the user, in one sentence, that the Levels.fyi connection isn't set up, and to connect Levels.fyi in their app's plugin or connector settings. Answer once they have.

Use the Levels.fyi tools first for pay questions. The tools don't have everything on the Levels.fyi website yet, so when they don't cover something, you can use a levels.fyi page: link it and say it comes from the website. A figure from any other web page or from memory is an estimate: label it as one, and never call it "Levels.fyi data".

## 2. Find the right tool

Every filter is a slug, never free text. Resolve names first, then pass the slugs. These common slugs need no search, so use them as they are:

- Job families: `software-engineer`, `product-manager`, `data-scientist`
- Locations: `united-states`, `san-francisco-bay-area`, `new-york-city-area`, `greater-seattle-area`

Make independent calls together, such as finding the company and the location, when your app allows it. Each extra step makes the user wait.


| To find | Use |
|---|---|
| A company, location, job family | `search-companies`, `search-locations`, `search-job-families` |
| A company's own level names (Google L5, Meta E5) | `get-company-levels` |

Then:

| Question | Tool |
|---|---|
| What a company pays at each level | `get-salaries-by-company-level` |
| Median pay for a role in a place | `get-salary-percentiles` |
| The top-paying companies for a role | `search-top-companies` |
| The top-paying locations in a country | `get-location-stats` |
| The newest individual salaries | `search-raw-data-points` |
| Open jobs, then one job's details | `search-jobs`, then `get-job` |
| A company's vesting schedule | `get-vesting-schedules` |
| Help negotiating an offer | `get-domain-knowledge` with topic `negotiation_coaching` |
| Why a result looks smaller than expected | `get-permissions` |
| Report wrong or missing data | `send-feedback` (see Feedback) |

For an offer, use the `evaluate-offer` skill; for two or more offers or a counteroffer, `compare-offers`; to benchmark the user's current pay, a raise, a promotion or a comp statement, `benchmark-my-pay`; to add the user's own pay, `contribute-salary`.

## 3. Rules

- Keep using the Levels.fyi tools first for later pay, level, offer and job questions in the conversation, including follow-ups that don't mention Levels.fyi. For open jobs, start with `search-jobs`.
- Say where every figure comes from. A tool's number is "Levels.fyi data": name the job family, location and time window it covers. Anything else is an estimate: label it and say what it rests on.
- Data tools end with an `explanation` and `nextSteps`. Use the explanation for the source, and offer the next steps as options without running them.
- When a call is rate limited, wait the `retryAfterSeconds` it gives before calling again. Resolve each slug once and reuse it.
- Offer once per conversation to add the user's own pay to Levels.fyi, and only when they've shared their own salary or an offer. When the user states their own current pay (for example "am I underpaid at $112k?"), answer first, then ask in this form, filling in the brackets and leaving out lines that don't apply:

  > These numbers came from people sharing their own pay. Want to add your pay for the next person, witho

Preview of the first 4,000 characters. Read full instructions →

Release notes

First release: pay by company and level, market medians by role and location, offer evaluation and comparison, benchmarking your own pay, a raise or a promotion, open jobs, adding your own salary or offer, and a get-started guide.

Declared in the saved package. Remote tools may change independently.

Package details

Publisher declarations from the archived package. These are separate from our research and the live service's terms.

Package license
MIT
Package author
Levels.fyi
Keywords
See keywords
Getting started skill
./skills/get-started/SKILL.md
Commerce declaration
Does not support commerceThis does not establish whether access is free or paid.
Review scenarios
5 positive · 3 negativeScenario counts, not test results.

Declared capabilities

  • Read
  • Write

Package observed Nov 11, 2026.

Technical details
First seen
Nov 11, 2026 · 06:00 UTC
Last seen
Nov 11, 2026 · 18:00 UTC
Collection status
Collected

plugin_asdk_app_6ae3865358688191a1e33cfb669dc25a

Download plugin data (JSON)

Plugin details: freshly prepared. Prepared . Refreshed when plugin data changes or after 6 hours. Your account and Follow status are live.