Menü

Preisreferenz

Das Verzeichnis Lieferbarer Bücher (VLB) ist die allgemein gültige Referenzdatenbank für die gebundenen Ladenpreise aller lieferbaren deutschen Bücher. Das ist seit Juni 2011 in der Verkehrsordnung für den Buchhandel des Börsenvereins des Deutschen Buchhandels geregelt, die um eine entsprechende Bestimmung erweitert wurde.

Mit der Änderung der Verkehrsordnung sind die von den Verlagen im VLB angegebenen Preise die allgemein gültigen.

Mit dem Preisreferenzexport stellen wir Ihnen somit immer die Preise zur Verfügung, die nach den Regeln der Buchpreisbindung verbindlich sind.

Inhalt und Format

Preisangaben

Folgende Inhalte finden sich in der VLB-Preisreferenz.

Enthaltene Datensätze

Titel die neu im VLB sind (INSERT)

lieferbare und vergriffene Titel mit einer Preiskorrektur am EUR-DE, EUR-AT oder CHF (UPDATE)

aus dem VLB gelöschte Titel (DELETE)

Enthaltene Länder / Währungen

Deutschland (EUR-DE)

Österreich (EUR-AT)

Schweiz (CHF)

Enthaltene Preisarten (jeweils gebunden und ungebunden) sind:

Subskriptionspreise

Ladenpreise, bei denen es sich nicht um Subskriptionspreise handelt

Sonderpreise, wie z.B. reduzierte Preise mit zusätzlicher Abnahmeverpflichtung

Die konkreten Preistypen finden Sie in der Spezifikation der Felder.

Dateiaufbau

Die VLB-Preisreferenz wird im XML-Format im UTF-8 Zeichensatz bereitgestellt.

Die VLB-Preisreferenz teilt sich aufgrund unterschiedlicher Nachnutzungsszenarien, aber auch aufgrund seines Umfangs in die zwei nachfolgenden Teilbereiche auf:

  1. aktive Titel: Vorankündigungen, lieferbare Produkte etc.
  2. archivierte Titel: Vergriffen-Meldungen, vom Kauf zurückgezogen etc.

Da Händler teilweise nur Interesse an lieferbaren Produkten haben, stellt das VLB den Gesamtabzug sowie die Tagesupdates der VLB-Preisreferenz getrennt nach aktiven und archivierten Titeln zur Verfügung.

Preisreferenz-Feed für aktive Titel

Action=INSERT

  • Erstmeldungen an das VLB: umfasst ausschließlich Vorankündigungen (noch nicht lieferbar) oder lieferbare Titel, da die Erstmeldung von archivierten Titeln an das VLB unzulässig ist
  • ein Titel, der mit Action DELETE gekennzeichnet war und anschließend erneut an das VLB gemeldet wird, entspricht einer Erstmeldung und wird somit erneut mit Action INSERT gekennzeichnet

Action=UPDATE (Preisänderung)

  • Aktualisierungen aktiver Titel
  • Archivierungsmeldung: Änderung der Lieferbarkeit von aktiv zu archiviert (Titel ist nicht mehr verfügbar, vgl. betreffende ONIX-Codes)
  • Reaktivierung: Änderung der Lieferbarkeit von archiviert zu aktiv (Titel ist wieder verfügbar)

Action=DELETE (Produktlöschung)

  • enthält alle Löschungen für aktive und inaktive Produkte
  • umfasst Titel, die aus dem VLB und der Plattform des Datenempfängers gelöscht werden müssen

Preisreferenz-Feed für archivierte Titel

Action=UPDATE (Preisänderung)

  • Aktualisierungen archivierter Titel
  • Archivierungsmeldung: Änderung der Lieferbarkeit von aktiv zu archiviert (Titel ist nicht mehr verfügbar, vgl. betreffende ONIX-Codes)
  • Reaktivierung. Änderung der Lieferbarkeit von archiviert zu aktiv (Titel ist wieder verfügbar)

