Create N8N automation that send you every day food recipes

What We Will Build
Before jumping into the setup, let's first understand what this automation does:
- Triggers automatically every day at lunch time (13h) and dinner time (19h)
- Fetches 3 random meal recipes from a free public API
- Sends the recipes to your Telegram with the meal photo, ingredients, instructions, and a YouTube link
Pretty cool right ? Let's get into it.
Prerequisites
Before starting, make sure you have :
- An N8N instance running (self-hosted or cloud, doesn't matter)
- A Telegram bot created via @BotFather and added to a group or channel
- The chat ID of your Telegram group/channel
If you don't have N8N set up yet, I recommend checking the official N8N docs first. For the Telegram bot, it's super quick to create — just message @BotFather on Telegram and follow the steps.
Step 1 : Create a New Workflow
Open your N8N dashboard and click "Create workflow". Give it a name like Food suggestions so you can find it easily later.

Step 2 : Add the Schedule Trigger
The first node we need is the Schedule Trigger. This is what tells N8N when to run the workflow automatically.
Click the "+" button to add a node and search for "Schedule Trigger".
Once added, configure it like this :
- Click "Add Rule" to add two time intervals
- First rule : Trigger at hour 13 (1 PM — lunch time)
- Second rule : Trigger at hour 19 (7 PM — dinner time)

This way, every single day at 1 PM and 7 PM, your workflow will wake up and fetch fresh recipe ideas for you.
Step 3 : Fetch 3 Random Meals
Now we need to actually get the recipes. We will use TheMealDB — a completely free and open API for meal recipes. No API key needed.
The endpoint we care about is :
https://www.themealdb.com/api/json/v1/1/random.php
Each call returns one random meal. Since we want 3 meals, we add 3 separate HTTP Request nodes — one for each meal.
Add the HTTP Request nodes
Add your first HTTP Request node and name it Meal one. Set the URL to :
https://www.themealdb.com/api/json/v1/1/random.php
Leave everything else as default.

Now duplicate this node two more times and name them meal two and Meal three.
Connect all three of them to the Schedule Trigger output. This means when the trigger fires, N8N will call all 3 endpoints in parallel.

Step 4 : Merge and Format the Data
Now we have 3 meals coming in — we need to combine them and format the messages before sending to Telegram.
Add a Code (JavaScript) node and connect the output of Meal one to it. N8N will automatically merge all 3 items since they all flow into the same next node.
Paste this code inside :
// Input: the JSON response from your API
const mealsData = items[0].json.meals;
// Prepare messages array for Telegram
const messages = mealsData.map(meal => {
// Format ingredients list
let ingredients = '';
for (let i = 1; i <= 20; i++) {
const ingredient = meal[`strIngredient${i}`];
const measure = meal[`strMeasure${i}`];
if (ingredient && ingredient.trim() !== '') {
ingredients += `🍴 ${ingredient} - ${measure}\n`;
}
}
// Format instructions (truncate if too long for Telegram)
const instructions = meal.strInstructions.length > 1000
? meal.strInstructions.substring(0, 1000) + '...'
: meal.strInstructions;
// Build the message text with emojis
const text = `🥘 *${meal.strMeal}*
📂 Category: _${meal.strCategory}_
🌍 Area: _${meal.strArea}_
📝 Instructions:
${instructions}
🛒 Ingredients:
${ingredients}
🎥 YouTube: [Watch Video](${meal.strYoutube})
🔗 Recipe Source: [Link](${meal.strSource})`;
return {
photo: meal.strMealThumb,
caption: text,
parse_mode: 'Markdown'
};
});
// Return each message as an item for the Telegram node
let alldata = messages.map(msg => ({ json: msg }));
return {"alldata": alldata};

Let me quickly explain what this code does :
- It takes the meals array from the API response
- For each meal, it loops through up to 20 potential ingredients (that's how TheMealDB structures its data)
- It truncates instructions to 1000 characters so the Telegram message doesn't get too long
- It builds a nicely formatted message with emojis
- It returns everything wrapped in an
alldataarray for the next nodes
Step 5 : Fetch the Meal Photo
Before sending the text, we want to also send the meal photo. Telegram expects the image as binary data, not just a URL.
Add an HTTP Request node after the Code node and configure it like this :
- URL :
={{ $json.alldata[0].json.photo }} - Response Format :
File

This downloads the meal thumbnail image as binary data so we can send it directly to Telegram.
Step 6 : Send the Photo to Telegram
Add a Telegram node and connect it to the HTTP Request photo node. Configure it :
- Operation :
Send Photo - Chat ID : your Telegram group/channel ID (example :
-1003130750289) - Binary Data : enabled (toggle it on)

Make sure you select your Telegram bot credentials here. If you haven't added your bot to N8N yet, click on the credentials field and add a new one using your bot token from BotFather.
Step 7 : Send the Recipe Text
Finally, add another Telegram node after the photo node. This one sends the text message with all the recipe details.
- Operation :
Send Message(default) - Chat ID : same chat ID as before
- Text :
={{ $('Code in JavaScript').item.json.alldata[0].json.caption }} - Append Attribution : disabled

The expression $('Code in JavaScript').item.json.alldata[0].json.caption tells N8N to go back and grab the formatted caption we built in the Code node.
Step 8 : Connect Everything and Test
Here is the final flow of the nodes :
Schedule Trigger
↓ (parallel)
Meal one → Code in JavaScript → HTTP Request (photo) → Send Photo → Send Message
meal two ↗
Meal three ↗

Once everything is connected, click the "Test Workflow" button to do a manual run and verify it works before activating it.

Step 9 : Activate the Workflow
If the test worked and you received the messages in your Telegram, you're good to go. Click the toggle button in the top right corner to activate the workflow.

From now on, every day at 1 PM and 7 PM you will automatically receive 3 meal ideas on your Telegram. No more "what should I cook today?" headaches.
Bonus : Customize It Further
A few ideas to take this further :
- Change the schedule : Want recipes every morning instead? Just adjust the trigger times
- Add more meals : Duplicate more HTTP Request nodes and update the code to merge more items
- Filter by category : TheMealDB has category-based endpoints (e.g. only chicken recipes, only desserts) — just change the URL
- Add a second Telegram channel : One for lunch ideas, another for dinner ideas
Conclusion
That's it! In less than 20 minutes you built a fully automated recipe suggestion system. This is a great example of how N8N can solve small everyday annoyances with minimal effort.
The best part ? It's running on its own now. You don't have to think about it, it just shows up in your Telegram every day like clockwork.
If you have any questions or you want to share what you built on top of this, drop a comment below. And if you're interested in more N8N automations like this one, stay tuned — there's more coming.