# Hawaii Business Express Scraper (`crawlerbros/hawaii-business-express-scraper`) Actor

Search Hawaii's free public business registry (DCCA Business Registration Division) by name, exact file number, or record ID. Get entity type, status, registered agent, addresses, officers/members, annual filing history, and trade name/trademark/service mark records.

- **URL**: https://apify.com/crawlerbros/hawaii-business-express-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Hawaii Business Express Scraper

Search Hawaii's **DCCA Business Registration Division** free public business registry (`hbe.dcca.hawaii.gov`, "Hawaii Business Express"). Look up a business by name, exact file number, or a record ID from a previous run, and get entity type, status, registered agent, principal/mailing address, officers/members, annual filing history, and — for Trade Names, Trademarks, Service Marks, and Publicity Rights Names — registrant and certificate detail. Plain JSON API — no login, no CAPTCHA.

### Data Source & Usage Notes

**Read this before running a large job.**

- **No login, no CAPTCHA.** The public "Search & Buy" page on Hawaii Business Express calls two plain, unauthenticated JSON endpoints (`getSearchResults` and `getBusinessDetailsWrapper`) under `/webruntime/api/apex/execute?asGuest=true`. Confirmed live from this environment with no session cookie, no Referer, and no proxy — both endpoints return real data to a bare HTTP client.
- **Conservative by design.** The actor only ever uses Apify's free datacenter (AUTO) proxy group as a fallback if a request is ever temporarily blocked — never a paid residential proxy.
- **Not affiliated with the State of Hawaii.** This is an independent third-party tool using the source's own public, no-login search API.

#### Why Hawaii instead of California?

This actor was originally scoped as a California SOS (`bizfileonline.sos.ca.gov`) business search. Live verification confirmed the site is blocked at every anti-bot tier tried:

- Plain `httpx` GET to the homepage and to `POST /api/Records/businesssearch` → hard `403` "Request unsuccessful. Incapsula incident ID: ..."
- `curl_cffi` with Chrome-131 TLS/JA3 impersonation → identical `403` Incapsula block page
- A real headless Chromium (Playwright) loading the search page directly → identical `403` Incapsula block page, with no JS challenge offered to solve — Incapsula is rejecting the request outright, not merely rate-limiting

Per this project's zero-cost reliability policy, the target was replaced with **Hawaii's DCCA Business Registration Division search** — a real, free, no-login, no-CAPTCHA state business registry in the same category (state business entity/trade-name registry lookup), confirmed live and returning real, detailed search results with no proxy required.

### What this actor does

