How it fits in your flow
1
User submits the sign-up form
Run your usual checks first, such as required fields. They are free and instant.
2
Your server calls Finowl three times, in parallel
Send the email to
POST /v1/email/validate, the client IP to POST /v1/ip/lookup and the phone number to POST /v1/phone/validate. Each costs 1 credit, so a sign up costs 3.3
Combine the answers
Block what can’t work, such as an email that can’t receive mail. Challenge what looks suspicious, such as a Tor exit node. Allow the rest.
Example
Python (Flask)
+. The email check runs alongside it, so the whole check takes about as long as two lookups.
Acting on each answer
Using the IP country in your own logic
country_code from ip/lookup is reliable at country level, so it works well as a default and as a signal:
- Prefill forms. Use it as the default country for the phone field, currency and tax region. Let the user change it.
- Read local phone numbers. Pass it as
countrytophone/validatewhen the user didn’t pick one, as in the example. - Compare with what the user tells you. A billing country or phone country that differs from the IP country is a weak risk signal on its own and a stronger one alongside
hostingortor. - Apply regional rules. Route sign ups from countries you don’t serve to a waitlist, or show the right terms and consent wording.
signup_country above, rather than the IP address itself. It is less sensitive and is usually all you need later. If you show users a location from ip/lookup, credit “IP geolocation by DB-IP”.
Design decisions
Fail open or fail closed?
Fail open or fail closed?
The example fails open: if Finowl is slow or unavailable, the sign up continues without that check. A
503 such as dns_unavailable or data_unavailable is not charged, so you can also retry once while the user waits.Do I need all three checks?
Do I need all three checks?
No. Email validation alone catches typos and throwaway addresses, which are the most common problems. Add the IP check if you offer a free trial or credits, and the phone check if you collect a number anyway.
Tell users before you block
Tell users before you block
Explain what to fix: “This email address can’t receive mail. Did you mean jane@gmail.com?” Don’t tell users which risk signals you saw, because that helps abusers adjust.