Sign in
Tip from
Latest news

Affiliate program technical description

Here you will find information on how to integrate the affiliate program on your website in your own design.
Please direct any questions/comments to

What is the affiliate program ?
Your profit
  • You profit from extremely fast response times
  • You profit fromthe possibility to search more than 200 mio. titles.
  • You profit from high commission rates.
  • You can freely manage all readable results and add additional results as well.
What do you have to do ?
  • To show results on your website, you must write a program, that requestas our data in XML or CSV formst.
  • The programming is not more complicated than searching for books on your own website (if you are already doing that).
    Overall this programming is not really elaborate.
  • We provide all programers many tips and source codes (written in PHP) that should significantly facilitate the integration of our search mechanism.
    Please direct all enquiries to
  • Furhter below is a simple and a bit more complicated example,that you can download freely. This way you can integrate search easily on your website. These examples can also easily be modified and adapted to your layout and functionality.
How does it work ?
  • You request a username and password for our affiliate program.
  • You test this by calling an URL (see below).
  • Your programmer reads this information and adapts the implementation according to your instructions.
  • Ready.

Please direct all technical questions to

Information for your programer
We use the following terms:
  • Affiliate-website: website from our affiliate, that is your website or the site you want to integrate the search features.
  • Book platforms: are websites that provide with their data to search for (i.e. Amazon, Antbo, Booklooker, Abebooks etc.)
  • User: is the user of the affiliate-website, that for example is searching for a book and types in the data on your website
What do I have to do ?

The only central location is the following URL:<Your Username>&
password=<Your Password>&author=<Autor>&title=<Titel>

If you use this URL in a browser (you will receive username and password from us) and as an example use "Holl" and "Jesus" as search parameters or leave the fields blank, then you will see for example the following results (the rectangular brackets are part of the parameters and will not be contained in the URL!):

<?xml version="1.0" encoding="ISO-8859-1" ?>
  <!DOCTYPE ResultList (View Source for full doctype...)>
- <ResultList id="23291123">
  <Book id="16048251" author="Holl, Adolf" title="Jesus in schlechter Gesellschaft" comment="Wien : Buchgemeinschaft Donauland; Stuttgart : Europ. Bildungsgemeinschaft; [1972]; 21 cm; 215 S.; Aufl.: Lizenzausgabe; Leinen, Schutzumschlag, gut;" year="1972" price="8.00" currency="EUR" priceeur="8.00" country="A" dealer="SFB1050" url="" platform="" />
  <Book id="16048253" author="Holl, Adolf" title="Jesus in schlechter Gesellschaft. (Was Menschen bewegt)." comment="190 S. 21,5 cm. Gebunden. 318gr. Kreuz," isbn="3783118166" price="7.45" currency="EUR" priceeur="7.45" country="D" dealer="Laetare Büchermarkt" url="" picurl="" hardcover="1" platform="" />
  <Book id="16048254" author="Holl, Adolf" title="Jesus in schlechter Gesellschaft" comment="Name auf Vorsatz, sehr guter Zustand #e5Leinen, Deutsche Verlags-Anstalt, 1971," year="1971" price="5.00" currency="EUR" priceeur="5.00" country="D" dealer="Bücher-Bezzel" url="" platform="" />

