Scrape Sandbox API: Get first catalog products
Lists the 20 products on the first Books to Scrape catalog page, with each product's detail page link, full title, displayed price and stock status.
Unofficial. Not affiliated with or endorsed by Scrape Sandbox.
Inputs
This method takes no input.
Input as JSON
{}Output
{ "products": [ { "name": "A Light in the Attic", "product_url": "https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html" , "availability": "In stock", "published_price": "£51.77" }, { "name": "Tipping the Velvet", "product_url": "https://books.toscrape.com/catalogue/tipping-the-velvet_999/index.html" , "availability": "In stock", "published_price": "£53.74" }, { "name": "Soumission", "product_url": "https://books.toscrape.com/catalogue/soumission_998/index.html" , "availability": "In stock", "published_price": "£50.10" } ]}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"books.toscrape.com/get_first_catalog_products","input":{}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "books.toscrape.com/get_first_catalog_products" , "input": {}})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "books.toscrape.com/get_first_catalog_products" , "input": {} }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run books.toscrape.com/get_first_catalog_products# with {}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [], "properties": {}}Output schema
{ "type": "object", "required": [ "products" ], "properties": { "products": { "type": "array", "items": { "type": "object", "required": [ "product_url", "name", "published_price", "availability" ], "properties": { "name": { "type": "string", "description": "Complete product title from its catalog listing." }, "product_url": { "type": "string", "description": "Absolute URL of the book's detail page." }, "availability": { "type": "string", "description": "Displayed stock status without extra whitespace." }, "published_price": { "type": "string", "description": "Price exactly as displayed, including currency symbol." } }, "additionalProperties": false }, "description": "The 20 products displayed on the first catalog page, in page order." } }, "additionalProperties": false}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
books.toscrape.com/get_first_catalog_products- Returns
- products: name, product_url, published_price, availability
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method books.toscrape.com/get_first_catalog_products; it needs no input.
Ask your agent
- Can you pull up the first page of books from the Books to Scrape catalog with each title, price, and whether it's in stock?
- I need a list of the 20 books on page one: full names, their detail page URLs, listed prices, and availability.
- Show me the opening batch of books on toscrape.com with their product links and whether each one is available.
- What are the first twenty titles in the book catalog, and how much does each one cost right now?
- Grab the initial listing of books, including each product URL and its stock status, so I can compare prices.
See more
Lists publicly published products from a Shopify store in catalogue or collection order, with variant prices and availability, optionally filtered by name words or an exact collection name.
shop.app/list_store_productsSearches Amazon products in a chosen country store, with price range, sort, Prime and page options. Returns the listings and prices shown to an anonymous shopper in the store's currency.
amazon.com/search_productsGets a public Shopify product by its product page link, or by the closest name match within a store. Stores that restrict public product access cannot be read.
shop.app/get_store_productGets details for an Amazon product, found by name or by link, in a chosen country store. Offer prices, delivery and variants may be missing when Amazon does not show them publicly.
amazon.com/get_productGets one Alibaba wholesale offer from a product link, or from a product name plus supplier name.
alibaba.com/get_productSearches Argos UK products by keyword in the selected sort order, returning prices, ratings and links. Delivery and collection availability appear only when shown on the site.
argos.co.uk/search_productsGets current Apple Store prices and the configurations on sale for a product in one country. It includes only models sold on that country's public store.
apple.com/get_product_pricesGets a book's catalog details from Open Library by its title, with an optional author or ISBN to identify the right book. Reading availability reflects listed editions; details may be missing when the catalog has none.
openlibrary.org/get_book