Last quarter I spent 12 hours a week copying lead data from LinkedIn into a Google Sheet, then manually drafting follow‑up emails.
After I wired together a few AI agents and a simple scraper, that time dropped to under an hour.
By the end of this article you’ll have a repeatable pattern you can apply to your own repetitive tasks.
The bottleneck I hit with manual lead work
Copying profiles felt like digging a trench with a spoon.
Each lead required opening LinkedIn, scrolling to the contact info, pasting name, title, company, and URL into a sheet, then switching to Gmail to write a personalized line.
The worst part was the context switch; after ten rows my brain felt scrambled and I started making typos.
I tried a Zapier‑LinkedIn integration, but it kept hitting the daily limit and left half the fields blank.
Concrete gripe: the Zapier connector would silently drop the “company” field when the profile used a non‑English character set, which meant I had to manually fix those rows every morning.
What most guides get wrong about AI agent chaining
Many tutorials treat agents like Lego bricks you snap together and expect them to work.
They forget that each agent needs a clear contract: what it consumes, what it emits, and what happens when the output is malformed.
If you feed a scraper raw HTML to a summarizer without cleaning tags, the model will start hallucinating numbers.
I see guides that suggest “just give the model the page and let it figure it out.” That advice leads to wasted tokens and bad copy.
The fix is to insert a deterministic cleaning step—strip scripts, keep only visible text—before handing anything to the LLM.
Concrete love: using Apify’s built‑in HTML‑to‑text actor saved me from writing my own regex and gave consistent plain text every time.
How do you keep the AI from hallucinating bad data?
Hallucinations happen when the model tries to fill gaps with plausible‑sounding nonsense.
I combat this by grounding the prompt in the exact snippet I want it to work with.
For example, instead of saying “write a cold email based on this lead,” I paste the cleaned LinkedIn summary and explicitly tell the model: “Use only the facts in the block below; do not add any extra details.”
I also set the temperature to 0.2 and limit the response to 150 tokens.
That combination cuts the hallucination rate from roughly one in three attempts to less than one in twenty.
A real prompt I use for cold‑email copy
You are a concise B2B copywriter. Using only the information in the lead block, generate a 120‑word email that:
1. Mentions a specific pain point inferred from the title.
2. Offers a one‑sentence solution tied to your product.
3. Ends with a low‑pressure call to action to schedule a 15‑minute chat.
Lead block:
{{linkedin_summary}}
I store this prompt in a Make scenario as a template variable; the scenario pulls the summary from Apify, fills the placeholder, and calls the OpenAI GPT‑4 endpoint.
The first time I ran it, the output sounded like a generic template because I forgot to tell the model to avoid filler phrases.
After adding the “use only the facts” line, the emails started referencing the lead’s recent post about scaling remote teams, which made replies jump from 5% to 22%.