Bitte beachten Sie:

  • Seit Januar 2018 werden Produkte mit dem Lieferbarkeitsstatus Cancelled (j396=01) mit der Action UPDATE gekennzeichnet.
  • Die Action DELETE kennzeichnet ausschließlich Produkte, die aus außerordentlichen Gründen (z.B. rechtlicher Natur) aus dem VLB entfernt werden müssen. Diese Titel dürfen anschließend auch nicht mehr in Plattformen von VLB-Datenabnehmern zur Anzeige gebracht werden.
  • Archivierungen und Reaktivierungen werden immer redundant im aktiven und archivierten Bestand gemeldet, damit Händler, die nur einen der beiden Bestände verarbeiten über die Zustandsänderung in Kenntnis gesetzt werden.

Spezifikation der Felder

Informationen zu einzelnen Produkten bzw. Datensätzen sind jeweils in product-Elementen abgelegt. Sämtliche Datensätze sind im Root-Knoten (products) gekapselt.

<products> 
 <product>...</product> 
 <product>...</product> 
 ...
</products>

Der einzelne Datensatz (product) ist in drei Bereiche unterteilt. Diese finden sich direkt auf der Elementebene unter dem product-Element.

  1. Elemente zu allgemeinen Titelinformationen, wie ausgeführte Aktion, ISBN-13, VLB Record ID, Datum der letzten Preiskorrektur
  2. Informationen zur Preisbindung EUR-DE und EUR-AT
  3. Preisangabe für D-A-CH-Preise eines Produktes

Titelinformationen

Element WH Beschreibung
action 1

auf dem Produkt ausgeführte Aktion

  • INSERT (erster bekannter Preis für ein Produkt)
  • UPDATE (Preisänderung)
  • DELETE (Produktlöschung)
isbn 0..1

ISBN-13

  • wenn Produkt ISBN-13 besitzt
ean 0..1

GTIN-13

  • wenn Produkt keine ISBN-13 besitzt

vlb_record_id

1

VLB-Record-ID

  • vom VLB vergebene eindeutige 32-stellige ID

receiving_updates

1

Gibt an, ob ein Produkt im VLB noch Updates erhält

  • TRUE (VLB erhält Updates und ist somit Preisreferenz für dieses Produkt)
  • FALSE (VLB erhält keine Updates mehr. Informationen zum aktuellen Ladenpreis müssen anderweitig beschafft werden)
is_digital 1

Produkt ist digital (abhängig von Produktform)

  • TRUE
  • FALSE
productform 1

kodierte Produktform

title 1 Produkttitel ohne Untertitel

Nachfolgend wird gezeigt, wie generelle Titelinformationen in einem Datensatz der Preisreferenz eingebettet sind.

XML

<product>

  <action>UPDATE</action>

  <isbn>9783958433915</isbn>

  <vlb_record_id>4cb283803f534041841ea7a740d36039</vlb_record_id>

  <receiving_updates>TRUE</receiving_updates>

  <is_digital>FALSE</is_digital>

  <productform>BB</productform>

  <title>IncrediBuilds: Dobby der Hauself</title>

  ...

</product>

Preisbindung

Element WH Beschreibung
fixed_retailprice 1 Composite, das Informationen zur Preisbindung für EUR-DE und EUR-AT beinhaltet
fixedprice_de 0..1

Produkt besitzt gebundenen Ladenpreis für EUR-DE

  • TRUE
  • FALSE
price_de_effective_until 0..1

Datum der Ladenpreisaufhebung EUR-DE

  • existiert nicht für EUR-AT, da es in Österreich keine Ladenpreisaufhebung gibt
fixedprice_at 0..1

Produkt besitzt gebundenen Ladenpreis für EUR-AT

  • TRUE
  • FALSE
last_price_mod 1 Datum der letzten Preiskorrektur an mindestestens einem der DACH-Preise

Das nachfolgende Beispiel zeigt, woran erkannt wird, dass EUR-DE und EUR-AT der Ladenpreisbindung unterliegen. Zusätzlich wird für EUR-DE das Datum der Ladenpreisaufhebung bekannt gemacht.

XML

<product>

  ...

  <fixed_retailprice>

    <fixedprice_de>TRUE</fixedprice_de>

    <price_de_effective_until>20231224</price_de_effective_until>

    <fixedprice_at>TRUE</fixedprice_at>

  </fixed_retailprice>

  <last_price_mod>20220505</last_price_mod>

  ...

 </product>

Preisangabe

Element WH Beschreibung
price 1..n

