entity.json

Anything that can be found: a product, a category, a guide, a brand or an entity of the merchant's own type.

Every type shares this shape; a type's capabilities decide which of the type-specific fields it may use.

type

The entity's type, such as product.

id

The merchant's id, unique per type.

title

The name shoppers see. A plain string is in the source's locale.

url

The merchant's own URL for the entity. OrbSearch never generates one when the merchant supplies it.

description

A plain value, or a map from locale to value such as { "de": "Farbe", "en": "Color" }.

image

The main image's URL.

images

Further image URLs.

keywords

Extra search terms from the merchant.

categories

The categories the entity sits in. The first is primary for breadcrumbs unless one is marked primary.

A category the entity sits in: its id, or an object with the id, the position in that category and whether it is the primary category.

idstring

The id of a category node, such as wohnen/sofas: the merchant's id of a category entity.

positioninteger

The starting order within the category; rules override it.

primaryboolean

attributes

The merchant's data, as the source sends it; the attribute definitions say what each value means.

relations

Links to other entities, interpreted by the relation definitions.

tostring

The merchant's id of an entity, unique per type, such as SOFA-LUND-3. It travels unchanged; OrbSearch never rewrites it.

signals

Numbers and dates for ranking that shoppers never see, such as sales_30d or released_at.

brand

Products: the brand's name or id; the brand relation resolves it to a brand entity.

varies_by

Products: the attributes the variants differ by, such as ["color", "size"].

variants

Products: the buyable variations, one level deep. A product without variants has one implicit variant with the product's id.

A buyable variation of a product. Its axis values, the attributes named in the product's varies_by, are unique within the product.

idstringRequired

The merchant's id of an entity, unique per type, such as SOFA-LUND-3. It travels unchanged; OrbSearch never rewrites it.

titlestring or map of strings

A plain value, or a map from locale to value such as { "de": "Farbe", "en": "Color" }.

urlstring or map of strings

A plain value, or a map from locale to value such as { "de": "Farbe", "en": "Color" }.

imagestring
imagesarray of strings
attributesmap of values
offersarray of objects

Price and availability per channel.

Price and availability of a variant, or of an entity without variants, in one channel.

8 fields
channelstringRequired

A channel's id, such as de or ch: a market or storefront.

pricenumber

The reduced price, valid within sale_window if one is given.

A window in time: from from (inclusive) until until (exclusive). Either end may be open.

2 fields
fromstring

A point in time as RFC 3339 with an offset, such as 2026-11-27T00:00:00+01:00.

untilstring

A point in time as RFC 3339 with an offset, such as 2026-11-27T00:00:00+01:00.

currencystring

An ISO 4217 currency code, such as EUR.

One of in_stock, out_of_stock, preorder or backorder.

stockinteger

How many days delivery takes, from the earliest to the latest.

2 fields
minintegerRequired
maxintegerRequired
pricenumber

The reduced price, valid within sale_window if one is given.

A window in time: from from (inclusive) until until (exclusive). Either end may be open.

2 fields
fromstring

A point in time as RFC 3339 with an offset, such as 2026-11-27T00:00:00+01:00.

untilstring

A point in time as RFC 3339 with an offset, such as 2026-11-27T00:00:00+01:00.

currencystring

An ISO 4217 currency code, such as EUR.

One of in_stock, out_of_stock, preorder or backorder.

stockinteger

How many days delivery takes, from the earliest to the latest.

2 fields
minintegerRequired
maxintegerRequired

offers

Types with offers but without variants, such as services: price and availability per channel.

Price and availability of a variant, or of an entity without variants, in one channel.

channelstringRequired

A channel's id, such as de or ch: a market or storefront.

pricenumber

The reduced price, valid within sale_window if one is given.

A window in time: from from (inclusive) until until (exclusive). Either end may be open.

2 fields
fromstring

A point in time as RFC 3339 with an offset, such as 2026-11-27T00:00:00+01:00.

untilstring

A point in time as RFC 3339 with an offset, such as 2026-11-27T00:00:00+01:00.

currencystring

An ISO 4217 currency code, such as EUR.

One of in_stock, out_of_stock, preorder or backorder.

stockinteger

How many days delivery takes, from the earliest to the latest.

2 fields
minintegerRequired
maxintegerRequired

price

sale_price

The reduced price, valid within sale_window if one is given.

sale_window

A window in time: from from (inclusive) until until (exclusive). Either end may be open.

fromstring

A point in time as RFC 3339 with an offset, such as 2026-11-27T00:00:00+01:00.

untilstring

A point in time as RFC 3339 with an offset, such as 2026-11-27T00:00:00+01:00.

currency

An ISO 4217 currency code, such as EUR.

availability

One of in_stock, out_of_stock, preorder or backorder.

stock

delivery_days

How many days delivery takes, from the earliest to the latest.

minintegerRequired
maxintegerRequired

parent

Categories: the parent node; a node without a parent is a root.

path

Categories: the merchant's URL path per locale.

channels

Categories: the channels the node exists in. Without it, the node exists in every channel.

body

Content: the full text.

kind

Content: what kind of content it is, such as guide or banner.

Brands: the logo's URL.

aliases

Brands: other spellings of the brand's name, such as Robert Bosch GmbH.

Example

tests/fixtures/home/catalog.jsonl (one line)
{
  "type": "product",
  "id": "SOFA-ASKA-2",
  "title": {
    "de": "Aska 2-Sitzer-Sofa aus Samt",
    "en": "Aska two-seater velvet sofa"
  },
  "url": { "de": "/p/aska-2-sitzer-sofa", "en": "/en/p/aska-two-seater-sofa" },
  "description": {
    "de": "Kompaktes Sofa für kleine Wohnzimmer, mit Samtbezug und schmalen Armlehnen.",
    "en": "A compact sofa for small living rooms, with a velvet cover and slim arms."
  },
  "image": "https://images.example/home/sofa-aska-2.jpg",
  "brand": "Halvard",
  "categories": ["wohnen/sofas"],
  "attributes": {
    "seats": 2,
    "width": "164 cm",
    "depth": "86 cm",
    "height": "78 cm",
    "seat_height": "45 cm",
    "upholstery": "Samt",
    "material": ["Holzwerkstoff", "Samt"],
    "style": "modern",
    "room": ["Wohnzimmer"]
  },
  "varies_by": ["color"],
  "variants": [
    {
      "id": "SOFA-ASKA-2-GRAU",
      "attributes": { "color": "Grau" },
      "price": 749,
      "currency": "EUR",
      "availability": "in_stock",
      "stock": 12,
      "delivery_days": { "min": 3, "max": 5 }
    },
    {
      "id": "SOFA-ASKA-2-SALBEI",
      "attributes": { "color": "Salbei" },
      "price": 749,
      "sale_price": 649,
      "currency": "EUR",
      "availability": "in_stock",
      "stock": 4,
      "delivery_days": { "min": 3, "max": 5 }
    }
  ],
  "signals": {
    "sales_30d": 61,
    "rating": 4.3,
    "rating_count": 118,
    "released_at": "2025-09-01"
  }
}

Guide: OrbSearch JSON Lines

On this page