Help Needed: Building an AI-Powered Personalized Fitness Plan Automation with n8n + Google Forms + WhatsApp

Hi everyone,

I’m currently working on an AI-powered fitness automation using n8n, and I would appreciate some guidance from the community on how to design the workflow properly.

The basic idea is to create an automated system where a user first fills out a Google Form with their personal fitness requirements. The form would collect information such as:

  • Name

  • Age

  • Current weight

  • Target weight

  • Fitness goal

    • General fitness

    • Weight loss

    • Weight gain

    • Muscle building

    • Other goals

  • Current fitness level

  • Type of workout they prefer

    • Gym

    • Home workout

    • Outdoor workout

  • Available workout time

  • Dietary preferences

  • Food preferences/restrictions

  • Number of meals they prefer

  • Any relevant limitations or conditions they want the system to consider

Proposed n8n Workflow

I’m thinking of building something like:

Google Form → Google Sheets → n8n → AI → Personalized Fitness Plan → WhatsApp

After the user submits the form, n8n would collect and process the information and send it to an AI model.

The AI would then generate a personalized daily fitness plan, including:

:person_lifting_weights: Workout Plan

  • Exercises for the day

  • Sets and repetitions

  • Workout duration

  • Rest periods

  • Gym/home workout variations

:green_salad: Daily Meal Plan

  • Breakfast

  • Lunch

  • Snacks

  • Dinner

  • Suggested food options

  • Approximate calorie and protein targets

:bar_chart: Daily Targets

  • Estimated calorie target

  • Protein target

  • Water intake

  • Daily activity/step goal

  • Workout duration

:date: Personalized Schedule
The system should ideally generate a plan based on the user’s goal and preferences and provide a different daily plan as the user progresses.

WhatsApp Automation

Once the plan is generated, I want n8n to automatically send it to the user through WhatsApp.

For example:

Good Morning, Rahul! :flexed_biceps:

:bullseye: Goal: Weight Loss
:fire: Today’s Target: ~2,000 kcal
:droplet: Water: 2.5–3 L

:person_lifting_weights: Today’s Workout
• Squats – 3 × 12
• Push-ups – 3 × 10
• Walking – 30 min

:cooking: Breakfast
• Eggs + oats + fruit

:curry_rice: Lunch
• Rice/roti + vegetables + protein source

:green_salad: Dinner
• …

Have a great workout! :fire:

I would also like to eventually add daily reminders, progress tracking, and possibly allow users to update their weight or progress through WhatsApp.

What I Need Help With

I would especially appreciate suggestions on:

  1. How should I structure the n8n workflow?

  2. Which nodes would be best for processing the Google Form/Google Sheets data?

  3. What is the best way to structure the AI prompt so that the generated plans are consistent and personalized?

  4. How should I maintain a user’s information and progress over multiple days?

  5. What is the best approach for sending the generated plan through WhatsApp?

  6. How can I create a system where the AI generates a new plan each day rather than repeating the same plan?

  7. What would be the best database/storage option for user profiles and progress?

  8. Are there any important things I should consider regarding fitness, nutrition, calorie calculations, and user safety?

I’m fairly new to building larger n8n workflows, so I would really appreciate a recommended architecture or example workflow that I can use as a starting point.

Thanks in advance! :folded_hands:
I’d love to hear suggestions from anyone who has built similar AI + n8n + WhatsApp automation systems.

2 Likes

Hi, I saw your request: Help Needed: Building an AI-Powered Personalized Fitness Plan Automation with n8n + Google Forms + WhatsApp. Is this still open? Could you share the current steps and one example of the result you need? What budget and delivery date have you allocated? I would confirm a small fixed scope and price after reviewing the details.

Hi Manish,
I’d recommend treating this as a stateful workflow rather than having the AI generate everything from scratch every day.

A solid architecture would be:

Google Forms → Google Sheets → n8n → Database → AI → WhatsApp

I’d keep the Google Sheet mainly as the intake layer and store the actual user profile, preferences, plan history, progress, and daily state in a database such as Supabase/Postgres.

For the n8n workflow, I’d split it into smaller workflows:

  1. User onboarding – validate the form data, create/update the user profile and generate the initial plan.

  2. Daily plan generation – a Cron/Schedule Trigger retrieves the user’s current profile + previous plans + latest progress, then sends structured data to the AI.

  3. WhatsApp delivery – send the generated plan through the WhatsApp API and log the delivery status.

  4. Progress updates – receive WhatsApp messages such as weight updates and store them in the database.

  5. Progress/reminder workflow – periodically check users who need reminders or plan adjustments.

