In short. Use baseSalary with MonetaryAmount and QuantitativeValue to encode currency, a salary value or range, and its pay period.
Definition: JobPosting salary markup places
baseSalaryon a job posting and represents the pay as aMonetaryAmount. The amount contains a currency and aQuantitativeValue, whosevalueorminValueandmaxValueexpress the pay and whoseunitTextidentifies the pay period.
Key facts
- Google's JobPosting structured data documentation defines
baseSalaryas aMonetaryAmount, describes it as the actual salary supplied by the employer, and says that only employers can provide it. - The same documentation uses
valuefor one salary,minValueandmaxValuefor a salary range, and listsHOUR,DAY,WEEK,MONTH, andYEARas case-sensitiveunitTextvalues. - Schema.org describes MonetaryAmount as a monetary value or range and defines
currencyas the currency in which the amount is expressed. - Schema.org describes QuantitativeValue as a point value or interval and defines
unitTextas text indicating the unit of measurement.
How is the salary value nested?
The baseSalary property holds a MonetaryAmount. Put the currency on that object. Its value property holds a QuantitativeValue, which carries the amount and the pay period. Schema.org's definition of MonetaryAmount covers both a monetary value and a range, while its currency property identifies the currency of that amount.
For one amount, the nested value can contain a numeric value. For a range, the QuantitativeValue contains minValue and maxValue instead. Google's example uses this structure:
"baseSalary": {
"@type": "MonetaryAmount",
"currency": "USD",
"value": {
"@type": "QuantitativeValue",
"minValue": 40.00,
"maxValue": 50.00,
"unitText": "HOUR"
}
}
How is the pay period written?
unitText is a text property of QuantitativeValue. Schema.org says it indicates the unit of measurement and is useful when a standard unitCode cannot be provided. Google specifies five case-sensitive strings for this field: HOUR, DAY, WEEK, MONTH, and YEAR. Use the string that matches the period shown for the salary. The Google example pairs USD with HOUR and a numeric range.
The currency and period describe different parts of the value. currency belongs to MonetaryAmount; unitText belongs to the nested QuantitativeValue. This placement follows the structure shown in Google's salary range example.
What should an employer check before publishing?
Google describes baseSalary as the actual base salary provided by the employer and says that only employers can provide the property. The markup therefore needs to represent the employer's published salary information. For a single amount, use value; for a range, use both minValue and maxValue. Keep the currency on MonetaryAmount and use one of Google's case-sensitive period values in unitText.
Related terms
- How do I remove an expired job from Google's job results?
- How do I mark a remote job in JobPosting structured data?
- Can JobPosting markup be added to a job search results page?
FAQ
Can baseSalary contain a salary range?
Yes. Google's JobPosting documentation says to define minValue and maxValue rather than one value when specifying a salary range.
Which pay period values does Google document?
Google lists the case-sensitive values HOUR, DAY, WEEK, MONTH, and YEAR for unitText.
Where do currency and unitText go?
Put currency on the MonetaryAmount. Put unitText inside its nested QuantitativeValue, alongside value or the range bounds.
Who can provide baseSalary?
Google's documentation says that only employers can provide baseSalary, which it describes as the actual base salary for the job.
Sources
- Google Search Central, "Job posting (JobPosting) structured data for Job Search", 2026-09-08
- Schema.org, "MonetaryAmount - Schema.org Type", undated
- Schema.org, "QuantitativeValue - Schema.org Type", undated
Check how a page reads to answer engines. Open the GEO score analyzer