NASBA CPA License Verifier — Multi-State Accountant Lookup
NASBA CPA License Scraper
Scrape Certified Public Accountant license records from the official NASBA Accountancy Licensee Database. Returns license number, status, issue and expiration dates, jurisdiction, license type, firm, and contact city/state across the 53 U.S. boards of accountancy that share data with the central registry.
NASBA CPA License Scraper Features
- Searches by last name, first name, license number, or jurisdiction
- Returns 20+ fields per CPA — license details, contact, firm, disciplinary flags
- Optional detail-page enrichment adds issue date, expiration, CPE-ID, and contact city/state/zip
- Multi-state sharding — list jurisdictions to bypass the server's per-query result cap
- Authoritative source — pulls directly from cpaverify.org, the only official single-source national CPA database
- No proxies, no captchas, no API keys
Who Uses NASBA CPA Data?
- Accounting software vendors — Build prospect lists for tax, audit, and bookkeeping platforms
- Compliance teams — Verify a CPA's active license status, jurisdiction, and disciplinary history before engaging
- B2B marketing — Target active CPAs by state for newsletters, training, and conference outreach
- Regulatory researchers — Monitor enforcement actions and license-status patterns across boards
- Recruiters — Source CPAs by jurisdiction and license type for staffing and headhunting
How the NASBA CPA Scraper Works
- Search — The scraper hits the cpaverify.org public search with your filters (last name required, plus optional first name, license number, or jurisdiction codes)
- Paginate — Walks the result pages until it hits your
maxItemscap or the server's 250-record per-query ceiling - Enrich (optional) — When
do_fetch_detailis on, fetches each licensee's detail page to add issue date, expiration, contact city/state/zip, and CPE-ID
If you list multiple jurisdictions, each runs as its own search shard. That's how you exceed the 250-row cap — narrow the query, then aggregate.
Input
{
"lastName": "Smith",
"firstName": "",
"licenseNum": "",
"jurisdictions": ["CA"],
"do_fetch_detail": true,
"maxItems": 10
}
| Field | Type | Default | Description |
|---|---|---|---|
| lastName | string | (required) | Last name to search. NASBA rejects empty queries. |
| firstName | string | "" | First-name filter. Use it when a last name returns the 250-row cap. |
| licenseNum | string | "" | Specific license number to verify. |
| jurisdictions | array | [] | Two-letter state codes (CA, NY, TX). Empty searches every jurisdiction at once; listing codes runs one shard per state. |
| do_fetch_detail | boolean | true | Fetch each licensee's detail page for issue/expiration dates, CPE-ID, and contact location. Disable for a fast metadata-only sweep. |
| maxItems | integer | 10 | Maximum records to return. Default keeps tester runs under the 5-minute cap. |
Verify a single license
{
"lastName": "Smith",
"licenseNum": "12364",
"jurisdictions": ["KS"],
"maxItems": 1
}
Sweep one state without detail enrichment
{
"lastName": "Johnson",
"jurisdictions": ["CA"],
"do_fetch_detail": false,
"maxItems": 250
}
NASBA CPA Scraper Output Fields
{
"licenseeId": 519411205,
"licenseeGeneralId": 529516185,
"lastName": "(HILL) SMITH",
"firstName": "LINDSAY",
"middleName": null,
"maiden": null,
"suffix": null,
"indivName": "LINDSAY (HILL) SMITH",
"licenseNum": "12364",
"licenseTypeDescription": "",
"licenseTypeName": "CPA.",
"licenseStatusDescription": "ACTIVE CERTIFICATE",
"licenseStatusType": "ACTIVE CERTIFICATE",
"active": true,
"issueDate": "2017-01-03",
"expirationDate": null,
"jurisdictionAbbreviation": "KS",
"jurisdictionName": "KANSAS BOARD OF ACCOUNTANCY",
"jurisdictionId": 90,
"city": "FRONTENAC",
"stateProvince": "Kansas",
"zip": null,
"country": "USA",
"firmName": null,
"cpeId": "CPE-F594D",
"ncId": null,
"disciplinaryAction": "N",
"disciplinaryActions": [],
"detailUrl": "https://ald.nasba.org/search/cpa/529516185?jurisdictionId=90",
"lastUpdatedAt": "2026-05-01",
"scrapedAt": "2026-05-01T23:40:12.345Z"
}
| Field | Type | Description |
|---|---|---|
| licenseeId | integer | NASBA's internal licensee ID |
| licenseeGeneralId | integer | General ID used in the detail-page URL |
| lastName | string | Last name as recorded by the State Board |
| firstName | string | First name |
| middleName | string | Middle name |
| maiden | string | Maiden name when reported |
| suffix | string | Name suffix (Jr., Sr., III) |
| indivName | string | Full display name |
| licenseNum | string | CPA license / certificate number |
| licenseTypeDescription | string | License type description |
| licenseTypeName | string | Short license type code (detail-only) |
| licenseStatusDescription | string | Status (ACTIVE, INACTIVE, REVOKED, LAPSED) |
| licenseStatusType | string | Normalized status type |
| active | boolean | True when the license is currently active |
| issueDate | string | Issue date YYYY-MM-DD (detail-only) |
| expirationDate | string | Expiration date YYYY-MM-DD (detail-only) |
| jurisdictionAbbreviation | string | Two-letter state code |
| jurisdictionName | string | Full State Board name |
| jurisdictionId | integer | NASBA jurisdiction ID |
| city | string | Contact city (detail-only) |
| stateProvince | string | Contact state (detail-only) |
| zip | string | Contact ZIP (detail-only) |
| country | string | Contact country (detail-only) |
| firmName | string | Associated CPA firm name |
| cpeId | string | CPE-ID for continuing-education tracking (detail-only) |
| ncId | string | National Candidate ID (detail-only) |
| disciplinaryAction | string | Y, N, or "Contact State Board For Details" |
| disciplinaryActions | array | Action descriptions when reported |
| detailUrl | string | Public NASBA detail page URL |
| lastUpdatedAt | string | Last update from the State Board feed (detail-only) |
| scrapedAt | string | When the record was extracted (ISO 8601) |
FAQ
How do I look up a CPA on NASBA?
The NASBA CPA License Scraper takes a last name (required) plus optional first name, license number, or state codes. Run it with lastName and jurisdictions: ["CA"] to find a California CPA, or add licenseNum to verify a specific license.
How much does the NASBA CPA Scraper cost to run?
Pricing is pay-per-event: a flat $0.10 per run start plus $0.001 per record extracted. A full state sweep of 250 records with detail enrichment runs in under two minutes.
Why are some fields null?
The NASBA CPA Scraper returns whatever each State Board chooses to share with cpaverify.org. Hawaii and New Mexico don't participate at all. Other boards withhold expiration dates, contact info, or disciplinary detail under state privacy rules. Null means the board didn't publish it — not that the scraper missed it.
Can I extract more than 250 records per search?
Yes. NASBA caps each individual query at 250 results, but the scraper bypasses that by sharding on jurisdiction. Pass jurisdictions: ["CA", "NY", "TX", ...] and the scraper runs one search per state, returning up to 250 records each. Combine with firstName for narrower slices.
Does the NASBA CPA Scraper need a proxy?
No. NASBA's public search at cpaverify.org runs without IP filtering or geo-blocking. The scraper hits it directly with default Apify infrastructure.
Need More Features?
Need custom fields, sub-state filters, or a scraper for a different licensure board? File an issue or get in touch.
Why Use the NASBA CPA Scraper?
- Authoritative — Pulls from cpaverify.org, the official NASBA registry maintained by the State Boards themselves
- Detailed — Returns 20+ fields including issue date, expiration, CPE-ID, contact location, and disciplinary flags — most CPA scrapers stop at name and license number
- Honest about limits — Documents the 250-row per-query cap up front and gives you the sharding tools to work around it, instead of pretending it doesn't exist