For the AI, I would strongly recommend using structured JSON output rather than asking it to return formatted text directly. For example:

{
“daily_targets”: {},
“workout”: {},
“meals”: [],
“notes”: []
}

Then n8n can validate the response and format it into a WhatsApp message. This makes the workflow much more reliable and easier to maintain.

For daily variation, don’t simply tell the AI “create a different workout.” Pass the previous 7–14 days of plans, completed workouts, progress, and constraints into the prompt and explicitly define what should change while maintaining continuity.

I’d also keep calorie/protein calculations and other deterministic logic outside the LLM wherever possible. The AI should personalize and explain the plan, rather than being responsible for calculations that can be handled by code.

For WhatsApp, I’d use an official WhatsApp Business API provider and have n8n handle the orchestration, message formatting, scheduling, and logging.

One important consideration is safety: since this involves nutrition and fitness recommendations, I’d include validation rules for age, medical limitations, eating restrictions, extreme calorie targets, etc., and have the system avoid generating potentially unsafe recommendations.

If you’re new to larger n8n workflows, I’d definitely start with onboarding → database → daily generation → WhatsApp, and add progress tracking/reminders afterward. That will make debugging and scaling much easier.

I hope to collaborate with you in this project.
Best regards.

Hello Manish! I’ve built a few systems very similar to what you’re describing Pulling from Google forms sending to GPT to generate personalized plans over WhatsApp. Happy to share a working example if you want, just to DM me.

I’m a Fiverr Vetted Pro specializing in n8n and AI automations. You can see more at https://ramoncarmona.com/


Hi Manish, I build n8n automations full time. Anatbil already gave you the right overall shape so I will not repeat it. Here are the four things that will actually bite you, roughly in the order they will bite.

1. There is no Google Forms trigger node in n8n. Most people find that out an hour in. Your two options are the Google Sheets trigger, which polls the responses sheet on a schedule, or an Apps Script onFormSubmit trigger on the form itself that posts to an n8n webhook. Use the second one. It fires the moment they hit submit, it hands you the answers as clean JSON instead of you mapping column letters, and it does not quietly break the first time someone inserts a column in that sheet. It is about fifteen lines of Apps Script and a UrlFetchApp call.

2. WhatsApp will not let you send the message in your example. This is the big one and it is worth knowing before you design around it. On the WhatsApp Business Cloud API you can only send a free form message inside 24 hours of the user’s last message to you. Your 7am plan is business initiated, so outside that window it has to be a pre approved template. And template variables cannot contain newlines, tabs, or more than four spaces in a row. So that nicely formatted plan with the bullets and the line breaks cannot go into a template parameter at all.

What does work: send a short approved utility template in the morning, something like “Good morning {{1}}, your plan for today is ready. Reply PLAN and I will send it.” Their reply opens the 24 hour window, and then you can send the full formatted plan as a normal message. You get a delivery signal and an engagement signal out of that for free, and it costs less. The other option is the template carries a link to a page with today’s plan on it. Either way, decide now rather than after your templates get rejected. Template messages are also billed per message at a rate that varies by country, so look up yours before you promise anyone a free daily service.

3. The daily fresh plan is the one part of the design I would change. Ask a model for a new day every morning and you do not get training, you get randomness. Progressive overload is the whole point of a program and it cannot exist if today has no idea what last Tuesday was. Generate a seven day block once a week instead, with the progression rules inside it, store the whole block as JSON, and let the daily job just render day N and send it. The daily job then needs no AI at all. Meals can come out of a bank you generated once per user and rotate, so nobody eats eggs and oats for ninety days straight. That is one AI call per user per week instead of seven, it is reproducible when a user tells you the plan looked wrong, and it is an actual program rather than a different workout every morning. The weekly regeneration is where you feed in the last block plus their check ins, which is the history point Anatbil was making.

4. Storage: three tables, not one sheet. Users for the profile, plans for one row per user per block with the JSON in it, checkins for weight and done or not done coming back off WhatsApp. Postgres or Supabase. Sheets will hold up until roughly your twentieth user, then the API quota and row locking start costing you plans that silently never sent.

Two operational things while you are in there. Store each user’s timezone and run the send job hourly, picking the users whose local time is now 7am, rather than one cron at 7am your time. And write a sent_at onto the plan row and select only rows where it is null, or the first time that job fails halfway through and you re run it, everyone who already got a message gets a second one.

