San Francisco Registered Businesses Scraper avatar

San Francisco Registered Businesses Scraper

Pricing

from $6.15 / 1,000 results

Go to Apify Store
San Francisco Registered Businesses Scraper

San Francisco Registered Businesses Scraper

Scrape registered business locations in San Francisco. Extract business name, owner, full address, neighborhood, supervisor district, business activity, registration dates and coordinates. Export to JSON, CSV or Excel.

Pricing

from $6.15 / 1,000 results

Rating

0.0

(0)

Developer

Scrapers Lat

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

20 hours ago

Last modified

Share

San Francisco Registered Businesses Scraper

San Francisco Registered Businesses Scraper

Here is one real result, with every field the actor returns:

{
"dbaName": "Seiyun Yemeni Coffee",
"ownershipName": "Seiyun Yemeni Coffee LLC",
"businessType": "RESTAURANT - UNDER 1,000 SQFT",
"businessTypeList": "RESTAURANT - UNDER 1,000 SQFT",
"naicsCode": null,
"selfReportedNaicsCode": null,
"naicsDescription": null,
"fullBusinessAddress": "260 5th St",
"city": "San Francisco",
"state": "CA",
"zip": "94103",
"neighborhood": "South of Market",
"businessCorridor": null,
"supervisorDistrict": "6",
"communityBenefitDistrict": "Yerba Buena",
"mailingAddress": "4464 Lone Tree Way 2082",
"mailCity": "Antioch",
"mailState": "CA",
"mailZip": "94531",
"dbaStartDate": "2026-02-10",
"dbaEndDate": null,
"locationStartDate": "2026-02-10",
"locationEndDate": null,
"isActive": true,
"administrativelyClosed": false,
"parkingTax": false,
"transientOccupancyTax": false,
"businessAccountNumber": "1410779",
"certificateNumber": "1179350",
"ttxid": "1410779-02-261",
"uniqueId": "1410779-02-261-1179350",
"latitude": 37.780677,
"longitude": -122.404158,
"dataAsOf": "2026-08-14",
"observedAt": "2026-08-15T09:54:00.700Z",
"enrichedEmail": null,
"enrichedContactName": null,
"enrichedJobTitle": null,
"enrichedEmailStatus": null,
"enrichedSource": null,
"enrichedConfidence": null,
"error": null
}

The most complete San Francisco registered business scraper available. It returns every field the city's registered business dataset exposes for each location, from owner and full address to neighborhood, supervisor district, tax flags and coordinates, with eight filters and an optional contact enrichment add-on to build targeted, contactable lead lists.

📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples

Apify Coverage Output Billing

Table of contents

What it does

The actor reads the City of San Francisco registered business locations dataset, applies the filters you pass as input, and writes one normalized record per registered business location to the run's dataset, newest registered first. Each record carries the DBA name, owner, full business and mailing address, neighborhood, business corridor, supervisor district, community benefit district, registered business activity, NAICS code, registration and location dates, active status, tax flags, coordinates and the city's stable identifiers.

Missing source values are returned as null, never invented. Filters combine with logical AND, so you can target one neighborhood, one activity and one date range at once. An optional paid add-on tries to find a public contact email and name for each result that has none.

Quickstart

Open the actor, paste this into the input, and press Run. It returns the 10 most recently registered restaurants matching COFFEE.

{
"query": "COFFEE",
"businessType": "RESTAURANT",
"maxBusinesses": 10
}

Combine filters to narrow further:

{
"neighborhood": "Mission",
"activeOnly": true,
"startFrom": "2024-01-01",
"maxBusinesses": 100
}

Every field is optional. With an empty input the actor returns the most recently registered businesses across all of San Francisco.

Input reference

FieldTypeRequiredDefaultDescription
querystringno(empty)Match on the business name (DBA) or owner name, for example COFFEE, UBER, or a person's name. Empty browses all businesses.
neighborhoodenumno(any)Restrict to one San Francisco neighborhood, for example Mission, Tenderloin, South of Market.
businessTypestringno(empty)Match the registered business activity, for example RESTAURANT, MASSAGE, TATTOO, BAR. Case-insensitive text match.
supervisorDistrictenumno(any)Restrict to one Board of Supervisors district, 1 to 11.
activeOnlybooleannofalseWhen on, only businesses with no location end date (still registered) are returned. Off includes closed and past registrations.
zipstringno(empty)Match by 5-digit ZIP code, for example 94103.
startFromstringno(empty)Only businesses registered (DBA start date) on or after this date (YYYY-MM-DD).
startTostringno(empty)Only businesses registered on or before this date (YYYY-MM-DD).
naicsCodestringno(empty)Filter by NAICS code prefix, for example 722 for food service. Present only on a subset of records.
maxBusinessesintegerno10Maximum records to collect. Range 1 to 1000000. Free Apify plans are capped at 10 per run.
enrichContactsbooleannofalsePaid add-on. For each result without an email, attempt to find a public contact email and person's name. Billed per attempt plus an extra charge only when an email is found.
enrichContactsMaxintegerno50Cap how many results the add-on tries to enrich. Free Apify accounts are capped at 3.
appTokenstringno(empty)Optional Socrata app token. The source is keyless; a free token raises the rate limit for very large pulls.

Output reference

One dataset item per registered business location. Types: string, number, boolean, or null when the source value is absent.

