HDL Municipal Business License Registry Scraper
Independent tool. Trademarks referenced on this page are the property of their respective owners and are used only to identify the public website this tool reads. No affiliation or endorsement.
HDL Municipal Business License Registry Scraper
Pull the full active business-license roll from HdL Companies-hosted municipal portals — Pomona, Hayward, El Cajon, Tustin, and other reachable HdL city instances. Unlike a name-or-address lookup, this actor walks every business-type category in a city to reconstruct its entire license registry: account number, business name, status, issue/expiry dates, and address — no prior knowledge of a business required.
HDL Municipal Business License Registry Scraper Features
- Returns the full active roster of a city's business licenses, not just a single lookup result — covers every business-type category by default
- Multi-city — target one HdL city instance, several, or every reachable one in a single run
- Derived fields the source doesn't compute for you:
license_status(active/expired),days_to_expiry, andis_new_license(flags licenses issued within a configurable lookback window — built for a weekly "what's new" re-run) - Deduplicates automatically when the same license could otherwise surface twice
- A city that isn't reachable at run time is skipped, not treated as a failure — the rest of your requested cities still complete
Who Uses HDL Municipal Business License Registry Data?
- B2B marketing and lead-generation teams — prospect newly-licensed businesses before they show up anywhere else (a license often predates a website or a state filing)
- Hyper-local service providers — find every licensed business in a category and city
- Commercial real-estate brokers — track new tenants taking out a local business license
- RevOps and data teams — enrich existing lead lists against the official municipal record
How HDL Municipal Business License Registry Scraper Works
- Choose which HdL cities to crawl (or leave
citiesempty to crawl every known-candidate city instance). - Optionally restrict to specific business-type codes with
businessTypeIds, or leave it empty to enumerate every business type the city's portal exposes. - The actor walks each requested city, category by category, and returns every license on file for that combination.
- Each record is enriched with
license_status,days_to_expiry, andis_new_licensebefore it lands in your dataset.
Input
{
"cities": ["pomona"],
"businessTypeIds": [],
"newLicenseLookbackDays": 30,
"maxItems": 500
}
| Field | Type | Default | Description |
|---|---|---|---|
cities |
array | (all) | HdL city instances to crawl (e.g. pomona, hayward). Leave empty for every known-candidate city instance. |
businessTypeIds |
array | (all) | Optional filter: HdL business-type codes to restrict the crawl to. Leave empty to enumerate every business type the city exposes. |
newLicenseLookbackDays |
integer | 30 | Licenses with a start_date within this many days of the run are flagged is_new_license: true. |
maxItems |
integer | 10 | Maximum number of license records to return this run. |
resumeCursor |
string | (none) | Cursor from a previous run's Output — continue where a large run stopped. |
HDL Municipal Business License Registry Scraper Output Fields
{
"jurisdiction": "pomona",
"jurisdiction_subdomain": "pomona",
"account_number": "00207651",
"business_name": "Al Dia Immigration & Business Services",
"start_date": "6/2/2021",
"expire_date": "6/30/2023",
"license_status": "expired",
"business_type": "Accounting & Bookkeeping",
"business_type_id": "1",
"address_full": "3628 LYNOAK DR 201, POMONA, CA 91767",
"street_address": "3628 LYNOAK DR 201",
"city": "POMONA",
"state": "CA",
"zip_code": "91767",
"matched_by": "Business Type",
"days_to_expiry": -778,
"is_new_license": false,
"source_url": "https://pomona.hdlgov.com/Search/Index/BusinessLicense",
"scraped_at": "2026-08-20T00:00:00.000Z"
}
| Field | Type | Description |
|---|---|---|
jurisdiction |
string | HdL city instance the record came from (e.g. pomona) |
jurisdiction_subdomain |
string | Subdomain slug for the city instance |
account_number |
string | City's business-license account number |
business_name |
string | Licensed business name |
start_date |
string | License issue date |
expire_date |
string | License expiration date |
license_status |
string | active or expired, derived by comparing expire_date to the run date |
business_type |
string | Business-type category label (e.g. "Accounting & Bookkeeping") |
business_type_id |
string | City-specific business-type code |
address_full |
string | Full address as published |
street_address |
string | Parsed street address |
city |
string | Parsed city |
state |
string | Parsed state |
zip_code |
string | Parsed ZIP (or ZIP+4) |
matched_by |
string | Search axis this record was returned under (Business Type) |
days_to_expiry |
number | Days until expire_date (negative if already expired) |
is_new_license |
boolean | true if start_date falls within newLicenseLookbackDays of the run |
source_url |
string | Canonical source page for this city's license search |
scraped_at |
string | ISO-8601 timestamp when this record was scraped |
Resuming a large crawl
Every run emits a resumeCursor in its Output. If a large crawl stops before it finishes —
because it hit maxItems, your spend cap (maxTotalChargeUsd), or was aborted — start a
new run with the same input plus that resumeCursor to continue. You are not
re-charged for licenses the earlier run already delivered. Resume within your account's
run-retention window — on the free tier, roughly your 10 most recent runs.
FAQ
Does this only find businesses I already know the name or address of?
No. Unlike a lookup tool, this actor enumerates every business-type category in a city to return that city's entire active license roster — you don't need to know a business name in advance.
How do I get only the new licenses issued this week?
Set newLicenseLookbackDays to 7 and filter your downstream results on
is_new_license: true. Re-run weekly to build a recurring new-business lead feed.
What happens if a city I request isn't reachable?
That city is skipped for that run and the rest of your requested cities still complete — a single unreachable instance never fails the whole run.
Can I restrict the crawl to specific business types?
Yes — pass the business-type codes you want in businessTypeIds. Leave it empty to
enumerate every business type the city's portal exposes.
Need More Features?
Need a city added, the Business Name/Address search axes, or a different output shape? File an issue or get in touch.
Why Use HDL Municipal Business License Registry Scraper?
- Full roster, not a single lookup — every business-type category, every reachable city, in one run.
- Built for recurring use —
is_new_licenseandnewLicenseLookbackDaysturn this into a weekly new-business lead feed, not a one-off export. - Clean, consistent output — every license follows the same schema across every city.