Comparison

CheckThatPhone vs Abstract API: porting and compliance checks in 2 countries, or reach in 190+

CheckThatPhone is an Abstract API alternative for US and Canadian numbers. Both return the carrier, the line type (VoIP included) and whether the line is in service; CheckThatPhone adds the porting status and routing number, a send-or-not verdict and TCPA or DNC screening in the same call. Abstract's phone API covers 190+ countries, from $19 a month for 5,000 requests. CheckThatPhone covers only the US and Canada, from $5 a month for 1,000 lookups. At 100,000 lookups a month that's $100 on our 100K plan against $199 for Abstract Starter's 150,000 tier; at 5,000 Abstract is lower, $19 against our $25. Either way, one CheckThatPhone lookup also includes the ported flag and routing number, a send-or-not verdict for texts and location from your visitor's IP in the same call, which an Abstract Starter request doesn't (what each includes).

If you need numbers outside North America, a free plan with no card, or registered-name, risk and breach data, Abstract is the better fit. If you call or text North American numbers, the porting, deliverability and compliance fields are what CheckThatPhone adds.

As of October 3, 2026, read from Abstract's own product, pricing and documentation pages. Each Abstract fact links to the page it came from. A few were read later, on October 10, 2026, and are dated where they appear. Prices change, so check the source before you commit budget. CheckThatPhone is our product. How we compare vendors.

At a glance

 CheckThatPhoneAbstract API
Coverage US and Canada (NANP) only 190+ countries source
How the data is described Live carrier dip at lookup time "Check any phone number in real time"; its FAQ says it uses "several databases of numbers", with "various updates to the data" daily and "substantive updates" weekly and monthly source
Free plan 500 lookups a month, hard-capped; card on file, verified with a $0 check and never charged 100 requests a month, no credit card, every field included source
Paid plans $5 a month for 1,000 lookups up to $450 for 500,000; every plan returns the full response Starter, Standard and Professional, each from $19 a month; the same price buys 5,000, 3,000 or 2,000 requests as each tier adds data; Enterprise is custom source
Annual billing 15% off 10% off ($17 a month instead of $19) source
Invalid or malformed numbers HTTP 400, not charged; failed lookups never consume credits Each submitted number counts as a credit, including invalid input source
Carrier and line type Carrier, OCN, line type and sub-type; VoIP is detected and shows as IPES in the sub-type (no separate flag) Carrier name, line type (mobile, landline, voip, toll_free and more), MCC, MNC, is_voip source
Ported numbers dipPorted and dipLrn (routing number) on every lookup No porting or routing-number field in the documented response source
Line status In every lookup through deliverable and action / reason, with deactivationDate for carrier deactivations in the last 45 days (no separate field) line_status (e.g. active, inactive); minimum_age of the number from Standard up source
Decision or risk field action: "send", "unsubscribe" or "error", with a reason risk_level (low, medium, high), disposable and abuse flags on Professional source
Registered name and breaches Not offered Registered name and type (consumer or business) and breach history on Professional source
TCPA litigator scrub Add-on, +1 credit, refreshed daily Not listed on its phone product or pricing pages source
State DNC and complainer checks Free add-on: 38 states plus DC, refreshed weekly (no federal DNC) Not listed on its phone product or pricing pages source
SMS fields Text-enabled landline check, add-on, +1 credit on landlines only Email-to-SMS gateway address (sms_domain, sms_email) from Standard up source
List upload CSV upload in the dashboard, up to 1,000,000 rows, deduplicated CSV upload on paid plans, up to 50,000 rows per file source
Request POST /v1/lookup, JSON body, bearer API key GET with api_key and phone in the query string (its docs also show a bearer-token header and POST) source read October 10, 2026

Cost at different volumes

Base lookups each month, monthly billing. Abstract figures use the Starter plan, which its pricing FAQ names as the plan that returns carrier and line type, at the smallest listed volume that covers the month. Abstract's pages list fixed volumes and no overage rate, and point to Enterprise pricing above 150,000 requests a month. CheckThatPhone figures are the cheapest plan including overage.

Lookups a monthAbstract APICheckThatPhone
5,000 $19 (Starter, 5,000 requests) $25 (1K plan)
10,000 $39 (Starter, 15,000 requests) $30 (10K plan)
50,000 $99 (Starter, 50,000 requests) $100 (100K plan)
100,000 $199 (Starter, 150,000 requests) $100 (100K plan)
250,000 Enterprise, custom pricing $250 (100K plan)
500,000 Enterprise, custom pricing $450 (500K plan)

