Build a lemlist alternative
Build a lemlist alternative with two email steps, a contact list, and a reply that stops the next send. Email is $69 a month. The dialer stays on the long row.
You can build a lemlist alternative as a contact list, two email steps, and a reply that cancels the next send. lemlist is that product. The catalog line is “A list, a few steps, and who replied.”
The card lists $69 to $109 a month. lemlist’s pricing lists Email at $69 a month through Multichannel at $109 a month, billed monthly. Annual Email is $55 and annual Multichannel is $87. The card leaves out Enterprise quotes and credit add-ons. The first estimate is 12 hours. The verdict is “The sequence is a list”.
Last time I wrote about vibe coding your own Webflow. That was a teardown. This one is a regular backlog topic. A lead database, LinkedIn steps, and a dialer stay on the skip row.
Build a lemlist alternative from two steps
The lemlist page splits the work into three rows.
The first row is 12 hours. Contacts, two steps, a send, and a reply. You import people you already know. The first email goes out. A reply stops the second one.
The second row is 4 days. Bounces, an unsubscribe, a third step, and send windows. Skipping a dead address, and waiting until Tuesday morning, can wait until one reply already cancels a step.
The third row is 1 month and up. A lead database, LinkedIn steps, and a dialer. The card calls that row the part to skip.
If you tell an agent to “clone lemlist”, it aims at the third row. Copy the prompt, then pin it to the first one.
Store Sequence, Step, Contact, SendAttempt, and Reply. The card names all five. A sequence is a name and an ordered pair of steps. A step is a wait in days, a subject, and a body that may include a first-name token. A contact is a name, an email, and a state: queued, sent, replied, or paused. A send attempt is one step for one contact, with a time and a result. A reply is the inbound note that sets the contact to replied and drops every later step.
The audience is one seller sending a short email sequence to a personal list. The same v1 also stands in for Instantly, Smartlead, and Woodpecker. The card lists all three and does not give them prices.
Guessed work emails are Hunter at $49 to $299 a month. Hunter’s pricing lists Starter at $49 through Scale at $299 a month. Yearly Starter is $34 and yearly Scale is $209. A broadcast to a list is Mailchimp at $20 to $350 a month on the card, in Build a Mailchimp alternative. This sequence is two notes to people Mateo already has in a CSV.
The guardrail is the rule you paste into the prompt. Send only to contacts still queued for that step. Honor pause and replied in the worker. Keep the provider credentials off the client.
How a lemlist alternative sends the next email
Mateo sells a November class and keeps the list himself. The sequence is “November intro”. Step 1 waits 0 days. The subject is “A note from Mateo”. The body is “{first}, two seats are left in the November class.” Step 2 waits 3 days. The subject is “One more note”. The body is “{first}, the two seats are still open.”
He imports a CSV on November 8, 2026. Priya Shah is [email protected]. Jules Okonkwo is [email protected]. A third row has the name Sam and no email. The preview shows Sam as an error, and Sam is not inserted. Priya and Jules land as queued for step 1.
The worker runs. Both are queued, neither is paused, neither has replied, so both get step 1. The token becomes the first name. Priya’s mail starts “Priya, two seats are left in the November class.” Each send attempt stores the step, the contact, and the time. Their state for step 1 becomes sent, and step 2 is queued for November 11.
Priya replies the same afternoon. The reply row stores her address and the time. Her contact becomes replied. The queued step 2 for Priya is cancelled. Jules does not reply, so his step 2 stays queued.
On November 11 the worker runs again. Priya is replied, so she is skipped. Jules is still queued and not paused, so he gets “One more note”. A paused contact would be skipped the same way, even if the date had arrived. The guardrail is that check, in the worker, not a flag the browser hopes the server will notice.
Your browser talks to one Astro app. Node.js plus Astro is the default. Use TanStack Start if React is your weekday language. The capability line on the card is Astro, Workers, and D1. The sequence, the contacts, the attempts, and the replies live in D1. The wait is a date, so a scheduled worker is the thing that sends step 2. The card names Cloudflare Cron Triggers for that run. The mail provider credential stays in the worker, not in the page.
Bounces, an unsubscribe link, a third step, and a window such as “weekdays after 9” are the 4-day row. A database of leads you did not import, a LinkedIn step, and a dialer are the month row.
Screens of a lemlist alternative
v1 needs the sequence, the import, and the contact table. A bounce column and a third step are the 4-day row.
The sequence
Mateo sees two steps, the wait, and the subject. There is no third step on this screen, and there is no LinkedIn action.
The import
The preview shows Priya and Jules as ready, and Sam as an error because the email cell is empty. Import writes the ready rows only.
The contacts
After the reply, Priya is replied and her November 11 step is cancelled. Jules is queued for that step. Search filters by email.
How a reply stops the sequence
Mateo imports, the worker sends step 1, Priya replies, and the November 11 run sends only Jules. The reply match is the address on the contact. A reply from someone who was never imported does not create a contact. The card’s non-goal leaves the lead database out, and this is the same rule at the inbox: unknown addresses do not join the sequence.
The send log is the attempt rows. Mateo does not type “sent”. If the provider accepts step 1 and the reply insert fails, the table shows sent without replied, which is the truth of what was stored. He can pause Jules before November 11. The next run reads that state and writes no attempt.
Start with the first row
Go to Build your own lemlist. Copy the Astro prompt, or TanStack Start if that is what you write.
Tell the agent the first estimate only. Contacts, two steps, a send, and a reply. Twelve hours.
Import the three-row CSV, send step 1 to Priya and Jules, record Priya’s reply, and confirm November 11 sends only Jules. Paste the queued-and-replied rule from How to write a coding agent prompt, and keep the three rows in How to scope a SaaS clone. If you need a dialer, a LinkedIn step, or a lead database, keep the plan you already pay for that part.