On your safety question, which is the one I would push on hardest. I am a nurse, 30 years, 20 of them as a Director of Nursing at an outpatient surgery center, so I cannot let that one go by.

Calculate the calorie and protein numbers in code, Mifflin St Jeor plus an activity factor, and never let the model do the arithmetic. Then put a floor under it. A deficit past about 20 to 25 percent of maintenance is where people stop sleeping and quit, and no adult should be auto prescribed under roughly 1200 calories.

Compute BMI from their current weight and refuse the signup if the target weight puts them below 18.5. A weight loss bot that cheerfully helps an underweight nineteen year old lose eight more kilos is the thing that ends a project, and it will happen, because those are exactly the people who go looking for a free plan generator.

That “any conditions” free text box is a medical intake question whether you meant it as one or not. Pregnancy, insulin dependent diabetes, kidney disease, a heart condition, any history of an eating disorder: those need to route to a human or to a polite decline, not into the prompt as extra context. A standard high protein deficit plan is actively wrong in pregnancy and in reduced kidney function, and the model will not know to stop. Gate anyone under 18 out completely.

Then one plain disclaimer line in the very first message, and store the timestamp when they accept it.

None of that part needs AI. It is five if branches sitting in front of the model, and it is what makes the rest of this safe to send to a stranger.

Get the onboarding and the database piece running first, and if it breaks somewhere, post the workflow here and I will have a look at where.

Cindy Garcia, RN
Advanced AI Automation

Hey Manish, I’ve put together a few Form → AI → WhatsApp automations, so here’s the setup I’d recommend:

  • Collect: trigger on new Google Sheets rows, then a Code node works out calories and protein (Mifflin-St Jeor formula). Keep the numbers in code, use the AI only for writing the plan text.

  • Store: move profiles out of Sheets into Supabase or Postgres. Two tables are enough: one for users, one for daily logs (date, weight, what was sent).

  • Generate: a Schedule trigger every morning pulls active users. Give the AI the profile plus the last three plans and tell it not to repeat exercises. Ask for strict JSON (workout, meals, targets) and build the WhatsApp message from a template. This keeps plans consistent but fresh.

  • Send: go with the official WhatsApp Cloud API, unofficial gateways tend to get numbers banned. Keep in mind that scheduled morning messages outside the 24-hour window need an approved message template.

  • Track: a WhatsApp webhook catches replies like “weight 82”, saves them to the log and adjusts the targets.

  • Safety: set a minimum calorie limit, add a disclaimer, and have the flow decline plans for injuries or pregnancy.

If you’d prefer to have the whole thing built for you, I can set it up in about a week. Feel free to DM me and I’ll share the JSON prompt template I start from.

Your overall flow makes sense, but as this grows, I’d separate onboarding, daily plan generation, progress tracking, reminders, and WhatsApp responses into individual workflows rather than one large flow.

The key part will be maintaining user history so each new plan considers previous workouts, progress, preferences, and updates instead of generating a fresh plan from only the original form data.

For safety and consistency, calorie/protein calculations and important fitness rules should also be handled through defined logic rather than relying entirely on the AI model.

This can definitely be structured into a scalable n8n architecture.

Hi Manish,

I have extensively built and deployed production-grade, fault-tolerant AI orchestration pipelines matching this exact blueprint. Relying purely on basic AI loops for a stateful, daily progressing system like a fitness engine will cause runtime failures under real-world traffic.

Here is the bulletproof production architecture to solve your challenges:

  1. Data Ingestion & Schema Enforcement (Google Forms/Sheets to n8n)
    Do not pass raw webhook arrays directly to the LLM. You must place a custom JavaScript Code Node immediately after your Google Sheets Trigger. This node strips out payload defects, checks for missing data strings, and normalizes inputs into a strict, validated data frame before hitting the intelligence tier.

  2. Heavy Traffic & State Management (Redis Idempotency Layer)
    To prevent duplicate form submissions or duplicate webhook triggers from repeating identical workflows, deploy a tenant-scoped atomic idempotency lock using native Redis INCR or SETNX commands with a strict 24-hour TTL. If a duplicate trigger fires, the Redis Guard automatically throttles it within 1 millisecond, protecting your downstream LLM node from compute waste and double-costs.

  3. Structured AI Extraction (Frontier JSON Schemas)
    To ensure the AI generates consistent workout and meal plans every single day without hallucinating, configure advanced frontier models like Gemini or OpenAI using rigid responseSchemas directly at the API layer. This forces the model to strictly output data in a pre-defined JSON object, making it seamless for n8n to parse individual fields for WhatsApp.

  4. Daily Variation & Progress Tracking (Durable PostgreSQL Ledger)
    To prevent the AI from repeating the same fitness plan every day, you must decouple historical states. Split the pipeline into a durable relational database like PostgreSQL. For every daily submission or update, run a native Postgres Upsert Query (ON CONFLICT DO UPDATE SET). This logs the user’s current weight, targets, and cumulative days. When generating today’s plan, feed the last 3 days of historical text from Postgres into the LLM context as a strict negative-prompt baseline (“Do not repeat these exercises/meals”).

  5. WhatsApp Delivery & Safety Guardrails
    Route the final validated payload asynchronously using a secure provider webhook like UltraMsg or Twilio. Never let the AI directly dictate critical metrics without deterministic checks. Set a rigid validation gate right before the WhatsApp node to evaluate calorie boundaries and flag extreme requests, ensuring 100% safety and absolute system uptime.