Composite, das alle Angaben zu einer Preisangabe kapselt

  • Preis, der in einem Land zu einem Zeitpunkt gültig ist
market 1

Länderkennzeichen (nur für die D-A-CH Währungen)

  • DE
  • AT
  • CH
pricetype 1

Preistyp

  • 10 gebundener Ladenpreis
  • 20 unverbindlicher Ladenpreis (UVP)
  • 11 gebundener Subskriptionspreis
  • 21 unverbindlicher Subskriptionspreis
  • 31 gebundener Sonderpreis bei Abnahme des Gesamtwerks
  • 41 unverbindlicher Sonderpreis bei Abnahme des Gesamtwerks
  • 32 gebundener Mengenpreis (erfordert das no_of_pieces)
  • 42 unverbindlicher Mengenpreis (erfordert no_of_pieces)
  • 33 gebundener Mitgliedspreis
  • 43 unverbindlicher Mitgliedspreis
  • 34 gebundener sonst. Sonderpreis (erfordert pricetext)
  • 44 unverbindlicher sonst. Sonderpreis (erfordert pricetext)
no_of_pieces 0..1

Mindestbestellmenge

  • bei pricetype 32 und 42 > 1
pricetext 0..1

Preistext

  • nur bei Sonderpreisen
price_effective_from 0..1

gültig-ab-Datum

  • JJJJMMTT
price_effective_until 0..1

gültig-bis-Datum

  • JJJJMMTT
is_calculated 1

Preis wurde vom VLB errechnet

  • TRUE
  • FALSE
is_provisional 1

vorläufige ungefähre Preisangabe (ca.-Preis)

  • TRUE
  • FALSE
amount 1

Betrag

  • Brutto-Preis
currency 1

Währung

  • EUR
  • CHF

Das nachfolgende Beispiel zeigt für EUR-DE einen gebundenen Ladenpreis, auf den ein unverbindlicher Ladenpreis folgt (Ladenpreisaufhebung). Der Betrag bleibt im Beispiel unverändert, kann aber auch geändert werden.

XML

<product>

  ...

  <price>

    <market>DE</market>

    <pricetype>10</pricetype>

    <no_of_pieces>1</no_of_pieces>

    <price_effective_until>20190306</price_effective_until>

    <is_calculated>FALSE</is_calculated>

    <is_provisional>FALSE</is_provisional>

    <amount>9.99</amount>

    <currency>EUR</currency>

    <tax_component>

  ...

    </tax_component>

  </price>

  <price>

    <market>DE</market>

    <pricetype>20</pricetype>

    <no_of_pieces>1</no_of_pieces>

    <price_effective_from>20190307</price_effective_from>

    <is_calculated>FALSE</is_calculated>

    <is_provisional>FALSE</is_provisional>

    <amount>9.99</amount>

    <currency>EUR</currency>

    <tax_component>

  ...

    </tax_component>

  </price>

</product>

Mehrwertsteuer

Die Mehrwertsteuerangabe wird für jeden Preis im tax_component-Composite angegeben. Sprich in einer Preisangabe gibt es genau ein tax_component.

Für Produkte mit Mehrwertsteuer-Splitting (Bundle) wird das tax_component pro Bestandteil angegeben. Folglich enthält eine Preisangabe in diesen Produkten mehrere tax_component-Composites.

Element WH Beschreibung
tax_component 1..n

Composite, das alle Steuerinformationen des Produktes kapselt

  • bei Produkten mit MwSt-Splitting (Bundle) Angabe pro enthaltenes Teilprodukt
component_id_gtin 0..1
  • Nicht-Bundle: identisch zu isbn oder ean
  • Bundle: ISBN-13, oder GTIN-13 des Teilproduktes
component_id_prop 0..1
  • Bundle: proprietäre ID des Teilproduktes (falls keine GTIN-13 oder ISBN-13 existiert)
component_title 1
  • Nicht-Bundle: identisch zu title
  • Bundle: Titel des Teilproduktes (falls Teilprodukt separat im VLB gemeldet)
component_productform 1
  • Nicht-Bundle: identisch zu productform
  • Bundle: Produktform des Teilprodukts
percent 1 MwSt.-Satz in Prozent
.type 1 Produkttyp
  • physisches Produkt=1
  • elektronische Dienstleistung=2
