Index of every page on this site: llms.txt
TypeScript
Schema

SoftwareApplication Schema - JSON-LD Guide & Examples

SoftwareApplication schema describes a software product with its features, pricing, ratings, and platform compatibility. Supported markup can make an app page eligible for a Google software app rich result.

JSON-LD Example

{
  "@context": "https://schema.org",
  "@type": "SoftwareApplication",
  "name": "Photo Editor Pro",
  "operatingSystem": "Windows, macOS",
  "applicationCategory": "DesignApplication",
  "offers": {
    "@type": "Offer",
    "price": "9.99",
    "priceCurrency": "USD"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.7",
    "ratingCount": 1250
  }
}
Use the Schema.org Generator to build your structured data visually.

Schema.org SoftwareApp

  • Type: defineSoftwareApp<T extends Record<string, any>>(input?: SoftwareApp & T)
    Describes a SoftwareApp.

Defaults and resolves

  • @type defaults to SoftwareApplication; a different supported string type is augmented with SoftwareApplication.
  • A root app receives an ID such as ${canonicalUrl}#/schema/software-application/{n}.
  • offers, aggregateRating, and review are resolved with their corresponding nested resolvers.

The input type requires name, offers, and either aggregateRating or review. Each Offer requires a direct price or a price specification. A free app still needs offers.price: 0; Unhead performs no runtime eligibility validation. See Google's SoftwareApplication property table.

Example

defineSoftwareApp({
  name: 'Angry Birds',
  operatingSystem: 'ANDROID',
  applicationCategory: 'GameApplication',
  aggregateRating: {
    ratingValue: '4.6',
    ratingCount: 8864,
  },
  offers: {
    price: '1.00',
    priceCurrency: 'USD',
  },
})

Types

type ApplicationCategory
  = 'GameApplication'
    | 'SocialNetworkingApplication'
    | 'TravelApplication'
    | 'ShoppingApplication'
    | 'SportsApplication'
    | 'LifestyleApplication'
    | 'BusinessApplication'
    | 'DesignApplication'
    | 'DeveloperApplication'
    | 'DriverApplication'
    | 'EducationalApplication'
    | 'HealthApplication'
    | 'FinanceApplication'
    | 'SecurityApplication'
    | 'BrowserApplication'
    | 'CommunicationApplication'
    | 'DesktopEnhancementApplication'
    | 'EntertainmentApplication'
    | 'MultimediaApplication'
    | 'HomeApplication'
    | 'UtilitiesApplication'
    | 'ReferenceApplication'

interface SoftwareAppBase extends Thing {
  '@type'?: Arrayable<'SoftwareApplication' | 'MobileApplication' | 'VideoGame' | 'WebApplication'>
  /**
   * The name of the app.
   */
  'name': string
  /**
   * An offer to sell the app.
   * For developers, offers can indicate the marketplaces that carry the application.
   * For marketplaces, use offers to indicate the price of the app for a specific app instance.
   */
  'offers': NodeRelations<Offer>
  /**
   * The type of app (for example, BusinessApplication or GameApplication). The value must be a supported app type.
   */
  'applicationCategory'?: ApplicationCategory
  /**
   * The operating system(s) required to use the app (for example, Windows 7, OSX 10.6, Android 1.6)
   */
  'operatingSystem'?: string
  /**
   * A description of the app.
   */
  'description'?: string
  /**
   * URL to download the app.
   */
  'downloadUrl'?: string
  /**
   * The version of the app.
   */
  'softwareVersion'?: string
  /**
   * A list of features offered by the app.
   */
  'featureList'?: string[]
}

type SoftwareAppRating
  = | {
    aggregateRating: NodeRelation<AggregateRating>
    review?: NodeRelation<Review>
  }
  | {
    aggregateRating?: NodeRelation<AggregateRating>
    review: NodeRelation<Review>
  }

export type SoftwareAppSimple = SoftwareAppBase & SoftwareAppRating
Did this page help you?