BBC Good Food APIbbcgoodfood.com ↗
Search BBC Good Food recipes, retrieve full ingredient lists, cooking instructions, nutrition data, and user reviews via a structured JSON API.
What is the BBC Good Food API?
The BBC Good Food API gives developers structured access to one of the UK's largest recipe databases across 3 endpoints. Use search_recipes to find dishes by keyword with pagination, get_recipe_details to pull full ingredient lists, step-by-step instructions, nutrition per serving, and author data for any recipe URL, and get_recipe_reviews to retrieve user comments, tips, and ratings by recipe ID.
curl -X GET 'https://api.parse.bot/scraper/abc12726-b22a-45d6-b521-13bf5ded8c33/search_recipes?page=1&query=lasagne' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace bbcgoodfood-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""BBC Good Food — search recipes, drill into details, read reviews."""
from parse_apis.bbc_good_food_api import BBCGoodFood, RecipeNotFound
client = BBCGoodFood()
# Search for recipes — limit caps total items fetched across pages.
for summary in client.recipes.search(query="lasagne", limit=5):
print(summary.title, summary.difficulty, summary.prep_time)
# Drill into one result for full details (ingredients, instructions, nutrition).
summary = client.recipes.search(query="chicken korma", limit=1).first()
if summary:
recipe = summary.details()
print(recipe.title, recipe.serves, recipe.difficulty)
for ing in recipe.ingredients[:3]:
print(ing.text, ing.quantity)
# Walk the recipe's reviews sub-resource.
for review in recipe.reviews.list(limit=3):
print(review.author, review.body[:60] if review.body else "")
# Typed error handling for a bad URL.
try:
bad = client.recipes.search(query="nonexistent-xyzzy-recipe", limit=1).first()
if bad:
bad.details()
except RecipeNotFound as exc:
print(f"Recipe gone: {exc.url}")
print("exercised: recipes.search / summary.details / recipe.reviews.list")
Full-text search over BBC Good Food recipes. Returns paginated recipe summaries including title, rating, difficulty, and prep time. The site does not expose total/page metadata for all queries.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination |
| queryrequired | string | Search keyword (e.g. 'lasagne', 'chicken korma') |
{
"type": "object",
"fields": {
"page": "integer or null - current page number",
"items": "array of recipe summary objects with id, title, url, description, rating, image, author, prep_time, difficulty",
"total": "integer or null - total number of results",
"page_count": "integer or null - total number of pages"
},
"sample": {
"data": {
"page": null,
"items": [
{
"id": "226624",
"url": "https://www.bbcgoodfood.com/recipes/creamy-courgette-lasagne",
"image": {
"alt": "Courgette lasagne",
"url": "https://images.immediate.co.uk/production/volatile/sites/30/2022/03/Creamy-courgette-lasagne-e63aa0c.jpg"
},
"title": "Creamy courgette lasagne",
"author": "Good Food team",
"rating": {
"ratingCount": 734,
"ratingValue": 4.6
},
"prep_time": "30 mins",
"difficulty": "Easy",
"description": "<p>Serve this quick, creamy courgette & ricotta lasagne</p>"
}
],
"total": null,
"page_count": null
},
"status": "success"
}
}About the BBC Good Food API
Recipe Search
The search_recipes endpoint accepts a query string (e.g. 'chicken korma' or 'lasagne') and an optional page integer for pagination. Each result in the items array includes a recipe id, title, url, description, rating, image, author, prep_time, and difficulty. The response also returns total result count and page_count so you can walk all pages programmatically.
Recipe Details
get_recipe_details takes a full BBC Good Food recipe URL and returns a detailed object. Notably, the times field exposes both preparation and cooking times in seconds, nutrition is an array of per-serving entries each with label, value, and unit, and authors is an array of contributor objects with name, bio, and url. The description field is returned as HTML. The serves field gives the stated yield as a string.
User Reviews
get_recipe_reviews accepts the numeric entity_id from either the id field in search_recipes results or the id field in get_recipe_details. Results are paginated at 20 reviews per page. Each review object in the reviews array includes id, type (distinguishing comments, tips, and questions), body, author, created timestamp, likes, and replies.
The BBC Good Food API is a managed, monitored endpoint for bbcgoodfood.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when bbcgoodfood.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official bbcgoodfood.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a recipe search tool filtered by difficulty and prep_time from search_recipes results
- Populate a meal-planning app with full ingredient lists and nutrition data from get_recipe_details
- Aggregate user tips and comments per dish using the type field in get_recipe_reviews
- Compare calorie and macro values across recipes using the nutrition array
- Attribute recipes correctly by pulling author name, bio, and URL from the authors array
- Power a cooking assistant that surfaces step-by-step instructions and serving sizes
- Track average ratings across a keyword category using the rating field in search_recipes
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.