# SoftwareApplication schema: 57 of 1,074 home pages declared one, and 4 carried every required property

> Lantad asked all 1,419 hostnames in this repository's two committed corpus seed files for robots.txt on 12 October 2026 and read every permitted home page once with no JavaScript executed. 1,074 answered HTTP 200 with HTML and 617 of those held at least one JSON-LD block that parsed. 57 declared a SoftwareApplication, WebApplication or MobileApplication node, 77 nodes between them. All 77 carried a name, 76 carried the recommended applicationCategory, and 4 carried all three of the properties Google's documentation lists as required.

- Canonical page: https://lantad.co/blog/softwareapplication-schema-57-of-1074-declared-4-complete
- This file: https://lantad.co/blog/softwareapplication-schema-57-of-1074-declared-4-complete.md
- Last substantive update: 2026-10-12

## Key facts

- **Published:** 2026-10-12
- **Category:** Findings
- **Author:** Lantad
- **Length:** 3791 words
- **Takeaway 1:** SoftwareApplication schema requires three things and the corpus supplied one of them: of the 77 nodes Lantad read across 1,074 permitted corpus home pages on 12 October 2026, all 77 carried a name, 27 carried an offers price and 14 carried a rating or a review.
- **Takeaway 2:** Four nodes on four hosts carried the full required set on 12 October 2026: yunastories.com, spellbook.legal, littlebird.ai and dropbox.com. The other 73 were missing at least one property Google's software app documentation, last updated 2026-09-08 UTC, lists as required.
- **Takeaway 3:** The optional properties were the ones sites filled in. 76 of the 77 nodes declared applicationCategory and 75 declared operatingSystem, both of which that documentation files under recommended, while 40 of the 77 declared no offers object at all.
- **Takeaway 4:** The type is a software industry habit rather than a web one: 46 of the 57 hosts came from the SaaS, SaaS marketing and single page app strata, and none of the 64 ecommerce, 102 education, 95 healthcare, 85 government or 78 travel home pages read that day declared the type once.
- **Takeaway 5:** Declaring the type more than once is common and inconsistent. mekari.com listed 13 separate products as 13 SoftwareApplication nodes on one home page, and fattureincloud.it declared the same product twice with two different applicationCategory values, BusinessApplication in one block and a sentence of Italian marketing copy in another.

## Summary