share 1
  • Nicht-Bundle: identisch zu amount
  • Bundle: Brutto-Preis des Teilproduktes
taxable_amount 0..1
  • Nicht-Bundle: wird nicht angegeben
  • Bundle: Netto-Preis des Teilproduktes
tax_amount 0..1
  • Bundle: Steuerbetrag des Teilproduktes
  • Nicht-Bundle: wird nicht angegeben

Für Produkte ohne Mehrwertsteuer-Splitting (Nicht-Bundle) wird die Mehrwertsteuer wie folgt angegeben.

XML

<product>

  ...

  <price>

    ...

    <tax_component>

      <percent>7.00</percent>

      <type>1</type>

    </tax_component>

  </price>

</product>

Für mehrteilige Produkte mit Mehrwertsteuer-Splitting (Bundle) finden Sie ausführliche Beispiele in den nachfolgenden Anwendungsfällen.

XML

<product>

...

<price>

...

    <tax_component>

      <component_id_gtin>9783958433915</component_id_gtin>

      <component_productform>BB</component_productform>

      <component_title>IncrediBuilds: Dobby der Hauself</component_title>

      <percent>7.00</percent>

      <type>1</type>

      <share>9.99</share>

</tax_component>

</price>

</product>


Rückruf

Wenn bei einem Titel ein Rückruf vorhanden ist, wird dies als <recall> ausgegeben.

ElementWHBeschreibung
recall_date0..1Das vom Verlag angegebene Datum
recall_type0..n

Die Bedingungen für die Rücksendung:

  • 01: Rückrufgenehmigung erforderlich
  • 02: Rechnungsdatum erforderlich
  • 03: Rechnungsnummer erforderlich
  • 04: Vereinfachte Remission möglich
recall_text0..1Freitext für den Verlag. Hier können weitere Details, Bedingungen oder Hinweise stehen.

Hier ein Beispiel, wie ein recall-composite im Preisreferenz-Feed aufgebaut ist:

XML

<recall>
    <recall_date>20240101</recall_date>
    <recall_type>03</recall_type>
    <recall_text>Lorem Ipsum</recall_text>
</recall>

Typische Anwendungsfälle

Zukünftige Preise

Wenn für ein Land ein Preis angegeben wurde, der erst zu einem gewissen Datum in Kraft tritt, ist für dieses Land der aktuelle sowie der zukünftige Preis im Preisreferenz-Datensatz zum Zeitpunkt der Preisbekanntmachung zu finden. Die Gültigkeitsdauer der Preise wird mittels price_effective_from und price_effective_until definiert.

XML

...

<price>

  <market>DE</market>

  <pricetype>10</pricetype>

  <!-- gültig bis Datum - bisheriger Preis -->

  <price_effective_until>20201015</price_effective_until>
  <is_calculated>FALSE</is_calculated>

  <is_provisional>FALSE</is_provisional>

  <amount>9.80</amount>

  <currency>EUR</currency>

  <tax_component>

  ...

  </tax_component>

</price>

<price>

  <market>DE</market>

  <pricetype>10</pricetype>

  <!-- gültig ab Datum - zukünftiger Preis -->

  <price_effective_from>20201016</price_effective_from>
  <is_calculated>FALSE</is_calculated>

  <is_provisional>FALSE</is_provisional>

  <amount>10.80</amount>

  <currency>EUR</currency>

  <tax_component>

  ...

  </tax_component>

</price

...

Bitte beachten Sie: An dem Tag, an dem der zukünftige Preis gültig wird, wird das Produkt erneut in der Preisreferenz sein. Zu diesem Zeitpunkt wird nur der gültige Preis darin zu finden sein, insofern keine weiteren zukünftigen Preise bekannt gemacht wurden.

Änderung am aktuellen Preis

Dieser Fall tritt ein, wenn wie im letzten Absatz beschrieben, ein zuvor gemeldeter zukünftiger Preis sein gültig-ab-Datum erreicht.

Des Weiteren kann es sich um Korrekturen fälschlich eingetragener Preise handeln. Dies ist kein Regelfall, da er gegen die Empfehlungen zu Vorlaufzeiten für Preisänderungen verstößt.

