EntitySearch State Data
Structured state-level dataset for sidebar components. This data is designed for use in sidebar components on external websites.
Status
Enrichment is complete for 51 of 51 jurisdictions: all 50 states plus the District of Columbia (washington-d-c.json, stateAbbr: "DC"). Initial batch enrichment finished 2026-05-12, and the full set was re-verified against official sources during the 2026 verification campaign.
Note that root ../states.json deliberately remains a 50-state map and does not include DC.
- Coverage: all 50 states,
ALthroughWY, plusDC - Each state file contains contact info, addresses, hours, renewal links, LLC filing facts, name reservation details, and official sources — or consciously left as
nullif not available from official sources. - Root
../states.jsonrecords have been aligned with official fee/source corrections.
Structure
entitysearch-state-data/
├── README.md
├── schema/
│ └── state.schema.json # JSON validation schema
└── states/ # Individual state JSON files, one per jurisdiction
└── alabama.json # Example state file
That is the whole published surface: a schema and 51 records. The dataset ships no images and
no logos of any kind, which is why stateSeal is null in every record. An application that
wants a seal supplies its own; see Optional Enrichment Fields.
Schema Fields
| Field | Type | Description |
|---|---|---|
stateName | string | Full state name |
stateAbbr | string | 2-letter state abbreviation (e.g., AL) |
stateSlug | string | URL-friendly slug (e.g., alabama) |
stateSeal | string|null | State seal URL (WebP preferred) |
businessEntitySearch | object | Search CTA and URL |
secretaryOfState | object | Agency information |
hours | object | Operating hours |
physicalAddresses | array | Physical addresses |
mailingAddress | object | Mailing address |
renewals | object | Renewal links |
corporateDocuments | object | Template links |
filingFacts | object | LLC fee, annual report, name reservation |
sources | array | Official sources |
lastVerified | string | ISO date (YYYY-MM-DD) |
Optional Enrichment Fields
The following fields are not mandatory core data for the entity search experience, and missing values are not considered data quality issues:
| Field | Status | Note |
|---|---|---|
stateSeal | Optional | In an app that consumes seal/logo assets, e.g., Astro src/assets/images/statesseals, can be managed there. |
secretaryOfState.officialName | Optional | The officeholder's name, not the agency's — the agency is secretaryOfState.agency. It is time-sensitive personnel data with no maintenance process behind it, so it is null in all 51 records. |
corporateDocuments | Optional | Operating agreement, bylaws, and partnership agreement template pages can be produced as separate internal content. If no official state template exists, stays null. |
Core data target: Official search URL, agency website, contact info (phone/email if available), address, hours, filing/renewal facts, and source tracking — practical information for the entity search user.
Cross-namespace contract
filingFacts.nameReservation holds the real out-of-pocket reservation cost, not the
statutory filing fee. It mirrors name-rules/states/<slug>.json's nameReservationTotalCost,
which is the authoritative field, and the two must agree. Where a state's statutory fee and
real cost differ, nameReservationNotes explains the gap.
stateName, stateAbbr, and stateSlug must match the name-rules and dba-rules records
for the same jurisdiction.
Reading the data
Four conventions turn correct data into a wrong sentence if rendered naively.
filingFacts.annualReport distinguishes "no such filing" from "free". null — always paired
with annualReportDue: "N/A" — means the jurisdiction has no annual-report filing at all; seven
records are in this state. 0 means the filing exists and the state charges nothing for it. Do not
render null as "unknown" or as "$0". Note that root ../states.json writes
annual_report_fee: 0 in both cases, because that field is a number and cannot carry the
distinction — this namespace is where the difference is expressed.
Fees are the online figure. Where a state charges differently for online and paper filing, the
field carries the online fee, which is what nearly every filer pays; the paper figure is in the
matching *Notes string.
A variable fee carries its minimum. Where a fee is banded, asset-based, or has a floor and a
ceiling, the field carries the minimum and the *Notes string describes the structure. Rendering
the number alone without its note will understate the cost for some filers.
filingFacts.nameReservation is the real out-of-pocket cost, not the statutory fee — see the
contract above. Where the two differ, nameReservationNotes explains the gap.
Data Rules
- Official sources only. "Official" means the government body that publishes the fact,
not the domain suffix. See Methodology in the repository README
for the list of official non-
.govhosts and the narrow mirror exception. - Fee and requirement verification: Every fee, due date, and filing requirement is verified against the official state government portal, official fee schedule, official statute, or official filing portal
- Source requirement:
sources[], rootofficial_link, and rootsource_urlfields must point to official sources - No third-party sources: Legal service providers, blogs, SEO pages, news sites, or commercial summary sources are not used
- Unknown values: Left as
null. Wherenullcarries a specific meaning instead of absence, it is stated above under Reading the data - Date format: ISO 8601 (
YYYY-MM-DD) - Image format: WebP preferred
- URL validation: Valid URI format required
- A
403, a timeout, or a connection reset is not a dead link. Several state portals refuse automated clients and answer normally in a browser; no URL in this dataset is replaced without404evidence read from the page itself
Usage
const stateData = require('./states/alabama.json');
// Sidebar usage example
console.log(stateData.stateName); // "Alabama"
console.log(stateData.secretaryOfState.website); // "https://www.sos.alabama.gov"
Validation
To validate JSON files against state.schema.json:
npx ajv-cli validate --strict=false -s entitysearch-state-data/schema/state.schema.json -d 'entitysearch-state-data/states/*.json'
JSON parse check:
jq empty states.json entitysearch-state-data/states/*.json
Built With This Dataset
EntitySearch.us
Comprehensive step-by-step guides for business entity search across all 50 US states. Each state page features screenshots, official portal links, and LLC formation facts powered by this dataset.
https://entitysearch.us/texas/
https://entitysearch.us/wyoming/
https://entitysearch.us/delaware/
This dataset is part of the us-llc-fees-dataset repository.