Claude skill
Reduce bounce rate on a stale list
When bounces start climbing, re-verify the list, split it into segments by risk score, and give the user a written re-send policy: who to send to now, who to warm up slowly, and who to suppress for good. The aim is fewer hard bounces and a protected sender reputation.
Install
One command.
Installs into ~/.claude/skills for Claude Code. In Claude, upload the downloaded file under Settings → Capabilities → Skills.
npx ravn skill install reduce-bounce-rate
When to use
- The user's email tool reports a rising bounce rate, or a send was paused for bounces.
- A list has not been mailed in months, or it was last verified long ago.
- "Why are we bouncing so much and what should we do?"
For a one-off check of a fresh list, verify-email-list is enough. This skill adds segmentation and an ongoing policy.
Before you start
- Check the connection: call
get_accountwith{}or runnpx ravn whoami. - Costs: 1 lookup per unique address. On the Free plan, lookups are 1,000 in total; on Ravn ($24/month) 10,000 lookups a month are included, then $1 per 1,000, up to the spending cap (
ravn cap <dollars>). - Ask for the bounce report from the user's sending tool if they have one. Hard-bounced addresses should be suppressed whatever the re-check says.
Steps
- Remove known bad rows first, for free: hard bounces from the report, unsubscribes and spam complaints. Keep them in
suppress.csv. - Re-verify everything else. Dry run, sample, full:
npx ravn enrich list.csv --tool validate_email --column Email --dry-run npx ravn enrich list.csv --tool validate_email --column Email --limit 10 --out sample.csv npx ravn enrich list.csv --tool validate_email --column Email --out reverified.csv
- Segment by
rw_verdictandrw_risk_score(A is 90 and above, B 75 and above, C 55 and above, D 30 and above, F below 30): - Send now:validwith risk score A or B. - Send slowly:validwith score C. Mail in small batches, to recently engaged contacts first. - Hold:risky(usuallycatch_all: true) andunknown. Only mail if the contact has opened or clicked recently; otherwise leave out. - Suppress:invalid(for examplemailbox_not_found,no_mx,domain_not_found),disposable: true, and any score D or F. - Look at the reasons for the suppress group. A large number of
domain_not_foundorno_mxusually means old companies that closed or changed domains. If the user wants, those people can be re-found with find-work-email on their new domain. - Write the policy for the user in plain words: - Re-verify any address not mailed in the last 90 days before the next send. - Verify new addresses at the point of capture (a single
validate_emailcall on sign-up). - Never re-add suppressed addresses. - After each send, add new hard bounces to the suppression list. - Offer to re-run the same command on a schedule the user chooses, using the same file names so the comparison is easy.
Output
send-now.csv,send-slowly.csv,hold.csv,suppress.csv.- Each keeps the original columns plus
rw_status(ok,not_found,error,dropped),rw_verdict,rw_risk_score,rw_reason,rw_catch_all,rw_disposable,rw_role_accountandrw_mailbox_checked. - A short report: counts per segment, the top reasons for suppression, and the written re-send policy.
Rules
- Suppression is one-way: unsubscribed, complained, hard-bounced and opted-out contacts never go back on the send list. See /privacy#optout.
- Drop invalid and risky addresses from the main send. Do not relabel
unknownasvalid. - No FCRA uses.
- If the list is larger than the lookups left in this window, tell the user the run will pause until the reset.
- On a 429
fair_use_exhausted, stop and tell the human. Rows not reached are markeddropped; rerun to finish.
Example prompt
Our last newsletter had an 8% bounce rate and Mailchimp warned us. The list is 14,000 people and some haven't been emailed in a year. Fix it and tell us how to stop this happening again.
More skills
Install them all with npx ravn skill install --all.