Recipe Schema
The Recipe schema is designed for aggregating recipes from food blogs and cooking websites.
Fields
Section titled “Fields”| Field | Type | Required | Identity | Description |
|---|---|---|---|---|
title | string | Yes | Yes (1) | Recipe name |
source | string | Yes | Yes (2) | Website or blog name |
url | string | No | No | Link to the full recipe |
ingredients | string[] | No | No | List of ingredients |
steps | string[] | No | No | Cooking instructions |
prep_time | string | No | No | Preparation time |
cook_time | string | No | No | Cooking time |
servings | string | No | No | Number of servings |
image_url | string | No | No | Recipe image URL |
Identity Fields
Section titled “Identity Fields”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.
Example Item
Section titled “Example Item”{ "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"}Use Cases
Section titled “Use Cases”- Recipe collection apps
- Meal planning tools
- Cooking websites
- Food blog aggregators
Extractor Example
Section titled “Extractor Example”{ "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" } }}