A buyer asking an assistant which invoicing tool handles electronic invoicing in Italy, or which error tracker runs self hosted, is asking a question a vendor could answer in machine readable form on its own home page. The type for that answer has existed for years. [schema.org's SoftwareApplication definition](https://schema.org/SoftwareApplication) describes a piece of software with a category, the systems it runs on, a price and a rating, and [Google's software app documentation](https://developers.google.com/search/docs/appearance/structured-data/software-app) builds a rich result on a narrow slice of it. So the obvious question for a site that wants to be named in an answer is whether anybody fills it in, and whether what they fill in is the part that counts.

On 12 October 2026 Lantad asked all 1,419 hostnames in this repository's two committed corpus seed files for /robots.txt as [LantadBot](https://lantad.co/bot), evaluated the site root for that token with the scanner's own matcher, and requested the home page of every host the file left open. 1,074 answered HTTP 200 with an HTML content type. 57 of them declared a node typed SoftwareApplication, WebApplication or MobileApplication, 77 nodes in total. Every one of the 77 carried a name. Four carried the three properties the documentation calls required.

## 57 of 1,074 home pages declared a SoftwareApplication node

The funnel is worth setting out in full, because a rate is only as honest as its denominator. 1,107 of the 1,419 hostnames answered the robots.txt request with HTTP 200. 163 answered 403 and 50 answered 404, which this scanner treats as imposing no restriction, following the robots exclusion standard rather than guessing. 49 answered 503 and one answered 529, which the same code reads as closing the site until it recovers, so those 50 hosts were not requested further. 32 requests failed in the client, 20 of them because the hostname did not resolve at all. Twelve hostnames ran a file that refused LantadBot at the root, every one of them through a wildcard group rather than a rule naming this crawler: coralvilleanimalhospital.com, botcity.dev, amsterdam.nl, wa.gov, helsinki.fi, sciencedirect.com, scielo.org, eluniversal.com.mx, theregister.com, sap.com, instacart.com and gmarket.co.kr.

That left 1,325 hostnames with no prohibition on the root. Three home page requests failed in the client and 248 answered with something other than 200 and HTML: 218 answered 403, ten answered 202, seven answered 429, five answered 404, three answered 503, two answered 406 and one each answered 401, 498 and 500. 1,074 delivered a document. 623 of the 1,074 carried at least one application/ld+json block and 617 held at least one block that parsed, which leaves six hosts whose only blocks were broken JSON, the same failure mode an earlier run measured when it put [117 of 612 schema blocks](https://lantad.co/blog/schema-markup-validator-117-of-612-carried-a-defect) in front of a validator.

57 hosts declared the type. That is 5.3 percent of the readable home pages, and it sits in the same range as the other product oriented types this blog has counted: [42 of 50 product pages declared Product](https://lantad.co/blog/product-schema-42-of-50-declared-it) where a commerce platform usually generates the type, and [141 of 382 home pages carried no JSON-LD](https://lantad.co/blog/structured-data-141-of-382-home-pages-carried-none) at all in an earlier pass. The difference is that nothing generates SoftwareApplication. A site declares it because somebody decided to.

Two limits on this number, stated rather than buried. The run read home pages only, so a vendor that declares the type on a product or pricing page is counted here as declaring nothing, and this blog has already shown that [pricing pages carry markup the home page does not](https://lantad.co/blog/can-ai-read-my-pricing-page-17-of-93). And the count covers nodes at the top level of a block or inside an @graph, not nodes nested inside another node's property, so an application declared inside an Organization owns value or inside a Review itemReviewed value is outside the 77. Both choices make 57 a floor rather than an estimate.

## What does SoftwareApplication schema require?

Three things, and the third is a choice of two. Google's software app documentation, carrying Last updated 2026-09-08 UTC when it was read for this post, lists name as the name of the app, offers.price as an offer to sell the app, and then a row headed Rating or review which says in its own words that you must include one of the following properties: aggregateRating or review. The page is unusually direct about the free case, instructing that if the app is available without payment, set offers.price to 0. So a free product has no excuse for an absent price: zero is the published answer.

applicationCategory and operatingSystem sit under recommended properties on the same page, and applicationCategory comes with a constraint most implementations ignore. The documentation prints a list of 22 supported app types, from GameApplication and BusinessApplication through to ReferenceApplication, and says the value must be a supported app type. operatingSystem is free text, illustrated with Windows 7, OSX 10.6 and Android 1.6. The page also notes that Google supports the MobileApplication and WebApplication subtypes, and that a node typed only VideoGame gets no rich result unless it is co-typed with another type.

[schema.org's own definition](https://schema.org/SoftwareApplication) is much wider than Google's slice, which is the usual pattern and the reason this distinction keeps mattering for anyone writing markup for [answer engines](https://lantad.co/glossary/aeo) rather than for a search result. It defines softwareVersion, softwareRequirements, featureList, releaseNotes, installUrl, applicationSuite, permissions and memoryRequirements, none of which Google asks for and several of which answer the question a person actually types. Google is specifying a visual result; schema.org is specifying a description of a thing. A crawler building an entity from the page reads the second one.

That gap is where the required set earns its place. name tells a machine what the product is called. offers.price tells it what the product costs, which is the single most asked commercial question and the hardest to lift from prose. A rating or a review tells it what other people concluded. Those three are the minimum facts a buyer wants, which is presumably why the documentation picked them, and they are the three the corpus is worst at. Presence here means present and non-empty, not correct: this run checked whether a property existed, not whether its value was true, and nothing in it can tell a real rating from an invented one.

## The optional properties were filled in and the required ones were not

This is the finding, and it is the opposite of what a cost based explanation would predict. If sites skipped properties because properties are work, the two recommended ones would be the casualties. Instead 76 of the 77 nodes carried applicationCategory and 75 carried operatingSystem, while 37 carried no offers object at all and 63 carried no rating and no review. 72 of the 77 nodes carried at least one recommended property while missing at least one required one.

The ordering explains itself once you look at what each property costs its author. applicationCategory and operatingSystem are constants. A developer types BusinessApplication and Web once and never touches them again. offers.price changes with every pricing revision and belongs to a different team, and aggregateRating requires either a review system or a defensible number from somewhere else. The properties that survive are the ones nobody has to maintain, which is a general law of structured data and the reason [313 of 615 pages gave no node an @id](https://lantad.co/blog/structured-data-313-of-615-gave-no-node-an-id) in an earlier run: the field that needs a decision is the field that stays empty.

The middle of the funnel is sharper than the ends. 40 of the 77 nodes declared an offers object, and 13 of those 40 declared an offers object with no price inside it. Those thirteen sat on carecycle.ai, adonis.io, alvys.com, navix.io, sedai.io, usehatchapp.com, spekit.com, predoc.ai, busy.in, datadoghq.com, livechat.com, sevdesk.de and zendesk.com, several of which are large and well staffed. The author reached for the construct, built the wrapper, and left out the one property inside it that the documentation requires. An empty Offer is a worse signal than no Offer, because a machine reading it finds a commercial node that declines to state a commercial fact.

Of the 27 nodes that did carry a price, 20 set it to 0, which is exactly what the documentation tells a free product to do. The other seven were asteroid.ai at 300 USD, littlebird.ai at 15 USD, anrok.com at 100 USD, tobira.ai with four tiers at 49, 169, 399 and 799 USD, intercom.com with 29 USD on one node and 0.99 USD on another, and predictap.com, which set price to the string Contact for pricing with priceCurrency USD beside it. That last one is the shape of the problem in one field: a price property holding a sentence that says there is no price. A [structured data](https://lantad.co/glossary/structured-data) consumer parsing that value as a number gets nothing, and a consumer parsing it as text learns only that it must ask a salesperson.

## What the category and operating system values actually said

A property being present is not the same as a property being usable, so the values are worth reading rather than counting. 76 nodes declared applicationCategory across 16 distinct strings, and 63 of the 76 used one of the 22 types Google's list permits. BusinessApplication accounted for 43 of them and DeveloperApplication for 12, with FinanceApplication on three, EducationalApplication on two and one each for UtilitiesApplication, SecurityApplication and HealthApplication. The whole software industry in this corpus describes itself with seven of the 22 available words.

The 13 off list values are more interesting than the compliant ones. Two nodes said ProductivityApplication and two said ProjectManagementApplication, both of which read like the list and are not on it. Two said News. Two set the value to the string https://schema.org/Application, which is a URL where a category name should be. The remainder were AccountingSoftware, Database Management, Productivity, Educação and, on fattureincloud.it, the string SAAS: software di fatturazione online, which is a marketing line rather than a category. None of those is wrong as English. All of them fail the one documented constraint on the field, and a consumer matching against the published enumeration drops them.

operatingSystem is looser and the values show it: 29 distinct strings across 75 nodes. 24 nodes said exactly Web. Then 13 said Web, Android, iOS and eight said Web, iOS, Android, which are the same three platforms in two orders and will be counted as two different values by anything comparing strings. 52 of the 75 name the web, written as Web, Web-based or Web Browser inside longer lists, and five more name only the cloud, as Cloud, Cloud-based, cloud or Cloud, Self-hosted. Two nodes wrote ANDROID and IOS in capitals, one wrote Any, and one wrote BIOS, UEFI (x86_64, arm64), which is netboot.xyz and is accurate. Google's examples use OS names and versions, so none of this is prohibited, and none of it is comparable either.

One value deserves defending rather than criticising. fattureincloud.it declared an [AggregateRating](https://schema.org/AggregateRating) with ratingValue 8.2, which looks wrong against the five point scale everyone assumes, and is not: the same node declared bestRating 10 and worstRating 0, so the number is coherent and self describing. A consumer that reads ratingValue and ignores bestRating turns an 8.2 out of 10 into an 8.2 out of 5. That is a reading error rather than a markup error, and it is the sort of thing a scanner has to get right before it tells anybody their [entity signals](https://lantad.co/glossary/entity-confidence) are weak.

## Which kinds of site declared it, and which declared none

The type is concentrated almost entirely in software. 21 of the 117 readable SaaS home pages declared it, 12 of 36 in the SaaS marketing stratum and 13 of 44 in the single page app startup stratum, which is 46 of the 57 hosts from three strata holding 197 of the 1,074 pages. Three more came from the static documentation stratum, three from Webflow, two from news, and one each from finance, Framer and the no code stratum.

The zeroes are the other half of the story. Not one of the 64 ecommerce home pages declared the type, nor any of the 102 education, 95 healthcare, 85 government, 78 travel, 54 Wix and Squarespace, 36 WordPress, 34 Shopify or 30 local media pages read that day. Some of those are correct: a hospital does not sell software and should not claim to. Others are not. A government department running a public filing service, a university running a learning platform and a bank running a mobile app all ship software a person can be told about, and all of them described it in prose only.

Platform explains part of it and intent explains more. The SaaS stratum carried JSON-LD at a high rate overall, 92 of its 117 pages, so the 21 are a minority of a well marked up group rather than the only ones with any markup at all. The Webflow stratum carried JSON-LD on 19 of 42 pages and produced three app nodes; the static documentation stratum carried it on only eight of 31 and still produced three. Hand built sites declare this type when the people building them care about it, which is the same conclusion an earlier run reached about [whether sixteen schema types reach ten million domains](https://lantad.co/blog/sixteen-schema-types-reach-ten-million-domains): adoption tracks what a platform generates, except where a human decides otherwise.

Multiple declarations are common among the 57 and no two sites handled them alike. mekari.com declared 13 SoftwareApplication nodes on its home page, one for each product from Mekari Talenta to Mekari Payroll Service, which is a defensible reading of a multi product company. atlassian.com declared four, naming Jira, Confluence, Trello and Bitbucket. intercom.com declared three, two of them priced. yle.fi and eltiempo.com each declared the same name twice, and fattureincloud.it declared the same product twice with two different applicationCategory values, BusinessApplication in one block and the Italian marketing sentence in another. A crawler reconciling those two nodes has to decide which one the company meant, and nothing on the page tells it.

## What to check on your own site

The practical reading of this is narrow and worth stating without inflation. Declaring SoftwareApplication does not get a product named in an answer, and nothing in this run measures citation. What it does is remove the ambiguity about what the page is describing, and the corpus shows that most of the pages reaching for it stop short of the three facts a buyer asks for. Checking your own is a five minute job.

Start with whether the node exists in the bytes a crawler receives rather than in the rendered page, because a node injected by script after load is a node some readers never see: only two of nine crawler operators [document whether their crawler executes JavaScript at all](https://lantad.co/blog/do-ai-crawlers-render-javascript-two-of-nine). Fetch the page the way an [AI crawler](https://lantad.co/glossary/ai-crawler) does, with no browser, and look for the block. The [GPTBot view tool](https://lantad.co/tools/what-gptbot-sees) renders exactly that, and [robots.txt needs checking first](https://lantad.co/tools/robots-txt-tester) because a file that closes the root makes every question about markup academic.

Then check the three required properties against what your pricing actually is. If the product is free, write offers.price as 0, because the documentation names that case explicitly and an absent price reads the same as a hidden one. If pricing is genuinely bespoke, leaving offers out is more honest than filling price with a sentence, as predictap.com did. If you publish ratings anywhere, connect them: [33 of 615 pages declared a rating](https://lantad.co/blog/review-schema-33-of-615-declared-a-rating) in an earlier run, so this is the scarcest of the three everywhere, not just here.

Last, make the node agree with itself and with the rest of the page. One applicationCategory per product, taken from Google's list of 22 if the rich result matters to you. One operatingSystem string, in one order, kept the same across your pages. A url, which 63 of the 77 nodes declared and 14 left out, and then the care an earlier run found missing when [44 of 433 declared logo URLs returned no image](https://lantad.co/blog/organization-schema-logo-44-of-433-returned-no-image). How Lantad reads all of this is set out in the [methodology](https://lantad.co/methodology), the corpus runs are collected under [research](https://lantad.co/research), and the platform specific fixes live in the [Next.js guide](https://lantad.co/fix/nextjs) and its siblings. If you want the answer side rather than the markup side, the [getting cited in ChatGPT](https://lantad.co/how-to-get-cited/chatgpt) and [Google AI Overviews](https://lantad.co/how-to-get-cited/google-ai-overviews) pages cover what the engines do with it, and this run says nothing about that: it counted what the pages declared, on one day, from one network location, with no JavaScript executed and no claim about what any engine did next.

## Questions and answers

**What does SoftwareApplication schema require?**

Three properties. Google's software app documentation, last updated 2026-09-08 UTC, requires name, offers.price, and one of aggregateRating or review. applicationCategory and operatingSystem are recommended rather than required, and applicationCategory must come from a published list of 22 supported app types. If the product is free the documentation instructs you to set offers.price to 0 rather than omitting it.

**How many sites use SoftwareApplication schema?**

On this corpus, 57 of 1,074 readable home pages, which is 5.3 percent. Lantad asked all 1,419 hostnames in its two committed corpus seed files for robots.txt on 12 October 2026 and read every permitted home page once with no JavaScript executed. Those 57 hosts declared 77 nodes between them, and 46 of the 57 came from the SaaS, SaaS marketing and single page app strata.

**Is applicationCategory required for SoftwareApplication?**

No. It sits under recommended properties in Google's documentation, which is why the corpus result is worth knowing: 76 of 77 nodes declared it while only 27 declared the required offers.price. The recommended field is a constant an author sets once, and the required one changes whenever pricing does, which is the likeliest reason the optional property is the better maintained of the two.

**Does SoftwareApplication schema help a product get cited by AI?**

This measurement cannot say, and no honest reading of it should claim otherwise. It counted what 1,074 home pages declared on 12 October 2026 and tested no engine, so it reports markup rather than outcomes. What it does establish is that most nodes stop short of stating a price or a rating, so a crawler building an entity from one of them learns the product's name and little else.

---

Lantad measures whether AI crawlers can actually read a page: it fetches as a non-rendering
crawler, renders as a browser, and reports the gap. Free scan, one URL, no signup.

Method and weights: https://lantad.co/methodology | All pages as markdown: https://lantad.co/md | Crawler policy: https://lantad.co/bot
