You keep copying the same prompt into ChatGPT, tweaking it by hand, and hoping the output fits your next invoice or cold email. It works once, then falls apart when you need to run it ten times a day. After reading this, you’ll be able to stitch a prompt, a data source, and a simple action into a repeatable AI workflow that runs without manual copy‑pasting.
The core pieces of an AI workflow
At its simplest an AI workflow has three moving parts: a trigger that starts the run, a prompt that asks the model for something, and an action that does something with the model’s answer. Think of a trigger as a new row appearing in a Google Sheet, the prompt as “Write a friendly first line for this lead:” plus the lead’s name, and the action as sending that line as the opening of a Gmail draft. You don’t need fancy orchestration; a lightweight automation platform can glue those pieces together.
Most beginners get stuck trying to build everything inside one giant prompt. That approach works for a single use case but collapses when you want to vary inputs or add steps. Splitting the logic keeps each piece testable and replaceable.
What most guides get wrong
Many tutorials sell the idea that you just need to chain a few API calls and you’re done. They skip the messy reality of handling empty responses, rate limits, and formatting quirks. In practice the model will sometimes return a blank string, or it will wrap its answer in markdown code fences when you asked for plain text. If your next step expects pure text you’ll get a broken email or a malformed JSON payload.
Another common misstep is treating the automation platform as a black box. You’ll see advice like “just connect the nodes and it works.” When something fails you have no clue whether the fault lies in the trigger, the prompt, or the action. Good guides teach you to log each stage so you can isolate the problem fast.
Example: turning a Google Sheet of leads into personalized cold emails with GPT-4
Let’s walk through a concrete build you can copy today. We’ll use Make.com as the glue, a Google Sheet as the source, GPT-4 via the OpenAI API as the brain, and Gmail as the outbound channel.
- Create a new scenario in Make.com.
- Add a Google Sheets module set to “Watch Rows” on a sheet that has columns: Name, Company, Industry.
- Add an HTTP module that calls the OpenAI chat completions endpoint. Set the method to POST, the URL to https://api.openai.com/v1/chat/completions, and include your bearer token in the headers.
- In the body, send a JSON payload with model “gpt-4o”, temperature 0.7, and a messages array. The system message can be “You write concise, friendly opening lines for cold emails.” The user message should combine the lead’s name and company, for example: “Write a one‑sentence icebreaker for {{Name}} who works at {{Company}}.”
- Add a Parser module to extract the assistant’s reply from the raw HTTP response. Use a regular expression to grab the content field inside the choices array.
- Add a Gmail module set to “Create Draft”. Map the extracted line into the email body, and fill the To field with a placeholder you’ll replace later (or use a separate column for email addresses).
- Run the scenario manually once to verify a draft appears in Gmail with sensible text.
- Turn on the scheduler to check the sheet every fifteen minutes for new rows.
Notice how each step is isolated. If the HTTP call fails you’ll see the error in the Make.com log without touching the Gmail step. If the parser returns empty you know the model didn’t follow the format.
One concrete gripe I have with Make.com is the way it handles multi‑line outputs from the OpenAI API. The platform sometimes trims trailing newlines, which turns a nicely formatted bullet list into a single block of text. You have to add a post‑process step that re‑inserts line breaks, which feels like a band‑aid.
On the flip side, I love the built‑in data structuring view. When you map a Google Sheet column to a variable you can see the exact value that flowed through at each step, which makes debugging feel less like guesswork.