Neither is cheaper at every volume. Abstract comes out lower at 5,000 a month and, by a dollar, at 50,000. CheckThatPhone is lower at 10,000 and 100,000, and its self-serve plans keep going past 150,000, where Abstract moves to custom pricing. Where Abstract is lower, compare what each request includes. Abstract's Standard and Professional plans add data at the same price by including fewer requests, while every CheckThatPhone plan returns the full response and only the litigator scrub and landline SMS lookup cost extra.

What one request includes

A lower price per request only compares like with like when the requests return the same data. One CheckThatPhone lookup also includes the ported flag and routing number, a send-or-not verdict for texts and location from your visitor's IP in the same call, which a request to Abstract API (Starter plan) doesn't.

One request includes CheckThatPhone Abstract APIStarter plan
Current carrier Included: Yes, live carrier dip Included: Yes source
Mobile, landline or VoIP Included: Yes, VoIP as IPES Included: Yes source
Ported flag and routing number Included: Yes Not included: No source
Recently disconnected Included: Yes, last 45 days Included: Yes (line status) source
Can it take a text Included: Yes: action and reason Not included: No source
State and city Included: Yes, from the area code or the IP Included: Yes source
Time zone Included: Yes Included: Yes source
IP geolocation in the same call Included: Yes: pass ip Costs extra: Separate IP geolocation API docs pricing

included included with a limit a separately priced package or API not in the documented request or response

Every documented field, by name

The response fields that describe the number, from each side's own reference. Not listed: copies of the number you sent, format variants, ids, status, error and price fields; on our side also deliverable, doNotSms and tzOffset, which restate other fields. Abstract's pricing page says plans "differ by the data each response carries": per its plan samples, Standard adds 3 fields and Professional 10 more (25 in all, including registered name, risk and breach data), each with fewer requests for the same price. pricing docs read October 10, 2026

CheckThatPhone 18 fields

  • action
  • reason
  • deactivationDate
  • blackList
  • smsEligible
  • nanpType
  • nanpCarrier
  • dipLrn
  • dipPorted
  • dipOcn
  • dipCarrier
  • dipCarrierType
  • dipCarrierSubType
  • geoCountry
  • geoState
  • geoCity
  • geoMetro
  • timezone

Abstract API 12 fields

  • phone_validation.is_valid
  • phone_validation.line_status
  • phone_validation.is_voip
  • phone_carrier.name
  • phone_carrier.line_type
  • phone_carrier.mcc
  • phone_carrier.mnc
  • phone_location.country_name
  • phone_location.country_code
  • phone_location.region
  • phone_location.city
  • phone_location.timezone

Operational terms

Commitments, limits and support, from each side's own published pages. Where a page doesn't state a term, the table says so.

 CheckThatPhoneAbstract API
Minimum commitment None: a Free plan, or monthly plans from $5 that you can cancel any time from the billing page pricing terms Monthly plans from $19 ($17 a month billed annually) source
Free tier or trial 500 lookups a month, hard-capped; card on file, verified with a $0 check and never charged source 100 requests a month, no credit card, every field included source
Past the plan allowance $0.005 down to $0.0009 per lookup on paid plans, on the next invoice; the Free plan stops at 500 source Not published
Failed or invalid lookups Not charged: a failed lookup returns credits_used: 0, and a malformed number returns HTTP 400 pricing docs Each submitted number counts as a credit, including invalid input source
API access Every plan, Free included: POST /v1/lookup with a bearer API key, plus CSV upload in the dashboard docs bulk GET with api_key and phone in the query string (its docs also show a bearer-token header and POST); CSV upload on paid plans, up to 50,000 rows per file source read October 10, 2026
Rate limit Not a fixed published number: each account's limit grows with its billing history source Its Phone plan cards list "3 requests / second", while its API docs say free plans are "limited to 1 per second"; Enterprise is "Flexible" pricing docs read October 10, 2026
Uptime SLA No contractual uptime SLA in our standard terms; enterprise agreements on request source Its product page lists a "99.99% uptime SLA" under "Enterprise ready"; the Enterprise plan lists "Enhanced SLA & support" product page pricing read October 10, 2026
Support Email (hello@checkthatphone.com) and the contact form source "24/7 via email, chat, and phone"; its pricing page says plans differ "not by speed or support" product page pricing read October 10, 2026
Unused credits Not published Not published
High volume The 500K plan keeps working past 500,000 at $0.0009 per lookup; a quote form for higher volume source Enterprise (custom pricing) above 150,000 requests a month source

Not published means it isn't stated on the Abstract pages listed under Sources when we read them. It doesn't mean Abstract doesn't offer it. Our column follows the same rule, using only our own pricing, docs, terms and contact pages.