Here you see an XML-rendering (more about XML-format here of search results for author "Holl" and title "Jesus" found by If you don't have any experience with XML-formats, then don't be confused by all information provided by, it is definitely not so complicated as it may appear at first sight. If you use PHP as programming language, then you can use the integrated XML-parser to read our XML-rendering. Other programming languages (Perl, Phyton, ASP etc.) also have integrated XML-parsers, that can save you a of of work transmit the data that we provide as the corresponding variables. The rendering is in ISO-8859-1 (West Europe, latin1) format. With "&format=xml8" you can have the data displayed in the international format UTF-8. In this case also the transmitted data (author, title, …) has to be coded in UTF-8 format! If you don't feel confident with the XML-format (which we nevertheless recommend), you can also call-up the data in CSV format, by indicating at the end instead of "&format=xml" simply "&format=csv". That will look something like this (line breaks with preceding blank spaces have been added for better reading):

16079133 ~||~ Holl, Adolf ~||~ Jesus in schlechter Gesellschaft ~||~
 Wien : Buchgemeinschaft Donauland; Stuttgart :  Europ. Bildungsgemeinschaft;
 [1972]; 21 cm; 215 S.; Aufl.: Lizenzausgabe; Leinen, Schutzumschlag, gut; ~||~ ~||~
 1972 ~||~ 8.00 ~||~ EUR ~||~ 8.00 ~||~ A ~||~ SFB1050 ~||~ ~||~ ~||~ ~||~ ~||~ ~||~ ~||~
16079134 ~||~ Holl, Adolf ~||~ Jesus in schlechter Gesellschaft. (Was Menschen bewegt). ~||~
 190 S. 21,5 cm. Gebunden. 318gr. Kreuz, ~||~ 3783118166 ~||~ 0 ~||~ 7.45 ~||~ EUR ~||~
 7.45 ~||~ D ~||~ Laetare Büchermarkt ~||~ ~||~ ~||~
 0 ~||~ 1 ~||~ 0 ~||~ 0 ~||~

Exactly the same data as with an XML-format will be transmitted, only that each book is included in a row and each field is separated by "~||~".

The following data is specified in the XML (or CSV) file:

  • id: is a unique book number in our database. This number is valid for about 3 hours, after that it is deleted from our databse.
  • author: Book author
  • title: Book title
  • comment: text comments about the book . These can be very long.
  • isbn: Book ISBN-number, can also be empty, then this attribute is not available.
  • year: year of publication
  • price: book price
  • currency: currency in which "price" is indicated.
  • priceeur: book price calclated in Euro. If the indicted currency is not "EUR" we will calculate the "priceeur" with the daily exchange rate. From some platforms we get the price for example in US$, and we calculate it in EUR. In this case th Euro-price is an "aprox."-price.
  • country: country in which the book is physically located. We provide country abreviation codes (i.e. "D" for Germany, "A" for Austria, etc.). This short codes are not always precise since some platforms do not transmit the code or don't know it.
  • dealer: seller's name. With some platforms this can be blank or contain the same name as the platform.
  • url:is the URL under which the book can be ordered or viewed in more detail (details).The link provided here is valid for aprox. 3 hours, then the corresponding book is deleted from our database and the link wilno longer work.
  • picurl: link to a preview picture (can also be blank or not available). The preview picture is usualy so small that it can be shown in the results list. The link usually does not forward to, but to a server of the platform the data is coming from.
  • paperback: yes/no-value (0=no, 1= yes), if a book is a paperback or not.
  • hardcover: yes/no-value (0=no, 1= yes), if a book is a hardcover or not.
  • signed: yes/no-value (0=no, 1= yes), if a book is a signed copy or not.
  • firstedition: yes/no-value (0=no, 1= yes), if a book is a first edition or not.
  • platform: name of the (book) platform we get the data from.

Please note that in the future we can expand both XML and/or CSV formats. Within the XML-format more attributes might be included, with the XML-format we might add errors at the end of the row. Your programs should be in a position to handle these, otherwise they might not work in the future.

"id" is a special case, transmitted in the first row of the CSV-format or as an attribute of "ResultList" in the XML-format. This transmitted ID denotes the unique search executed by that we define as "Such-ID".

What do I do with the data in CSV or XML-format ?

As a programmer please follow these steps:

  • You creata a search form that corresponds to our form (fields for author/title/keywords and ISBN). You can freely define the layout of the search form.
  • You link this search form to a results page.
  • On this page you call-up our URL (extquery.php) and transmit the parameters accroding to the values provided by the user.
  • You parse ur results and write them in a database (i.e. the free mySQL database). You note the "Such-ID", also in the database, so that you can go back to the results (i.e. when scrolling) without having to call-up again, but access the temporarily stored results in your database. You can display and sort these results any way you want.
  • After some time (no later than 3 hours) you delete the temporarily stored results.

Please note that you can't constantly call-up (extquery.php) for every page build, since it implies that you generate a new "Such-ID" (search-ID) and thus obtain completely new book-ids. We can also not guarantee that results will be identical every time you call-up extquery.php mostly regarding the order of results, since this depends among other things on the speed of the participating servers (and there are many, also those from the partner-platforms). You would also have a unrealistic perspective regarding order-clicks compared to the search rate,which would minimize the commissions we pay out. One call of extquery.php should correspond with one search on your site.

For the following problems we offer some solutions for the porgramming language PHP:

Parsing of results in XML-format

PHP has a build-in XML-parser (see

You can easily

function xml_startElement($parser, $name, $attrs)
	if($name=="RESULTLIST") {
		print "SUCH-ID: ".$attrs["ID"]."<br><hr>";
	} else if($name=="BOOK") {
		print "ID: ".$attrs["ID"]."<br>";
		print "Autor: ".$attrs["AUTHOR"]."<br>";
		print "Titel: ".$attrs["TITLE"]."<br>";
		print "<a href='".$attrs["URL"]."' target='_blank'>Bestellen</a><br><hr>";
function xml_endElement($parser, $name)
function parseURL($url) {
	if(!$fp) {
		return("Could not open $url");
	$xml_parser = xml_parser_create();
	xml_set_element_handler($xml_parser, "xml_startElement", "xml_endElement");
	while($data=fread($fp,4096)) {
		if (!xml_parse($xml_parser, $data,feof($fp))) {
		   $ret=sprintf("XML error: %s at line %d",

With this short program you can display results in a narrow list. With username/password "test" you can test this, for this user no commissions are paid.

In your case you should instead of "print" in "xml_startElement()" simply write the data in your database. As mentioned earlier, you should call-up "parseURL" only once per search, that is while scrolling you also remember the "SUCH-ID" (search-ID) and if this is already available, you read the results from your database, otherwise you call our API and write the results in your database.

If the parameters transmitted to extquery.php stem from values entered into the search form by an user, please don't forget to quote them ins an HTML-based format, that is. "".rawurlencode($author)."&title=".rawurlencode($title)."&...".

Sorting and page subdivision

If you don't have a database on your server or if you want to avoid the programming work to write results into a database but still want to have features such as sorting and page subdivision, extquery.php supports wherever possible. You can call-up extquery.php alternatively (after the first call with author/title, etc.) with the "Such-ID" (search-ID), and you will have the possibility to sort results and to limit them according to book title.<Ihr Username>
&password=<Ihr Passwort>&suchid=<Such-ID>&start=<Start>&end=<End>
  • Such-ID: enter here the rendered "Such-ID" (search-ID).
  • Start: Indicate the book number (starting with 1 in order), from which on you want to have results in XML or CSV-format.
  • End: Indicate the book number (the last number is no longer part of results) until which you want to obtain results in XML or CSV-format.
  • Order: if no value then results will be delivered as they com in. Other values are "author", "title" and "price". The sorting will take place according to these parameters.
What parameter are supported by extquery.php?
  • platform: your username.
  • password: your password.
  • author: searched author (or artist).
  • title: searched title.
  • search: full text.
  • isbn: ISBN- or EAN-number.
  • mediatype: 0 for books, 1 for music.
  • suchid: enter here the rendered "Such-ID" (search-ID).
  • start: Enter here the first book number from which you want to start receiving data in XML or CSV-format.
  • end: ENter here the last book number until which (the indicated number is not part of trasnmitted results) you want to receive data in XML or CSV-format.
  • order: if no value then results will be delivered as they com in. Other values are "author", "title" and "price". The sorting will take place according to these parameters.
  • clientip: Enter here the IP-address of the end-user (customer). If this is not indicated no results will be delivered. The character "-" causes the IP-address of the computer being used and the one from the end-user to be identical. However, please consider that to avoid massive requests the client-IP-address is decisive. If we always use the one from your server, this will result in a relativ small number of request to thus please always provide us with the end-user IP-address.
  • format: xml for XML-format in ISO-8859-1 characters, xml8 for XML-format in UTF-8 characters, csv for CSV-format (ISO-8859-1 characters.
Program example

This exemplary program consists of two PHP files, the search form (search.php) and the results page (result.php). To test the search functionality it you can call it up here. The source code is ready to be downloaded as a ZIP-archive (3KB).

The program we provide as an example comes without a database and supports the input of all search criteria as well as the page-based rendering of results and the sorting according to different criterea.

Asynchronous transmission

We transmit results as soon as we receive them from the book-platforms. That is, it could be that you receive a lot of results initially and then no more for some time before the data flow continues or eventually no more will be delivered.. Thus it would make sense for you to write the data into your database with one process and read it out with another one or at least to implement a waiting cue. You can implement this easily if you write the results in a very small HTML-FRAME or IFRAME , and the display of results in another frame.

Please also note that with this asynchronous transmission to your website results should be already be displayed the moment you receive them. Therefore you must consider the following:

  • The XML-parser must write the results either in a separate database or display them immediately.
  • Displays must be rendered with flush(); (in PHP, other programming languages have soemthing similar), so that they are forwarded immediately to the client- browser
  • Most browsers will only render tables once the corresponding code </table> has been completed. That is when a book is represented in a table then it makes sense to build an own table per row (per book) to complete this table.
Reference implementation

Please direct technical questions to