# Epicurious Scraper | Recipes Ingredients and Ratings (`parseforge/epicurious-scraper`) Actor

Scrape full recipe data from Epicurious including ingredients, step instructions, cook times, servings, ratings, reviews, nutrition, and author info. Search by keyword, cuisine, or diet to build food databases, meal planners, recipe apps, or AI training datasets at scale.

- **URL**: https://apify.com/parseforge/epicurious-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** E-commerce, Marketing, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $19.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

![ParseForge Banner](https://github.com/ParseForge/apify-assets/blob/ad35ccc13ddd068b9d6cba33f323962e39aed5b2/banner.jpg?raw=true)

## 🍽 Epicurious Recipe Scraper

> 🚀 **Export Epicurious recipes to CSV, JSON, or Excel in seconds.** No API key, no login, no code required.

> 🕒 **Last updated:** 2026-05-22 · **📊 17 fields** per record · **37,000+ recipes** · **Global coverage**

Epicurious is one of the internet's most trusted recipe destinations, curated by the editors of Bon Appetit and Conde Nast with over 37,000 professionally tested recipes spanning every cuisine, dietary preference, and occasion. This actor scrapes recipes directly from Epicurious using structured data - delivering clean, structured records with ingredients, ratings, cook times, author credits, and more. No account or API access needed.

Data is extracted in real-time from Epicurious's own JSON-LD structured markup, ensuring accuracy and completeness for every recipe field.

**Coverage:** Pasta, chicken, vegetarian, vegan, gluten-free, holiday meals, weeknight dinners, quick meals, slow-cooked recipes, and every category Epicurious supports - searched by any keyword.

| 🎯 Target Audience | 💡 Primary Use Cases |
|---|---|
| Food bloggers, nutrition researchers, meal planning apps, AI and ML teams, grocery and retail, content marketers | Competitor analysis and trend research, large-scale ingredient datasets, recipe database population, training data for recommendation models, ingredient demand forecasting, recipe inspiration and gap analysis |

---

### 📋 What the Epicurious Scraper does

- Search any keyword (e.g. "pasta", "chocolate cake", "vegan dinner")
- Paginate through search results to collect as many recipes as needed
- Extract full structured data from each recipe page: ingredients, ratings, author, cook times, categories
- Export to CSV, Excel, JSON, or XML with one click
- Works without login or API key

> 💡 **Why it matters:** Epicurious has 37,000+ professionally edited recipes from Bon Appetit and Conde Nast editors. Unlike community-sourced sites, every recipe is tested and trusted - making this dataset ideal for high-quality meal planning, nutrition research, and AI training.

### 🎬 Full Demo

🚧 Coming soon

### ⚙️ Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `searchQuery` | string | No | Keyword to search for recipes (e.g. "pasta", "chicken"). Default: "pasta" |
| `maxItems` | integer | No | Max recipes to collect. Free users limited to 10. |

**Example 1 - Basic search:**
```json
{
  "searchQuery": "pasta",
  "maxItems": 50
}
````

**Example 2 - Broad search:**

```json
{
  "searchQuery": "vegan dinner",
  "maxItems": 100
}
```

> ⚠️ **Good to Know:** Free users are limited to 10 recipes per run. [Create a free account w/ $5 credit](https://console.apify.com/sign-up?fpr=vmoqkp) to unlock up to 1,000,000 recipes per run.

### 📊 Output

Each recipe record contains the following fields:

| Field | Type | Description |
|-------|------|-------------|
| 🖼 `imageUrl` | string | Main recipe photo URL |
| 📌 `title` | string | Recipe name |
| 📝 `description` | string | Short editorial description |
| ⭐ `rating` | number | Aggregate star rating (1-5) |
| 💬 `reviewCount` | number | Total number of ratings |
| 👤 `author` | string | Recipe author or contributor name |
| 🏷 `categories` | array | Recipe categories (e.g. "dinner", "vegetarian") |
| 🔖 `tags` | array | Keywords and cuisine tags |
| 🥕 `ingredients` | array | Full ingredient list with quantities |
| ⏱ `prepTime` | string | Preparation time (e.g. "15 minutes") |
| 🍳 `cookTime` | string | Cook time (e.g. "30 minutes") |
| ⏰ `totalTime` | string | Total time from start to finish |
| 🍽 `servings` | string | Number of servings |
| 🔥 `calories` | string | Calories per serving (when provided) |
| 🔗 `url` | string | Direct link to the recipe on Epicurious |
| 🕒 `scrapedAt` | string | ISO 8601 timestamp of collection |
| ❌ `error` | string | Error message if scraping failed (null otherwise) |

**Sample record 1 - Fresh Pasta With Buttered Tomatoes:**

```json
{
  "imageUrl": "https://assets.epicurious.com/photos/6360f391a1c393ebdaf28aa7/16:9/w_2999,h_1687,c_limit/2022-VG-BA-PASTA-Buttered-Tomatoes-12671.jpg",
  "title": "Fresh Pasta With Buttered Tomatoes",
  "description": "Two-ingredient homemade pasta (no machine required!) meets a buttery yet fresh tomato sauce finished with a drop of umami-rich fish sauce.",
  "rating": 5,
  "reviewCount": 2,
  "author": "Shilpa Uskokovic",
  "categories": ["dinner", "main"],
  "tags": ["pasta", "cherry tomato", "semolina flour", "parmesan", "summer", "italian", "bon appétit"],
  "ingredients": [
    "2⅓ cups (300 g) semolina flour, plus more for dusting",
    "¼ cup extra-virgin olive oil",
    "4 garlic cloves, thinly sliced",
    "½ tsp. crushed red pepper flakes",
    "2 pints Sun Gold or cherry tomatoes, halved, divided",
    "Kosher salt",
    "4 Tbsp. unsalted butter, cut into pieces",
    "1 tsp. colatura (anchovy sauce) or fish sauce",
    "2 oz. Parmesan (about 1½ cups), finely grated, plus more for serving",
    "4 Tbsp. torn basil, divided"
  ],
  "prepTime": null,
  "cookTime": null,
  "totalTime": null,
  "servings": "4 servings",
  "calories": null,
  "url": "https://www.epicurious.com/recipes/food/views/ba-syn-fresh-pasta-with-buttered-tomatoes-recipe",
  "scrapedAt": "2026-05-22T00:39:34.710Z"
}
```

**Sample record 2 - Easy Pasta Salad:**

```json
{
  "imageUrl": "https://assets.epicurious.com/photos/62cc51a0b3e29ef577b0ce52/16:9/w_6391,h_3595,c_limit/PastaSalad_RECIPE_070722_36875.jpg",
  "title": "Easy Pasta Salad",
  "description": "This classic pasta salad full of bright, tangy flavor and fresh vegetables is the perfect summery meal for any barbecue, picnic, potluck, or light dinner.",
  "rating": 4.4,
  "reviewCount": 16,
  "author": "Kelly Janke",
  "categories": ["side", "dinner", "vegetarian"],
  "tags": ["pasta salad", "orecchiette", "summer squash", "cherry tomato", "mozzarella", "easy", "quick", "summer"],
  "ingredients": [
    "1 medium red onion, thinly sliced",
    "Zest and juice of 1 lemon",
    "1 garlic clove, finely grated",
    "1 lb. summer squash and/or zucchini, halved lengthwise, thinly sliced crosswise",
    "½ cup coarsely chopped pickled banana peppers",
    "3 Tbsp. red wine vinegar",
    "1 lb. orecchiette or other small pasta",
    "2 pints cherry tomatoes, halved",
    "1 cup halved pitted Kalamata olives",
    "½ cup finely grated Parmesan, plus more for serving",
    "⅓ cup extra-virgin olive oil",
    "8 oz. fresh mozzarella, torn into small pieces"
  ],
  "prepTime": null,
  "cookTime": "15 minutes",
  "totalTime": "35 minutes",
  "servings": "6-8 servings",
  "calories": null,
  "url": "https://www.epicurious.com/recipes/food/views/pasta-salad-recipe",
  "scrapedAt": "2026-05-22T00:39:35.398Z"
}
```

**Sample record 3 - Baked Pasta alla Norma:**

```json
{
  "imageUrl": "https://assets.epicurious.com/photos/5bc4da220c9ded2dc1a08e23/16:9/w_3488,h_1962,c_limit/baked-pasta-alla-norma-recipe-BA-101518.jpg",
  "title": "Baked Pasta alla Norma",
  "description": "Cheesy, saucy baked pasta is even more fun when you can slice it into wedges.",
  "rating": 4.5,
  "reviewCount": 14,
  "author": "Claire Saffitz",
  "categories": ["main", "dinner", "vegetarian"],
  "tags": ["casserole", "pasta", "spaghetti", "sicilian", "eggplant", "cherry tomato", "parmesan", "cast iron skillet"],
  "ingredients": [
    "1 medium globe eggplant, peeled, cut into 1/2\" pieces",
    "2 pints cherry tomatoes",
    "8 garlic cloves, smashed",
    "1/4 cup extra-virgin olive oil, plus more for skillet",
    "1/2 tsp. crushed red pepper flakes",
    "Kosher salt",
    "2 large eggs",
    "2 Tbsp. tomato paste",
    "4 oz. finely grated Parmesan, divided",
    "1 lb. spaghetti",
    "2 Tbsp. drained capers",
    "1/2 cup torn basil"
  ],
  "prepTime": null,
  "cookTime": null,
  "totalTime": null,
  "servings": "8 servings",
  "calories": null,
  "url": "https://www.epicurious.com/recipes/food/views/baked-pasta-alla-norma",
  "scrapedAt": "2026-05-22T00:39:42.931Z"
}
```

### ✨ Why choose this Actor

| Feature | Detail |
|---------|--------|
| 🚀 No login required | Scrapes public Epicurious data without any authentication |
| 📊 Full structured data | Ingredients, ratings, author, categories, cook times - all in one record |
| ⚡ Fast extraction | Uses JSON-LD structured data for reliable, fast parsing |
| 🔍 Flexible search | Search any keyword or phrase across Epicurious's 37,000+ recipe library |
| 📦 Multiple export formats | CSV, Excel, JSON, XML - download instantly |
| 🆓 Free tier available | 10 free recipes per run to test before upgrading |

### 📈 How it compares to alternatives

| Feature | This Actor | Manual scraping | Epicurious API |
|---------|-----------|-----------------|---------------|
| No API key needed | Yes | Yes | No public API |
| Structured output | Yes | No | N/A |
| Bulk export | Yes | No | N/A |
| Ingredients + timing | Yes | Manual | N/A |
| Ratings + reviews | Yes | Manual | N/A |
| Free tier | Yes | N/A | N/A |

### 🚀 How to use

1. Go to the [Epicurious Recipe Scraper](https://apify.com/parseforge/epicurious-scraper) page on Apify
2. Click **Try for free**
3. Enter your search query (e.g. "pasta", "chicken dinner", "vegan cake")
4. Set `maxItems` to control how many recipes to collect
5. Click **Start** and wait for the run to complete (usually under 2 minutes for 50 recipes)
6. Download results as CSV, Excel, JSON, or XML

### 💼 Business use cases

#### Nutrition and Health Research

Track ingredient patterns across thousands of professionally edited recipes. Build datasets for dietary analysis, identify trends in low-carb or high-protein meals, or compare nutritional content across cuisine types sourced from Bon Appetit's editorial team.

#### Meal Planning Applications

Populate a meal planning app with structured recipe data including cook times, servings, and full ingredient lists. Epicurious's curated library ensures every recipe in your database has been professionally tested.

#### Food AI and Machine Learning

Build training datasets for recipe recommendation engines, ingredient substitution models, or cooking time predictors. The structured format - with tags, categories, ingredients, and author attribution - is ideal for NLP and ML pipelines.

#### Recipe Content Analysis

Benchmark your own recipe content against Epicurious's editorial standards. Analyze which ingredients, cuisines, and prep times correlate with the highest ratings, or discover gaps in your coverage.

### 🔌 Automating Epicurious Scraper

Connect the Epicurious Scraper to Make, Zapier, or Slack to automate your recipe data collection workflow:

- **Make (formerly Integromat):** Trigger a scrape on a schedule, then send results to Google Sheets, Airtable, or a Slack channel
- **Zapier:** Create a Zap that runs the scraper and routes new recipes to your CMS or email list
- **Slack notifications:** Get a summary of the latest scraped recipes delivered to a channel automatically
- **Webhooks:** Use Apify's built-in webhook support to push data to any endpoint the moment a run completes

### 🌟 Beyond business use cases

#### Research and Academia

Food scientists and nutritionists can use this dataset to study ingredient trends, portion sizes, and recipe complexity over time. Epicurious's decades-long archive makes it valuable for longitudinal food trend research.

#### Creative Projects

Writers, chefs, and food historians can explore Epicurious's full recipe archive to discover forgotten dishes, trace culinary traditions, or find inspiration for new recipes.

#### Non-Profit and Community

Community meal planners, food banks, and nutrition education organizations can use bulk recipe data to design affordable, nutritious meal plans at scale.

#### Experimentation

Developers and data scientists can use the recipe dataset to experiment with clustering algorithms, NLP ingredient parsing, or recipe difficulty classification models.

### 🤖 Ask an AI assistant about this scraper

You can ask any AI assistant (Claude, ChatGPT, etc.):

> "I have a dataset of Epicurious recipes with fields: title, description, rating, reviewCount, author, categories, tags, ingredients, prepTime, cookTime, totalTime, servings, calories, url. Help me analyze which ingredients appear most frequently in 5-star recipes."

The structured JSON output from this actor is ready for direct AI analysis, spreadsheet pivot tables, or database ingestion.

### ❓ Frequently Asked Questions

#### 🔍 What can I search for?

Any keyword or phrase Epicurious's search engine supports: ingredient names ("saffron"), dish types ("risotto"), dietary preferences ("gluten-free"), occasions ("thanksgiving"), or chef names.

#### 📄 How many recipes can I scrape per run?

Free users: up to 10 per run. Paid users: up to 1,000,000 per run. Epicurious has 37,000+ publicly accessible recipes.

#### ⏱ How fast is the scraper?

Roughly 9-12 recipes per page, with each page taking 3-5 seconds to load. A 100-recipe run typically completes in under 3 minutes.

#### 🔐 Do I need to log in or have an Epicurious account?

No. All data is extracted from publicly accessible pages. No account or API key needed.

#### 💲 Is the data free to use?

The scraper is free to try (10 recipes). Larger runs require a paid Apify plan. Always check Epicurious's Terms of Service for your specific use case.

#### 📦 What export formats are available?

CSV, Excel (XLSX), JSON, XML, and JSONL. All formats are available from the Apify dataset download interface.

#### 🥗 Does it capture ingredients with exact quantities?

Yes. Ingredients are extracted exactly as written on the recipe page, including fractions and measurements (e.g. "2⅓ cups semolina flour").

#### ⭐ Are ratings always populated?

Ratings are populated when available in the recipe's structured data. Some newer or less-reviewed recipes may have low review counts but valid ratings.

#### 🍳 Are prep time and cook time always available?

These fields are populated when Epicurious includes them in the recipe's structured data. Some recipes omit them - in that case the field is null. This is source data behavior, not a scraper limitation.

#### 🔄 Can I scrape by category or cuisine?

Currently the scraper uses keyword search. To target a category, include it in the search query (e.g. "vegetarian pasta", "italian dinner", "quick dessert").

#### 🔁 Can I run this on a schedule?

Yes - use Apify's built-in scheduler to run the scraper daily, weekly, or on any custom cron schedule.

#### 🏷 What are the categories and tags fields?

`categories` contains meal-type and dietary classifications extracted from the recipe's keywords (e.g. "dinner", "vegetarian", "side"). `tags` contains all other keywords including ingredients, cuisines, and cooking methods.

### 🔌 Integrate with any app

Epicurious Scraper results can be connected to:

| Tool | Use case |
|------|----------|
| Google Sheets | Live recipe database |
| Airtable | Recipe CMS |
| Notion | Editorial recipe planning |
| Slack | New recipe notifications |
| Make (Integromat) | Automated workflows |
| Zapier | No-code recipe automation |
| REST API | Custom app integration |
| BigQuery | Large-scale analytics |

### 🔗 Recommended Actors

| Actor | Description |
|-------|-------------|
| [Allrecipes Scraper](https://apify.com/parseforge/allrecipes-scraper) | Scrape community-reviewed recipes from Allrecipes |
| [BBC Good Food Scraper](https://apify.com/parseforge/bbcgoodfood-scraper) | Scrape professionally tested recipes from BBC Good Food |
| [Serious Eats Scraper](https://apify.com/parseforge/seriouseats-scraper) | Extract science-based recipes from Serious Eats |

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge) to find scrapers for hundreds of popular websites.

***

**Disclaimer:** This actor is not affiliated with or endorsed by Epicurious, Conde Nast, or Bon Appetit. It extracts publicly available data from Epicurious.com for research and personal use. Always respect the site's Terms of Service and robots.txt. Do not use scraped data for commercial purposes without proper licensing.

# Actor input Schema

## `searchQuery` (type: `string`):

Keyword to search for recipes (e.g. 'pasta', 'chocolate cake', 'vegan dinner').

## `maxItems` (type: `integer`):

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

## Actor input object example

```json
{
  "searchQuery": "pasta",
  "maxItems": 10
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchQuery": "pasta",
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/epicurious-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchQuery": "pasta",
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/epicurious-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQuery": "pasta",
  "maxItems": 10
}' |
apify call parseforge/epicurious-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=parseforge/epicurious-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Epicurious Scraper | Recipes Ingredients and Ratings",
        "description": "Scrape full recipe data from Epicurious including ingredients, step instructions, cook times, servings, ratings, reviews, nutrition, and author info. Search by keyword, cuisine, or diet to build food databases, meal planners, recipe apps, or AI training datasets at scale.",
        "version": "0.1",
        "x-build-id": "eHK9pfZz1i911hKN2"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/parseforge~epicurious-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-parseforge-epicurious-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/parseforge~epicurious-scraper/runs": {
            "post": {
                "operationId": "runs-sync-parseforge-epicurious-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/parseforge~epicurious-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-parseforge-epicurious-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchQuery": {
                        "title": "Search Query",
                        "type": "string",
                        "description": "Keyword to search for recipes (e.g. 'pasta', 'chocolate cake', 'vegan dinner')."
                    },
                    "maxItems": {
                        "title": "Max Items",
                        "minimum": 1,
                        "maximum": 1000000,
                        "type": "integer",
                        "description": "Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000"
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
