Recipe Importers
OvenLovin supports multiple recipe import methods to make it easy to add recipes from any source. All importers extract recipe data, parse ingredients and instructions, and calculate confidence scores for quality validation.
URL Import
Import recipes directly from recipe websites that use Schema.org Recipe markup.
How It Works
The URL importer:
- Fetches the HTML from the provided URL
- Extracts Schema.org Recipe JSON-LD structured data
- Parses ingredients, instructions, nutrition, servings, and schema.org prep/cook durations
- Pulls the main image from schema.org Recipe
image, falling back toog:image - Copies that image into Vercel Blob when a blob token is configured
- Calculates confidence scores based on completeness
- If JSON-LD and HTML miss, extracts from page text with
RK_MODEL_EXTRACT(elseRK_MODEL_DEFAULT, elsedeepseek/deepseek-v4.1-flash). DeepSeek failures retryopenai/gpt-6-luna - Returns a validated recipe draft
Supported Sites
Any website that includes Schema.org Recipe JSON-LD markup, including:
- AllRecipes
- Food Network
- NYT Cooking
- Serious Eats
- Bon Appétit
- Most food blogs (WordPress, Wix, etc.)
Usage
Via MCP Tool
Via REST API
Programmatic (TypeScript)
What Gets Extracted
- Title and description
- Ingredients with quantities and units
- Instructions with step-by-step text
- Servings and yield
- Times (prep, cook, total)
- Nutrition (if available in JSON-LD)
- Main image (largest or first schema.org Recipe
image, elseog:image). Extra gallery photos are not saved on import; people can add more later. - Cuisine and course/category
- Author and attribution
- Method tags (detected from ingredients/steps)
Confidence Scoring
Each imported recipe receives confidence scores:
Score ranges:
0.9 - 1.0: Excellent (complete, well-structured)0.7 - 0.89: Good (minor gaps acceptable)0.5 - 0.69: Fair (review recommended)< 0.5: Poor (manual editing required)
Photo Import (OCR)
Extract recipes from photos of recipe cards, cookbook pages, or handwritten notes using optical character recognition.
How It Works
The photo importer:
- Accepts one or more images (JPEG, PNG, WebP, GIF, AVIF) as a file upload, Blob URL, or base64
- Stores the first photo in Vercel Blob as the recipe's single main image
- Sends all pages to a vision-capable AI Gateway model (default:
RK_MODEL_VISIONordeepseek/deepseek-v4.1-flash). DeepSeek failures retryopenai/gpt-6-luna - Extracts title, servings, times, ingredients (name, quantity, unit), steps, notes, and a visible source
- Classifies ingredients with the existing allergen catalog and lists
uncertainFieldswhen the photo is hard to read - Returns a draft for review (
saveomitted) or persists whensave=true
Usage
Via REST API
Preview (default - review before save):
Or send a Blob URL / base64:
Set save: true to persist immediately. The first photo is stored in Vercel Blob and is the recipe's only main image. The response lists uncertainFields when the photo is hard to read.
Programmatic (TypeScript)
Supported Image Types
- JPEG / JPG
- PNG
- WebP
Best Results
For optimal OCR quality:
- Lighting: Even, bright lighting without glare
- Focus: Clear, sharp image (not blurry)
- Angle: Flat, head-on perspective (avoid skew)
- Resolution: At least 1024x768 pixels
- Text size: Recipe text should be readable when zoomed in
- Handwriting: Print is better than cursive
OCR Limitations
- Accuracy: 85-95% for printed text, lower for handwriting
- Layout: Complex multi-column layouts may need manual review
- Languages: English recommended; other languages may have lower accuracy
- Quality: Confidence scores will reflect OCR uncertainty
Paste Import
Parse recipes from pasted plain text, including recipes copied from emails, PDFs, or screenshots.
How It Works
The paste importer:
- Accepts plain text input
- Sends to LLM (
RK_MODEL_DEFAULTordeepseek/deepseek-v4.1-flash) for parsing. DeepSeek failures retryopenai/gpt-6-luna - Identifies title, ingredients, instructions, and metadata
- Structures data into recipe format
- Returns draft with confidence scores
Usage
Via MCP Tool
Via REST API
Programmatic (TypeScript)
Supported Text Formats
The paste importer handles various formats:
- Structured (clearly labeled sections)
- Semi-structured (some headings)
- Unstructured (narrative format)
- Bullet points or numbered lists
- Mixed (ingredients as list, instructions as paragraphs)
Example Formats
Structured
Semi-Structured
Narrative
Confidence Scores
All importers calculate confidence scores to help you identify recipes that may need review.
Score Components
Quality Guidelines
| Overall Score | Recommendation | Action |
|---|---|---|
| 0.9 - 1.0 | Excellent | Ready to use |
| 0.7 - 0.89 | Good | Minor review recommended |
| 0.5 - 0.69 | Fair | Review and edit before use |
| < 0.5 | Poor | Requires manual editing |
Common Issues
Low Structure Score:
- Missing title
- No ingredients or instructions
- Malformed data
Low Ingredient Score:
- Few ingredients detected (< 3)
- No quantities or units
- Ambiguous ingredient names
Low Instruction Score:
- Few steps (< 2)
- Steps are too short or vague
- No cooking instructions detected
Low Metadata Score:
- Missing prep/cook times
- No servings specified
- No images available
Import failures
classifyImportFailure maps fetch/parse errors to 400. AI Gateway down is import_ai_unavailable (503), not from classify.
code | HTTP | When |
|---|---|---|
not_a_public_url | 400 | Private or loopback http(s) address |
import_blocked | 400 | Site blocked the importer |
import_page_private | 400 | Page is private or needs a sign-in |
import_page_gone | 400 | Page is gone |
import_not_a_recipe | 400 | No recipe found, including leftover AI_* errors that are not unavailable |
import_unsupported_site | 400 | Site is not supported |
import_ai_unavailable | 503 | Gateway / model down, overloaded, or rate-limited. Retry-After: 60 |
MCP: classified codes are JSON-RPC -32602. import_ai_unavailable is -32603.
Import Strategy
For best results, use importers in this order:
-
URL Import (highest quality)
- Use when recipe is on a website
- Most reliable and complete
-
Photo Import (good for physical media)
- Use for recipe cards, cookbooks
- Requires good lighting and focus
-
Paste Import (flexible fallback)
- Use for email recipes, PDFs, or OCR text
- Most forgiving of format variations
Next Steps
- Self-Hosting Guide - Set up API keys for importers
- Connect Your Agent - Use importers via MCP or REST API