Published

EntitySearch State Data

A comprehensive, open-source dataset providing highly accurate, machine-readable information on United States LLC formation fees, recurring annual reporting costs, and state compliance requirements across all 50 states. All data is manually verified against official Secretary of State and Department of Revenue .gov portals to ensure 100% accuracy.

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, AL through WY, plus DC
  • Each state file contains contact info, addresses, hours, renewal links, LLC filing facts, name reservation details, and official sources — or consciously left as null if not available from official sources.
  • Root ../states.json records 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

FieldTypeDescription
stateNamestringFull state name
stateAbbrstring2-letter state abbreviation (e.g., AL)
stateSlugstringURL-friendly slug (e.g., alabama)
stateSealstring|nullState seal URL (WebP preferred)
businessEntitySearchobjectSearch CTA and URL
secretaryOfStateobjectAgency information
hoursobjectOperating hours
physicalAddressesarrayPhysical addresses
mailingAddressobjectMailing address
renewalsobjectRenewal links
corporateDocumentsobjectTemplate links
filingFactsobjectLLC fee, annual report, name reservation
sourcesarrayOfficial sources
lastVerifiedstringISO 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:

FieldStatusNote
stateSealOptionalIn an app that consumes seal/logo assets, e.g., Astro src/assets/images/statesseals, can be managed there.
secretaryOfState.officialNameOptionalThe 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.
corporateDocumentsOptionalOperating 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-.gov hosts 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[], root official_link, and root source_url fields 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. Where null carries 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 without 404 evidence 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.