In diesen Fällen wird lediglich der Preis ohne die Angabe zukünftiger Preise im Datensatz ausgegeben, insofern keine weiteren zukünftigen Preise bekannt gemacht wurden.

XML

...

<price>

  <market>DE</market>

  <pricetype>20</pricetype>

  <is_calculated>FALSE</is_calculated>

  <is_provisional>FALSE</is_provisional>

  <amount>9.80</amount>

  <currency>EUR</currency>

  <tax_component>

  ...

  </tax_component>

</price>

...

Ladenpreisaufhebung

In jedem Datensatz ist festgehalten, ob für das Produkt in Deutschland (fixedprice_de) bzw. in Österreich (fixedprice_at) aktuell eine Ladenpreisbindung besteht.

Des Weiteren wird ausgewiesen, wenn das Produkt zu einem feststehendem Termin von der deutschen Ladenpreisbindung befreit werden soll (price_de_effective_until). Die Aufhebung der Ladenpreisbindung ist immer mit der Umstellung von einem gebundenem zu einem ungebundenem Ladenpreis (UVP-Preis) verbunden.

XML

...

<fixed_retailprice>

  <fixedprice_de>TRUE</fixedprice_de>

  <price_de_effective_until>20201016</price_de_effective_until>

</fixed_retailprice>

...

<price>

  <market>DE</market>

  <pricetype>10</pricetype>

  <!-- gültig bis Datum – bisheriger Preis -->

  <price_effective_until>20201015</price_effective_until>
  ...

</price>

<price>

  <market>DE</market>

  <pricetype>20</pricetype>

  <!-- gültig ab Datum zukünftiger Preis -->

  <price_effective_from>20201016</price_effective_from>
  ...

</price>

...

Bundle mit MwSt-Splitting

Für mehrteilige Produkte wird neben der Angabe zum Paketpreis immer Auskunft zu den enthaltenen Teilprodukten gegeben. Hierfür wird im price das Element tax_component für jedes enthaltene Teilprodukt angegeben. Zu beachten ist, dass für zweiteilige Bundles proprietäre IDs als Identifier der Teilprodukte component_id_prop angegeben werden können. Dies ist in mehrteiligen Bundles nicht möglich, da hier immer eine GTIN component_id_gtin angegeben sein muss

Beispiel: zweiteiliges Bundle mit proprietären IIDs

XML

...

<price>

  <market>DE</market>

  <pricetype>10</pricetype>

  <no_of_pieces>1</no_of_pieces>

  <is_calculated>FALSE</is_calculated>

  <is_provisional>FALSE</is_provisional>

  <!-- Summe von <share> der Teilprodukte -->

  <amount>22.99</amount>
  <!-- 1. Bestandteil des Bundles -->

  <currency>EUR</currency>

  <tax_component>
    <component_id_prop>9783765781322-1</component_id_prop>

    <component_productform>BC</component_productform>

    <component_title>gedrucktes Buch im zweiteiligem Bundle</component_title>

    <percent>7.00</percent>

    <type>1</type>

    <share>18.39</share>

<taxable_amount>17.19</taxable_amount>

    <tax_amount>1.2</tax_amount>

  </tax_component>

  <!-- 2. Bestandteil des Bundles -->

  <tax_component>
    <component_id_prop>9783765781322-2</component_id_prop>

    <component_productform>DG</component_productform>

    <component_title>E-Book im zweiteiligem Bundle</component_title>

    <percent>19.00</percent>

    <type>2</type>

    <share>4.60</share>

    <taxable_amount>3.87</taxable_amount>

    <tax_amount>0.73</tax_amount>

  </tax_component>

</price>

...

Beispiel: mehrteiliges Bundle

XML

...

<price>

  <market>DE</market>

  <pricetype>10</pricetype>

  <no_of_pieces>1</no_of_pieces>

  <is_calculated>FALSE</is_calculated>

  <is_provisional>FALSE</is_provisional>

  <!-- Summe von <share> der Teilprodukte -->

  <amount>32.99</amount>
  <currency>EUR</currency>

  <!-- 1. Bestandteil des Bundles -->

  <tax_component>
    <component_id_gtin>9783765781322</component_id_gtin>

    <component_productform>BC</component_productform>

    <component_title>gedrucktes Buch</component_title>

    <percent>7.00</percent>

    <type>1</type>

    <share>18.39</share>

