SoftwareApplication schema: the price and rating that decide whether it shows

SoftwareApplication schema needs three things for Google's software app result: name, offers.price, and a rating or review. Here is the paste-ready JSON-LD, the eight-line check, and why valid markup can still show nothing.

Crawling & Indexing7 min read1669 views
SoftwareApplication schema: the price and rating that decide whether it shows

SoftwareApplication schema is only eligible for Google's software app result when it carries three things: name, offers.price, and either aggregateRating or review. A page can ship the name and the application category, skip the other two, and still parse without a syntax error. Valid is not eligible. Google's software app documentation, read on 2026-10-25, treats a missing price or a missing rating as a non-starter rather than a warning.

What SoftwareApplication schema requires for the software app result

Three properties do the work. Two of them are optional in schema.org and required by Google, which is why so many product pages stop one field short.

PropertyRequiredWhat Google readsCommon mistake
nameYesThe app name shown in the resultUsing the company name instead
offers.priceYesThe price, or 0 for a free appOmitting it because there is no price
aggregateRating or reviewYes, one of themThe rating or review textWriting it without real users
applicationCategoryRecommendedA supported app typeInventing a category outside the list
operatingSystemRecommendedThe platforms requiredLeaving it out for a web app

The rating requirement is where most teams stop. An aggregateRating needs a ratingValue and a ratingCount; a single review needs an author and a review rating. Google's review snippet guidelines are explicit that you must not aggregate reviews or ratings from other websites, and must not include fake or undisclosed incentivized reviews. The rating has to describe your product, from people who used it.

applicationCategory takes a value from Google's supported list. BusinessApplication, DeveloperApplication and DesignApplication are on it; WebApplication is a type, not a category. Copy a value from the documentation rather than inventing a label that reads well.

A software app result is a name with a price and a rating. If one of the three is missing, there is nothing for Google to show.

Which type to use: SoftwareApplication, WebApplication or Product

A browser-based product is usually a WebApplication, a downloadable desktop or mobile app is a SoftwareApplication, and a physical or digital item sold from a catalogue is a Product. Google supports all three, and the mistake is stacking two of them on one page with different prices.

TypeUse whenWatch out for
WebApplicationThe product runs in a browserStill needs a price and a rating
SoftwareApplicationThe product is installed or downloadedState the platforms in operatingSystem
ProductYou sell a catalogue item with a priceFollow the product snippet rules separately

There is one documented exception worth knowing before you pick. Google says it does not show a rich result for software apps that only carry the VideoGame type; you have to co-type the page with another type, such as MobileApplication, to be eligible. That is a narrow case, but it is the kind of detail that makes a correct-looking block show nothing.

If your product page already sells a plan with a price and availability, read Product structured data first and decide which type owns the price on that page. Do not mark both with different numbers.

The deliverable: one block to paste

This is the smallest block that can be eligible for a browser-based product with a free plan. Replace the four values, keep the shape.

{
  "@context": "https://schema.org",
  "@type": "WebApplication",
  "name": "Example",
  "applicationCategory": "BusinessApplication",
  "operatingSystem": "Web",
  "offers": {
    "@type": "Offer",
    "price": "0",
    "priceCurrency": "USD"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.7",
    "ratingCount": "128"
  }
}

The free case is the one people get wrong: offers.price is required even when the answer is zero, so write "price": "0" rather than deleting the offer. If the product has a paid plan, use the real entry price and keep priceCurrency. For a downloadable app, switch @type to SoftwareApplication and say which platforms the download runs on.

Only include aggregateRating if the page shows that rating to visitors. Google's general structured data guidelines require the markup to describe the visible content of the page; a rating that exists only inside a script tag is a misrepresentation, and the review guidelines add that aggregated ratings must come from real reviews, not from other sites.

The deliverable: the eight-line check before you ship

Run these in order. The first four catch a block that cannot work; the last four catch a block that works but is about the wrong page.

CheckPasses whenWhere to see it
TypeOne type, not twoThe @type line
NameMatches the visible product namePage headline
PriceNumber present, 0 if freeoffers.price
RatingReal, visible, with a countReview section
CategoryValue from Google's listapplicationCategory
PlatformNames what the user needsoperatingSystem
PlacementOn the product page, not a blog postURL in Search Console
CoverageRich Results Test lists the appTest output

The block belongs in the page template, next to the title and description, so it cannot drift when someone edits the page body. Keep the values in the same place the page renders them from; a hard-coded rating is the first field to go stale.

  1. Paste the page URL into the Rich Results Test and confirm that "Software app" is detected.
  2. Read the errors before the warnings. A missing required property is an error; a missing recommended one is not.
  3. Open the same URL in URL Inspection and check that the rendered HTML contains the block.
  4. Watch the structured data report in Search Console for the next few days. It reports what Google found, not what you intended.

Why valid markup still shows nothing

Most failures are one of four shapes, and none of them is a syntax error. The block parses, the page indexes, and the result never appears.

SymptomLikely causeFix
Test finds no itemsJSON-LD injected after the test snapshotRender it server-side, then retest
Price reported missingOffer object removed for a free planWrite price: "0"
Rating reported missingNo rating or review propertyAdd a real one, or accept no result
Markup on the wrong URLBlock lives on a blog post or docs pageMove it to the product page

The fourth row is the quiet one. A company often marks up the launch announcement because that is the page its team edits, while the product page, which actually describes the app, carries nothing. Google evaluates the page it is on. If you want the result on the product page, the block has to be there.

Reading the test output is its own skill; how to read the Rich Results Test covers which lines are errors and which are suggestions that do not block a result.

What we don't know, and when to stop

We don't know how often Google chooses to show the software app result when a page is eligible. Google does not publish a display rate, does not guarantee that a feature using structured data will appear, and we have not measured it on our own pages long enough to claim a number. Eligibility is the part you control; display is not.

There is also a case where the honest answer is to wait. If the product has no genuine ratings yet, do not invent a number or copy one from a review site. Publish the name, the category and the price, and add the rating when real users have left one. A missing rating costs you the rich result; a fabricated rating costs you the markup, the page, and the trust the page was built for.

Stop when the test lists the app without errors and the visible page matches the block. Beyond that, the remaining work is tracking whether the result appears, which is a measurement question rather than a markup one; the search and AI analysis side of QueryWin is where that check belongs, not in the page source.

Common questions

What is SoftwareApplication schema?

It is schema.org markup that describes a software product on a page: its name, category, supported platforms, price and rating. Google reads it to decide whether the page can show a software app result with an app name, a price and stars.

Is SoftwareApplication schema still supported by Google?

Yes. Google's Software app documentation was still live and was last updated on 2026-09-08 when we read it on 2026-10-25, and it still lists the Software app result as a supported feature. Unlike FAQ and HowTo, this one has not been retired.

Does software app schema show stars?

Only when the block carries a rating or a review. With a name and a price but no rating, the page does not meet the required properties for the result. With a fabricated rating, the markup is a policy problem rather than a display problem.

Do I need both SoftwareApplication and Product schema?

No. Pick the type that matches what the page sells and let one of them own the price. Marking both with different prices on the same page gives Google two conflicting facts and gives you no way to tell which one was read.

Why does the Rich Results Test find nothing?

Usually because the JSON-LD is added by JavaScript after the markup the test first sees, or because the page it is given is not the page with the block. Server-render the block and test the exact URL that should rank, not the homepage.

Part of the QueryWin handbook · Level 2

SoftwareApplication schema: the price and rating that decide whether it shows