Al APIarc-sos.state.al.us ↗
Search and retrieve Alabama business entity records from arc-sos.state.al.us. Get entity details, registration status, agents, officers, and formation dates.
What is the Al API?
This API provides access to the Alabama Secretary of State business entity database across 5 endpoints, returning up to 25 fields per entity including legal name, formation date, registered agent, status, transaction history, and scanned document metadata. The get_entity_detail endpoint retrieves a full profile for any entity by its 9-digit ID, while search_by_entity_name and search_by_agent_officer_incorporator let you find entities by name or associated persons.
curl -X GET 'https://api.parse.bot/scraper/8751016c-86ae-408f-bf0b-fdbd6ff3163d/get_entity_detail?entity_id=000210236' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace arc-sos-state-al-us-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Alabama Secretary of State Business Search — bounded, re-runnable."""
from parse_apis.alabama_secretary_of_state_business_search_api import (
AlabamaSOS,
EntityNotFound,
)
client = AlabamaSOS()
# Search entities by name — limit caps total items fetched.
for summary in client.entitysummaries.search(name="Alabama", limit=3):
print(summary.entity_name, summary.location, summary.status)
# Drill into one result for full details.
first = client.entitysummaries.search(name="Alabama", limit=1).first()
if first:
entity = first.details()
print(entity.legal_name, entity.formation_date, entity.entity_type)
for doc in entity.scanned_documents:
print(doc.date, doc.type, doc.pages)
# Search by agent/officer/incorporator name.
for agent_hit in client.agentresults.search(name="Smith", limit=3):
print(agent_hit.entity_name, agent_hit.agent_name, agent_hit.position)
# Fetch an entity directly by ID with typed-error handling.
try:
detail = client.entities.get(entity_id="000210236")
print(detail.legal_name, detail.status, detail.nature_of_business)
for tx in detail.transactions:
print(tx.date, tx.description)
except EntityNotFound as exc:
print(f"Entity not found: {exc.entity_id}")
# Batch fetch a range of entities.
for ent in client.entities.list_range(start_id="001117000", end_id="001117002", filter_dates=False, limit=3):
print(ent.entity_id, ent.legal_name, ent.formation_date)
print("exercised: entitysummaries.search / details / agentresults.search / entities.get / entities.list_range")
Get detailed information for a specific business entity by its 9-digit ID. Returns entity details including legal name, type, status, formation date, registered agent, addresses, transactions, and scanned documents. Each entity has a unique 9-digit identifier with preserved leading zeros.
| Param | Type | Description |
|---|---|---|
| entity_idrequired | string | The 9-digit entity ID, leading zeros preserved (e.g., 000210236). |
{
"type": "object",
"fields": {
"status": "string, entity status (e.g., Exists, Dissolved)",
"entity_id": "string, 9-digit entity ID",
"legal_name": "string, legal name of the entity",
"entity_type": "string, type of entity (e.g., Domestic Corporation)",
"transactions": "array of transaction objects with date, description, and value",
"formation_date": "string, formation date in MM/DD/YYYY format",
"principal_address": "string, principal office address",
"scanned_documents": "array of document objects with date, type, and pages",
"nature_of_business": "string, description of business activity",
"place_of_formation": "string, place or county of formation",
"registered_agent_name": "string, name of registered agent"
}
}About the Al API
Entity Lookup and Search
The get_entity_detail endpoint accepts a 9-digit zero-padded entity ID (e.g., 000210236) and returns the full record: legal_name, entity_type, status (such as Exists or Dissolved), formation_date, principal_address, place_of_formation, nature_of_business, a transactions array with date, description, and value per entry, and a scanned_documents array listing date, document type, and page count for each filing on record.
Name and Person Searches
search_by_entity_name accepts a name query and an optional start parameter for 1-based pagination (each page returns up to 25 results). Each result includes entity_id, entity_name, location, entity_type, and status. search_by_agent_officer_incorporator searches by the name of a registered agent, officer, or incorporator, returning entity_id, entity_name, agent_name, and position (e.g., Registered Agent, President, Incorporator) for each match — useful for mapping individuals to the entities they are associated with.
Range Retrieval and Existence Check
scrape_entity_range fetches full entity details for a sequential block of IDs, capped at 50 entities per call. It accepts start_id and end_id as 9-digit strings and an optional filter_dates boolean that, when true, limits results to entities whose formation_date falls between January 2024 and July 2025. check_entity_exists takes a single entity ID and returns a exists boolean alongside the queried ID — useful for validating IDs before calling the more detailed endpoint.
The Al API is a managed, monitored endpoint for arc-sos.state.al.us — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when arc-sos.state.al.us changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official arc-sos.state.al.us API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Verify whether an Alabama business entity is active or dissolved before entering a contract
- Map all entities associated with a specific registered agent using search_by_agent_officer_incorporator
- Build a database of recently formed Alabama businesses by scanning ID ranges with filter_dates enabled
- Look up the principal address and nature of business for due diligence on a counterparty
- Retrieve transaction history for an entity to track filing and status-change activity over time
- Check which officers or incorporators are shared across multiple Alabama business entities
- Enumerate scanned document records for a company to identify available filings by type and date
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does the Alabama Secretary of State provide an official developer API for arc-sos.state.al.us?+
What does get_entity_detail return beyond basic registration info?+
legal_name, status, and entity_type, the endpoint returns a transactions array (each entry has a date, description, and value), a scanned_documents array (each entry includes document type, date, and page count), nature_of_business, principal_address, and place_of_formation. It does not return officer or incorporator names directly — those require a separate call to search_by_agent_officer_incorporator.How does pagination work in search_by_entity_name?+
start parameter with 1-based indexing: start=1 for the first page, start=26 for the second, start=51 for the third, and so on. The total field in the response reflects how many results were returned on the current page, not the total count across all pages.Does the API cover business entities from other U.S. states?+
place_of_formation will reflect their home state), but businesses registered solely in other states are not included. You can fork this API on Parse and revise it to add endpoints targeting other state business registries.Is there a limit on how many entities scrape_entity_range can return in one call?+
start_id and end_id span more than 50 IDs, you will need to paginate by adjusting the range across multiple requests. The filter_dates boolean can reduce the returned set further by limiting results to entities formed between January 2024 and July 2025.