Every fraud
has a tell.
ProofTell checks a phone number, an email address and an IP address in one API call, and returns a risk score, a verdict and the reasons behind it.
Sandbox keys are free. Evaluating for your company? Ask for a $10 credit from your dashboard.
- +40The IP address is a Tor exit node.203.0.113.66
- +35The email address uses a disposable provider.disposable@sandbox.prooftell.com
- +20The number is a VoIP line, easy to obtain anonymously.+1 500 555 0002
- Phone engine
- Veriphone
- In production since 2019
- Email engine
- Verimail
- Asks the mail server, sends nothing
- Phone coverage
- 243
- Countries and territories
- Hosting
- European Union
- Belgium, on Google Cloud
Send what you know. Get back what matters.
- 1Send a phone, an email, an IP, or all threeWhatever you collect at sign-up, login or checkout.
- 2We run every signal in parallelThe numbering plan and line type, the mailbox and its domain, the network behind the address.
- 3You get a score, a verdict and the tellsA number from 0 to 100, allow, review or deny, and every point explained in plain words.
The sample is the sandbox’s real answer. Run it with a pt_test_ key and you get exactly this, free. With a live key the same call costs $0.0045.
curl https://api.prooftell.com/v1/assess \ -H "Authorization: Bearer $PROOFTELL_KEY" \ -H "Content-Type: application/json" \ -d '{ "phone": "+15005550002", "email": "disposable@sandbox.prooftell.com", "ip": "203.0.113.66", "reference": "signup-48213" }'
const res = await fetch("https://api.prooftell.com/v1/assess", { method: "POST", headers: { "Authorization": `Bearer ${process.env.PROOFTELL_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({ phone: "+15005550002", email: "disposable@sandbox.prooftell.com", ip: "203.0.113.66", reference: "signup-48213", }), }) const { score, verdict, reasons } = await res.json()
import os, requests
res = requests.post(
"https://api.prooftell.com/v1/assess",
headers={"Authorization": f"Bearer {os.environ['PROOFTELL_KEY']}"},
json={
"phone": "+15005550002",
"email": "disposable@sandbox.prooftell.com",
"ip": "203.0.113.66",
"reference": "signup-48213",
},
)
result = res.json()
print(result["verdict"], result["score"]){
"id": "asm_oxyq6rmz74bzsrxm",
"mode": "test",
"reference": "signup-48213",
"score": 95,
"verdict": "deny",
"reasons": [
{ "code": "phone_voip", "points": 20,
"message": "The number is a VoIP line, easy to obtain anonymously." },
{ "code": "email_disposable", "points": 35,
"message": "The email address uses a disposable provider." },
{ "code": "ip_tor", "points": 40,
"message": "The IP address is a Tor exit node." }
],
"signals": {
"phone": { "status": "ok", "cost": "0.0000", "result": { … } },
"email": { "status": "ok", "cost": "0.0000", "result": { … } },
"ip": { "status": "ok", "cost": "0.0000", "result": { … } }
},
"ruleset": "2026-10-01",
"cost": "0.0000",
"currency": "USD",
"createdAt": "2026-10-01T07:55:41Z"
}Fraud leaves traces. We know where to look.
No black box. Every score comes with the signals that drove it, so your team can explain every decision, to a customer or to an auditor.
VoIP or virtual number
Cheap to create by the thousand and easy to obtain anonymously. The favorite of fake-account farms.
A number that cannot exist
Wrong length, unassigned prefix, a typo or an invention. It fails the numbering plan of its own country.
Disposable inbox
A mailbox that expires in ten minutes rarely belongs to a customer who plans to stay.
A mailbox nobody owns
The mail server says there is no such user. Real customers give addresses that receive mail.
Hidden network
Tor exits, VPN providers and datacenter ranges, where real shoppers rarely come from.
Two countries at once
A number from one country, a connection from another. Not damning alone; it weighs in with the rest.
Every signal you need. One API key, one balance.
Score an identity in one call, or buy each signal on its own. By API, or over a whole file.
Risk score
One call, three signals: a 0 to 100 score, a verdict and the reasons.
Phone intelligence
Validity, line type, carrier and country for any number.
Email verification
Whether the mailbox exists, without sending a message.
IP intelligence
Tor, VPN and datacenter detection, location and network.
Bulk verification
Upload a CSV or Excel file, download it back with every row checked.
Pay in dollars
One balance for every check. No credits to decode, no plans, nothing that expires.
A score your team can defend.
- Every point has a reason
- Each rule that fires adds points and a sentence. The score is their sum, capped at 100. Nothing hides inside a model.
- The cut-offs are yours
- You decide where review starts and where deny starts, per organization, from the dashboard.
- A versioned rule set
- Every response names the rule set that produced it, so a decision can still be explained after the rules have moved on.
- An outage never lowers the bar
- When a signal cannot answer, the response says so and the verdict is raised to at least review. A gap is never filled with a guess.
- The IP address belongs to a VPN provider.+20
- The phone number’s country (GB) differs from the IP address’s (NL).+15
- The domain accepts any address, so the mailbox could not be confirmed.+10
| phone | pt_phone_type | pt_email_result | |
|---|---|---|---|
| +14155550132 | dana@northwind.example | mobile | deliverable |
| +442079460958 | sales@contoso.example | fixed_line | catch_all |
| +15005550002 | x9@tempbox.example | voip | disposable |
| +33639980123 | lee@fabrikam.example | mobile | undeliverable |
A whole file, checked the same way.
Upload a CSV or an Excel file, pick the columns, and download it back with the results added to every row, in the order you sent them. Duplicates run once. Files are deleted 30 days after upload.
Bulk verificationPay for what you check. In dollars.
One public rate card for everyone. You are charged per signal that returns a result, from a balance that never expires.
$0.0010 per number.
$0.0030 per address.
$0.0005 per address.
Phone, email and IP in one call, scored. $0.0045 per check.
Volume is rewarded on the money, not on the rate: top up $5,000 and we add $750. Enterprise contracts are invoiced.
See the rate cardBuilt to keep little. Written to pass a review.
Where your data goes, who touches it and when it is deleted are published, down to the sub-processor list and the things we do not have.
Hosted in the EU
The API, the database and file storage run in Belgium, on Google Cloud.
Retention you control
Assessments are kept 90 days by default. Choose a shorter period, or zero, and nothing is stored.
Inputs stay out of logs
Phone numbers, addresses and IPs travel in request bodies and never reach our logs or error messages.
A DPA you can file today
Pre-signed, GDPR Article 28, applies to every account. No call, no countersignature.
One check, at every door.
Account opening
Score every sign-up before it costs you a welcome bonus, a free trial or a support ticket.
Checkout
Send the order’s phone, email and IP. Let the clean ones through, hold the rest for a second look.
Lead capture
A real mobile line and a mailbox that exists are stronger buying signals than a form that was merely filled in.
List hygiene
Upload the file you already have and get it back with every phone, address and IP checked.
Questions, answered plainly.
What does ProofTell check?
How is the score calculated?
What happens when one of the signals is down?
Do you contact the person I am checking?
Can I use a single signal on its own?
/v1/phone, /v1/email and /v1/ip each sell one signal at its own rate, and file uploads run them over a whole list. /v1/assess is the one endpoint that scores.How much does it cost?
Is there a free trial?
Where is my data processed, and for how long is it kept?
Do you sign a DPA, or our own contract?
Find the tell before it costs you.
Create an account, take a sandbox key, make your first call in minutes.