State business entity search in code: New York, Colorado, Oregon and Connecticut open data
Most US states have an online business entity search, usually run by the Secretary of State, where you look up one name at a time. New York, Colorado, Oregon and Connecticut also publish their business register as an official open dataset, and those datasets have a query API you can call with no key. That makes them the practical way to check entities in bulk or to follow new filings.
The four open datasets
| State | Dataset | Entity ID | Which entities | Licence or terms |
|---|---|---|---|---|
| New York | Department of State, Active Corporations: Beginning 1800 | DOS ID | active only | Open NY Terms of Use |
| Colorado | Department of State, Business Entities in Colorado | Entity ID (11 digits) | all statuses | Public domain, with a State of Colorado disclaimer that must go with the data |
| Oregon | Secretary of State, Corporation Division, Active Businesses - ALL | Registry number | active only | Public domain (ORS 276A.368) |
| Connecticut | Secretary of the State, Connecticut Business Registry - Business Master | Business ID (account number) | all statuses | Public domain (data.ct.gov terms) |
All four run on the same open-data platform, so the query syntax is the same everywhere: add .json under /resource/, then filter with $where, $select, $order and $limit. Only the column names differ.
New filings in Python (Colorado)
This lists the newest Colorado entities formed in the last 7 days:
import json, urllib.parse, urllib.request
from datetime import date, timedelta
since = (date.today() - timedelta(days=7)).isoformat()
params = {
"$select": "entityid,entityname,entitytype,entitystatus,entityformdate,principalcity",
"$where": f"entityformdate >= '{since}'",
"$order": "entityformdate DESC",
"$limit": 5,
}
url = "https://data.colorado.gov/resource/4ykn-tg5h.json?" + urllib.parse.urlencode(params)
req = urllib.request.Request(url, headers={"User-Agent": "my-new-filings/1.0"})
with urllib.request.urlopen(req) as r:
for row in json.load(r):
print(row["entityformdate"][:10], row["entityid"], row["entityname"], row.get("entitystatus"))
Run on 30 October 2026, it printed five Colorado entities formed on 29 and 30 October, all in Good Standing. $select keeps the result to the entity columns you need.
What trips people up
- Active-only datasets. The New York and Oregon datasets list active entities only. An ID that isn't there may be dissolved rather than non-existent, so check the state's own business search for its history.
- Freshness. Each state refreshes its dataset on its own schedule. New York can lag the Department of State by a few days, and Oregon is refreshed about once a week, so the newest filings can show on the state's website first.
- Different status wording. Colorado says "Good Standing" or "Delinquent" and can append a status note to the entity name (for example ", Delinquent April 1, 2020"). Map each state's wording to a few values of your own and keep the original beside it.
- Rows that aren't businesses yet. The datasets include name reservations, assumed business names (DBAs) and, in Colorado, sole proprietorships. Filter on entity type if you only want registered entities.
- Addresses. New York publishes a service-of-process address, which can be a lawyer or agent rather than the business. For small entities, a business address can also be someone's home, so treat it with care.
- Pick your columns. Some datasets carry registered agent columns, and many registered agents are individuals. Use
$selectto read only the entity fields you need.
Licences and attribution
New York, Oregon and Connecticut set no fixed attribution wording, but naming the source is good practice: "New York State Department of State", "Oregon Secretary of State, Corporation Division", "Connecticut Secretary of the State". Colorado's data is public domain, but the State of Colorado's disclaimer, which says the data has been modified from its original source and comes with no warranty, must be included by sites and applications that use the data.
We built this
Disclosure: Your Evenings Ltd built and sells this. It's independent and isn't affiliated with or endorsed by any state government or office named here. Secretary of State Business Entity Search: NY, CO, OR, CT on the Apify Store reads these four official open datasets and gives you:
- One schema for four states: entity ID, name, entity type, status, formation date, jurisdiction of formation, business address and NAICS code (Connecticut), with the same four status values everywhere (
active,not_in_good_standing,inactive,unknown) and the state's wording kept instatusDetail. - Three modes: look up to 500 entities by state and ID, search by name ("contains" or "starts with"), or list new filings in a date range, newest first.
- Monitor mode: schedule it on a watch list and get only entities that are new or have changed, for example when a Colorado entity becomes delinquent, with the fields that changed and their previous values.
- Clean values: placeholder text becomes
null, "C/O" and "ATTN" lines are removed from addresses, and Colorado's status notes are moved out of the name. - Company-level rows with the dataset link, licence and attribution in every row, including Colorado's disclaimer.
Pricing: $0.0025 per entity record, and $0.01 per monitor run that finds something new (base prices; higher Apify plans pay less), plus Apify's $0.00005 start event. Status rows such as not_found are free.
FAQ
Is there a free Secretary of State business search API? New York, Colorado, Oregon and Connecticut publish their business registers as open datasets with a free query API that needs no key. Each dataset can be filtered by name, ID, status or filing date.
How do I find new LLC filings?
Filter the state's dataset on its formation or filing date column, as in the Colorado example above. In the Actor, newFilings mode with filedWithinDays does the same for all four states.
Why can't I find a dissolved New York or Oregon company? Their open datasets list active entities only. Use the state's own business search for dissolved entities.
What does a daily good-standing watch cost with the Actor?
With monitor mode on and emitBaselineOnFirstRun set to false, the first run remembers your list without charge. After that, a day where 3 entities change costs 3 × $0.0025 + $0.01 = $0.0175, and a day with no changes pays only the start event.
Product names and logos belong to their owners. Your Evenings Ltd is not affiliated with or endorsed by them. Business entity data from the open-data portals of New York, Colorado, Oregon and Connecticut. Your Evenings Ltd is not affiliated with or endorsed by any state government or office.
