Use case
Search El Cajon Business Licenses by Address
Find which businesses hold a municipal license at a given address in El Cajon, CA (HdL Companies portal) -- account #, issue/expiration dates.
Say you are underwriting a lease on a small retail strip on Main Street in El Cajon, and the rent roll you were handed lists five tenants. You want to know what the city thinks is operating at that address: whether all five hold a business licence, whether there is a sixth the landlord did not mention, and how long each has been there. The seller’s schedule tells you what the seller wants you to know. The city’s licence register tells you who registered to trade at that address, and when.
This is the reverse of the usual lookup: you do not have a business name to check, you have a street and want everything on it. El Cajon runs its public business-licence register on HdL Companies’ portal, and that portal carries an address index alongside the name one — which is how an address becomes a tenant list.
The manual way, and what it costs
The screenshot above is Pomona’s portal — El Cajon’s is the same page with a different logo, which is the point of HdL: one vendor, dozens of California cities, one search form. It is public and free. For a single address you are curious about, go and type it in. Nothing here improves on the city’s own screen for one lookup.
Where it stops working is diligence at any scale. A table on a page is not a rent roll you can reconcile, and HdL returns the address as one line with city and ZIP baked in, so comparing it against the schedule you were sent is manual string-matching — and none of it leaves you a file you can attach to the report.
The faster way
HdL Municipal Business License Lookup does the same search once and hands back every row at once.
{
"citySubdomain": "elcajon",
"query": "Main St",
"searchType": "Business Address",
"maxResults": 100
}
searchType: "Business Address" is what makes this a different job from a name lookup — it points the
query at the address index, so the query string is matched against the street on each licence rather
than the business name. query: "Main St" is a substring, so it returns the whole street: every
licensed business whose recorded address contains that text. Put the number in (123 Main) to narrow
it to one building, and expect the usual address messiness — the city recorded ST or STREET or
neither, and unit numbers may not be recorded at all, so start looser than you think and tighten.
citySubdomain: "elcajon" selects the city, and it is one city per run: the bare subdomain of that
city’s HdL portal, not elcajon.hdlgov.com and not El Cajon, CA. maxResults: 100 caps the spend,
because a street-level query on a long road can match a great many licences and you pay per row.
What comes back
{
"jurisdiction": "Pomona",
"account_number": "00204231",
"business_name": "BEE POLISHED NAILS SPA",
"issue_date": "4/24/2019",
"expiration_date": "3/31/2027",
"address": "663 E FOOTHILL BLVD",
"city": "POMONA",
"state": "CA",
"zip_code": "91767",
"matched_by": "Business Name",
"source_url": "https://pomona.hdlgov.com/Search/SearchBy"
}
| Field | Example value | Meaning |
|---|---|---|
jurisdiction | Pomona | The HdL city instance searched (e.g. ‘Pomona’) |
account_number | 00204231 | The city’s business-license account number |
business_name | BEE POLISHED NAILS SPA | Licensed business name |
issue_date | 4/24/2019 | License start/issue date |
expiration_date | 3/31/2027 | License expiration date |
address | 663 E FOOTHILL BLVD | Street address, when the city publishes it |
The sample row above is a Pomona one — it is the shape every HdL city returns, and on your run
jurisdiction reads El Cajon and matched_by reads Business Address, which is your confirmation
that the row landed because of the street and not a coincidental name.
For a rent roll, the dates carry the story. issue_date is when that business first registered at
the address — your tenure signal, and a licence issued in 2019 says something very different from one
issued four months ago. expiration_date is the closest the record gets to “still trading”; read it
as text, because the portal returns US-style M/D/YYYY strings and that is exactly what comes back.
business_name plus the split address and zip_code is what you reconcile against the schedule,
and any name in the register that is not on it is a question for the seller. account_number is the
city’s own key — cite it in the report and re-check against it later.
What you’d do with it
Export to CSV and put it side by side with the rent roll, matching on name and street. Three columns
of findings fall out: tenants on the schedule with no licence at that address, licences at the
address that are not on the schedule, and licences whose expiration_date has already passed. That
sheet, with source_url and the run date on it, is an exhibit — it says what the city’s register
held on the day you checked. Re-run it before closing if the diligence period is long.
Worth knowing
Withheld addresses cannot be placed. When a licensee’s address is not public the portal prints
--ON FILE--, and the actor returns null across address, city, state and zip_code rather
than parsing that as a street. For an address-led search that is the sharpest limitation in the list:
a business whose address the city withholds is not one you can confirm at your building.
Absence is not evidence. An unlicensed operator is, by definition, not in the register — so “no licence found at this unit” means the city has no record, not that nobody is trading there.
One city per run, and only HdL cities at all. If El Cajon’s neighbour runs its register on a
different system, this actor cannot read it. And some hdlgov.com cities sit behind a Cloudflare
challenge a plain HTTP request cannot pass: those runs fail with an explicit message naming a
reachable city rather than returning wrong data. Pomona, Hayward and El Cajon are the cities proven
to answer, and no proxy setting changes that for the others.
No status field, and no contact details. HdL publishes no active/expired flag here, so “current”
is your inference off expiration_date rather than the city’s declaration — and the record is a
name, an account number, dates and an address, with nothing about who runs the business or how to
reach them.
Run it yourself: How to run HdL Municipal Business License Lookup walks the whole thing step by step.
- Search Pomona Business Licenses by Name — the same actor pointed at the name index, for when you have a business rather than a street.
- Zillow & Redfin Property Scraper — reach for it when you want the property record behind the address rather than who is licensed to trade at it.
Last updated 2026-07-22