- **3 search modes**:
  - `search` — business/trade name lookup, `begins`-with or `contains` matching
  - `byFileNumber` — exact Hawaii file number lookup
  - `byEntityId` — direct detail fetch for one or more record IDs (e.g. from a previous run's `recordId` field), skipping the name search entirely
- **3 finite-value filters**, usable on `search` and `byFileNumber`, matching the source's own dropdowns:
  - `recordType` — Entity, Trade Name, Trademark, Service Mark, Publicity Rights Name, Pending Filing
  - `status` — all 16 registration statuses the source tracks (Active, Dissolved, Delinquent Status 1/2, Withdrawn, etc.)
  - `entityType` — Cooperative, Corporation, Limited Liability Company, Partnership, Other
- **Full detail enrichment** (`includeDetails`, on by default) — for each match, fetches business type, registered agent, principal/mailing address, managed-by, good-standing status, officers/members, annual filing history, other filing history, and purchasable-document list
- **Works for both entities and marks** — Trade Names, Trademarks, and Service Marks return registrant, certificate number, and expiration date instead of registered-agent fields
- **Empty fields are omitted**

### What's NOT included (and why)

- **Purchasing/downloading filed documents** — the source lists which documents are available to buy (`availableDocuments`, with price), but actually purchasing a certified copy requires payment on the state's own portal. This actor surfaces the free metadata only.
- **New business filing forms** — the source's "file an amendment/change" form catalog is a transactional feature (creating filings), out of scope for a read-only search scraper.

### Output per record

- `businessName`, `fileNumber`, `certificationNumber` (Trade Name/Trademark/Service Mark)
- `recordId` — Salesforce record ID; reusable with `mode=byEntityId`
- `recordType` — e.g. `Entity`, `Trade Name`, `Trademark`
- `status`, `markType`, `createdDate`, `expirationDate`
- `entityName`, `entityTypeLabel`, `entityTypeValue`
- `isInGoodStanding`, `goodStandingMessage`
- `businessType`, `organizedIn`, `registrationDate`
- `principalAddress`, `mailingAddress`, `managedBy`
- `registeredAgentName`, `registeredAgentAddress`, `isCommercialRegisteredAgent`
- `natureOfBusiness`, `registrant`, `tradeName`, `certificateNumber`
- `officers` — list of `{name, role, title, type, startDate, address}`
- `annualFilings` — list of `{filingYear, status, receivedDate}`
- `filingHistory` — list of `{effectiveDate, description, transactionCode}`
- `availableDocuments` — list of `{name, type, effectiveDate, availability, purchasePrice, certifyPrice}`
- `sourceUrl`
- `recordType: "businessRecord"` (top-level record-kind stamp), `scrapedAt`

### Input

| Field | Type | Console prefill | Description |
|---|---|---|---|
| `mode` | string | `search` | `search` / `byFileNumber` / `byEntityId` |
| `query` | string | `aloha` | mode=search — business/trade name. No forced default via API - required in `search` mode |
| `matchType` | string | `begins` | mode=search — `begins` or `contains` |
| `fileNumber` | string | – | mode=byFileNumber — exact file number |
| `entityIds` | string | – | mode=byEntityId — comma/newline-separated record IDs |
| `recordType` | string | `all` | Optional record-type filter |
| `status` | string | `all` | Optional status filter |
| `entityType` | string | `all` | Optional entity-type filter |
| `includeDetails` | boolean | `true` | Fetch full detail per matched record |
| `proxyConfiguration` | object | AUTO proxy | Apify proxy config; always datacenter (AUTO), never residential |
| `maxItems` | int | `20` | Hard cap (1–500) |

#### Example: search by business name

```json
{
  "mode": "search",
  "query": "aloha",
  "maxItems": 20
}
```

#### Example: search by exact file number

```json
{
  "mode": "byFileNumber",
  "fileNumber": "256912C5"
}
```

#### Example: filtered search (active LLCs only)

```json
{
  "mode": "search",
  "query": "aloha",
  "recordType": "Entity",
  "status": "Active (A)",
  "entityType": "Limited Liability Company",
  "maxItems": 25
}
```

#### Example: direct record-ID lookup

```json
{
  "mode": "byEntityId",
  "entityIds": "001t000000hKCeyAAG, a55cs00002LOd12AAD"
}
```

### Use cases

- **Due diligence** — confirm a counterparty's Hawaii registration status, registered agent, and officers before contracting
- **Compliance & KYC** — cross-check a business's legal entity name, file number, and good-standing status
- **Trade name / trademark clearance** — see what similarly-named trade names, trademarks, or service marks already exist before choosing a new one
- **Registered agent research** — identify a specific entity's registered agent and address
- **Annual filing / compliance tracking** — review an entity's annual filing history and current good-standing status

### FAQ

**What's the data source?** The Hawaii DCCA Business Registration Division's own free public business registry search at `hbe.dcca.hawaii.gov`. This actor is an independent third-party tool and is not affiliated with the State of Hawaii.

**Is this data official / legally binding?** No. For a certified copy or official Certificate of Good Standing, use the state's own paid ordering channels. This actor returns the same free public search/detail data the site's own search page shows.

**Why did my run return 0 results?** The query genuinely has no match under the chosen filters. Try `matchType: "contains"` for a broader search, or reset `recordType`/`status`/`entityType` to `all`.

**What's `recordId` used for?** It's the source's own internal Salesforce record ID. Save it from a `search` run's output to re-fetch the same record's full detail later via `mode: "byEntityId"` without re-running the name search.

**How fresh is the data?** Real-time — the search reflects the Business Registration Division's database as of the moment of the search.

# Actor input Schema

## `mode` (type: `string`):

Which search axis to use.

## `query` (type: `string`):

Business, trade name, trademark, or service mark name to search for, e.g. `aloha`.

## `matchType` (type: `string`):

Whether the name must appear at the start of the business name, or anywhere in it.

## `fileNumber` (type: `string`):

Exact Hawaii file number, e.g. `256912C5`.

## `entityIds` (type: `string`):

One or more Salesforce record IDs (the `recordId` field from a previous run's output), separated by commas or newlines. Fetches full detail directly without a name search.

## `recordType` (type: `string`):

Restrict results to a specific record type. Leave as "All types" to search every type.

## `status` (type: `string`):

Restrict results to a specific registration status. Leave as "All statuses" to search every status.

## `entityType` (type: `string`):

Restrict results to a specific business structure. Leave as "All entity types" to search every type.

## `includeDetails` (type: `boolean`):

Fetch full detail (registered agent, addresses, officers/members, filing history, purchasable documents) for each matched record. Uses one extra request per record.

## `proxyConfiguration` (type: `object`):

Uses Apify's free datacenter (AUTO) proxy group to get a fresh IP if a request is temporarily rate-limited. Residential proxy is never used by this actor.

## `maxItems` (type: `integer`):

Hard cap on emitted records.

## Actor input object example

```json
{
  "mode": "search",
  "query": "aloha",
  "matchType": "begins",
  "recordType": "all",
  "status": "all",
  "entityType": "all",
  "includeDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxItems": 20
}
```

# Actor output Schema

## `businessRecords` (type: `string`):

Dataset containing all scraped Hawaii Business Express records.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "mode": "search",
    "query": "aloha",
    "matchType": "begins",
    "recordType": "all",
    "status": "all",
    "entityType": "all",
    "includeDetails": true,
    "proxyConfiguration": {
        "useApifyProxy": true
    },
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/hawaii-business-express-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "mode": "search",
    "query": "aloha",
    "matchType": "begins",
    "recordType": "all",
    "status": "all",
    "entityType": "all",
    "includeDetails": True,
    "proxyConfiguration": { "useApifyProxy": True },
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/hawaii-business-express-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "mode": "search",
  "query": "aloha",
  "matchType": "begins",
  "recordType": "all",
  "status": "all",
  "entityType": "all",
  "includeDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxItems": 20
}' |
apify call crawlerbros/hawaii-business-express-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,crawlerbros/hawaii-business-express-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/46RiFAraLNcn05te8/builds/OOfdR0xRMsZQ8FuDL/openapi.json
