Phone validation · Trueguard vs Abstract API
Comparison
Abstract API phone validation alternative: pricing vs Trueguard.
Trueguard publishes this page. Every Abstract figure comes from Abstract's pricing page and API docs, read 5 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.
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
Why teams switch from Abstract API for phone validation.
Risk fields sit on the top plan.
100,000 checks: $499 against $249.99.
Above 150,000 a month, the price is custom.
One VoIP flag for two kinds of number.
Abstract API vs Trueguard for phone validation, field by field.
The response shapes are close. These are the fields that differ.
Line and carrier | Trueguard | Abstract API |
|---|---|---|
| VoIP type | line.voipType: fixed, nonFixed, unknown | is_voip true or false A fixed vs non-fixed split is not listed in docs (read 5 Nov 2026) |
| Carrier type | line.carrierType: mno, mvno, cpaasVirtual, fixedIsp, m2m, satellite, unknown | Not listed in docs (read 5 Nov 2026) |
| Porting, original vs current carrier | isPorted, originalCarrier, currentCarrier for US numbers US and US territories | Not listed in docs (read 5 Nov 2026) |
| SMS capable | line.smsCapable false for fixed VoIP and landline | Not listed as a field (read 5 Nov 2026) |
Risk signals | Trueguard | Abstract API |
|---|---|---|
| Plan that returns the risk fields | Every plan, including the free 100 checks | Professional, per the pricing page |
| Disposable now | risk.isDisposable: listed on a public receive-SMS site in the last 30 days | is_disposable Professional plan per the pricing page |
| Disposable before | risk.previouslyDisposable: listed 31 to 180 days ago | Not listed in docs (read 5 Nov 2026) |
| SMS destination risk | risk.smsDestinationRisk: low, elevated, high per country, null for unrated countries | No dedicated field listed The response returns the country |
| Number block risk | risk.rangeRisk: receive-SMS listings in the same number block, last 90 days | Not listed in docs (read 5 Nov 2026) |
| STIR/SHAKEN | carrierStirShaken, US numbers | Not listed in docs (read 5 Nov 2026) |
| Complaints | complaints90d: complaints in the last 90 days, +1 numbers | Not listed in docs (read 5 Nov 2026) |
Source: Abstract's Phone Intelligence docs and pricing page, read 5 November 2026.
Get a free API key and test these fields.
100 checks a month, no card. Every Trueguard field in the table comes back on the free key.
Get your free API keyNo credit card required.
What Trueguard returns for +1 415 992 9960.
The full response for one check. These five fields are the ones Abstract's docs do not list, and what each one catches.
- 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
}
}Which Abstract plan returns which phone fields.
Every Abstract phone plan starts at $19 a month. Higher plans add fields and give fewer requests for that $19: 5,000 on Starter, 3,000 on Standard, 2,000 on Professional.
| Plan | Fields listed | Requests for $19 | Largest monthly tier | Requests per second |
|---|---|---|---|---|
| Free | Validation, location, carrier, messaging, registration, risk | 100 a month, $0 | 100 | 3 |
| Starter | Validation, location, carrier | 5,000 | 500,000 for $499 | 3 to 100 |
| Standard | Starter fields + messaging | 3,000 | 250,000 for $499 | 3 to 100 |
| Professional | Standard fields + registration, risk | 2,000 | 150,000 for $499 | 3 to 100 |
| Enterprise | All, custom | Custom | Custom | Flexible |
Trueguard: every field on every plan, including the free 100 checks.
Starter lists validation, location and carrier, without risk or disposable fields.
Professional ladder, billed monthly: $19 for 2,000, $39 for 5,000, $69 for 10,000, $99 for 25,000, $199 for 50,000 and $499 for 150,000. Annual billing is $17, $36, $63, $91, $182 and $457 a month on a yearly request pool.
Abstract's pricing page says: "Starter returns the core validation fields, Standard adds enrichment, and Professional adds the risk and reputation signals used for fraud scoring." Read 5 November 2026.
What 10,000, 100,000 and 1,000,000 phone checks cost.
| Checks a month | Abstract Professional | Trueguard |
|---|---|---|
| 10,000 | $69 (10,000 tier) | $49.99 |
| 100,000 | $499 (150,000 tier, no 100,000 tier) | $249.99 |
| 1,000,000 | No self-serve plan, Enterprise custom | $2,499.99 at list overage (Custom plan from 500,000) |
Trueguard: $49.99 includes 20,000. 100,000 = $49.99 + 80,000 x $0.0025 = $249.99. 1,000,000 = $49.99 + 980,000 x $0.0025 = $2,499.99.
Abstract: the smallest Professional tier that covers the volume, billed monthly. Annual billing is $63 a month at 10,000 and $457 at 100,000 (the 1,800,000 a year tier). Abstract's pricing page lists no overage price.
Both count invalid inputs: Trueguard counts a check, and Abstract's docs count a credit per request.
Email and phone validation on one Trueguard key.
One account and one API key call both endpoints, each on its own $49.99 plan: 50,000 email validations or 20,000 phone checks. Abstract prices and bills each API on its own, and its docs say each API needs its own key.
| Checks a month | Abstract Professional, email + phone | Trueguard, email + phone |
|---|---|---|
| 10,000 each | $69 + $69 = $138 (email 15,000 tier, phone 10,000 tier) | $49.99 + $49.99 = $99.98 |
| 100,000 each | $499 + $499 = $998 (both 150,000 tiers) | $99.99 + $249.99 = $349.98 |
Comparing email instead? Abstract API vs Trueguard for email validation
What Abstract API returns that Trueguard does not.
Registered name and type
Email-to-SMS gateway
Bulk CSV upload
Switching from Abstract Phone Intelligence to Trueguard.
Abstract, Node.js
const res = await fetch(
`https://phoneintelligence.abstractapi.com/v1/?api_key=${process.env.ABSTRACT_API_KEY}&phone=14159929960`
);
const data = await res.json();
console.log(data.phone_carrier.line_type, data.phone_risk.is_disposable);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());Trueguard field for each Abstract Phone Intelligence field | Trueguard | Abstract API |
|---|---|---|
| Number | phone E.164 with the +. Abstract omits the +. | phone_number |
| International format | format.e164 format.international is spaced, for example "+1 415 992 9960" | phone_format.international |
| National format | format.national | phone_format.national |
| Valid | validity.isValid validity.reason says why when false | phone_validation.is_valid |
| VoIP | line.type === "voip", plus line.voipType | phone_validation.is_voip |
| Line type | line.type toll_free becomes tollFree | phone_carrier.line_type |
| Carrier name | line.currentCarrier (US) or line.originalCarrier | phone_carrier.name |
| MCC and MNC | line.mcc, line.mnc Strings, mobile numbers only | phone_carrier.mcc, phone_carrier.mnc |
| Country | location.countryCode, location.countryName | phone_location.country_code, phone_location.country_name |
| Calling code | location.callingCode ("1") | phone_location.country_prefix ("+1") |
| Region | location.region ("CA") | phone_location.region ("California") |
| City | location.city | phone_location.city |
| Time zone | location.timezones[0] | phone_location.timezone |
| Disposable | risk.isDisposable | phone_risk.is_disposable |
| Risk level | risk.status A different scale, not 1:1 | phone_risk.risk_level |
| Abuse flag | No direct equivalent | phone_risk.is_abuse_detected |
| Line status | No Trueguard field | phone_validation.line_status |
| Minimum age | No direct equivalent risk.blockAgeDays is the age of the number block | phone_validation.minimum_age |
| Email-to-SMS gateway | No Trueguard field line.smsCapable says whether the line takes SMS | phone_messaging.sms_domain, phone_messaging.sms_email |
| Registration | No Trueguard field | phone_registration.name, phone_registration.type |
| Breaches | No Trueguard field | phone_breaches.* |
On the older phonevalidation.abstractapi.com endpoint, valid, type and carrier map to validity.isValid, line.type and line.originalCarrier.
Why teams pick Trueguard.
Choose Trueguard
Disposable and risk fields on every plan, including the free 100 checks.
$249.99 for 100,000 phone checks a month, overage at $0.0025 a check.
Fixed or non-fixed VoIP and carrier type in the same response.
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 a good Abstract API alternative for phone validation?
Trueguard. It returns validity, line type, fixed or non-fixed VoIP, carrier and carrier type, porting for US numbers, disposable history and SMS destination risk on every plan, for $49.99 a month for 20,000 checks. Abstract's Professional plan, the one its pricing page lists with phone risk, is $69 a month for 10,000 requests and $499 for 150,000, as read on 5 November 2026.
How much does Abstract API phone validation cost?
Abstract's phone plans start at $19 a month billed monthly, for 5,000 requests on Starter, 3,000 on Standard or 2,000 on Professional. Professional is $39 for 5,000, $69 for 10,000, $99 for 25,000, $199 for 50,000 and $499 for 150,000, and annual billing is about 10% lower. The free plan is 100 requests a month. Prices read on 5 November 2026.
Which Abstract plan includes phone risk and disposable detection?
Professional. Abstract's pricing page lists validation, location and carrier on Starter, adds messaging on Standard and adds registration and risk on Professional. On Trueguard, the disposable and risk fields come on every plan, including the free 100 checks a month.
Does Abstract API detect VoIP numbers?
Yes. Abstract's Phone Intelligence docs list an `is_voip` flag and a `voip` line type, and a fixed vs non-fixed split is not listed (read 5 November 2026). Trueguard returns `line.voipType`: `fixed` for VoIP tied to an address and `nonFixed` for app and online numbers, and `line.smsCapable` is false for fixed VoIP.
What do 100,000 phone checks a month cost on Abstract and on Trueguard?
$249.99 on Trueguard: $49.99 for the first 20,000 plus 80,000 at $0.0025. Abstract has no 100,000 Professional tier, so the smallest plan that covers it is the 150,000 tier at $499 a month. Prices read 5 November 2026.
Can I validate 1 million phone numbers a month on Abstract?
Not on a self-serve plan. The largest monthly phone volumes on Abstract's pricing page are 500,000 on Starter, 250,000 on Standard and 150,000 on Professional, and above that Abstract lists Enterprise with custom pricing. On Trueguard, 1,000,000 checks cost $2,499.99 at the list overage rate, and the Custom plan starts at 500,000.
How do I switch from Abstract API to Trueguard?
Replace the GET to phoneintelligence.abstractapi.com with a POST to `https://api.trueguard.io/v2/phone/validation` and map the fields: `phone_validation.is_valid` to `validity.isValid`, `phone_carrier.line_type` to `line.type`, `phone_carrier.name` to `line.currentCarrier` or `line.originalCarrier`, and `phone_risk.is_disposable` to `risk.isDisposable`. Send the number with its country code, for example +14159929960.
Run your own 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.

