How to build a lead capture CRM for your business with Replit (no coding required)
Build the whole thing in one Replit workspace, from the first message to the day your form goes on a live page. Embeddable forms, leads that arrive with a source and an owner, and routing to your reps, on a Postgres database Replit provisions for you and publishes from the same tab.
Replit
$ Build me a lead CRM: a form I can embed on any website, leads that arrive with their source and status, and each new one handed to the next rep in turn. Add a database for it.
- Database provisioned in the workspace
- Public form accepted
- Ready for you to publish
What a lead capture CRM actually is
It is the front door of your sales process: the forms, pages and chats a stranger arrives through, and the single record each of them turns into so that somebody can follow up.
Without one, that first contact lands in four places at once. The website form emails the office inbox, the chat widget keeps its own history, the list from last month’s conference is still a spreadsheet, and nobody can say which of those people has been called. The leads do not vanish, they go quiet.
Collecting names is the easy half. The job is putting each new one in front of the right person while they still remember filling the form in, and knowing afterwards which of your sources produced business rather than traffic.
Every way in, one record
A form on your site, a page behind an ad, a chat with a visitor, and a spreadsheet you import all end up as the same kind of lead, carrying the same fields.
An owner within minutes
The lead is assigned as it arrives rather than at the next stand-up, so the person who has to make the call already knows it is theirs.
Sources you can compare
Each lead keeps where it came from, so you can tell which form, page or campaign paid for itself and which one only produced clicks.
Why the first minutes decide it
66.7%
of qualified form submissions turned into a booked meeting when the form handed the lead straight on, against an industry average the same report puts at 30%. That is Chili Piper’s 2025 benchmark across nearly four million submissions, measured on its own customers, so read it as what closing the gap is worth rather than as a neutral survey.
Chili Piper, 2025 benchmark of its own customers · checked August 2026
The parts every lead CRM is built from
Six pieces, and you describe each one rather than write it. Knowing what they are is what stops the first prompt producing a form with nowhere to send its answers.
The ways a lead can reach you
A form on your own site, the same form embedded on somebody else’s, a landing page sitting behind an ad, a chat widget in the corner of the screen, and a spreadsheet of the people you already met. Each one writes the same record, which is what makes the rest of the app possible.
One lead, with its history under it
Name, email, company, source and status on the record, and every form fill, chat, email and change of owner listed underneath in the order it happened.
A rule that decides whose lead it is
Each rep in turn, or split by territory, product or company size. Which rule you pick matters less than having one, because an unassigned lead is a lead nobody calls.
Enrichment and a score
An email address on its own is thin material for a phone call. Filling in what the domain tells you, then ranking how warm each lead looks, is what lets a rep start at the top of the list instead of the top of the alphabet.
Follow-up that carries on without you
A short sequence of emails with a gap between them, stopping the moment somebody replies, plus the reminders that put the next call in front of the rep who owns it.
Reporting by source
Which form, page or campaign produced the leads that turned into business. Without it you are tuning a number that only counts submissions.
Own the front door or rent it four times
The usual lead stack is four subscriptions, and each one meters something different: responses on the form tool, visitors on the landing-page builder, conversations on the chat widget, and seats on the CRM they all push into. None of those is the size of your team, so the bill follows your marketing. Owning it makes the four one app. Here is the trade-off, side by side.
Build your own
One app that takes the lead in, decides who owns it, and follows it up, on a database you control. With an AI coding tool writing the plumbing, that build is measured in days rather than months.
- One bill for the database and the host, whatever your marketing does that month
- A form that writes straight into your own leads table, with no integration in the middle
- Routing that matches how your team is actually split, rather than the two or three splits a vendor offers
- Every lead, chat and campaign in one database you can query
- Add your own AI on the model you choose: enrichment, scoring, a drafted first reply
- You own the code and the data outright, and can take either elsewhere whenever you like
Buy the stack
HubSpot · Typeform · Tidio · UnbounceEvery piece exists as a product already, polished and live this afternoon. You pay four meters for it and you maintain the joins between them.
- Live this afternoon: sign up, build a form, paste the snippet
- Polished editors, ready-made templates, and vendor support included
- Deliverability, spam filtering and uptime are somebody else’s problem
- Four meters rather than one bill: responses, visitors, conversations, and seats
- A lead has to travel between products, so somebody keeps those connections working
- The parts that make it a system rather than a form, meaning routing, sequences and source reporting, sit on the higher tiers
- Your leads live on their servers, exported on their terms
The one vendor here that covers the whole stack, and the step up is steep. Starter is $7/seat/mo on annual billing and $20 month-to-month, holding 1,000 marketing contacts. The routing, sequences and campaign reporting most teams arrive for sit on Professional, at $800/mo annual or $890 monthly for three seats, plus $45/mo for each seat after that and a one-time $3,000 onboarding fee.
hubspot.com · checked August 2026
Priced by how many people answer rather than by how many of you use it. Basic is $28/mo on annual billing ($39 month-to-month) and stops at 100 responses a month, so a paid plan can run out because your marketing worked. A thousand responses means Plus at $56/mo annual ($79 monthly).
typeform.com · checked August 2026
Live chat, metered on conversations a person answers. Free covers 50 a month and Starter is $24.17/mo month-to-month or $290 for the year, for 100. Growth starts at $49.17/mo for 250. Ten seats come with every tier including Free, so what prices this one is your traffic rather than your headcount.
tidio.com · checked August 2026
Landing pages, priced on how many people see them. Starter is $22/mo annual ($29 monthly) for one seat, one domain and 500 visitors a month, so an ad that starts working moves you to Build at $74/mo annual ($99 monthly) for 20,000. Conversions are unlimited on every plan, which means the ad spend in front of the page sets this bill rather than the leads coming out of it.
unbounce.com · checked August 2026
Rule of thumb: if your lead volume moves around, or the four products above are already talking to each other through a fifth, building your own pays for itself inside a year and never charges you by the response again. If you are one person still finding out whether anybody wants the thing, rent it for now and come back when a meter starts deciding your marketing for you.
Why build with Replit
Add your API keys in the settings panel and click Publish. Your backend, database, and domain go live instantly in one workspace.
Replit’s Agent handles the database, the access rules, and the hosting from one chat, in the same workspace the app ends up living in:
Describe
Tell the Agent what to build, in plain language.
Watch
It writes the code, sets up the database, and shows the app running live.
Try it
Use the real app in the preview rather than a mockup.
Publish
Take it live on Replit’s own hosting, or ask for the next change.
The build and the place it ends up running are the same workspace throughout, so there’s no separate hosting account to set up later.
One workspacebuilds, runs, and hosts it
Replit is the one tool here that also deploys what it builds. Publishing takes the same project live on Replit’s own infrastructure, with a working domain, uptime monitoring, and security scanning included.
Managed Postgres with 20GB included free
Ask the Agent to add a database and it creates the schema and wires your app to it. What you get is a real, fully-managed SQL database rather than a mocked one.
Up to 10 Agent sessions in parallel (Pro)
Core allows up to 2 parallel Agent sessions and Pro allows up to 10, so more than one part of the app can be worked on at the same time.
Pay a developer, or do it with AI
Pay Once, Own Forever. Avoid recurring per-seat subscription fees and software tier upgrades as your team grows.
Hire a developer
Custom build, from scratch- Developer
- ~$13k-$53k
- Supabase (backend)
- Free tier · $25/mo (Pro plan)*
- Hosting
- $0 free tier
- Build time
- ~265 hrs of their work
~$13k-$53k to build, then ~$25/mo after launch
Seniority moves that range further than scope does. It is our ~265-hour estimate priced against the survey below, where North American freelancers run $40 to $150/hour by experience and agencies add another 20-40% on top, so the realistic floor is about $50/hour and an agency putting a senior on the job lands near $200. All of it is spent before a single lead arrives. After launch there is only the database and the host to pay for.
Build it with Replit
From scratch, with Replit- Replit
- Free (daily credits) to $25/month (Core) or $100/month (Pro)
- Database (built-in Postgres)
- Free to start · 20GB included
- Hosting (Replit Deployments)
- Billed separately, on top of the plan
- Your time
- ~125 hrs
Free to try the idea, ~$25-$100/month on Core or Pro while you build a real one, then whichever plan (plus any deployment cost) you keep using
Replit’s plan price and its credit grant are the same number, not a subscription plus a separate credit purchase: Core is $25/month for $25 of monthly credits (or $20/month billed annually), Pro is $100/month for $100 of monthly credits (or $95/month annually). Once you publish, Replit bills hosting through its own Deployments separately, on top of whichever plan you’re on. Budget for it as a second line, not folded into the $25 or $100.
* Supabase’s free tier is a building tier rather than a running-a-business tier: 500 MB of database, 2 active projects, and a pause after a week without activity. That pause matters more here than on most apps, because the form embedded on your website goes down with the project, and a lead that arrives while nobody was signed in is not queued anywhere. The Pro plan, from $25/mo, keeps it awake.
Both columns end the same way: the code is yours, nothing charges you by the response, and the thousandth lead in a month costs exactly what the first one did. The difference is whose hours go in: a developer’s, invoiced at $13k-$53k, or your own, spent describing the app and checking what comes back.
Prices and rates from supabase.com, developex.com and replit.com, checked August 2026.
Decide before you build
Six questions about how leads reach you and what happens next. None of them is technical, and all of them are cheaper to answer now than after a thousand records exist. Write your answers down before the first prompt.
Which doors you open
A form on your site, the same form embedded elsewhere, a landing page behind an ad, live chat, an import. Each one is a real piece of work, so decide which you actually need. Most teams start with a form and an import, and add chat once somebody is free to answer it.
What a lead has to tell you
Every field you ask for costs you completions, and every field you skip costs a rep a phone call. Settle the shortest list that lets somebody decide whether to follow up, plus the source, so you can compare where your leads come from later.
Who gets the lead
Each rep in turn is the simplest rule and works until territories or products differ. Decide the rule now, along with what happens when the chosen rep is away, because an unassigned lead sits in the list looking exactly like a handled one.
Consent, and how you prove it
Whether somebody has to confirm by email before you write to them is a legal question in most of Europe and a deliverability question everywhere else. Decide it up front: it changes the form, the record, and what your first email is allowed to be.
What happens when nobody replies
How many follow-ups, how far apart, and what stops the sequence. A reply should stop it, and so should a rep marking the lead dead. Agree that before you build it, because a sequence that keeps writing to somebody who already answered is worse than no sequence.
What a bad week looks like
Not your average volume, your worst one. A campaign that works, a post that travels, or a bought list arriving at once are what strain imports, indexes and your Supabase tier. Knowing the peak now saves reshaping the schema after it happens.
Comparing your build options
The tool decides how much of this build is setup you do twice. Here is one lead CRM three ways: entirely by hand, on a UI kit that ends at the screens, or inside Replit, where the database, the app and the eventual publish all sit in one workspace.
Most of the money goes on logic nobody ever sees. A stranger has to be able to write into your database without being able to read a single row back out of it. The same person filling in the same form twice has to arrive as one lead rather than two. The rep who gets it has to be picked by a rule rather than by whoever happens to be looking. All of that is code, and a mistake in it loses a lead you paid to get.
A starter kit hands you the screens: a dashboard, a table of leads, a settings page. It knows nothing about where those leads come from. The form that feeds the table, the rule that decides whose lead it is, and the checks that keep one rep out of another rep’s list are still a developer’s job.
You describe what the app should do and the Agent writes it, provisioning its own Postgres when the data needs somewhere to live rather than sending you to another dashboard first. The workspace has a real address, so you can open your own form in another browser as a stranger would and confirm that submitting works while reading anything back does not.
Estimate your exact build timeframe
Plenty of teams need less than all of this. If every lead you get arrives through one form, or you would rather answer chats in the tool your website already has, untick those two and the estimate drops with them.
Your estimate
125 hrs
start to finish
Based on the 8 of 8 features you’ve selected, plus ~31h of groundwork. Toggle any on the left to watch the number move, and open the groundwork row to untick what you have already, such as a database that is already running or going live if you are only building a mock-up for now.
A rough estimate, not a quote. Real time depends on how much you customize and how clean your data is.
Let’s set up the tools you need
Replit runs entirely in the browser, and it’s the one tool here that also hosts what you build, so no GitHub account is required first. Before step 01: an account and a plan. A database comes later, the moment your app actually needs one, and GitHub whenever you want a copy of the code outside Replit.
Replit account
Sign up and you land in a workspace with an Agent chat, the code, and a live preview side by side, with nothing to install.
Sign up for ReplitReplit subscription
Starter’s free daily credits are enough to try an idea, not to finish one. Core is $25/month billed monthly, or $20/month billed annually, for $25 of monthly credits and up to 2 parallel Agent sessions. Pro is $100/month monthly, or $95/month annually, for $100 of monthly credits, more collaborators, and access to the strongest available models. The price you pay and the credits you get are the same number on both plans, so you have no separate subscription-plus-credits split to work out.
Compare Replit plansReplit database (Postgres)
Every Replit app includes its own managed Postgres database with 20GB of free storage. Ask the Agent to add one and it creates the schema and connects your app to it, with no separate account to create anywhere else.
Replit’s built-in database, Replit docsGitHub connection
Not needed to start, and not needed as an undo either, because Replit checkpoints the whole workspace as the Agent works. Connect a repository from the Git pane, free on every plan, and a copy of the real code lives outside Replit under your own account. Worth doing once the project is one you would hate to lose.
Using the Git pane, Replit docsThe first two are all you need to start. Everything here stays inside the one browser tab, the app included once you publish it, and the GitHub copy is the one deliberate exception.
Build your lead CRM core, prompt by prompt
Everything below happens in one workspace: the database, the app, and later the publish. You describe each piece and the Agent builds it. The order is what a lead is, then who on your team reaches it, then the door strangers come through, then the form and the routing.
- 01
Start the workspace and fix the vocabulary
No installs and no separate database account. The first message is worth spending on what your words mean, because every later one is read against it.
PromptSet up the projectStart a React, Vite and TypeScript project with Tailwind. This is a lead capture CRM, so hold to these words throughout: a lead is a person who might buy, a form is what collects them, a submission is one raw set of answers, an activity is anything that happened to a lead, and a rep is a salesperson who owns leads. Do not create a database yet. Get the app booting and tell me the table shape you would use so I can correct it first.
Asking for the shape before the database costs one message and saves a rename that would otherwise run through every screen.
- 02
Ask for a database, and say what goes in it
This is the step that differs most from the other five guides: the database is provisioned inside the workspace on request, so there is no second account to open and nothing to copy between dashboards.
PromptProvision the database and set up your recordsAdd a Postgres database to this app and create the tables. Leads: name, email, company, phone, source (form, chat, import or manual), status (new, contacted, qualified, converted or rejected), a score, and the rep it is assigned to. Forms: title, slug, published flag, and fields as JSON. Submissions: the raw answers, the form they came from, and the lead they created. Activities: a lead, a type and a note. Every table gets a created_at. Show me the SQL before you run it.
The database lives in this workspace rather than in a separate service, so the connection details go into Secrets rather than into a file you copy across.
- 03
Add sign-in and the two roles
A Replit build runs its own small backend, so sessions live on your server rather than with a hosted identity service. An admin who runs everything and a rep who works their own leads.
PromptAdd logins and the two rolesAdd email and password sign-in to the app: sign-up, login, logout, a session that survives a refresh, and a guard that sends signed-out visitors to the login page while leaving the public form route reachable by anyone. Add two roles, admin and rep, in their own table rather than on the user record itself, and a server-side helper that answers whether a given user holds a given role, so the rules in the next step can rely on it. Put the session secret in Secrets rather than in the code.
The guard has to let the embedded form through. Say so, because a guard added later is the usual way that page stops working.
- 04
Open the public door, and only that door
The awkward requirement at the centre of this app. A stranger with no account has to create a row and must not read one, and on this stack that is checked twice: once by your server and once by the database.
PromptLock the tables to the two rolesTurn on row-level security for leads, forms, submissions and activities, and have the server announce who is asking at the start of each request so the policies can be written against it. A rep may read, add and edit only the leads assigned to them. An admin reaches all of them. Put an explicit check on every insert and update, so no one can file a row under another rep’s name or move an existing lead onto them. Every route must rely on these rules rather than filtering in the page.
PromptLet a stranger write one row and read nothingNow the public path. Add one unauthenticated route that accepts a form submission, writes a submission row, and returns nothing but success. No unauthenticated route may read leads, activities, form content or users, and the browser must never talk to the database directly. Create the lead from the submission on the server. Then show me how to prove it with no session at all: submitting should succeed, and any attempt to read leads should come back empty rather than with an error I could mistake for a network problem.
Get this backwards and everyone who ever filled in your form is readable by anyone who finds the route.
- 05
Build the form builder, the embed and the routing
What your visitors meet, and the rule that decides who calls them. Both in this step, because a form nobody owns is a form nobody answers.
PromptBuild the form builder and its embedBuild the form builder: a screen where I add fields (text, email, phone, select, checkbox), mark which are required, and publish. Add a public route at /embed/forms/:slug rendering only that form, with no navigation and no app chrome, plus an Embed tab on each form showing the iframe snippet to paste onto another site. Submitting posts to the unauthenticated route from the last prompt and shows a thank-you state rather than a blank screen.
PromptAssign each new lead to a repAdd the server-side step that turns a new submission into a lead: map the answers onto the lead fields, set the source, check whether that email is already a lead and attach an activity to the existing one rather than creating a duplicate, then assign it to the next active rep in turn. Make the assignment mode a setting whose options are round-robin and unassigned, and record every assignment as an activity so the history shows who got what and when.
Building the rule as a setting rather than as code is what lets you move to territory or product routing later without reopening the capture path.
- 06Destination
Try it as a stranger, then publish
Test it from another browser with no session, on the workspace address, before you publish. Then look hard at who the published app answers to, because a form is meant to be public and the rest of it is not.
PromptWalk it end to end and plan what is nextWalk me through testing the whole flow. Signed in as an admin, publish a form. Then open its embed address in a private window with no account and submit it. Confirm the lead appears with the right source, that a rep was assigned, and that the same email twice makes one lead with two activities rather than two leads. Sign in as that rep and confirm they see only their own. Then explain what Publishing exposes and how to keep the app itself private while the embedded form stays open to anyone, and finish with what to build next in priority order.
No lead list to leak, no secret key to hack
A lead CRM has a database, logins and a public form that strangers write to, so here is how your app stays secure and how to protect sensitive client data using simple rules to control who can see every lead versus who can only work their own.
A door that only opens outward
One unauthenticated route accepts a form submission and returns nothing but success. Every other route requires a session. The browser never speaks to the database at all here, so a visitor who opens the browser tools finds one route that takes data and none that gives any back.
A public form is a public target
A form anyone can reach is a form robots will find, so budget for the three defences that actually work: a hidden field a person never fills in, a limit on how often one address may submit, and a check before a lead is created twice. None of them is hard to ask the Agent for, and all of them are much harder to add once your list is full of junk.
Logins your server owns
Sign-in is built into the app rather than delegated to a hosted identity service, which puts every session on your own server. That matters for the next item: your server, and not a third party, is what knows whether the person asking for a lead is the rep it belongs to.
Two roles before you need three
An admin who sees every lead, form and campaign, and a rep who works the leads assigned to them. That split covers most teams for a long time. Ask for a manager who sees one team, or a read-only account for a client, when the day comes that you need it.
Where the checking actually happens
Postgres is Postgres, so the access rules work the way they always do. What changes is where identity comes from: nothing hosted is handing the database a signed-in account, so the Agent makes your server announce who is asking at the start of each request and writes the policies against that. Your server catches it first, the database catches it second.
Administrative keys stay protected
Nothing in the browser holds a database credential, because the app talks to its own backend instead of to Postgres directly. Connection details, the mail sender, and any AI provider key go into Replit’s Secrets tool, readable by that backend and by nothing else, never committed and never bundled.
One rule outranks everything above it: anything that would let a caller bypass your access rules stays in Secrets and on the server. If a key ever turns up in the app, in the repository, or pasted into a support ticket, rotate it before you do anything else.
What speeds the build, and what slows it
Speeds the build
- One small, specific request per message, checked in the live preview before the next one
- Letting the Agent provision the database from the chat instead of wiring one up by hand
- Running two Agent sessions in parallel on unrelated parts of the app, once your plan allows it
- Rolling back to a checkpoint the moment a change goes wrong, instead of unpicking it by hand
- Reviewing what Publishing changed, meaning the domain, who can reach the app, and the machine it runs on, before the first release
Slows the build
- Asking for the whole app in one message instead of one piece at a time
- Building screens for data that isn’t in the database yet
- Running unrelated Agent sessions against the same files at the same time
- Letting several risky changes stack up before checking whether any of them actually broke something
- Publishing without checking who the app is visible to first
Connecting GitHub (Optional)
Every change in Replit is saved automatically without any technical setup. Checkpoints are the day-to-day undo. You only need to link GitHub if you want a private copy under your own control or plan to hand the codebase over to external developers.
Every milestone is already saved
Replit’s Agent creates a checkpoint automatically at key points as it works: a full snapshot of the files, the configuration, and even the AI conversation itself, not just the code.
Checkpoints and rollbacks, Replit docsRolling back restores the whole workspace
One click returns your project to an earlier checkpoint (files and configuration together, and optionally the database), which is broader than a typical code-only undo, so a rollback after real data has changed is worth a second look before you confirm it.
GitHub keeps a copy outside Replit
Connect a repository from the Git pane, free on every plan, and stage, commit, and push changes back to GitHub with a click, or pull in anything changed outside Replit.
Using the Git pane, Replit docsIt’s also how an existing project gets in
Point Replit at a public repository’s URL for a fast import, or use the guided import for a private one. Either way, Replit detects the stack and installs everything on its own.
Import from a provider, Replit docsYou rarely type git commands
The Git pane’s buttons cover staging, committing, and pushing. If you’d rather type them yourself, the workspace Shell stays in sync with whatever the pane just did.
Going live without external hosting
Skip third-party hosting and external database setup. Your database, backend, and domain live in the same Replit workspace. Just click Publish to go live.
| Host | Best for | Notes | Free tier |
|---|---|---|---|
| Autoscale | A form that is quiet then busy | Scales up when a campaign lands and down to nothing overnight. The natural fit here, because capture traffic follows whatever your marketing did that week rather than your working day. | Metered - billed with your plan |
| Reserved VM | A form that must never be slow to appear | Dedicated compute that never sleeps, so the embedded form on somebody else’s page is never waiting on a cold start. Worth it once you are paying for the traffic that arrives at it. | By machine size - billed with your plan |
| Scheduled | The nightly jobs | Runs on a timer rather than answering requests, which is the right shape for the campaign steps that come due overnight or a digest of what arrived. Not for the app itself. | Metered - billed with your plan |
| Static | A front end with no server behind it | Files only, no server. It cannot run this app, which needs one for sign-in, for every access check, and for the route your form posts to. Listed so the cheapest option on the menu comes with the reason it is not for you. | Metered - billed with your plan |
All four are Replit, so the question is shape rather than supplier. Most people want Autoscale, moving to Reserved VM once the traffic is worth paying to keep warm, with Scheduled kept in mind for campaign steps that come due overnight. Before that first release, look hard at one thing Publishing controls: who the app answers to. This is the rare app where part of it has to be open to everybody and the rest of it must not be.
Your form can work in the workspace and show an empty box on your customer’s site. The embed is a frame pointing back at your published app, so if the deployment sends the headers that stop a page being framed, the form loads fine at its own address and renders as nothing everywhere you actually pasted it. Test it on a real outside page before you send the snippet to anyone, and if it comes back blank, ask the Agent to allow framing for the embed route only rather than for the whole app.
Your database is already part of the workspace
No connection to make and no account to open elsewhere. A Replit app can carry its own managed Postgres, asked for in the same chat that is writing the app around it.
| Service | Best for | Notes | Free tier |
|---|---|---|---|
| Replit Postgres | Data, built in | A managed Postgres database, 20GB included free. Asking for one is a sentence in the chat: it gets provisioned, the schema goes in, and the app is pointed at it, with no second signup and nothing to copy between dashboards. | Free to start · 20GB included |
Choosing how your mail actually gets sent
Your app writes the sequence and decides when each step is due. Handing that message to somebody’s inbox is a different job, and it belongs to an outside service. If your reps reply from their own mailbox, you need none of these, and capture and routing work perfectly without one.
The quickest of the three to wire up, and the free tier is genuinely enough to run a small sequence: 3,000 emails a month, capped at 100 a day, across three of your own domains. The daily cap is the one to watch, because a campaign that goes out to a big list in one batch meets it before the monthly figure does.
resend.com · checked August 2026
Built around delivery rather than volume, and priced accordingly: the free tier is 100 emails a month, which is a test rather than a plan. What you buy is separate handling for the mail people expect and the mail you decided to send, which is what stops one bad campaign taking your password resets down with it.
postmarkapp.com · checked August 2026
By a distance the cheapest per message, and the one that expects the most from you. New accounts get $200 of AWS credit for six months, attachments cost $0.12 a gigabyte, and a dedicated sending address is $24.95 a month. Reputation and bounce handling are yours to manage, so this is the right answer second rather than first.
aws.amazon.com · checked August 2026
Do the multiplication before you pick. A four-step sequence sent to a thousand new leads is four thousand messages, which sits inside Resend’s free tier and costs about forty cents on SES, so at that size the price is not what you are choosing between. What you are choosing is who takes the blame when mail stops arriving. Volume changes the answer, and it changes it slowly: at a hundred thousand a month the same four steps cost $10 on SES and about $90 elsewhere.
Add AI capabilities in one simple step
Securely route your AI API keys through a lightweight serverless function. Use simple prompts to automatically turn incoming client inquiries into enriched, scored leads with a one-line brief and a drafted first reply.
Turn an email address into something to call
A work address tells you the company before anybody picks up the phone. Filling in the name, the industry and a rough size from the domain is what turns a bare row into a lead a rep can prepare for.
Add one server-side "ai" function that talks to your AI provider, with the key held in server secrets and never anywhere the browser can reach. Then put an "Enrich" action on the lead view that sends the email domain and any fields we already have, asks for the company name, industry and rough size, writes them onto the lead, and marks personal-email domains as not enrichable rather than guessing. This runs on every new lead, so use the cheapest and fastest model tier.
Rank how warm each lead is
Reps work top to bottom. A score out of 100 with one line of reasoning behind it decides what that order is, from the fields on the lead and what the person has already done.
Add a "Score" action that sends the lead’s fields, its source, and its recent activity to the ai function, asks for a 0-100 score and a one-line reason, stores both on the lead, and colours the badge by band. Sort the leads list by score by default and let a rep override it. Scoring runs on every lead too, so keep it on the same cheap, fast tier as enrichment.
Draft the first reply
The first message back is the one that decides whether there is a conversation. A draft built from what the lead actually filled in beats a blank box, and the rep still edits it before it goes.
Add a "Draft reply" button on the lead view that sends what the lead submitted, the page or form it came from, and any chat transcript to the ai function, and returns a short editable first email in the rep’s own tone. Show it in a modal with copy and insert actions, and never send it automatically. This is everyday writing, so use a mid-tier model rather than the cheapest or the strongest.
A cheap model is plenty for most of the prompts above. Save Pro’s stronger models for the one or two spots where the extra reasoning actually pays for itself. Add any provider key through Replit’s own Secrets tool rather than hard-coding it, and keep every AI feature behind one server-side function so a single key covers the whole app.
Get a head start with our template
That was the from-scratch path, start to finish. If you would rather not build the capture side before you can use it, our ready-made template begins past the scaffolding, and your time goes into what makes it yours.
Lead CRM
The exact lead CRM this guide builds, packaged so you can open it, point it at your own backend, and make it yours from there. A lead-capture workspace where you bring leads in from forms, landing pages, live chat, and CSV import, enrich and score each one with AI, run multi-step email campaigns, and route fresh leads straight to your sales reps. An admin side oversees everything while each rep works their own leads, tasks, and chats.
The key benefits of starting with a template
The hard, invisible parts are built and working already, so your time goes to the form your visitors see and the rule that decides who calls them.
Building the core from scratch
~125 hrs
Opening the template, already built
~1 hr
Pay Once, Own Forever. Build exactly what your team needs without renting a monthly SaaS subscription, paying per-seat fees, or dealing with platform lock-in.
A working capture flow on day one
Open an app that already takes a submission, creates the lead, and shows it in the list. The form builder, the embed, the chat and the CSV import all work before you change anything.
Admin and rep kept apart
The admin side oversees every lead, form, chat and campaign, while a rep sees only what is assigned to them. The database enforces that split on every request rather than the screens hiding rows.
Campaigns and reporting already wired
Multi-step sequences, their open and reply figures, round-robin assignment, tasks and the source reports are built. Connect a mail provider when you want the sequences to actually go out.
Clean structure your AI can safely customize
The template follows clear, predictable rules, so you can ask your AI coding tool to add a field, a channel or a routing rule without putting your access rules or your source numbers at risk.
From founders who build on our templates
Every client asks for the same thing: a form on their site that actually reaches a human. We used to wire up three services for that and then maintain the connections between them. Now we start from this, restyle it, point it at the client’s own database, and hand it over inside a week.
Matt GrahamFounder & CEO, RapidDevCommon questions
No. Everything behind the screens (the tables, the access rules, the sessions, the server routes) gets written from plain-language prompts, and the Postgres database it writes into is provisioned inside this workspace on request. That is the one way this guide differs from the other five: there is no outside database account to open first.
Yes, and that is the usual case. The form is published at its own address on your app and pasted onto any other site as a short snippet, so it works on a WordPress page, a Squarespace site, or a page somebody else maintains. Read the going-live warning further up before you send that snippet out, because how the app is published decides whether the form renders on somebody else’s page.
Three things, all of which you ask the Agent for rather than build: a hidden field a real person never touches, a limit on how often one address can submit, and a check that stops the same person becoming two leads. Add them while the form is still new, because cleaning a list afterwards is far more work than filtering one now.
It writes and schedules them, and an outside service delivers them. The app decides what each step says and when it is due, then hands the message to a provider like Resend, Postmark or Amazon SES, with the credentials kept in Secrets. The section on sending mail above compares the three. If your reps reply from their own mailbox instead, you can skip that entirely.
Yes. Describe the roles you want, usually an admin and a rep to start with, and the accounts, the access rules and the lead assignment get built around them, so everybody signs in and sees only what they should.
Chiefly your Replit plan, plus a mail provider if the sequences go out. There is no separate database bill: Core is $25/month, or $20/month on annual billing, and 20GB of Postgres comes with it. Publishing the finished app costs extra on top of the plan. Both Replit and the mail provider bill you directly.
Only the accounts you create, and each of them only as far as its role reaches: a rep to the leads assigned to them, an admin to all of them. A visitor filling in the form can write their own details and read nothing at all. Since the database sits in your own Replit account, you are the sole controller of that data for GDPR purposes.
Yes. Import existing leads via simple CSV upload with automatic handling of messy spreadsheets: ask for an importer that matches your columns to the lead fields by name, whatever their casing or spacing, and lets you correct the rest before anything is written. Decide what happens when an imported address is already a lead before you run it, because that is the choice that keeps the list clean.
No lock-in. Replit provisions ordinary PostgreSQL, so a standard Postgres dump hands you every lead, form and activity in a shape any Postgres host will take.
No. You describe what you want in the chat, and the Agent handles the rest: the code, the database, and a live version of the app right there in the workspace. The setup section above covers the account and plan you need first.
Replit hosts it. Publishing takes the same project live on a Replit domain, or your own if you connect one, with monitoring and access controls included, so you never open a separate hosting account.
Starter’s daily credits and a paid plan’s monthly grant both refill on their own schedule. Hitting either limit mid-build doesn’t touch what you’ve already made. Move up a plan for more headroom right away, or wait it out.
References
Sources checked August 2026- 012025 benchmark report on demo form conversion rates, Chili Piper. chilipiper.com (published 2025)
- 02Marketing Hub pricing, HubSpot. hubspot.com
- 03Pricing, Typeform. typeform.com
- 04Pricing, Tidio. tidio.com
- 05Pricing, Unbounce. unbounce.com
- 06Pricing (Pro plan, free-tier limits), Supabase. supabase.com
- 07Web developer hourly rates 2026 (freelance and agency benchmarks). developex.com
- 08Pricing, Resend. resend.com (August 2026)
- 09Pricing, Postmark. postmarkapp.com (August 2026)
- 10Amazon SES pricing, AWS. aws.amazon.com (August 2026)
- 11Pricing (Starter, Core, Pro), Replit. replit.com
- 12Built-in database, Replit docs. docs.replit.com
- 13Publishing overview, Replit docs. docs.replit.com
- 14Deployment types, Replit docs. docs.replit.com
- 15Checkpoints and rollbacks, Replit docs. docs.replit.com
- 16Using the Git pane, Replit docs. docs.replit.com
- 17Import from a provider, Replit docs. docs.replit.com
- 18Secrets, Replit docs. docs.replit.com
This guide is general information. Third-party prices, plan limits, and market rates are quoted from the sources above and were last checked on the date shown. Vendors change them without notice, so confirm before you budget. Build hours and the cost estimates derived from them are our own estimates, not quotes. Testimonials are from named customers. The integration figures are illustrative. Replit is a product of Replit, Inc. Verify current capabilities and pricing before relying on them.