I have an active production engine built exactly on these deterministic principles (featuring Redis logic, custom JavaScript contracts, and Postgres upsert tables). I would be happy to share a visual canvas walkthrough or hop on a brief sync to help you deploy this successfully!

Hi Manish — this is exactly the kind of build I do. The core flow is pretty clean: Google Forms trigger → map the answers → an AI node that generates the plan from the form data → WhatsApp Business API node to send it out. I’ve built similar AI + n8n + WhatsApp flows, and in my experience the prompt structure matters a lot for keeping daily plans consistent but varied. The one part that usually takes the most setup is the WhatsApp delivery side — do you already have WhatsApp Business API access approved, or is that still to sort out?

Hi Manish — this doesn’t need Redis or a separate database to start. A Google Sheet as the user log + one AI node with a fixed JSON output + WhatsApp is enough for the first version, and it’s easy for you to maintain. One question before I’d scope it: do you already have a WhatsApp Business API number (Meta-verified), or should the setup include that? That step usually takes the most time. Happy to do it as a small fixed-price first version.

Hi @Manish_Kasan

Great project.

1. Workflow structure
Split it into 3 separate workflows instead of one big one:

  • Onboarding: form submitted → clean the data → calculate targets → save the profile → create the first plan → send it on WA
  • Daily plan: Schedule Trigger (e.g. 6 AM) → get active users → loop through each → pull their profile and recent history → AI → save → send
  • Incoming WA messages: a webhook that reads replies like “weight 72” or “done” → updates progress → sends a confirmation

Smaller workflows are much easier to debug and extend.

2. Nodes for the form data
Google Sheets Trigger (“row added”) works. Or skip Sheets and use the n8n Form node or Tally with a webhook, which is faster and cleaner. Then use Edit Fields (Set) to rename fields, a Code node for the maths, and Switch to branch by goal.

3. Consistent AI output
The biggest tip: Work out calories, protein and water in a Code node, then pass those numbers to the AI as fixed targets. Also:

  • Have the AI return JSON (a Structured Output Parser or JSON schema), not free text
  • Build the WA message from that JSON with a template in a Code node, so the format never changes
  • Put the rules in the system prompt (stay within the calorie target ±5%, only use allowed foods, and so on)

4 & 7. Storing user data and progress
Google Sheets is fine for testing. For real users, move to Supabase (Postgres) or Airtable. Use 3 tables:

  • users: profile, targets, phone number with country code, active yes/no
  • plans: user, date, plan JSON
  • progress: user, date, weight, workout done yes/no

5. Sending on WA
Use the official WA Cloud API (n8n has a node for it) or a provider like Twilio, Interakt, WATI or Gupshup. Two things to know:

  • Morning messages the user didn’t trigger need pre-approved template messages, because free-form messages only work within 24 hours of the user’s last message
  • Avoid unofficial WA libraries, because numbers get banned

6. A new plan each day
Send the AI the last 5–7 days of plans and tell it not to repeat meals or workouts. Better still, decide the day’s focus in code (Mon upper body, Tue lower body, Wed cardio…) and let the AI fill in the details. Every week or two, adjust calories based on weight change.

8. Safety (important)

  • Use the Mifflin-St Jeor formula plus an activity multiplier for calories
  • Set limits in code: a deficit of no more than about 500 kcal a day, and never go below a safe minimum
  • Protein: roughly 1.6–2 g per kg for muscle gain, a bit lower for general fitness
  • If someone lists a medical condition, injury or pregnancy, or is under 18, don’t let the AI create a plan. Flag it and suggest they see a professional
  • Add a short disclaimer, get their consent before messaging, and include a “STOP” keyword to unsubscribe
  • Treat health data carefully, because privacy laws (like India’s DPDP Act) apply