<taxable_amount>17.19</taxable_amount>

    <tax_amount>1.2</tax_amount>

  </tax_component>

  <!-- 2. Bestandteil des Bundles -->

  <tax_component>
    <component_id_gtin>9783765780998<component_id_gtin>

    <component_productform>DG</component_productform>

    <component_title>E-Book</component_title>

    <percent>19.00</percent>

    <type>2</type>

    <share>4.60</share>

    <taxable_amount>3.87</taxable_amount>

    <tax_amount>0.73</tax_amount>

  </tax_component>

  <!-- 3. Bestandteil des Bundles -->

  <tax_component>
    <component_id_gtin>9783765782015<component_id_gtin>

    <component_productform>DH</component_productform>

    <component_title>Online-Zugang</component_title>

    <percent>19.00</percent>

    <type>2</type>

    <share>10.00</share>

    <taxable_amount>8.40</taxable_amount>

    <tax_amount>1.60</tax_amount>

  </tax_component>

</price>

...

Produkte ohne Preisangabe

Produkte ohne Preisangabe erhalten im price-Knoten nur die Angabe des Marktes und ein sogenannten unpriced_item_type.

ElementWH

Beschreibung

market

1Länderkennzeichen (nur für die D-A-CH-Region)
unpriced_item_type1Grund für die nicht vorhandene Preisangabe
  • 01 Produkt ist kostenlos
  • 02 Preis steht noch nicht fest
  • 03 Wird nicht einzeln verkauft
  • 04 Bitte wenden Sie sich an den Verlag
  • 05 Wird nicht im Set verkauft

Das folgende Beispiel zeigt ein kostenloses Produkt in allen drei DACH-Märkten

XML

<product>

...

  <price>

    <market>AT</market>

    <unpriced_item_type>01</unpriced_item_type>

  </price>

  <price>

    <market>DE</market>

    <unpriced_item_type>01</unpriced_item_type>

  <price>

    <market>CH</market>

    <unpriced_item_type>01</unpriced_item_type>

  </price>

...

</product>

Bereitstellung auf FTP-Server

Das VLB stellt einmal im Vierteljahr einen Preisrefenz-Export aller im VLB vorhandenen Produkte bereit. Dieser steht jeweils zu Beginn der Monate Februar, Mai, August und November eines Jahres bereit. Ein Gesamtabzug dient der Erstbefüllung Ihrer Datenbank. Auch kann der Gesamtabzug genutzt werden, um ein Recovery in Ihrer Anwendung zu ermöglichen.

Täglich von Montag bis Sonntag (inkl. Feiertage) werden alle Neuzugänge, Updates und Löschungen in zusätzlichen Tagesupdates zur Verfügung gestellt. Nach Erstbefüllung Ihrer Datenbank ist es nur noch notwendig, die Tagesupdates einzuspielen. Da Tagesupdates unter Umständen sehr umfangreich sein können, bietet das VLB die Tagesexporte auch in gesplitteten Teilpaketen an. Wie Sie zwischen gesplitteten und vollständigen Feeds unterscheiden, entnehmen Sie bitte der Übersicht in der folgenden Tabelle.

Bitte beachten Sie:

  • Titel, die archiviert bzw. reaktiviert wurden, sind in den Tagesupdates für archivierte und aktive Titel enthalten.
  • Tagesupdates enthalten sämtliche eingegangenen Änderungen ab Erstellung des Tagesupdates vom Vortag und bis zur Erstellung des aktuellen Tagesupdates.

Die nachfolgende Tabelle zeigt, wo Sie die jeweiligen Daten-Feeds auf dem VLB-FTP-Server finden können. Wie Sie auf diesen zugreifen, erfahren Sie hier:

Nach der vollständigen Erstellung einer ZIP-Datei wird im zugehörigen FTP-Verzeichnis eine Kontrolldatei mit dem Namensmuster yyyymmdd.ok erzeugt. Diese Datei signalisiert, dass der Datentransfer abgeschlossen ist. Solange diese Kontrolldatei fehlt, ist von einem Download der ZIP-Datei abzusehen.

Aktive Titel

Archivierte Titel

War das hilfreich?

Danke für die Rückmeldung