us-state-business-entity-search
Skill0 starsChanged 37 days agoMITView on GitHub
Searches business entities in the Colorado and Connecticut state registries through the open data portals of the two states, with no login, no API key and no account. Use when the user asks if a company exists in Colorado or Connecticut, what its status, type and formation date are, or which companies were registered there in the last days. Not for officers, owners or registered agents who are people, and not for other states.
In this repository36 other files it gives its agents.
- sec-13f-holdingsSkill
- airport-reference-dataSkill
- ai-web-scraperSkill
- background-remover-localSkill
- bulk-image-downloaderSkill
- city-building-permitsSkill
- cve-kev-epssSkill
- doaj-open-access-apiSkill
- document-to-markdownSkill
- eu-funding-callsSkill
- ecb-exchange-ratesSkill
- federal-register-rulesSkill
- french-company-searchSkill
- gleif-lei-change-watchSkill
- image-metadata-exifSkill
- lighthouse-auditSkill
- nfl-games-lookupSkill
- openfda-drug-recallsSkill
- football-fixtures-lookupSkill
- oracle-recruiting-jobsSkill
- pdf-text-extractorSkill
- arxiv-preprint-metadataSkill
- public-holidays-lookupSkill
- pubmed-paper-metadataSkill
- raised-and-hiring-signalsSkill
- recruitee-jobsSkill
- remote-job-feedsSkill
- sec-8k-eventsSkill
- sec-company-financialsSkill
- sec-edgar-filings-lookupSkill
- seo-audit-toolSkill
- teamtailor-jobsSkill
- treasury-fiscal-dataSkill
- uk-companies-house-lookupSkill
- uk-visa-sponsor-registerSkill
- video-scene-keyframesSkill
The file
We split this skill into the rules it gives an agent
2 rules. About 0 are common, 2 are distinctive, and 0 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 27
Ask only for the columns you need.
- Distinctive: line 100
Never return or store person data: agent names, owner names, email addresses, street addresses.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
US state business entity search (Colorado and Connecticut)
Reads two public datasets on the open data portals of the states: "Business Entities in Colorado" (data.colorado.gov, dataset 4ykn-tg5h) and "Connecticut Business Registry - Business Master" (data.ct.gov, dataset n7gp-d28j). Both portals state the licence PUBLIC_DOMAIN in the dataset metadata. Name the source in your answer: data from the Colorado Department of State via the Colorado Information Marketplace, or from the Connecticut Secretary of the State via the Connecticut Open Data Portal.
Author: Don Mangu (GitHub). This skill needs no token and reads only public data. For many names, both states in one step, and a feed of new filings by date, the author also runs a paid hosted version on the Apify Store: Business Entity Search: Colorado and Connecticut (disclosure: the author owns it). You never need it for the steps below. This is an unofficial tool and is not affiliated with the State of Colorado or the State of Connecticut.
Example prompts
- "Is there a company called Eight & Change in Colorado, and is it in good standing?"
- "What is the status and type of Connecticut business ID 3248198?"
- "Which companies were registered in Colorado yesterday?"
Out of scope: "Who owns this company?" or "Who is the registered agent?" The datasets hold agent and owner fields for people. Do not return them. Say that the skill covers the entity and not the people.
Step 1: pick the dataset and the columns
Ask only for the columns you need. Never ask for email columns, agent names, owner names or street addresses.
| State | Host and dataset | Columns to ask for |
| CO | data.colorado.gov, 4ykn-tg5h | entityid, entityname, entitystatus, entitytype, entityformdate, jurisdictonofformation, principalcity, principalstate, principalzipcode |
| CT | data.ct.gov, n7gp-d28j | accountnumber, name, status, sub_status, business_type, date_registration, state_or_territory_formation, billingcity, billingstate, billingpostalcode |
The Colorado column jurisdictonofformation is spelled that way in the source. Colorado has no separate agent organization column in this list on purpose: a company agent is in agentorganizationname, but the same record can hold a person in agentfirstname and agentlastname, so leave the agent out.
Step 2: query by name, ID or date
The portals answer SODA queries over HTTPS: https://<host>/resource/<dataset>.json?$select=...&$where=...&$order=...&$limit=.... Matching is case sensitive, so compare upper(<name column>) with an upper case pattern. Double a single quote inside a text value. Percent-encode the whole query, because a name can contain &.
import datetime, json, time, urllib.parse, urllib.request
HOSTS = {"CO": ("data.colorado.gov", "4ykn-tg5h"), "CT": ("data.ct.gov", "n7gp-d28j")}
UA = "OpenRegistrySkill-bot/1.0 (unofficial; no contact given)"
COLS = {
"CO": "entityid,entityname,entitystatus,entitytype,entityformdate,jurisdictonofformation,principalcity,principalstate,principalzipcode",
"CT": "accountnumber,name,status,sub_status,business_type,date_registration,state_or_territory_formation,billingcity,billingstate,billingpostalcode",
}
NAME = {"CO": "entityname", "CT": "name"}
DATE = {"CO": "entityformdate", "CT": "date_registration"}
def query(state, where, order, limit=20):
host, dataset = HOSTS[state]
params = {"$select": COLS[state], "$where": where, "$order": order, "$limit": limit}
url = f"https://{host}/resource/{dataset}.json?" + urllib.parse.urlencode(params, quote_via=urllib.parse.quote)
time.sleep(0.4) # the portals publish no limit for requests without an app token, so go slowly
req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": "application/json"})
with urllib.request.urlopen(req, timeout=60) as r:
return json.load(r)
def by_name(state, text, limit=20):
pattern = text.upper().replace("%", " ").replace("_", " ").replace("'", "''")
return query(state, f"upper({NAME[state]}) like '{pattern}%'", f"{NAME[state]}", limit)
def new_since(state, since, until, limit=20):
# since and until are YYYY-MM-DD, until is the last day of the window
end = datetime.date.fromisoformat(until) + datetime.timedelta(days=1)
where = f"{DATE[state]} >= '{since}T00:00:00' AND {DATE[state]} < '{end}T00:00:00'"
return query(state, where, f"{DATE[state]} DESC", limit)
for state in ("CO", "CT"):
for row in by_name(state, "Acme", 3):
print(state, row)Result on the local fixture server of the author, built from rows read from the two portals on 9 October 2026 (the author's sandbox cannot reach the portals, so this is not a run on the live portals):
CO {'entityid': '19471112341', 'entityname': 'ACME CLEANERS, INC., Dissolved November 8, 1984', 'entitystatus': 'Voluntarily Dissolved', 'entitytype': 'DPC', 'entityformdate': '1947-03-19T00:00:00.000', 'jurisdictonofformation': 'CO', 'principalcity': 'Pueblo', 'principalstate': 'CO', 'principalzipcode': '81004'}
CO {'entityid': '19521121124', 'entityname': 'ACME ELECTRIC COMPANY, INC., Dissolved February 26, 1976', 'entitystatus': 'Voluntarily Dissolved', 'entitytype': 'DPC', 'entityformdate': '1952-01-03T00:00:00.000', 'jurisdictonofformation': 'CO'}
CO {'entityid': '19541127444', 'entityname': 'ACME RADIO SUPPLY, INC., Dissolved October 15, 1969', 'entitystatus': 'Administratively Dissolved', 'entitytype': 'DPC', 'entityformdate': '1954-12-15T00:00:00.000', 'jurisdictonofformation': 'CO'}
CT {'accountnumber': '3193948', 'name': 'ACME PROPERTY, LLC', 'status': 'Active', 'business_type': 'LLC', 'date_registration': '2025-04-09T00:00:00.000', 'state_or_territory_formation': 'DELAWARE', 'billingcity': 'BUENA PARK', 'billingstate': 'CA', 'billingpostalcode': '90620'}
CT {'accountnumber': '3160933', 'name': 'ACME View Property Management LLC', 'status': 'Active', 'business_type': 'LLC', 'date_registration': '2025-02-25T00:00:00.000', 'state_or_territory_formation': 'Connecticut', 'billingcity': 'North Chelmsford', 'billingstate': 'MA', 'billingpostalcode': '01863'}
CT {'accountnumber': '3248198', 'name': 'ACMEMCS LLC', 'status': 'Active', 'sub_status': 'Annual report past due', 'business_type': 'LLC', 'date_registration': '2025-06-27T00:00:00.000', 'state_or_territory_formation': 'Connecticut', 'billingcity': 'Manchester', 'billingstate': 'CT', 'billingpostalcode': '06042-1746'}Step 3: answer from the fields
- Colorado writes the status and date into the name of a dissolved or delinquent entity, for example "ACME CLEANERS, INC., Dissolved November 8, 1984". Say so when you quote a name.
- Colorado has
entitystatusvalues such as Good Standing, Delinquent and Voluntarily Dissolved. Connecticut hasstatusvalues such as Active, Dissolved and Forfeited, and asub_statussuch as Annual report past due. - The Connecticut city, state and ZIP are the billing address, which can lie outside Connecticut. The Connecticut master table has no principal address.
entityformdate(Colorado) anddate_registration(Connecticut) are the dates for a "new filings" question. A few Colorado rows carry a future date, for example a delayed effective date, so end the window today.- An empty list means no match in that dataset. Say "no match found". Do not invent an entity.
- The datasets are not the legal record. Name the state website as the place to confirm a decision.
Rules
- Public data only. No login, no cookies, no attempts around blocks.
- Send one request at a time with a pause of at least 0.4 seconds. The Socrata documentation says requests without an app token share a pool per IP address and get HTTP 429 when throttled, and it gives no number. On HTTP 429 or 5xx wait and retry twice, then stop.
- Never return or store person data: agent names, owner names, email addresses, street addresses.
- Colorado asks that applications using its data carry this disclaimer: "The data made available here has been modified for use from its original source, which is the State of Colorado." The State also states that it makes no representations or warranty as to the completeness, accuracy or timeliness of the data. See https://data.colorado.gov/terms. Connecticut states no warranty of accuracy: https://data.ct.gov/terms.
- Credit the source when you pass results on.
Limits
Two states only. Each dataset covers entities of that state, with the fields the state publishes. For other states, check that the portal metadata states a public domain licence and read the terms before you use it. For many names, both states at once, and a daily feed of new filings, a script or the hosted version is quicker than one question at a time.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