Hi Manish, this is very achievable in n8n. I would structure the first POC as:

Google Form → Sheets/Webhook → Validate & Normalize User Data → AI Plan Generator → Structured Output Validation → User/Plan Storage → WhatsApp API

I would keep user profiles and daily progress separate from the generated plans so the workflow can reference previous days and avoid simply regenerating the same output each time. I wouldd also keep deterministic calculations/guardrails outside the LLM rather than relying on AI for everything, especially where health-related inputs are involved.

I have been building similar multi step n8n + AI workflows with structured outputs, validation, routing and Google Sheets integrations. Happy to help you turn this into a working POC if you are looking for hands on implementation rather than just architecture advice.

Hi there,

I saw your post and this is a solid use case for n8n. I build AI-powered automations in n8n with OpenAI/Claude, so here is the short version of how I would structure it:

* Intake: Google Sheets Trigger (form responses) → validate and normalize fields → save the user profile in Airtable or Sheets as the single source of truth.

* Daily plans: a Schedule Trigger runs every morning → loads active users → sends profile + progress history + previous plans to Claude/OpenAI with a structured JSON output → a different plan every day, without repeats.

* Delivery: WhatsApp Business Cloud API. Note that messages outside the 24-hour window require approved templates, so this needs planning from the start.

* Safety: disclaimer, filters for minors and medical conditions, and minimum calorie limits enforced by logic, not just by the prompt.

I can build this end to end, from the workflow to the prompt design and error handling. Could you share the budget range and timeline for this project? If it fits, I’ll send a scope and a fixed price.

Portfolio: Notion

Telegram: @AI_SVes

Hi Manish — the architecture you outlined is workable. I’d separate it into three layers:

  1. User profile + progress storage
  2. Daily plan generation with structured AI output
  3. WhatsApp delivery + reminders + progress updates

For the first version, I’d keep Google Sheets as the profile/progress store, generate the plan as structured JSON, and use a scheduled workflow for daily plans rather than letting the AI freely regenerate everything from scratch each time.

The main thing I’d be careful with is fitness/nutrition safety — especially medical conditions, calorie targets and anything that could be interpreted as medical advice.

I build Make/OpenAI/API workflows with state, follow-ups and user handoff, so if you decide you want someone to help build the MVP rather than only design it, I’d be open to discussing a small fixed-scope implementation.

Hi Manish,

One thing to check before you build: WhatsApp’s official API only lets you start a conversation with an approved template message. A daily morning plan counts as business-initiated, so plan Meta’s template approval in from day one.

Architecture I’d use: Form → Sheet row → n8n (Google Sheets Trigger) → Code node calculates calories/protein (Mifflin-St Jeor, with a minimum calorie floor, not left to the AI) → AI with a Structured Output Parser (fixed JSON) → WhatsApp node. Store users and each day’s plan in a table (Sheets to start, Supabase later) and pass the last 3 plans into the prompt so it doesn’t repeat.

If you’d like it built: the first version as a fixed-price pilot, 250 EUR, paid only after you accept it. Example of my work: https://webbasesol.pages.dev

Are you on n8n Cloud or self-hosted?

Benjamin

Hi Manish, the AI step is the easy part here. The harder parts come right before and right after it.

If the model returns a plan as formatted text, you have no way to check it. I’d ask it for JSON (days, exercises, meals, calories) and validate that in n8n before anything is sent. Anyone who mentions an injury or a medical condition skips the AI and goes to a person.

On the WhatsApp side, you can only send free text within 24 hours of the user’s last message. So I’d first send a short approved template (“Your plan is ready, reply OK to get it”) and send the full plan once they reply.

I built something with a similar shape for a bakery: orders arrive by email, Gemini pulls out the data, n8n creates a Google Doc, logs it in Sheets and sends a Telegram alert. I haven’t run the WhatsApp Business API in production yet, but the rest of the pipeline is familiar.

Is this for your own clients, or do you plan to offer it to other trainers too?

Solid use case for n8n. A few things that saved me pain on a similar build: (1) run the AI plan-generation step async — Google Forms → Sheets trigger → queue → AI node → WhatsApp send, so a slow AI response doesn’t block form submissions; (2) validate the form inputs (weight/age ranges) before hitting the AI node, otherwise you’ll burn tokens on garbage input; (3) for WhatsApp delivery, the Cloud API node handles templates fine but test your opt-in flow early since Meta is strict about unsolicited messages. If you want, I can help put together the full workflow — happy to scope it once I know expected volume and whether this needs to scale beyond a single trainer’s client base. nichr.tech

