Playbooks · Recipe
Find a work email, verify it, and when the verifier says the domain is catch-all, fall back to find_personal_email on the person's LinkedIn URL. The finder and verifier are waterfall endpoints and their misses cost zero. find_personal_email is not a waterfall: it bills on every 2xx, including the ones that come back with nothing.
Last updated September 22, 2026
Pattern: email_finder → email_verifier → (catch-all only) find_personal_email
Credit math: Worked example at stated counts: 200 people. email_finder 200 calls, 130 hits, 70 misses billed zero = 650 credits. email_verifier on the 130 hits = 260 credits. 45 of those land on catch-all domains. find_personal_email on 45 LinkedIn URLs = 225 credits, charged on all 45 whether or not an address comes back. 5 credits per email_finder call, 2 credits per email_verifier call, 5 credits per find_personal_email call
ROI math: The first two steps cost you nothing on a miss. The third does. If 26 of those 45 fallbacks return an address, the 225 credits bought 26 personal emails, about 8.7 credits each. Convert at your tier rate on /pricing.
Owned internally by: The person who owns deliverability — RevOps, or whoever gets blamed for a bounce rate
Best for: Teams selling into companies on Google Workspace or a catch-all MX, where the verifier can never say yes and the work address is a coin flip
# 1. verify the work address you found
curl -X POST https://api.richapi.ai/api/v1/email_verifier \
-H "x-api-key: $RICHAPI_KEY" \
-H "Content-Type: application/json" \
-d '{"email": "dana.okafor@acme.com"}'
# 2. only if step 1 came back catch-all — this call bills either way
curl -X POST https://api.richapi.ai/api/v1/find_personal_email \
-H "x-api-key: $RICHAPI_KEY" \
-H "Content-Type: application/json" \
-d '{"linkedin_url": "https://www.linkedin.com/in/dana-okafor"}'
Find the work email for each person in this list and verify it.
For anyone whose domain comes back catch-all, look up their personal
email from their LinkedIn URL. Tell me how many fallback calls I paid
for and how many of them actually returned an address.
Sign up at app.richapi.ai and copy your key.
25 free credits, no card.
Run email_finder with first name, last name and company domain, or with the LinkedIn URL on its own.
Run email_verifier on every hit and store the status verbatim.
Do not collapse catch-all into valid.
Split the verified rows into three buckets: send, discard, catch-all.
Only the third bucket goes further.
Run find_personal_email on the catch-all bucket using each person's LinkedIn URL.
Budget for the full bucket, not for the hits.
A catch-all domain accepts mail at every address, so the mail server will confirm `dana.okafor@acme.com` and it will confirm `asdfgh@acme.com` with the same cheerfulness. No verifier on earth can resolve that with SMTP, ours included. Anyone who tells you their verifier "handles catch-alls" is selling you a guess with a confidence score stapled to it. So `email_verifier` labels it and stops. That label is the useful output. It means the address might be perfect and there is no way to prove it from outside, which is a different problem from "this address is wrong" and deserves a different response. **[Get 25 free credits — no card](https://app.richapi.ai)**
`find_personal_email` takes a LinkedIn profile URL and returns a personal address. It is a reasonable second shot at a person you cannot otherwise reach. Read this part twice, because it is where budgets go wrong. `email_finder` and `email_verifier` are waterfall endpoints. Providers run cheapest-first, and a 2xx carrying `success: false` comes back with `billed: false` and costs zero. **`find_personal_email` is not a waterfall endpoint.** It bills its flat per-call cost on any 2xx, including a 2xx that hands you nothing. Run it on 45 people and you pay for 45 calls, no matter how many addresses land. That asymmetry is why the catch-all bucket has to be a bucket. Running the fallback on your whole list, unfiltered, converts a free-miss workflow into a per-attempt one without anybody noticing until the invoice.
200 people, of which 45 land on catch-all domains. | Step | Count | Rate | Bills on a miss? | Credits | |---|---|---|---|---| | `email_finder` | 200 calls, 130 hits | 5 / call | No, waterfall | 650 | | `email_verifier` | 130 calls | 2 / call | No, waterfall | 260 | | `find_personal_email` | 45 calls, 26 hits | 5 / call | **Yes, every 2xx** | 225 | Rates used above: 5 credits per `email_finder` call, 2 credits per `email_verifier` call, 5 credits per `find_personal_email` call. The 70 finder misses cost zero. The 19 empty fallbacks cost 95 credits and bought nothing, which is the honest price of a second attempt. Per-credit rates differ by package tier, so convert on [the pricing page](/pricing) or model the whole chain in [the waterfall cost calculator](/tools/waterfall-cost-calculator).
**Treating catch-all as valid.** The cheapest mistake to make and the most expensive to recover from. A catch-all bucket dropped straight into a sequence is a deliverability experiment you are running on your sending domain. **Running the fallback on everything.** Someone reads "fallback" and wires it as a retry on every row. 200 calls instead of 45, 775 extra credits, most of them on people whose work email verified cleanly. **Sending the personal address like it is a work address.** A gmail address for a VP of Engineering is a real contact and a different register. Some markets and some jurisdictions will not thank you for it. That judgment is yours; we return data, we do not send anything. **Missing the LinkedIn URL.** The fallback needs one. If your rows came from a CSV of names and domains, you need [email to LinkedIn](/api/email-to-linkedin) or a profile search first, and that is another billable call before you get to the fallback.
If you want the background on catch-all handling itself rather than this specific chain, start at [catch-all email handling](/use-cases/catch-all-email-handling). If your list is still just names and companies, run [waterfall email then verify](/use-cases/waterfall-email-then-verify) first and come back for the leftovers. [The verifier endpoint page](/api/email-verifier) carries the request and response detail for the step that raises the catch-all flag. Coming from a per-lookup credit model, [the Hunter comparison](/alternatives/hunter) is the closest read. Everything else lives on [the use-case index](/use-cases).
**Which status value means catch-all?** Store whatever the verifier returns, verbatim, and branch on it. **Is the fallback address verified?** The response carries its own status field from the provider that answered. If you want an independent check, `email_verifier` on the personal address is another 2 credits and it is a waterfall call, so a miss there costs nothing. **Can I skip the work email and go straight to personal?** You can, and on most B2B lists you should not. The work address verifies cleanly for most people, and the finder charges you nothing when it fails. Starting with the billable call is starting with the expensive one. **Do I need a credit card?** No. 25 free credits on signup.
Verify a handful of addresses on a domain you already suspect is catch-all, and see what the label does to your list. **[Get 25 free credits](https://app.richapi.ai)**