On this page:
This is some text inside of a div block.
This is some text inside of a div block.
This is some text inside of a div block.

baseSalary

baseSalary · Recommended

Appears in

JobPosting

What is it?

The compensation for the job, expressed as a structured monetary amount. This field uses a nested MonetaryAmount object with a QuantitativeValue inside it, allowing you to specify the currency, amount (or range), and pay period. Google displays salary information prominently in job search results when this field is present.

Why this matters for AEO

Salary is the second most common filter after location in job searches. When someone asks "What do software engineers make at Shopify?" or "Find marketing jobs paying over $80k in Chicago," AI engines extract baseSalary values to answer directly. Listings with structured salary data get prioritized in compensation related queries. Without baseSalary, an AI engine cannot include the job in salary filtered results even if the pay range appears in the description text.

What the specs say

Schema.org:Number, MonetaryAmount, or PriceSpecification. The base salary of the job or of an employee in an EmployeeRole. schema.org/baseSalary

Google: Recommended. "The actual base salary for the job, as provided by the employer (not an estimate)." Google Search Central

How to find your value

  • Job requisition — The approved salary band from HR or finance
  • Compensation team — The pay grade and range for this role level
  • Offer letter template — The base pay figure (exclude bonuses and equity)
  • Industry benchmarks — Glassdoor, Levels.fyi, or Payscale for competitive ranges

Report the actual employer provided salary, not an estimate from third party data. Google's guidelines specify this must be the real compensation, not an aggregated market figure.

Format and code

Type: MonetaryAmount with nested QuantitativeValue

Single value (hourly):

{
  "baseSalary": {
    "@type": "MonetaryAmount",
    "currency": "USD",
    "value": {
      "@type": "QuantitativeValue",
      "value": 40.00,
      "unitText": "HOUR"
    }
  }
}

Single value (annual):

{
  "baseSalary": {
    "@type": "MonetaryAmount",
    "currency": "USD",
    "value": {
      "@type": "QuantitativeValue",
      "value": 120000,
      "unitText": "YEAR"
    }
  }
}

Salary range:

{
  "baseSalary": {
    "@type": "MonetaryAmount",
    "currency": "USD",
    "value": {
      "@type": "QuantitativeValue",
      "minValue": 90000,
      "maxValue": 130000,
      "unitText": "YEAR"
    }
  }
}

Valid unitText values:

  • HOUR — Hourly rate
  • DAY — Daily rate
  • WEEK — Weekly salary
  • MONTH — Monthly salary
  • YEAR — Annual salary

Invalid patterns:

"baseSalary": 120000

A plain number is valid per schema.org but will not produce rich results in Google. Google expects the full MonetaryAmount structure.

"baseSalary": "$120,000/year"

A formatted string fails validation entirely. Use the structured MonetaryAmount object.

"baseSalary": {
  "@type": "MonetaryAmount",
  "currency": "USD",
  "value": "120000"
}

Missing the nested QuantitativeValue and unitText. Google needs the pay period to display salary correctly.

Webflow implementation

Static pages

Add the full salary structure in Page Settings > Custom Code:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "JobPosting",
  "title": "Senior Designer",
  "baseSalary": {
    "@type": "MonetaryAmount",
    "currency": "USD",
    "value": {
      "@type": "QuantitativeValue",
      "minValue": 95000,
      "maxValue": 125000,
      "unitText": "YEAR"
    }
  }
}
</script>

CMS template pages

Create CMS number fields for salary min, salary max, and a dropdown or text field for currency and pay period:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "JobPosting",
  "baseSalary": {
    "@type": "MonetaryAmount",
    "currency": "{{wf {&quot;path&quot;:&quot;salary-currency&quot;,&quot;type&quot;:&quot;PlainText&quot;} }}",
    "value": {
      "@type": "QuantitativeValue",
      "minValue": {{wf {&quot;path&quot;:&quot;salary-min&quot;,&quot;type&quot;:&quot;PlainText&quot;} }},
      "maxValue": {{wf {&quot;path&quot;:&quot;salary-max&quot;,&quot;type&quot;:&quot;PlainText&quot;} }},
      "unitText": "{{wf {&quot;path&quot;:&quot;salary-period&quot;,&quot;type&quot;:&quot;PlainText&quot;} }}"
    }
  }
}
</script>

Use Webflow number fields for min/max values so they output without quotes in the JSON. Use an option field for salary period with values: HOUR, MONTH, YEAR.

In Schema HQ

The baseSalary field assembles the nested MonetaryAmount > QuantitativeValue structure from your CMS salary fields. It handles currency formatting, validates the unitText value, and builds the correct JSON-LD nesting that is difficult to maintain in manual Webflow embeds.

Real examples

Google documentation (Google Search Central):

{
  "baseSalary": {
    "@type": "MonetaryAmount",
    "currency": "USD",
    "value": {
      "@type": "QuantitativeValue",
      "value": 40.00,
      "unitText": "HOUR"
    }
  }
}

Tustin Recruiting (tustinrecruiting.com):

{
  "baseSalary": {
    "@type": "MonetaryAmount",
    "currency": "USD",
    "value": {
      "@type": "QuantitativeValue",
      "value": 120000,
      "unitText": "YEAR"
    }
  }
}

Related fields

  • employmentType: determines whether salary is hourly, salaried, or contract rate
  • title: the role this salary applies to
  • hiringOrganization: the employer offering this compensation
  • jobLocation: location affects salary expectations and cost of living adjustments
  • workHours: hours context for hourly rates

FAQ

Should baseSalary include bonuses and stock options?

No. baseSalary represents base compensation only. Bonuses, equity, commissions, and other variable pay components are not part of this field. Google's documentation specifies "the actual base salary" to distinguish it from total compensation.

How do you handle salary ranges?

Use minValue and maxValue inside the QuantitativeValue object instead of a single value. Google displays the range in job search results (e.g., "$90,000 - $130,000 a year"). Ranges are preferred over single values since most positions have a compensation band.

Is the currency code required?

Yes, when using MonetaryAmount. Use ISO 4217 currency codes: "USD" for US dollars, "EUR" for euros, "GBP" for British pounds. Without the currency code, Google cannot display the salary correctly in localized results.

On this page:
This is some text inside of a div block.
This is some text inside of a div block.
This is some text inside of a div block.

Need help with schema on your site?

We implement structured data for Webflow sites — from audit to deployment.

Work with us

Work with us