I’d separate this into two workflows instead of one large workflow.

Workflow 1 — onboarding/profile
Google Form - Google Sheets or database - n8n - validate/normalize answers - store a clean user profile.

Workflow 2 — daily plan
Schedule Trigger - load user profile + recent plan history - generate a structured AI output - save the new plan -send it through WhatsApp.

For an MVP, Google Sheets is fine. If you want progress tracking over weeks/months, I’d move the profile/history layer to Postgres or Supabase.

I’d also make the AI return structured JSON rather than free text, for example:
workout / meals / targets / notes.
That makes the output much easier to validate, store, and format for WhatsApp.

For variation, don’t rely only on “generate a different plan”. Pass the last few plans into the prompt and tell the model what has already been used.

For WhatsApp, I’d use the official WhatsApp Cloud API or a provider built on top of it.

The main safety point: don’t let the model freely generate medical or high-risk nutrition advice based only on form answers. Add rules for limitations/conditions and route those cases to safer general guidance or professional review.

I’d build the first version with:
Form - profile storage - daily schedule - AI JSON - validation - WhatsApp -history storage.

Then add progress updates and two-way WhatsApp messages after the core flow is stable.

Coach and automation builder here (I write training and nutrition plans for real clients), so two things from the fitness side first, then the architecture.

  1. Don’t ask the AI to “generate a new plan every day”. That produces random workouts and no progress. Store a training template per goal (e.g. 3-day full body for beginners, 4-day upper/lower for muscle gain) with a week counter and progression rules (add reps, then add weight, deload every 4th week). The AI’s job is to fill the template with the user’s constraints and write the message, not to invent the program. Same for food: calculate calories deterministically (Mifflin-St Jeor × activity factor, minus 300–500 kcal for weight loss, floor at 1,200/1,500 kcal), protein 1.6–2.2 g/kg, then let the AI turn the numbers into meals matching the dietary preferences. Numbers in code, words from the model.
  2. Safety: hard-stop rules before any plan is generated: under 18, pregnancy, eating-disorder history, “chest pain / heart condition” answers → send a “please consult a doctor” message and no plan. Put a one-line disclaimer in every WhatsApp message.

Architecture that works: Google Forms → Sheets trigger (or Form webhook) → n8n “Create profile” workflow writes to Postgres/Supabase (tables: users, weekly_plan, daily_log, messages). A separate Schedule Trigger at 06:00 loads each active user, computes today’s session from template + week counter, calls the model with a JSON schema (structured output) for workout + meals + targets, renders the message, sends it via the official WhatsApp Cloud API (Meta) with a template message, and logs it. Progress updates: WhatsApp webhook → n8n parses “weight 82.4” → daily_log → the weekly recalculation uses the new weight. Idempotency: one row per user per day, checked before sending, so a re-run never sends twice.

Happy to share the template structure I use for goal-based programs if it helps.

Hi Manish, nice project. A few things that will save you pain, mostly on the WhatsApp side:

  1. Trigger: Google Forms has no native n8n trigger, so link the form to a Sheet and use the Google Sheets Trigger (Row Added). Add a consent checkbox for WhatsApp messages, because WhatsApp requires opt-in before a business messages someone first.

  2. Generate the plan once, not every day: one LLM call with structured output (an output parser or JSON schema) that returns a 7-day plan as fields: day, workout, meals, calories, protein, water, steps. Store it in a Sheet or Supabase keyed by phone number. A daily Schedule trigger then just reads today’s row and sends it. Cheaper, consistent, easy to regenerate weekly.

  3. WhatsApp rules: outside the 24-hour window after the user’s last message you can only send pre-approved template messages, and template bodies are capped at 1,024 characters. So the daily message needs to be a short template with variables, or a template that invites a reply, which reopens the window for a normal message (up to 4,096 characters). For the full plan, send a PDF or a link.

  4. Guardrails: hard limits in the prompt (a calorie floor, no extreme deficits), and anyone who lists a medical condition, injury or pregnancy gets “please check with a professional” instead of a plan. A one-line disclaimer in the first message is worth it.

  5. Let people reply “swap” or “too hard” and regenerate just that day. That is what makes it feel personal.

If you want a hand building it, I’ve built WhatsApp Cloud API assistants with n8n and can help. Either way, good luck with it.

Roman