{"description":"Searches the Booktopia Australia book store like its search page: title, link, first author, binding format, price in AUD (sale price when there is one) for the first results page (about 64 products). Returns an empty list when nothing matches.","effect":"read","id":"booktopia.com.au/search-books","keywords":["booktopia","books","book","bookstore","australia","fiction","cookbook","crime fiction","novel","paperback","hardcover","audiobook","bücher","buch"],"output":{"schema":{"properties":{"products":{"items":{"properties":{"author":{"type":["string","null"]},"format":{"description":"Binding, e.g. Paperback, Hardcover","type":["string","null"]},"price_aud":{"description":"Sale price when shown, otherwise the retail price, in Australian dollars","type":["number","null"]},"title":{"type":"string"},"url":{"type":"string"}},"required":["title","url"],"type":"object"},"type":"array"},"query":{"type":"string"}},"required":["query","products"],"type":"object"},"value":"{query: params.query, products: steps.search.products[?displayName != `null` && productUrl != `null`].{title: displayName, url: join('', ['https://www.booktopia.com.au/', productUrl]), author: contributors[0].name || `null`, format: bindingFormat || `null`, price_aud: (salePrice || retailPrice) || `null`}}"},"params":{"additionalProperties":false,"properties":{"query":{"description":"Author, title, subject or ISBN, e.g. 'Tim Winton', 'cookbook', 'crime fiction'","maxLength":100,"minLength":2,"type":"string"}},"required":["query"],"type":"object"},"provenance":{"method":"har","notes":"GET /search?keyword=…: the page's __NEXT_DATA__ JSON holds the product list (displayName, contributors, bindingFormat, salePrice, retailPrice, productUrl relative to the site root). The product cards in the HTML carry the same links. Author and series match sections are not read; only the product list.","recorded_at":"2026-11-08T16:36:13.000Z","recorded_by":"wield-forge (claude-haiku agent)"},"requires_login":false,"schema":"https://wield.run/schema/recipe/v1.json","site":{"country":"AU","id":"booktopia.com.au","language":"en","name":"Booktopia","origin":"https://www.booktopia.com.au","origins":["https://www.booktopia.com.au"]},"steps":[{"description":"Search results page /search?keyword=…, read-only GET. The page embeds the product list in __NEXT_DATA__ (searchData.pagination.products), with productUrl relative to the site root, so the fields come from that JSON.","expect":{"assert":"status == `200` && contains(body, '__NEXT_DATA__')","content_type":"html","status":[200]},"extract":{"embedded_json":{"required":true,"selector":"script#__NEXT_DATA__","vars":{"products":"props.pageProps.searchData.pagination.products"}}},"id":"search","request":{"headers":{"Accept":"text/html"},"method":"GET","query":{"keyword":"{{params.query}}"},"url":"/search"}}],"task":"Search books on Booktopia","tos":{"notes":"Not reviewed. One search page per call, the same page a visitor loads. The site's terms on automated access were not checked.","reviewed":false},"verify":{"checks":["length(output.products) > `0`","length(output.products[?starts_with(url, 'https://www.booktopia.com.au/')]) == length(output.products)","length(output.products[?title != `null`]) == length(output.products)"],"example_params":{"query":"Tim Winton"},"max_ms":5000},"version":1}