AI workflow templates for freelancers
Freelancers waste hours copying prompts between chats, rewriting the same outreach, and manually stitching together invoices. After reading this, you’ll know how to chain AI calls, scrape leads, and auto‑bill clients using only a few free or low‑cost tools. You can then either build it yourself or grab the ready‑made blueprint.
What most guides get wrong
Most tutorials treat AI like a magic button and ignore the boring glue that holds a workflow together. They show a fancy prompt and then assume the output will magically land in your CRM or invoice tool. In reality the biggest time sink is moving data between steps — formatting JSON, handling empty fields, and retrying when a API throttles you. If you skip those details you end up with a demo that works once and then breaks the next day.
I’ve seen guides that suggest you just copy‑paste the AI response into a Google Doc and call it done. That’s fine for a one‑off joke but useless when you need to send fifty personalized pitches a day. The missing piece is a deterministic transport layer that turns unstructured text into structured rows.
How do you build a prompt chain that actually gets replies?
Start with a clear goal: turn a list of leads into a first‑email draft that feels human. The chain has three stages.
- Enrich the lead with public data (company size, tech stack) using a scraper.
- Feed that enriched record into a prompt that asks for a short, problem‑focused opener.
- Run a second prompt that adds a soft call‑to‑action and checks tone.
Each stage returns a clean JSON object that the next stage can consume. If any stage returns an error you log it and move to the next lead instead of halting the whole batch.
Here’s a real prompt I use for the second stage (the opener). I keep it in a the Make platform module so it’s versioned.
You are a senior freelancer who helps {{company}} solve {{pain_point}}. Write one sentence that shows you understand their struggle and hints at a result. No fluff, no greeting, max 20 words.
The {{company}} and {{pain_point}} placeholders are filled from the previous step’s output. The temperature is set to 0.3 to keep the output predictable.
Concrete example: using Make.com, OpenAI, and a simple Google Sheet to send 50 personalized emails a day
First, I bold the tools on first mention: Make.com for orchestration, OpenAI for the language model, and Google Sheets as the lead database.
My sheet has columns: Name, Email, Company, Industry, Pain Point, Status. A Make.com scenario watches for new rows where Status is empty. For each row it:
- Calls a tiny HTTP scraper I built with Cloudflare Workers to pull the company’s tech stack from BuiltWith (free tier).
- Passes the enriched data to an OpenAI completion (model gpt-4o-mini, max_tokens 150, temperature 0.3) using the prompt above.
- Writes the generated email back into the sheet in a column called “Draft”.
- Sends the draft via Gmail (using Make’s Gmail module) and marks Status as “Sent”.
- Logs any error to a separate sheet for later review.
The whole flow runs every fifteen minutes. On a typical day I process about fifty leads, which yields roughly eight replies and two discovery calls. The cost? Make.com’s free plan gives 1,000 operations a month — more than enough for this volume. OpenAI’s gpt-4o-mini costs about $0.0005 per 1k tokens; each email uses roughly 300 tokens, so fifty emails cost under $0.01. Google Sheets is free. In short, the variable cost is negligible; the only real expense is the time I spent wiring it up.
I love how the scenario automatically retries a failed HTTP call up to three times before flagging the lead for manual review. That little resilience saved me from losing a whole batch when the scraper hit a temporary rate limit.
My gripe? The Make.com UI hides the error logs behind three clicks and the default view shows only the last run. When something goes wrong you have to dig through the execution history to find the exact module that failed. It’s annoying, but once you know where to look it’s manageable.
