Skip to main content
RapidDev - Software Development Agency
build-ai-agent

How to Build an AI Agent with Lindy

A Lindy AI agent builder flow is a trigger plus a set of skills it can call, no code required. This guide builds a sales agent that looks up a lead's CRM record freely but only sends a contract email after you approve it through Lindy's built-in 'Ask for Confirmation' toggle. You'll pick a trigger, add two skills, dry-run it, and review your first live approval. Budget 25-35 minutes on Lindy's free trial credits.

What you'll learn

  • Create a new Lindy, pick a trigger, and write its task in plain English
  • Add skills (built-in tools and 1,500+ integrations) that the agent can call during a run
  • Turn on 'Ask for Confirmation' so a risky skill pauses and emails you for approval instead of running unsupervised
  • Dry-run a Lindy against real data before trusting it to act on its own
Book a free consultation
4.9Clutch rating ⭐
1,000+Happy partners
20+Countries served
200+Team members
Beginner10 min read25-35 minLindy account (free trial credits work for testing), a connected CRM (HubSpot or similar), Gmail, browser onlyLast updated November 2026RapidDev Engineering Team
TL;DR

A Lindy AI agent builder flow is a trigger plus a set of skills it can call, no code required. This guide builds a sales agent that looks up a lead's CRM record freely but only sends a contract email after you approve it through Lindy's built-in 'Ask for Confirmation' toggle. You'll pick a trigger, add two skills, dry-run it, and review your first live approval. Budget 25-35 minutes on Lindy's free trial credits.

Quick facts about this guide
FactValue
ToolLindy
DifficultyBeginner
Time required25-35 min
CompatibilityLindy account (free trial credits work for testing), a connected CRM (HubSpot or similar), Gmail, browser only
Last updatedNovember 2026

What you'll build

You'll build a sales follow-up agent. It can look up a lead's record in your CRM whenever a teammate asks, and when a lead is ready to move forward, it can send them a contract and payment link by email. The CRM lookup runs automatically; the email send has its 'Ask for Confirmation' toggle turned on, so the Lindy pauses right before sending, emails you asking to approve it, and only actually sends once you say yes.

A Lindy is built from a trigger (time-based, chat-based, or event-based, such as a Slack message, an incoming email, or a calendar event), a task written in plain English describing what to do, and skills, which are Lindy's built-in tools (HTTP requests, computer use, phone calls) plus its 1,500+ app integrations. Most skills with side effects, anything that sends, updates, or creates something outside Lindy, expose a confirmation toggle: turn it on and that specific call pauses the whole run, emails the owner, and waits for approval either by email or directly in the task menu before continuing.

Choose Lindy when you want a large library of ready-made skills and a confirmation mechanism built into the action itself, with no separate approval workflow to design. Choose n8n instead when you want exact control over the HTTP request behind every tool call, or Zapier/Make when your team is already standardized on one of those for other automations.

Prerequisites

  • A Lindy account (free trial credits are enough to build and test this)
  • A connected CRM (HubSpot, Salesforce, or similar) with lead records
  • A connected Gmail account
  • No coding experience required, just comfort filling in a task description and toggles

Step-by-step guide

1

Create a new Lindy and pick a trigger

From the Lindy dashboard, click New Lindy. Choose a trigger from the catalog: for this agent, pick a chat-based trigger (so a teammate can ask it questions on demand) rather than a scheduled or event-based one. You can add more triggers to the same Lindy later if you also want it to react to, say, a new CRM lead event.

typescript
1Trigger: Chat / Manual (teammate messages the Lindy directly)
2(other options: Email received, Slack message, Calendar event, Webhook)

Expected result: A new, empty Lindy appears with your chosen trigger attached and no skills yet.

2

Write the task in plain English

In the task box, describe what the Lindy should do, concretely enough that a new hire with zero context could follow it. Name the exact skills you expect it to use and the exact condition for sending anything external, mirroring Lindy's own prompt-pattern guidance of writing concrete instructions rather than abstract ones.

typescript
1Task:
2"When asked about a lead, look up their record in HubSpot by email or name and
3summarize their stage, deal size, and last contact date. When a lead is ready
4for a contract, draft a short email with the contract and payment link and
5send it through Gmail. Never claim you sent something unless the send_contract
6skill actually ran."

Expected result: The task box shows your instructions, and Lindy begins suggesting relevant skills based on the apps you mentioned.

3

Add the read-only skill: look up the CRM lead

