Skip to content

Recipe Schema

The Recipe schema is designed for aggregating recipes from food blogs and cooking websites.

FieldTypeRequiredIdentityDescription
titlestringYesYes (1)Recipe name
sourcestringYesYes (2)Website or blog name
urlstringNoNoLink to the full recipe
ingredientsstring[]NoNoList of ingredients
stepsstring[]NoNoCooking instructions
prep_timestringNoNoPreparation time
cook_timestringNoNoCooking time
servingsstringNoNoNumber of servings
image_urlstringNoNoRecipe image URL

The identity is computed from title + source in that order. This ensures the same recipe from the same blog is deduplicated, while allowing different versions of classic recipes from different sources.

{
"title": "Classic Carbonara",
"source": "Serious Eats",
"url": "https://seriouseats.com/carbonara-recipe",
"ingredients": [
"400g spaghetti",
"200g guanciale",
"4 egg yolks",
"100g Pecorino Romano",
"Black pepper"
],
"steps": [
"Bring a large pot of salted water to boil",
"Cut guanciale into small strips",
"Cook guanciale until crispy",
"..."
],
"prep_time": "15 minutes",
"cook_time": "20 minutes",
"servings": "4",
"image_url": "https://seriouseats.com/images/carbonara.jpg"
}
  • Recipe collection apps
  • Meal planning tools
  • Cooking websites
  • Food blog aggregators
{
"container": ".recipe-card",
"fields": {
"title": {
"selector": "h1.recipe-title",
"type": "text"
},
"source": {
"selector": ".blog-name",
"type": "text"
},
"url": {
"selector": "a.recipe-link",
"type": "attribute",
"attribute": "href"
},
"ingredients": {
"selector": ".ingredient-list li",
"type": "text",
"multiple": true
},
"steps": {
"selector": ".instructions-list li",
"type": "text",
"multiple": true
},
"prep_time": {
"selector": ".prep-time",
"type": "text"
},
"cook_time": {
"selector": ".cook-time",
"type": "text"
},
"image_url": {
"selector": "img.recipe-image",
"type": "attribute",
"attribute": "src"
}
}
}