With this trick, whenever you find a recipe you like on a website, a PDF, an image on Instagram, or even in a message from a friend, all you need to do is share the content on Telegram. An AI-based bot will analyze the recipe, identify the ingredients, add them to your shopping list—preserving the quantities of those already on the list—and make them easily accessible on your smartphone or smartwatch for your next trip to the supermarket.
It uses n8n, Open AI, REST API, Telegram Bot, Home Assistant, Bring! and almost no programming.
Okay, I have to admit it, this trick was my wife's idea 😊
We use Bring! as our shared shopping list app. Thanks to the Apple Watch app, when we're at the supermarket, we can simply glance at our wrist to see the items on the list, and a single tap removes items we've added to the cart. To add items to the list, besides using the app on our smartphones, we use a voice assistant when we're at home. It's much more immediate since we can activate it the moment we realize we need something.
Unfortunately, for the past few months, Amazon Echo has no longer allowed the use of third-party apps to manage lists. So instead of saying, "Alexa, add tomatoes to the shopping list," we now say, "Alexa, open Bring and add tomatoes" (saying "to the shopping list" is redundant here because we only have one list). It's a minor inconvenience, but manageable.
Every now and then, we share recipes we find online, in our cooking robot's app, or on Instagram. But we almost always forget to save the ingredients and add them to the shopping list. Even if we do remember, it’s a tedious and repetitive task—manually adding each ingredient along with its quantity. So, we thought: why not let AI handle it?

I chose Telegram for two reasons:
Creating a Telegram Bot is really really simple:
/newbot[Telegram_Token]): save it securely and we'll use it later to configure the Telegram trigger of the workflowkay, I have to admit, I left out a small detail—sorry about that! I didn't directly use Bring's official APIs. In fact, I couldn't find any mention in the official documentation of interacting with a specific shopping list to add, modify, or remove items. The only supported functionality seems to be submitting a recipe and letting Bring's scraper extract the ingredients. However, the recipe must be in a specific format, likely because Bring doesn't use AI for scraping, as I did, but instead relies on an algorithm based on a well-defined data structure.
That said, there is a way to interact with Bring using unofficial APIs. In my case, I didn’t spend time researching this further since I had already integrated Bring! into Home Assistant, which made it easy to use HA as a "proxy."
You're not obligated to use Home Assistant: if you can find the documentation for the unofficial APIs (I found sometrhing on GitHub but don't post the link since it may chance), you just need to modify the steps in the following workflow, replacing the Home Assistant REST APIs with Bring's APIs.
Moreover, my ultimate goal is to replace Amazon Echo as a voice assistant with one (ideally local) powered by AI. In such a scenario, this assistant would interact directly with the To Do List in Home Assistant.
The setup is very straightforward thanks to the Official Bring! Integration. Once configured by logging into Bring! with your account, the lists you’ve set up in Bring! will appear as To Do List  in Home Assistant. For instance, in my case, todo.spesa.
Now, any changes to the todo.spesa list will immediately sync with the Bring! app and vice versa.
I'm not showing you how to set up Bring on Amazon Echo or Google Home because — even if it's useful for everyday use — it's not a fundamental prerequisite for this process.
Very simple: open your configuration.yaml and add the line:
api:
Now you can access to Home Assistant RESTful API calling whe address http[s]://[Home_Assistant_IP]:[port]/api/.
Remember to set the http or https procotol accordingly to your setup, and the correct IP and port.
Log into the frontend using a web browser, go to your profile and under "Security" menu you wull be able to list, create and revoke all the Long-Lived Token associated with your account.
As with other complex automations you will find on this site, I used n8n: n8n is an open-source workflow automation tool that allows you to connect various applications and services to automate repetitive tasks without manual intervention. It provides a visual interface where you can design workflows by linking different nodes that represent actions, triggers, or data processing steps.
I installed it in a Proxmox LXC by using the helper script provided by Community-Scripts: this is a very useful Community with many script that will help you many times: if you like them, consider donating to support Angie, tteckster's wife - the founder and best supporter of the community - too early passed away.
This n8n workflow integrates a Telegram bot with Home Assistant and uses AI for natural language processing to manage a shopping list. Here's an overview:
Trigger:
[Telegram_Token] retrieved at Step 1.Authorization Check:
Unauthorized reply, Leave chat:
Get Content Type:
Content Normalization:
Content processing:
Extract the ingredients of the recipe end return them in a jsonExtract the ingredients of the recipe end return them in a json; if it doesn't look like a recepite but a single ingredient, treat is as an such; if no quantity is specified, omit it{
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "ingredient": { "type": "string" },
      "quantity": { "type": "string" }
    }
  }
}
Get current items
todo.spesa) via API, by calling the https://[Home_Assistant_IP]:[port]/api/services/todo/get_items?return_response=truereturn_response=true is mandatory in order to receive the structured output[Home_Assistant_IP], [port] and adjust protocol (http/https) accordinglyLong-Lived Token created at Step 2.content-type=application/jsonJSON Body like this, replacing todo.spesa with the name of your ToDo list.
{ 
"entity_id": "todo.spesa",
"status": "needs_action"
}"status": "needs_action" tells the API to skip the completed items and return only the active ones.List new items, List current items
Data Comparison
Add new items to list
https://[Home_Assistant_IP]:[port]/api/services/todo/add_item for each element of the Get new items list[Home_Assistant_IP], [port] and adjust protocol (http/https) accordinglytodo.spesa with the name of your ToDo list.
{ 
"entity_id": "todo.spesa",
"item": "{{ $json.ingredient }}",
"description": "{{ $json.quantity }}"
}Update quantity
find if there are some quantity in the text "{{ $json.quantity }}" and "{{ $json.description }}" and in case sum them in the field NewDescription"; return a json object with "Ingredient" = " {{ $json.ingredient }} and  "NewDescription"Publish update to actual items
https://[Home_Assistant_IP]:[port]/api/services/todo/update_item for each element of the Merge actual items list[Home_Assistant_IP], [port] and adjust protocol (http/https) accordinglytodo.spesa with the name of your ToDo list.
{ 
"entity_id": "todo.spesa",
"item": "{{ $json.message.content.Ingredient }}",
"description": "{{ $json.message.content.NewDescription }}"
}You can directly open a Telegram chat with your bot or add it in a group and promote it to Administrator. In this case remember to update the Group ID in the Check authorized users node in the workflow.
Even if I'll try to keep all this pages updated, products change over time, technologies evolve... so some use cases may no longer be necessary, some syntax may change, some technologies or products may no longer be available. Remember to make a backup before modifying configuration files and consult the official documentation if any concept is unclear or unfamiliar. 
Use this guide under your own responsibility.
This work and all the contents of this website are licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License (CC BY-NC-SA 4.0).
You can distribute, remix, adapt, and build upon the material in any medium or format, for noncommercial purposes only by giving credit to the creator. Modified or adapted material must be licensed under identical terms.
You can find the full license terms here