Sign inTry it

Search Hugendubel for books, eBooks and audiobooks.

Searches Hugendubel, the German bookseller, like its search page: title, author, format (hardcover, paperback, eBook, audiobook, …), price in euros, availability ('Sofort lieferbar'), number of customer ratings, cover image and link. First page of results.

No reports yetRead-only, no login
Site
Hugendubel, Germany
Version
v1
Runs, last 7 days
No reports yet
sha256
6eb33c23c68e…

Run it with your agent

after installing Wield

Ask in plain words. Your agent finds this recipe and calls it:

“Search Hugendubel for books, eBooks and audiobooks.”

Read-only: it changes nothing on the site. No login needed.

{
  "tool": "run",
  "arguments": {
    "recipe_id": "hugendubel.de/search-books",
    "params": {
      "query": "dune"
    }
  }
}

Requests

sent from your browser, in order
  1. 1GET/de/search?qThe search results page (server-rendered result list). Recommendation carousels on the same page use other classes and are not read.

Parameters

from your agent
querystringrequiredTitle, author or ISBN, e.g. 'dune', 'sebastian fitzek', '9783453317178'

Returns

to your agent
booksobject[]author, availability, format, image, price_eur, ratings_count, title, url
querystring

Where it can send

  • www.hugendubel.de

Anything else is blocked by the extension.

Reads from your session

Nothing. Your browser attaches the site's cookies by itself.

Used only in requests to the addresses on the left. Never sent to wield.run or your agent.

Checks

a run passes when
  • length(output.books) > `5`
  • length(output.books[?price_eur > `0`]) > `5`
  • length(output.books[?contains(title, 'Wüstenplanet') || contains(title, 'Dune')]) > `3`
  • length(output.books[?starts_with(url, 'https://www.hugendubel.de/de/')]) == length(output.books)

Raw recipe

Served as canonical JSON from /api/v1/recipes/hugendubel.de/search-books, so its sha256 matches the ETag and the index.

Check it yourself
curl -s https://wield.run/api/v1/recipes/hugendubel.de/search-books | shasum -a 256
# 6eb33c23c68e861bd3dadd62fd34385c510dd7c6f8e6d7727352f6b2934f5572
hugendubel.de/search-books.json, v1
{
  "description": "Searches Hugendubel, the German bookseller, like its search page: title, author, format (hardcover, paperback, eBook, audiobook, …), price in euros, availability ('Sofort lieferbar'), number of customer ratings, cover image and link. First page of results.",
  "effect": "read",
  "id": "hugendubel.de/search-books",
  "keywords": [
    "hugendubel",
    "buch",
    "bücher",
    "ebook",
    "hörbuch",
    "taschenbuch",
    "roman",
    "kaufen",
    "buchhandlung",
    "books",
    "bookstore",
    "audiobook",
    "germany"
  ],
  "output": {
    "schema": {
      "properties": {
        "books": {
          "items": {
            "properties": {
              "author": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "availability": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "format": {
                "description": "e.g. 'Taschenbuch', 'Buch (gebunden)', 'eBook epub', 'Hörbuch-Download'",
                "type": [
                  "string",
                  "null"
                ]
              },
              "image": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "price_eur": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "ratings_count": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "title": {
                "type": "string"
              },
              "url": {
                "type": "string"
              }
            },
            "type": "object"
          },
          "type": "array"
        },
        "query": {
          "type": "string"
        }
      },
      "required": [
        "query",
        "books"
      ],
      "type": "object"
    },
    "value": "{query: params.query, books: steps.search.items[?title != `null` && href != `null`].{title: title, author: author || `null`, format: format || `null`, price_eur: price && to_number(replace(replace(replace(replace(replace(replace(price, '€', ''), '*', ''), ' ', ''), ' ', ''), '.', ''), ',', '.')) || `null`, availability: availability || `null`, ratings_count: ratings && to_number(replace(ratings, '.', '')) || `null`, image: image && (starts_with(image, '/') && join('', ['https://www.hugendubel.de', image]) || image) || `null`, url: join('', ['https://www.hugendubel.de', href])}}"
  },
  "params": {
    "additionalProperties": false,
    "properties": {
      "query": {
        "description": "Title, author or ISBN, e.g. 'dune', 'sebastian fitzek', '9783453317178'",
        "maxLength": 120,
        "minLength": 2,
        "type": "string"
      }
    },
    "required": [
      "query"
    ],
    "type": "object"
  },
  "provenance": {
    "method": "browser-inspect",
    "notes": "GET /de/search?q=…: server-rendered .search-item blocks (.title, .author, .item-type, .item-price '14,00 €*', .availability, .rating-value = number of ratings; the star value is drawn as icons, so it is not returned). The first .search-item can be an editorial banner without a title; it is skipped. Recommendation carousels use .article-item and are not read. No paging links are rendered server-side, so only the first page is returned. robots.txt has no AI-agent rules. Answers servers.",
    "recorded_at": "2026-11-07T22:31:00+01:00",
    "recorded_by": "C4"
  },
  "requires_login": false,
  "schema": "https://wield.run/schema/recipe/v1.json",
  "site": {
    "country": "DE",
    "id": "hugendubel.de",
    "language": "de",
    "name": "Hugendubel",
    "origin": "https://www.hugendubel.de",
    "origins": [
      "https://www.hugendubel.de"
    ]
  },
  "steps": [
    {
      "description": "The search results page (server-rendered result list). Recommendation carousels on the same page use other classes and are not read.",
      "expect": {
        "content_type": "html",
        "status": [
          200
        ]
      },
      "extract": {
        "html_items": {
          "items": {
            "fields": {
              "author": {
                "selector": ".author"
              },
              "availability": {
                "selector": ".availability"
              },
              "format": {
                "selector": ".item-type"
              },
              "href": {
                "attr": "href",
                "selector": "a[href*='produkt-details']"
              },
              "image": {
                "attr": "src",
                "selector": "img"
              },
              "price": {
                "selector": ".item-price"
              },
              "ratings": {
                "selector": ".rating-value"
              },
              "title": {
                "selector": ".title"
              }
            },
            "max": 40,
            "selector": ".search-item:not(.search-item-filter)"
          }
        }
      },
      "id": "search",
      "request": {
        "headers": {
          "Accept": "text/html"
        },
        "method": "GET",
        "query": {
          "q": "{{params.query}}"
        },
        "url": "/de/search"
      }
    }
  ],
  "task": "Search Hugendubel for books, eBooks and audiobooks",
  "tos": {
    "notes": "One search page per call, the same page a visitor sees; no basket, no account.",
    "reviewed": false
  },
  "verify": {
    "checks": [
      "length(output.books) > `5`",
      "length(output.books[?price_eur > `0`]) > `5`",
      "length(output.books[?contains(title, 'Wüstenplanet') || contains(title, 'Dune')]) > `3`",
      "length(output.books[?starts_with(url, 'https://www.hugendubel.de/de/')]) == length(output.books)"
    ],
    "example_params": {
      "query": "dune"
    },
    "max_ms": 5000
  },
  "version": 1
}