Add the HubSpot skill (or your CRM's equivalent) and connect your account; Lindy enforces OAuth scopes per skill, so it only gets the access you grant at connection time. Point it at a lead-lookup action. This skill has no side effects, so leave its confirmation toggle off; the Lindy can call it freely whenever a teammate asks about a lead.

typescript
1Skill: HubSpot - Find Contact
2Search by: email or name
3Returns: lifecycle stage, deal size, last contact date
4Ask for Confirmation: OFF (read-only)

Expected result: Asking the Lindy in chat about a real lead returns their actual CRM stage and deal size, with no confirmation prompt.

4

Add the risky skill and turn on Ask for Confirmation

Add the Gmail skill for sending email, named send_contract in your task description so the Lindy's instructions can refer to it by name. Open that skill's settings and enable the Ask for Confirmation toggle. From now on, every time the Lindy is about to call this skill, the run pauses before sending, and you get an email asking you to approve or reject it.

typescript
1Skill: Gmail - Send Email (send_contract)
2To: {{lead_email}}
3Subject: "Your contract from Acme Inc."
4Body: contract summary + payment link, drafted by the Lindy
5Ask for Confirmation: ON

Expected result: Asking the Lindy to send a contract now pauses the run and triggers an approval email instead of sending anything immediately.

5

Dry-run the Lindy against real data

Before trusting the agent unattended, ask it in chat to dry-run the task: a dry run fires the flow end to end on real data and shows you exactly what it would have done, including which skill it would have called and with what content, without actually sending or writing anything.

typescript
1Chat prompt: "Dry-run this for lead jane@example.com who's ready for a contract."
2Expect: lookup result shown, a draft contract email shown, send_contract NOT
3actually called, and a note that it would have paused for your confirmation.

Expected result: The dry run shows the CRM lookup result and the exact email it would send, confirming the confirmation gate would have fired, with nothing actually sent.

6

Approve your first live run, then review the pattern

Send a real request and let the Lindy actually run. When it reaches send_contract, you'll get an approval email (or see it in the task menu); open it, review the draft, and approve or reject it. Once you've approved a few of these and trust the pattern, you can leave Ask for Confirmation on indefinitely for this skill, or add a condition step that only requires confirmation above a certain deal size.

typescript
1Approval flow: Lindy pauses -> email arrives -> you open the task ->
2review draft -> Approve (or Reject) -> Lindy resumes and completes the task

Expected result: A completed task log showing the CRM lookup, the pause, your approval, and the final confirmation that send_contract ran.

Complete working example

sales-lindy-spec.yaml
1# Lindy spec: Sales Follow-Up Agent
2# Paste the `task` block into the task box, then add the two skills below
3# and toggle Ask for Confirmation on send_contract only.
4
5name: Sales Follow-Up Lindy
6trigger: Chat / Manual (teammate messages the Lindy directly)
7
8task: |
9 When asked about a lead, look up their record in HubSpot by email or name
10 and summarize their stage, deal size, and last contact date.
11
12 When a lead is ready for a contract, draft a short email with the contract
13 and payment link and send it through Gmail using the send_contract skill.
14
15 Never claim you sent something unless send_contract actually ran. If you
16 are unsure whether a lead is actually ready, ask the teammate first instead
17 of guessing.
18
19skills:
20 - name: look_up_lead
21 app: HubSpot
22 action: Find Contact
23 config:
24 search_by: [email, name]
25 returns: [lifecycle_stage, deal_size, last_contact_date]
26 ask_for_confirmation: false # read-only, safe to run automatically
27
28 - name: send_contract
29 app: Gmail
30 action: Send Email
31 config:
32 to: "{{lead_email}}"
33 subject: "Your contract from Acme Inc."
34 body: contract summary + payment link, drafted by the Lindy
35 ask_for_confirmation: true # pauses, emails the owner, waits for approval
36 alternative: Gmail Draft Mode (writes to Drafts instead of pausing the run)
37
38test_plan:
39 - step: Dry-run "lead jane@example.com is ready for a contract"
40 expect: lookup shown, draft email shown, send_contract NOT called
41 - step: Real run, same request
42 expect: lookup runs automatically, send_contract pauses for approval
43 - step: Approve in the task menu or via the approval email
44 expect: Lindy resumes and confirms the email was sent
45 - step: Reject the same request
46 expect: Lindy acknowledges the rejection, does not send anything
47

Common mistakes

Why it's a problem: Leaving Ask for Confirmation off on an action with real side effects, like sending an email or updating a CRM field

How to avoid: Turn the toggle on for anything that reaches someone outside your team or changes a system of record. Reserve the off position for genuinely read-only skills.

Why it's a problem: Writing an abstract task like 'handle sales follow-ups' and expecting the Lindy to infer when confirmation matters

How to avoid: Name the exact skill and the exact condition in the task description, the same way you'd brief a new hire. Abstract instructions produce inconsistent behavior.

Why it's a problem: Skipping the dry run and testing only with Ask for Confirmation already on, which hides whether the agent would have sent the right content

How to avoid: Dry-run first to see the exact draft content before any approval gate is even involved. It's the only way to catch a bad draft before it ever reaches your inbox.

Why it's a problem: Approving every request on autopilot without actually reading the drafted content

How to avoid: The confirmation step only works if someone reads it. Treat the approval email as a real review step, not a rubber stamp.

Why it's a problem: Giving one Lindy too many unrelated skills instead of keeping it focused

How to avoid: A Lindy with a narrow, well-described set of skills behaves more predictably. Split unrelated responsibilities into a second Lindy if the task starts to sprawl.

Best practices

  • Turn on Ask for Confirmation for every skill with a side effect: sending, updating, creating, or paying.
  • Write the task description as concrete, specific instructions, naming the exact trigger condition and skill, not an abstract goal.
  • Dry-run a new or changed Lindy against real data before letting it run unattended on live triggers.
  • Use Gmail's Draft Mode instead of a confirmation pause for sensitive, tone-dependent messages like negotiations.
  • Review approval requests as real decisions, not a formality, especially once a Lindy earns enough trust that approvals start feeling routine.
  • Add a condition step for graduated trust: require confirmation only above a certain deal size or risk threshold once the pattern has proven reliable.

Still stuck?

Copy one of these prompts to get a personalized, step-by-step explanation.

ChatGPT Prompt

I have a Lindy with a look_up_lead skill (HubSpot, no confirmation) and a send_contract skill (Gmail, Ask for Confirmation on) gated as described in the spec below. Add a third skill that logs every approved contract send to a Google Sheet for the sales team's records, triggered right after send_contract completes. [paste complete_code]

Build AI Agents Prompt

In the Lindy builder, use Watch and Learn: record yourself looking up a lead and sending a contract once by hand, then ask Lindy to turn that recording into a skill and routine with the same Ask for Confirmation setting on the send step.

Frequently asked questions

Do I need to know how to code to use the Lindy ai agent builder?

No. Every step here happens through the dashboard: picking a trigger from a catalog, writing a task in plain English, adding skills from a list, and flipping a confirmation toggle. Nothing in this guide involves writing a script.

How is Lindy's Ask for Confirmation different from Zapier or Make's approval patterns?

It's a toggle built directly into the skill itself: enable it once and every call to that skill pauses, emails you, and waits, no separate scenario or draft-action substitution required. Zapier and Make achieve a similar result through draft actions or a second linked scenario instead of a single switch.

What's the difference between Ask for Confirmation and Draft Mode?

Ask for Confirmation pauses the entire run and asks you to approve or reject before anything happens. Draft Mode (available for actions like Gmail) lets the Lindy keep running while the output waits as an editable draft; you review and send it on your own time instead of blocking the run.

Can a Lindy call another Lindy?

The documented pattern for multi-step automation within one Lindy's scope is routines: a trigger, a plain-English prompt, and a delivery destination, which you can chain by having one routine's output feed another's trigger. Treat each focused Lindy as a building block rather than one agent trying to do everything.

What does this cost to run?

Lindy runs on credits, roughly a cent each. Paid plans start around $29.99/mo for 3,000 credits shared across a team, with top-ups available if a busy month needs more; the free trial's starting credits are enough to build and test this guide's agent.

Can someone set this up for me instead of building it myself?

Yes. RapidDev builds and hardens Lindy agents, including the confirmation and audit pieces most tutorials skip. A free 30-minute consultation is the fastest way to scope your version.

RapidDev

Talk to an Expert

Our team has built 1,000+ apps. Get personalized help with your project.

Book a free consultation
Matt Graham

Written by

Matt Graham · CEO & Founder, RapidDev

1,000+ client projects delivered. Columbia University & Harvard Business School alumnus, U.S. Navy veteran. About the author →

Learning is great. Shipping is faster with help.

Our engineers have built 1,000+ apps on your platform and the tools around it. If your project needs to be live sooner than your learning curve allows — book a free consultation.

Book a free consultation

We put the rapid in RapidDev

Need a dedicated strategic tech and growth partner? Discover what RapidDev can do for your business! Book a call with our team to schedule a free, no-obligation consultation. We'll discuss your project and provide a custom quote at no cost.