Which one to choose

Choose Abstract API if…

  • Your numbers are outside the US and Canada. Abstract lists 190+ countries; we cover two. source
  • You want to try it without a card. Abstract's free plan needs no credit card; ours does. source
  • You need identity and fraud signals such as the registered name, consumer or business type, risk level, disposable-number and breach data on its Professional plan. pricing docs
  • You want one vendor for several checks. Abstract also sells email, IP and other APIs alongside phone. source
  • Your volume is around 5,000 or 50,000 a month, where its Starter plan costs less. source

Choose CheckThatPhone if…

  • You want more in one call: the ported flag and routing number, a send-or-not verdict for texts and location from your visitor's IP in the same call come with every lookup (compare).
  • You call or text US and Canadian numbers. The current carrier, routing number and ported flag come from a live carrier dip. See the carrier lookup API.
  • You want a send-or-not answer: one action field with a reason, plus deactivationDate for recent carrier deactivations.
  • You want compliance screening in the same call: the TCPA litigator scrub (+1 credit) and the free state DNC and complainer checks.
  • You text landlines. About 7% of landlines we check are SMS-capable, and the landline SMS lookup finds them.
  • You clean large lists: CSV upload up to 1,000,000 rows, each unique number billed once.
  • Your volume is around 10,000 or 100,000 a month, where our plans cost less, or above 150,000 without a custom contract.

Example request and response

A standard CheckThatPhone lookup:

curl --request POST \
  --url 'https://api.checkthatphone.com/v1/lookup' \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{"phone": "312-555-0188"}'

An illustrative response (a fictional 555 number; field names and formats match the live API). The fields with no counterpart in Abstract's documented response are the porting fields (dipLrn, dipPorted), dipOcn and action:

{
  "success": true,
  "credits_used": 1,
  "data": {
    "subscriber": "3125550188",
    "optDate": "2026-10-03T16:04:11.210Z",
    "action": "send",
    "deliverable": "true",
    "reason": "",
    "nanpType": "mobile",
    "blackList": "false",
    "dip": "success",
    "dipLrn": "3125550188",
    "dipPorted": "false",
    "dipOcn": "6010",
    "dipCarrier": "AT&T",
    "dipCarrierSubType": "WIRELESS",
    "dipCarrierType": "mobile",
    "geoState": "IL",
    "geoCity": "chicago",
    "geoCountry": "US",
    "geoSource": "area-code",
    "timezone": "America/Chicago",
    "tzOffset": 6,
    "error": "false"
  }
}

CheckThatPhone vs Abstract API: common questions

Is CheckThatPhone a good Abstract API alternative?

For US and Canadian numbers where porting status, deliverability and TCPA or DNC screening matter, yes. For numbers in other countries, or for registered-name and breach data, no: Abstract lists 190+ countries and returns those fields on its Professional plan, and CheckThatPhone covers only the US and Canada.

Is Abstract cheaper than CheckThatPhone?

At some volumes. Billed monthly, Abstract Starter is $19 for 5,000 requests and $99 for 50,000, which beats our price at those two points. At 10,000 and 100,000 a month CheckThatPhone comes out lower, and above 150,000 Abstract moves to custom Enterprise pricing. Abstract also has a free plan with no card; ours includes more lookups but needs a card on file, verified with a $0 check. Per request, a CheckThatPhone lookup also includes the ported flag and routing number, a send-or-not verdict for texts and location from your visitor's IP in the same call.

Does Abstract return ported numbers?

Abstract's documented response includes the carrier name, line type, MCC and MNC, and a line status, but no porting flag or routing number. CheckThatPhone returns dipPorted and dipLrn on every lookup.

Are invalid numbers charged?

At Abstract, yes: its docs say each submitted number counts as a credit, including an invalid one. At CheckThatPhone, a missing or malformed number returns HTTP 400 and isn't charged, and failed lookups (4xx/5xx or upstream errors) never consume credits.

What changes in the integration?

Abstract is a GET request with api_key and phone in the query string (its docs also show a bearer-token header and POST), returning nested objects such as phone_carrier and phone_validation. CheckThatPhone is a POST to https://api.checkthatphone.com/v1/lookup with a JSON body and a bearer API key, returning flat fields such as dipCarrier and action. Official SDKs: npm install checkthatphone and pip install checkthatphone.

Sources

Abstract pages, with the date we read each one:

CheckThatPhone figures come from our pricing page, API documentation and terms of service.

Related

Try it on your list

Free tier: 500 lookups per month, hard-capped. Paid plans start at $5/month.