SoftwareApplication schema for SaaS: JSON-LD Google accepts
Google's software app rich result needs name, offers.price and a real rating or review. A complete SaaS JSON-LD example and the rating rules.
LLaunchScaler·Published ·8 min read
Google's software app rich result requires three things in your SoftwareApplication markup: name, offers.price, and either an aggregateRating or a review. Add applicationCategory (for most SaaS, BusinessApplication) and operatingSystem as recommended, set the price to 0 for a free plan, and only include a rating that real users gave and that is visible on the page.
The rating requirement is where SaaS sites get stuck. Without a genuine rating or review, the item is not eligible, and adding an invented one is against Google's guidelines. The sections below give a complete block, then the rules for ratings, then how to ship and test it.
What does Google require in SoftwareApplication markup?
Google lists name and offers.price as required, plus a rating or review: "You must include one of the following properties: aggregateRating, review." applicationCategory and operatingSystem are recommended. Items that miss a required property "are not eligible for rich results," according to Google's general guidelines.
Property
Status for Google
What to put in it
Questions, answered
What people ask about this
01
What properties does Google require for SoftwareApplication schema?
Google requires name, offers.price, and either aggregateRating or review for the software app rich result. It recommends applicationCategory and operatingSystem, and priceCurrency whenever the price is above 0.
Defined by schema.org; not listed by Google for this rich result
Accurate extras that describe the product
Google also supports two subtypes: "For mobile applications and web applications, Google also supports MobileApplication and WebApplication." A browser-based SaaS product can use WebApplication in place of SoftwareApplication.
What does a complete SoftwareApplication JSON-LD block look like?
Here is a block for a browser-based invoicing product with a free plan and a rating collected on its own site. Every value in it must match what the page shows: the name, the starting price and the rating.
price is a number. Google's instruction for a free app is to "set offers.price to 0". Writing "price": "Free" or "price": "$0" is an incorrect value type and breaks the required field.
If the product has no free plan, use the price of the entry plan the page shows, with priceCurrency. A price in the markup that the page does not show breaks Google's rule that structured data must be "a true representation of the page content."
ratingValue uses a dot for decimals (4.6, not 4,6), and the scale defaults to 1 to 5 unless you set bestRating and worstRating.
An AggregateRating needs ratingValue and at least one of ratingCount or reviewCount. When it is nested inside the app, as above, itemReviewed is left out because Google assumes the parent is the item rated.
Put the block on the page it describes, usually the homepage or the main product page. Google's guidelines say to "put the structured data on the page that it describes" and not to mark up content "that is not visible to readers of the page."
Which applicationCategory should a SaaS product use?
Use the closest value from Google's supported list, because Google says "the value must be a supported app type." Most B2B SaaS products are BusinessApplication. Tools for engineers fit DeveloperApplication, accounting and payments tools FinanceApplication, and design tools DesignApplication.
For operatingSystem, Google's examples are plain text such as "Windows 7", "OSX 10.6" and "Android 1.6". List what the product actually runs on: "Web browser" for a web app, or "Web browser, iOS, Android" if you also ship mobile apps. If you have a separate native app with its own store listing, mark it up as a separate MobileApplication on its own page.
Can you mark up star ratings you collected yourself?
Yes, if they are genuine ratings from real users of the product, collected on your site and visible on the page. What you cannot do is invent a rating, copy one from a review platform, or mark up reviews you paid for without saying so. Each of those breaks Google's review snippet guidelines, which apply to the software app rating.
The rules that decide eligibility, from Google's review snippet documentation:
The rating must be visible. "If you use AggregateRating, users should be able to see that aggregate rating on the page."
The rating must come from your site. "Don't aggregate reviews or ratings from other websites." A rating shown on G2, Capterra or an app store belongs to that site, so it cannot go in your markup as your aggregate.
The reviews must be real and disclosed. "Don't include fake or undisclosed incentivized reviews," including reviews written in exchange for money, discounts or free products without a clear disclosure.
The rating must describe one item. "Provide review information about a specific item, not about a category or a list of items."
Google recommends "only accepting ratings that are accompanied by a review comment and author's name."
There is a separate self-serving rule, and it is narrower than people think. It says that when "the entity that's being reviewed controls the reviews about itself," pages using LocalBusiness or any other Organization markup are ineligible for the star feature. So your company's Organization markup should not carry star ratings. Ratings of your product belong on the SoftwareApplication item, following the five rules above. Review stars for your own product goes through the self-serving rule in detail.
If you have no ratings yet, leave aggregateRating out. The Rich Results Test will report the item as invalid for the software app rich result, which is the honest state until you have reviews to show. Google's guidelines warn that reviews or ratings "not by actual users may result in manual action," which costs far more than a missing star row.
How do you add the markup and test it?
Render the JSON-LD on the server as a <script type="application/ld+json"> tag, build the object in code, and serialise it with JSON.stringify so a trailing comma or unescaped quote cannot break it. Then test the live URL in the Rich Results Test and check the result in Search Console after Google recrawls.
In the Next.js App Router, the documented pattern is a script tag in the page or layout:
The .replace(/</g, "\\u003c") comes from the Next.js guide, which warns that JSON.stringify "does not sanitize malicious strings used in XSS injection." Keep it whenever any value (a product name, a review author) could come from user input.
Test it in this order:
Open the Rich Results Test with the live URL. You want the software app item among the detected items, with no critical issues.
Read any warning. A missing priceCurrency or applicationCategory is non-critical; a missing rating or offers.price is critical.
Run the Schema Markup Validator on the same URL to catch schema.org problems Google's test does not report, such as a misspelled property.
After Google recrawls, check URL Inspection for the page. Search Console's documented rich result reports include Review snippets but no separate software app report, so URL Inspection is the reliable view of the app item itself.
If the test shows syntax errors or a "Missing field", structured data errors explains each message and its fix.
How does SoftwareApplication fit with your other schema?
SoftwareApplication describes the product; Organization describes the company that makes it; WebSite describes the site and its name. A SaaS homepage often carries all three, each accurate and each describing something visible on the page. Organization schema markup covers the company block, including the logo and sameAs properties.
The same markup is read beyond Google's rich results. Structured facts such as the product's category, price and platforms are easier for any system to extract from typed JSON-LD than from layout, which is why schema markup for AI search treats it as part of making a product legible to answer engines. The rule is the same everywhere: mark up what the page says, and nothing it does not.
Get the structured data done for you
If you would rather have the markup built and checked by hand, LaunchScaler's SEO / GEO / backlink boost includes structured-data fixes as one of its four workstreams, alongside guest placements on real sites, answer-engine optimisation including an llms.txt, and technical off-page clean-up. It is done-for-you work, scoped to your site from $299, with a record of everything shipped. There is no checkout: you send an inquiry and get a scope and a quote within one business day, and the page's own promise is "We never fabricate signals or buy spam links." Talk to us about your product's markup.
Set offers.price to 0, as Google's documentation instructs. Do not write the word 'Free' as the price, because price expects a number and a text value is an incorrect value type.
03
What applicationCategory should a SaaS product use?
Pick the closest value from Google's supported list. Most B2B SaaS fits BusinessApplication; developer tools fit DeveloperApplication, and money tools fit FinanceApplication. The value must be one of Google's supported app types.
04
Can I add star ratings to my own SaaS product's markup?
Only ratings that are genuine, collected from real users and visible on the page. Google says not to aggregate ratings from other websites or include fake or undisclosed incentivized reviews, and pages about an Organization that control their own reviews are ineligible for stars.
05
Is SoftwareApplication schema still supported by Google?
Yes. Software app is listed among the structured data features in Google's search gallery as updated in June 2026, and its documentation was last updated in September 2026.