Phone validation · Trueguard vs IPQS
Comparison
IPQS phone validation alternative: pricing vs Trueguard.
Trueguard publishes this page. Every IPQS figure comes from ipqualityscore.com's plans page and phone API docs and IPQS's Shopify listing, read 9 November 2026. "Not listed" means we did not find it there, not that it does not exist.
20,000 checks
$49.99/mo
$0.0025 per extra check. 100 checks a month free, no credit card.
No credit card required.
The short answer is Trueguard, at $49.99 for 20,000 checks.
Trueguard charges $0.0025 for each check past 20,000, and every field comes back on every plan, including the free 100 checks a month. IPQS's direct plans list $599.99 for 10,000 lookups and $1,149.99 for 75,000, and its docs mark six phone fields as add-ons that an account manager or Support enables (read 9 Nov 2026).
What 5,000 to 1,000,000 phone checks cost on IPQS and Trueguard.
At 10,000 checks a month, the gap is $550.00.
| Checks a month | IPQS | Trueguard |
|---|---|---|
| 5,000 | $139.99 (Startup) | $49.99 |
| 10,000 | $599.99 (SMB Basic) | $49.99 |
| 20,000 | $1,149.99 (SMB+, the smallest plan that includes it) | $49.99 |
| 75,000 | $1,149.99 (SMB+) | $187.49 |
| 100,000 | Contact Sales (no plan listed above 75,000) | $249.99 |
| 1,000,000 | Contact Sales (no plan listed above 75,000) | $2,499.99 at list overage (Custom plan from 500,000) |
Trueguard: $49.99 includes 20,000. 75,000 = $49.99 + 55,000 x $0.0025 = $187.49. 100,000 = $49.99 + 80,000 x $0.0025 = $249.99. 1,000,000 = $49.99 + 980,000 x $0.0025 = $2,499.99.
IPQS: the smallest direct plan that includes the volume, billed monthly, counting one phone check as one lookup. The plans page lists no overage price. Yearly plans save 15%, which works out to $118.99 for Startup, $509.99 for SMB Basic and $977.49 for SMB+ a month.
IPQS prices differ by page. This table uses ipqualityscore.com/plans. IPQS's Shopify listing shows $139.99 for 500,000 lookups, $599.99 for 1,000,000 and $1,149.99 for 4,000,000, under the names SMB Basic, SMB Premium and SMB Enhanced, with extra credits at $0.005 to $0.0025 a query. IPQS's phone validation page says "Score phone numbers on average from $0.0005 per user with no monthly contracts." All read 9 November 2026.
Why switch from IPQS for phone validation.
VoIP split into fixed and nonFixed.
Receive-SMS history with stated windows.
US porting on the free key.
$49.99 against $599.99 at 10,000 checks.
IPQS vs Trueguard, field by field.
Both return format, country, carrier, line type, MCC and MNC. These line and carrier fields differ.
Line and carrier | Trueguard | IPQS |
|---|---|---|
| VoIP | line.type "voip" plus line.voipType: fixed, nonFixed, unknown | VOIP true or false, and a VOIP value in line_type Fixed vs non-fixed not listed (read 9 Nov 2026) |
| Porting, original vs current carrier | isPorted, originalCarrier, currentCarrier US numbers, every plan | number_recycling: ported, last_ported_date, recently_recycled Add-on, enabled by an account manager or Support (read 9 Nov 2026). Separate original and current carrier names not listed |
| Carrier type | line.carrierType: mno, mvno, cpaasVirtual, fixedIsp, m2m, satellite, unknown | Not listed in docs (read 9 Nov 2026) carrier returns the service provider name |
| SMS capable | line.smsCapable false for landline and fixed VoIP | Not listed as a field (read 9 Nov 2026) |
| Line type values | 15 values, including voip, tollFree, premiumRate, m2m, shortCode | Toll-Free, Wireless, Landline, Satellite, VOIP, Premium Rate, Pager, N/A |
Source: IPQS's response parameters, read 9 November 2026.
What each phone risk signal is built from.
Each Trueguard signal below has a stated source or window. IPQS's docs give a short definition for each of its fields.
Risk signals | Trueguard | IPQS |
|---|---|---|
| Receive-SMS numbers | risk.isDisposable, risk.previouslyDisposable Trueguard monitors public receive-SMS sites itself. Listed in the last 30 days sets isDisposable. Listed 31 to 180 days ago sets previouslyDisposable. | No such field in the response parameters (read 9 Nov 2026) The overview names disposable SMS and temporary numbers as a use case. A sample on the phone validation page shows a disposable_phone key. |
| Number block | risk.rangeRisk: low, elevated, high Built from receive-SMS listings in the same number block over the last 90 days. | Not listed in docs (read 9 Nov 2026) |
| Overall result | risk.status: safe, risky, invalid, unknown A valid number is risky when it is disposable now or premium rate. VoIP never sets it. | fraud_score, 0 to 100 Docs give bands at 75, 85 and 90 and no formula. One band description mentions the past 24 to 72 hours. The fraud scoring page describes machine learning and carrier data (read 9 Nov 2026). |
| VoIP | line.type, line.voipType Read from numbering data, and porting data for US numbers. | VOIP A one-line definition. No source or method listed (read 9 Nov 2026). |
| SMS pumping | risk.smsDestinationRisk: low, elevated, high A rating of the number's country. null for unrated countries. Every plan. | sms_pumping: risk_score, message, velocity Add-on, enabled by an account manager or Support (read 9 Nov 2026). Docs: at least 5 days of recent data and at least 50 phone validation calls an hour |
| Complaints and abuse | risk.complaints90d Count of unverified FTC and FCC reports in the last 90 days, North American numbers. Never changes risk.status. | spammer, recent_abuse, risky One-line definitions. spammer says recently, with no window listed (read 9 Nov 2026). |
| Carrier and block facts | risk.carrierStirShaken, risk.blockAgeDays STIR/SHAKEN status of the block's carrier, US numbers. Days since the block was assigned, US and Canada. | Not listed in docs (read 9 Nov 2026) |
Get a free API key and test these fields.
100 checks a month, no card. Every Trueguard field in these tables comes back on the free key.
Get your free API keyNo credit card required.
Check a number with Trueguard.
No key needed. 5 free checks a day, and the result has the same fields the API returns.
Or try
What Trueguard returns for +1 415 992 9960.
The full response for one check. Each field below comes back on the free key, with nothing to enable.
- line.voipType
- Tells an office VoIP line (fixed) from an app or online number (nonFixed). nonFixed numbers can receive SMS, so they can receive your OTP codes. This number is nonFixed.
- line.carrierType
- Shows if the number comes from a mobile operator or from a virtual number provider. This number is cpaasVirtual.
- line.isPorted
- For US numbers, shows the carrier the number moved to. This number was issued by Lumen and moved to Twilio, so the original carrier alone does not show the virtual provider.
- risk.previouslyDisposable
- Flags a number that was listed on a public receive-SMS site 31 to 180 days ago, where anyone could read its codes. isDisposable covers the last 30 days. Trueguard monitors those sites itself.
- risk.smsDestinationRisk
- Rates the destination country for SMS pumping, so you can block or step up before you pay for the SMS. A Nigerian number returns high. This US number returns null because the US is not rated.
{
"phone": "+14159929960",
"rawPhone": "+14159929960",
"validity": {
"isValid": true,
"isPossible": true,
"reason": null
},
"format": {
"e164": "+14159929960",
"international": "+1 415 992 9960",
"national": "(415) 992-9960"
},
"location": {
"countryCode": "US",
"countryName": "United States",
"callingCode": "1",
"region": "CA",
"city": "San Francisco",
"timezones": [
"America/Los_Angeles"
]
},
"line": {
"type": "voip",
"voipType": "nonFixed",
"smsCapable": true,
"originalCarrier": "Lumen",
"currentCarrier": "Twilio",
"isPorted": true,
"carrierType": "cpaasVirtual",
"mcc": null,
"mnc": null
},
"risk": {
"status": "safe",
"isDisposable": false,
"previouslyDisposable": false,
"smsDestinationRisk": null,
"rangeRisk": "low",
"carrierStirShaken": null,
"blockAgeDays": 7756,
"complaints90d": null
}
}IPQS pricing and add-ons, plan by plan.
The plans page lists one Monthly Lookups figure per plan, with no separate phone allowance.
| Plan | Monthly | Monthly lookups | Daily lookups | Overage |
|---|---|---|---|---|
| Free | $0 | 1,000 | 35 | None listed |
| Startup | $139.99 | 5,000 | 200 | None listed |
| SMB Basic | $599.99 | 10,000 | None listed | None listed |
| SMB+ | $1,149.99 | 75,000 | None listed | None listed |
| Enterprise | Contact Sales | Custom | None listed | None listed |
Trueguard: 100 checks a month free, $49.99 for 20,000, then $0.0025 a check. Custom from 500,000.
Prices read 9 November 2026. Yearly plans save 15%.
Where each field sits | Trueguard | IPQS |
|---|---|---|
| Core fields | Every field on every plan, including the free 100 checks | valid, formatted, local_format, fraud_score, recent_abuse, VOIP, prepaid, risky, name, carrier, line_type, country, region, city, zip_code, timezone, dialing_code, leaked, spammer, mcc, mnc No add-on or plan note in the response parameters (read 9 Nov 2026) |
| Add-ons | Nothing to enable | active, active_status, tcpa_blacklist, sms_pumping, number_recycling, identity_data Add-on, enabled by an account manager or Support (read 9 Nov 2026). do_not_call returns null when the feature is not enabled, US and Canada only |
| Higher plans | Same fields on every plan | user_activity, associated_email_addresses Docs: restricted to higher or upgraded plans (read 9 Nov 2026) |
Where IPQS comes out ahead.
1,000 free lookups a month.
A 0 to 100 fraud score.
HLR line status as an add-on.
Do Not Call data for the US and Canada.
Switching from IPQS to Trueguard.
IPQS, Node.js
const res = await fetch(
`https://www.ipqualityscore.com/api/json/phone/${process.env.IPQS_API_KEY}/14159929960`
);
const data = await res.json();
console.log(data.valid, data.fraud_score, data.line_type, data.carrier);Trueguard, Node.js
const res = await fetch("https://api.trueguard.io/v2/phone/validation", {
method: "POST",
headers: {
"X-API-KEY": process.env.TRUEGUARD_KEY,
"Content-Type": "application/json"
},
body: JSON.stringify({ phone: "+14159929960" })
});
console.log(await res.json());Request | Trueguard | IPQS |
|---|---|---|
| Call | POST https://api.trueguard.io/v2/phone/validation | GET ipqualityscore.com/api/json/phone/KEY/PHONE |
| Auth | X-API-KEY header | Key in the URL path by default Also a key parameter or an IPQS-KEY header |
| Number | phone in the JSON body Send with the + and country code, for example +14159929960 | Path segment |
| Country | country Only used for a number written in national format | country, string or array |
| Strictness | No equivalent | strictness |
Response | Trueguard | IPQS |
|---|---|---|
| Valid | validity.isValid validity.reason says why when false | valid |
| International format | format.e164 | formatted |
| National format | format.national | local_format |
| Country | location.countryCode | country |
| Region and city | location.region, location.city | region, city |
| Calling code | location.callingCode A string, no + | dialing_code An integer |
| Time zone | location.timezones An array | timezone |
| Carrier | line.currentCarrier (US numbers) or line.originalCarrier | carrier |
| MCC and MNC | line.mcc, line.mnc | mcc, mnc |
| Line type | line.type Wireless to mobile, Toll-Free to tollFree, Premium Rate to premiumRate, N/A to unknown | line_type |
| VoIP | line.type "voip" plus line.voipType | VOIP |
| Score | risk.status Four values. Branch on it and the risk fields. fraud_score has no numeric equivalent | fraud_score |
| Risky flag | risk.status "risky" Set by disposable now or premium rate | risky |
| Porting | line.isPorted US numbers | number_recycling.ported Add-on |
| SMS pumping | risk.smsDestinationRisk Country rating | sms_pumping Add-on |
| Spam reports | Closest: risk.complaints90d North American numbers | spammer |
| No equivalent | No equivalent field | active, active_status, name, prepaid, recent_abuse, leaked, do_not_call, tcpa_blacklist, identity_data, user_activity, associated_email_addresses, zip_code |
| Errors | Invalid numbers return 200 with phone null and validity.reason Auth errors use the HTTP status with { statusCode, message } | success false with message |
Why teams pick Trueguard.
Choose Trueguard
Fixed or non-fixed VoIP, carrier type and US porting in the same response.
Receive-SMS history over 30 and 180 day windows, number block risk and SMS destination risk on every plan.
$49.99 for 20,000 checks a month, overage at $0.0025 a check.
Every field on the free 100 checks, with nothing to enable.
One API key for email and phone validation.
The three Trueguard plans.
No credit multipliers, and overage at the same rate as the plan.
Frequently asked questions
Something out of date? Tell us and we will correct it.
What is the best IPQS alternative for phone number validation?
For per-check pricing with every field on every plan, Trueguard. It costs $49.99 a month for 20,000 checks and returns VoIP split into fixed and nonFixed, receive-SMS history, SMS destination risk and, for US numbers, porting and current carrier on every plan, including the free 100 checks a month. IPQS's direct plans list $599.99 a month for 10,000 lookups and $1,149.99 for 75,000 (read 9 November 2026).
How much does IPQS phone validation cost?
On IPQS's plans page, Free is 1,000 lookups a month and 35 a day, Startup is $139.99 for 5,000, SMB Basic is $599.99 for 10,000 and SMB+ is $1,149.99 for 75,000. Enterprise is Contact Sales, no overage price is listed, and yearly plans save 15%. IPQS's Shopify listing shows the same three prices with 500,000, 1,000,000 and 4,000,000 lookups, and its phone validation page says "on average from $0.0005 per user". All read 9 November 2026. Trueguard is $49.99 a month for 20,000 checks, then $0.0025 a check.
Is there a free alternative to IPQS for phone checks?
Trueguard's free plan is 100 checks a month with every field and no card. The checker on this page needs no key and allows 5 checks a day. IPQS Free lists 1,000 lookups a month and 35 a day (read 9 November 2026).
Does Trueguard do HLR lookups like IPQS?
No. Trueguard has no HLR or live line test. A valid result means the number matches the numbering plan of its country and belongs to a real range. IPQS documents HLR-based line status in active and active_status, as an add-on enabled by an account manager or Support (read 9 November 2026).
Does Trueguard give a fraud score like IPQS?
Trueguard returns risk.status, one of safe, risky, invalid or unknown, with no 0 to 100 score. A valid number is risky when it was listed on a public receive-SMS site in the last 30 days or is premium rate. VoIP alone never makes it risky. Each signal behind the status is its own field, so you can write your own rule. IPQS returns fraud_score from 0 to 100 (read 9 November 2026).
How is the IPQS fraud score calculated?
IPQS's docs define fraud_score as an estimate of how likely a number is to be fraudulent, with bands at 75, 85 and 90, and give no formula. Its phone fraud scoring page describes machine learning and data from telecom carriers (read 9 November 2026). The table on this page shows what each Trueguard risk field is built from.
Can Trueguard detect VoIP and temporary phone numbers?
Yes. line.type returns voip, and line.voipType returns fixed for VoIP tied to an address or nonFixed for app and online numbers. risk.isDisposable is true when the number was listed on a public receive-SMS site in the last 30 days, and risk.previouslyDisposable covers 31 to 180 days ago. Trueguard monitors those sites itself.
Which IPQS phone fields need an add-on?
IPQS's docs say active, active_status, tcpa_blacklist, sms_pumping, number_recycling and identity_data are add-ons enabled by an account manager or Support. do_not_call returns null when it is not enabled. user_activity and associated_email_addresses are limited to higher plans (read 9 November 2026). Every Trueguard field is on every plan.
Can I keep IPQS for IP and email and use Trueguard only for phone?
Yes. Trueguard's phone check is a standalone endpoint with its own plan, one POST per number. Your IPQS IP and email calls stay as they are.
How do I move from the IPQS phone API to Trueguard?
Replace the GET to /api/json/phone/KEY/PHONE with a POST to https://api.trueguard.io/v2/phone/validation, with your key in the X-API-KEY header and the number in the body, for example +14159929960. Map valid to validity.isValid, formatted to format.e164, line_type to line.type, VOIP to line.type voip plus line.voipType, and carrier to line.currentCarrier or line.originalCarrier. fraud_score has no numeric equivalent, so branch on risk.status and the risk fields.
Related pages
Send the same numbers through Trueguard.
100 checks a month free, no card. Every Trueguard field on this page comes back on the free key.
Get your free API keyNo credit card required.

