← Use cases

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 public search form on HdL (city portals)
HdL (city portals) — the official search. One record at a time.

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"
}
FieldExample valueMeaning
jurisdictionPomonaThe HdL city instance searched (e.g. ‘Pomona’)
account_number00204231The city’s business-license account number
business_nameBEE POLISHED NAILS SPALicensed business name
issue_date4/24/2019License start/issue date
expiration_date3/31/2027License expiration date
address663 E FOOTHILL BLVDStreet 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.

Last updated 2026-07-22