GuideTechnical SEO

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.

LaunchScalerPublished 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.

PropertyStatus for GoogleWhat to put in it
nameRequiredThe product name, as shown on the page
offers.priceRequiredThe price as a number; 0 for a free app or plan
offers.priceCurrencyRecommended when price is above 0An ISO currency code such as USD; otherwise Google "will try to find the right currency"
aggregateRating or reviewOne of them is requiredA rating from your own users, shown on the page
applicationCategoryRecommendedA value from Google's supported list, such as BusinessApplication
operatingSystemRecommendedThe platforms it runs on, as text
description, screenshot, featureList, softwareVersionDefined by schema.org; not listed by Google for this rich resultAccurate 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.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "WebApplication",
  "name": "Acme Invoicing",
  "description": "Send invoices, take card payments and chase late payers automatically.",
  "url": "https://www.example.com/",
  "applicationCategory": "BusinessApplication",
  "operatingSystem": "Web browser",
  "offers": {
    "@type": "Offer",
    "price": 0,
    "priceCurrency": "USD"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": 4.6,
    "ratingCount": 212,
    "bestRating": 5
  },
  "screenshot": "https://www.example.com/img/invoice-editor.png",
  "featureList": "Recurring invoices, card and bank payments, automatic reminders"
}
</script>

The details that trip people up:

  • 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.

Google's full list of supported values:

Category values Google supportsTypical use
BusinessApplication, DeveloperApplication, FinanceApplication, DesignApplicationCommon for SaaS
CommunicationApplication, SecurityApplication, UtilitiesApplication, EducationalApplicationAlso common for software products
MultimediaApplication, HealthApplication, ShoppingApplication, TravelApplicationConsumer and vertical apps
GameApplication, SocialNetworkingApplication, SportsApplication, LifestyleApplicationConsumer apps
DriverApplication, BrowserApplication, DesktopEnhancementApplication, EntertainmentApplication, HomeApplication, ReferenceApplicationSpecialist categories

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:

  1. The rating must be visible. "If you use AggregateRating, users should be able to see that aggregate rating on the page."
  2. 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.
  3. 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.
  4. The rating must describe one item. "Provide review information about a specific item, not about a category or a list of items."
  5. 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:

// app/page.tsx
export default function Page() {
  const jsonLd = {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    name: "Acme Invoicing",
    applicationCategory: "BusinessApplication",
    operatingSystem: "Web browser",
    offers: { "@type": "Offer", price: 0, priceCurrency: "USD" },
  };
  return (
    <script
      type="application/ld+json"
      dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd).replace(/</g, "\\u003c") }}
    />
  );
}

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:

  1. Open the Rich Results Test with the live URL. You want the software app item among the detected items, with no critical issues.
  2. Read any warning. A missing priceCurrency or applicationCategory is non-critical; a missing rating or offers.price is critical.
  3. 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.
  4. 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.

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.
02

How do I mark up a free app or a free plan?

  • 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.

Sources

  1. Google Search Central: Software app (SoftwareApplication) structured datadevelopers.google.com
  2. Google Search Central: Review snippet structured datadevelopers.google.com
  3. Google Search Central: General structured data guidelinesdevelopers.google.com
  4. Google Search Central: Structured data markup that Google Search supportsdevelopers.google.com
  5. Search Console Help: Rich result report overviewsupport.google.com
  6. Schema.org: SoftwareApplicationschema.org
  7. Next.js docs: How to implement JSON-LDnextjs.org

Newsletter

What launched, every Monday

Every Monday: what launched on LaunchScaler that week, what is launching next, and the reviews we published. Confirm your email once and you're in.

More from the blog

Guide

SPF, DKIM and DMARC for a startup domain: the exact records

Copyable SPF, DKIM and DMARC records for Google Workspace, Microsoft 365 and sending services, and the order to tighten DMARC to reject safely.

LaunchScalerSep 28, 2026 · 8 min read
Guide

Structured data errors: fix 'Missing field' and invalid JSON

A structured data error (critical issue) blocks the rich result; a warning doesn't. How to fix missing fields, invalid JSON and wrong value types.

LaunchScalerSep 28, 2026 · 10 min read
Guide

Thin content: how many words is too few?

Google has no minimum word count. A page is thin when it doesn't fully answer its query. How to test that, then expand, merge or noindex it.

LaunchScalerSep 28, 2026 · 9 min read