New businesses buy things: insurance, payroll, websites, signage, accounting, POS systems, office space. The trick is finding them in their first weeks, before everyone else does. Two states publish this for free, updated daily, with no API key:
- Colorado: the Secretary of State's business entity register on data.colorado.gov (every LLC, corporation and nonprofit, with its formation date).
- Texas: the Comptroller's active sales tax permit list on data.texas.gov. A new permit means a business that's about to start selling.
When I ran this on Oct 23, 2026, the last 7 days held 3,588 new Colorado companies (Denver 963, Colorado Springs 440, Aurora 227) and 889 new Texas sales tax outlets (Houston 76, Austin 62, San Antonio 40).
The script
import requests
from collections import Counter
from datetime import date, timedelta
def colorado_new_companies(days=7, city=None):
since = (date.today() - timedelta(days=days)).isoformat()
where = f"entityformdate >= '{since}T00:00:00' AND entitytype in ('DLLC','DPC','DNC')"
if city:
where += f" AND upper(principalcity) = '{city.upper()}'"
return requests.get("https://data.colorado.gov/resource/4ykn-tg5h.json", params={
"$select": "entityid,entityname,entitytype,entityformdate,principalcity,principalzipcode",
"$where": where, "$order": "entityformdate DESC", "$limit": 50000}, timeout=120).json()
def texas_new_outlets(days=7, city=None):
since = (date.today() - timedelta(days=days)).isoformat()
where = f"outlet_permit_issue_date >= '{since}T00:00:00'"
if city:
where += f" AND upper(outlet_city) = '{city.upper()}'"
return requests.get("https://data.texas.gov/resource/jrea-zgmq.json", params={
"$select": "outlet_name,outlet_city,outlet_zip_code,outlet_naics_code,outlet_permit_issue_date",
"$where": where, "$order": "outlet_permit_issue_date DESC", "$limit": 50000}, timeout=120).json()
co = colorado_new_companies(7)
tx = texas_new_outlets(7)
print(len(co), "new Colorado companies; top cities:", Counter(r.get("principalcity", "").title() for r in co).most_common(5))
print(len(tx), "new Texas outlets; top cities:", Counter(r.get("outlet_city", "").title() for r in tx).most_common(5))
Want just Denver? colorado_new_companies(7, city="Denver"). Just Austin? texas_new_outlets(7, city="Austin").
Things that will trip you up
-
Colorado entity types are codes.
DLLCis a domestic LLC,DPCa domestic corporation,DNCa domestic nonprofit. Foreign entities (FLLC,FPC) are out-of-state companies registering to do business in Colorado. Add them if you sell to expanding companies. -
Texas has an industry code.
outlet_naics_codelets you target, for example,722511(full-service restaurants) or4441*(building material dealers). Filter withstarts_with(outlet_naics_code, '722')in the$where. - Skip personal names. Both datasets include sole proprietors and registered agents who are individuals. The script selects only business and outlet names. That's better for privacy, and the business is who you want to reach anyway.
-
Use the SoS link to verify. Each Colorado row has an
entityid, andhttps://www.coloradosos.gov/biz/BusinessEntityDetail.do?masterFileId=<entityid>opens the official record.
Turning it into a weekly lead list
Run it every Monday with days=7, de-duplicate on entityid (Colorado) or outlet name plus ZIP (Texas), and push the rows into a sheet or your CRM. Pair it with a building permits feed if you sell to trades: a new business plus a tenant-improvement permit at the same address is a hot lead.
Optional: if you'd rather not maintain the script, I publish both as hosted, scheduled tools: Colorado New Business Filings and Texas New Business Leads (paid per result). Disclosure: they're my tools. The code above does the same job for free.
Top comments (0)