Guide
Send Yourself Follow-Up Reminders
Find sent messages that never got a reply with nylas email threads and search, then schedule an email follow-up reminder to yourself on a cron so no thread goes cold. No CRM, no SMTP setup.
Written by Hazik Director of Product Management
Reviewed by Qasim Muhammad
Why send a follow-up reminder to yourself instead of using a CRM?
A follow-up reminder to yourself is a scheduled email you send to your own inbox when a thread you started has gone quiet. It needs no CRM seat and no browser tab — a shell script reads your sent mail, finds threads with no reply, and queues a nudge. Brevet's widely cited analysis found 80% of sales need five follow-ups, yet 44% of people stop after one.
The gap that kills threads is memory, not effort. You send a message, the recipient goes silent, and three days later the thread is buried under 121 new emails — the average daily volume the Radicati Group reports for a working professional. A self-reminder turns “I'll circle back” into a dated event in your own inbox. The CLI handles it from a cron line, so the reminder fires whether or not your laptop is open. Everything runs against your connected account's API, so there is no separate task tool to keep in sync.
How do I find sent messages that got no reply?
Find unanswered threads by listing recent conversations and checking which ones you sent last. The nylas email threads list command returns conversations with their latest message, and a thread where the most recent sender is you is a candidate for follow-up. The default page size is 10 threads, so raise --limit to scan a wider window.
The command below pulls 50 recent threads as JSON so a script can inspect each one. A thread's latest message carries the participants and direction, which tells you whether the last word was yours. Gmail exposes the same structure through its threads endpoint, so the logic maps cleanly to provider behavior.
# Pull recent threads as JSON for a script to inspect
nylas email threads list --limit 50 --json > threads.json
# Show subjects of threads you can review for staleness
nylas email threads list --limit 50 --json \
| jq -r '.[] | .subject'To narrow the scan to a single conversation you care about, search your own outbound mail instead. The next section pins down exactly which threads have no inbound reply since you wrote.
How do I confirm a thread has no reply since I last wrote?
Confirm a thread is stale by searching for any inbound message from the recipient dated after your last send. Run nylas email search with --from set to the contact and --after set to your send date. Zero results means the thread is cold and a reminder is warranted.
The snippet below counts replies from one contact since a fixed date. The search returns in under a second for a typical mailbox, and jq 'length' turns the result into a number you can branch on. A count of 0 is the trigger to schedule a nudge; anything higher means the contact already answered and no reminder should fire.
CONTACT="dana@client.example"
SINCE="2026-06-02"
REPLIES=$(nylas email search "*" \
--from "$CONTACT" \
--after "$SINCE" \
--json | jq 'length')
if [ "$REPLIES" -eq 0 ]; then
echo "No reply from $CONTACT since $SINCE — schedule a follow-up"
fiDate filters in search use YYYY-MM-DD format, so a script can compute “three business days ago” with date -d and feed it straight in. Microsoft Graph exposes the same inbound-message listing for Outlook accounts.
How do I email myself a follow-up reminder on a schedule?
Email yourself a reminder by sending to your own address with the --schedule flag, which holds the message provider-side until the time you name. Pass a relative duration like 2d or an absolute time like tomorrow 9am, and the nudge lands in your inbox exactly when you want to act.
The command below queues a reminder for two days out with the stalled contact and original subject baked into the body. Because the send is queued on the provider, the script does not need to keep running — a closed laptop or a finished CI job won't drop it. Tag each reminder with --metadata so you can group every follow-up later; keys key1 through key5 are indexed and filterable.
ME="you@yourteam.example"
CONTACT="dana@client.example"
SUBJECT="Pricing proposal"
nylas email send \
--to "$ME" \
--subject "Follow up: $CONTACT — $SUBJECT" \
--body "<p>No reply from $CONTACT on "$SUBJECT". Send a nudge or close the loop.</p>" \
--schedule 2d \
--metadata key1=followup-reminder \
--yes
# Review everything queued for later delivery
nylas email scheduled list --jsonUse nylas email scheduled cancel to pull a reminder if the contact replies before it fires. Scheduling beats a local timer because the provider owns the queue, not your machine.
How do I run the whole follow-up loop on a cron?
Run the loop unattended by wiring the detect-and-schedule steps into one script and triggering it from cron. A single daily run at 8am scans your sent threads, checks each for a reply, and queues a reminder only for the ones still cold. One cron line replaces a CRM's reminder engine for personal follow-ups.
The script below iterates a list of open threads, each line holding a contact and the date you last wrote. For every contact with zero replies since that date, it schedules a reminder two days out. A daily cron tick covers any cadence measured in days, and the run finishes in seconds for a few dozen threads.
#!/usr/bin/env bash
set -euo pipefail
ME="you@yourteam.example"
# open.tsv columns: contact_email <tab> last_sent_date <tab> subject
while IFS=$'\t' read -r contact since subject; do
replies=$(nylas email search "*" \
--from "$contact" --after "$since" --json | jq 'length')
if [ "$replies" -eq 0 ]; then
nylas email send \
--to "$ME" \
--subject "Follow up: $contact — $subject" \
--body "<p>No reply from $contact on "$subject" since $since.</p>" \
--schedule 2d \
--metadata key1=followup-reminder \
--yes
fi
done < open.tsvSchedule it with a crontab entry such as 0 8 * * 1-5 to run weekdays at 8am. For headless hosts, authenticate with an API key and grant ID via environment variables so the job runs without an interactive login, the same pattern any CI runner uses.
Next steps
- Automate Scheduling and Email Follow-Ups — Find a shared slot, send the calendar invite, and chase…
- Send Payment Reminder Emails from CLI — Schedule dunning emails with one command, gated on a live invoice…
- Automate sales follow-up emails — run a tracked outbound cadence and stop it when a prospect replies
- Work with email threads — list, read, and mark conversations from the terminal
- Track email opens and replies — read open and click signals to score who engaged
- Export email to SQLite — store sent mail locally to query which threads need a nudge
- Relay email to a webhook — push reply events to your own service in real time
- Command reference — every flag, subcommand, and example
- Gmail API threads.list — the thread structure that tells you who sent last
- Microsoft Graph list messages — the Outlook-side endpoint for finding inbound replies
- RFC 5322 — the message header fields that define a reply and its thread