FieldTypeDescription
dbaNamestringBusiness name (DBA).
ownershipNamestringRegistered owner name.
businessTypestringRegistered business activity, or null.
businessTypeListstringFull list of registered activities, or null.
naicsCodestringNAICS industry code, or null.
selfReportedNaicsCodestringSelf-reported NAICS code, or null.
naicsDescriptionstringNAICS description, or null.
fullBusinessAddressstringStreet address of the business location.
citystringCity (San Francisco).
statestringState (CA).
zipstring5-digit ZIP code.
neighborhoodstringAnalysis neighborhood.
businessCorridorstringNamed business corridor, or null.
supervisorDistrictstringBoard of Supervisors district.
communityBenefitDistrictstringCommunity benefit district, or null.
mailingAddressstringMailing street address.
mailCitystringMailing city.
mailStatestringMailing state.
mailZipstringMailing ZIP.
dbaStartDatestringRegistration (DBA start) date (YYYY-MM-DD).
dbaEndDatestringDBA end date, or null.
locationStartDatestringLocation start date (YYYY-MM-DD).
locationEndDatestringLocation end date, or null when still at the address.
isActivebooleantrue when the location has no end date.
administrativelyClosedbooleantrue when the city administratively closed the account.
parkingTaxbooleantrue when the business is subject to parking tax.
transientOccupancyTaxbooleantrue when subject to transient occupancy (hotel) tax.
businessAccountNumberstringCity business account number.
certificateNumberstringRegistration certificate number.
ttxidstringTreasurer and Tax Collector location ID.
uniqueIdstringStable unique record identifier.
latitudenumberLatitude of the location, or null.
longitudenumberLongitude of the location, or null.
dataAsOfstringSource data as-of date.
observedAtstringISO 8601 timestamp of when the record was collected.
enrichedEmailstringPaid add-on. Found public contact email, or null.
enrichedContactNamestringPaid add-on. Found contact person name, or null.
enrichedJobTitlestringPaid add-on. Found contact job title, or null.
enrichedEmailStatusstringPaid add-on. Verification status of the found email, or null.
enrichedSourcestringPaid add-on. Source the contact was found on, or null.
enrichedConfidencestringPaid add-on. Confidence in the found contact, or null.
errorstringnull on success. On a failed run, a single item with a populated error field is written instead.

Example output record

Real record from a live run (input {"maxBusinesses": 10}, newest registered first):

{
"dbaName": "Nathan Hood",
"ownershipName": "Nathan Hood",
"businessType": null,
"businessTypeList": null,
"naicsCode": "311811",
"selfReportedNaicsCode": "311811",
"naicsDescription": null,
"fullBusinessAddress": "50 Jones St Apt 903",
"city": "San Francisco",
"state": "CA",
"zip": "94102",
"neighborhood": "Tenderloin",
"businessCorridor": "Central Market",
"supervisorDistrict": "5",
"communityBenefitDistrict": "Tenderloin",
"mailingAddress": "50 Jones St Apt 903",
"mailCity": "San Francisco",
"mailState": "CA",
"mailZip": "94102",
"dbaStartDate": "2026-08-09",
"dbaEndDate": null,
"locationStartDate": "2026-08-09",
"locationEndDate": null,
"isActive": true,
"administrativelyClosed": false,
"parkingTax": false,
"transientOccupancyTax": false,
"businessAccountNumber": "1429523",
"certificateNumber": "1187327",
"ttxid": "1429523-08-261",
"uniqueId": "1429523-08-261-1187327",
"latitude": 37.781802,
"longitude": -122.4117495,
"dataAsOf": "2026-08-10",
"observedAt": "2026-08-10T14:17:44.229Z",
"error": null
}

Run via API and CLI

Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.

Run synchronously and get dataset items in one call:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~sf-business-registrations-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"query":"COFFEE","businessType":"RESTAURANT","maxBusinesses":25}'

Start a run asynchronously:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~sf-business-registrations-scraper/runs?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"neighborhood":"Mission","activeOnly":true,"maxBusinesses":100}'

Apify CLI:

apify call scrapers_lat/sf-business-registrations-scraper \
--input '{"zip":"94103","businessType":"BAR"}'

Fetch results

Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginate large datasets
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"

<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.

Billing and limits

  • Pay per result. You are charged per business record returned (result event). See the pricing tab for the current per-result price.
  • Contact enrichment add-on. When enrichContacts is on, the add-on is billed per enrichment attempt, plus an extra charge only when an email is found. Control cost with enrichContactsMax.
  • No charge on failure. If a run errors, the actor writes a single item with a populated error field and does not charge for it. Empty runs cost nothing.
  • Spend cap respected. Set maxTotalChargeUsd on the run; once reached, the actor stops emitting and charging further billable results.
  • Free Apify plans are capped at 10 records per run, and the enrichment add-on is capped at 3 attempts. Upgrade for higher limits.

FAQ and troubleshooting

A run returned 0 records. Why? The filter combination matched nothing. Loosen filters (remove neighborhood or widen the date range) and rerun. Zero-result runs are not charged.

Why is businessType or naicsCode null? Those fields are only present on a subset of the city's records, especially very recent registrations. Missing source values are returned as null, never invented.

How do I get only businesses still open at the address? Set activeOnly to true. This keeps only records with no locationEndDate.

How does contact enrichment charge? It bills per attempt on results that have no email, plus an extra charge only when an email is actually found. Cap attempts with enrichContactsMax.

Is this an official City of San Francisco tool? No. This actor is independent and has no affiliation with the City of San Francisco. It reads only publicly available open data. Use it in accordance with the city's open data terms.

More scrapers at scrapers.lat

Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.


Independent tool, not affiliated with the City of San Francisco. Accesses only publicly available open data. Use in accordance with the city's open data terms of service.