# Florida Sunbiz Scraper (`agenscrape/florida-sunbiz-scraper`) Actor

Extract comprehensive business information from Florida's official SunBiz database (search.sunbiz.org). Fast, reliable, and accurate data extraction for business research, due diligence, compliance monitoring, and market analysis.

- **URL**: https://apify.com/agenscrape/florida-sunbiz-scraper.md
- **Developed by:** [Agenscrape](https://apify.com/agenscrape) (community)
- **Categories:** Automation, Lead generation
- **Stats:** 141 total users, 13 monthly users, 99.4% runs succeeded, 5 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Florida SunBiz Business Data Scraper

Extract comprehensive business information from Florida's official SunBiz database (search.sunbiz.org). Fast, reliable, and accurate data extraction for business research, due diligence, compliance monitoring, and market analysis.

### Why Use This Actor?

- ✅ **Official Source** - Scrapes directly from Florida Department of State's official SunBiz database
- ⚡ **Fast & Reliable** - Optimized HTTP requests with smart retry logic and premium proxy support
- 📊 **Complete Data** - Extracts all available business information including officers, directors, and agents
- 🔍 **Flexible Search** - Search by business name or document number
- 🎯 **Clean Output** - Structured JSON data ready for immediate use
- 🔄 **Batch Processing** - Process hundreds of businesses in a single run
- 💰 **Cost Effective** - Approximately $0.02-0.05 per 100 records

### Quick Start

#### Simple Search by Business Name

```json
{
  "searchMode": "entityName",
  "searchTerms": ["WALMART", "PUBLIX", "TARGET"],
  "maxResults": 10
}
```

#### Direct Lookup by Document Number

```json
{
  "searchMode": "documentNumber",
  "documentNumbers": ["L05000090555", "L23000246268"],
  "maxResults": 10
}
```

### Features

| Feature | Description |
|---------|-------------|
| 🔎 **Entity Name Search** | Find businesses by registered name |
| 🆔 **Document Number Lookup** | Direct retrieval using Florida document IDs |
| 👔 **Officers & Directors** | Complete listings with names, titles, and addresses |
| 📝 **Registered Agents** | Agent name, address, and change history |
| ⚖️ **Authorized Persons** | Full authorized person details |
| 📅 **Filing Information** | Status, filing dates, and document numbers |
| 📤 **Multiple Export Formats** | JSON, CSV, Excel, XML |
| 🔁 **Automatic Retries** | Built-in error handling and retry logic |

### Example Output

#### Registered Agent Information

```json
{
  "documentNumber": "849374",
  "entityName": "WALMART INC.",
  "status": "ACTIVE",
  "filingDate": "06/08/1981",
  "registeredAgent": {
    "name": "C T CORPORATION SYSTEM",
    "address": "1200 SOUTH PINE ISLAND ROAD, PLANTATION, FL 33324",
    "nameChanged": "03/02/2017",
    "addressChanged": "03/02/2017"
  }
}
```

#### Officers & Directors

```json
{
  "officers": [
    {
      "title": "Director, President",
      "name": "McMillon, C. Douglas",
      "address": "1 Customer Dr., BENTONVILLE, AR 72716"
    },
    {
      "title": "EVP/CFO",
      "name": "Rainey, John David",
      "address": "1 Customer Dr., BENTONVILLE, AR 72716"
    }
  ]
}
```

#### Authorized Persons (LLCs)

```json
{
  "authorizedPersons": [
    {
      "title": "Manager, President, CEO",
      "name": "KAPADIA, VISHAL",
      "address": "1 Customer Dr., BENTONVILLE, AR 72716"
    }
  ]
}
```

### Input Parameters

#### `searchMode` (required)

**Type:** `string` | **Default:** `"entityName"`

Choose your search method:

| Value | Description |
|-------|-------------|
| `entityName` | Search businesses by their registered name |
| `documentNumber` | Look up businesses using Florida document numbers |

#### `searchTerms` (array)

**Type:** `array of strings` | **Required when:** `searchMode = "entityName"`

List of business names to search for. Partial matches are supported.

**Examples:**

```json
["WALMART", "PUBLIX SUPER MARKETS", "AMAZON SERVICES LLC"]
```

**Tips:**

- Use uppercase for better matching
- Exact names return faster results
- Partial names may return multiple matches

#### `documentNumbers` (array)

**Type:** `array of strings` | **Required when:** `searchMode = "documentNumber"`

List of Florida document numbers to look up directly.

**Examples:**

```json
["L05000090555", "L23000246268", "F96000005067"]
```

**Document Number Prefixes:**

- `L` - Limited Liability Company (LLC)
- `F` - Foreign (out-of-state) Corporation
- `P` - Domestic Profit Corporation
- `N` - Domestic Non-Profit Corporation
- `D` - Business Trust
- `M` - Limited Liability Partnership
- `T` - Trademark

#### `maxResults` (number)

**Type:** `integer` | **Default:** `100` | **Range:** `1 - 10,000`

Maximum number of business records to process in a single run.

**Recommendations:**

- **10-50**: Quick research or testing
- **100-500**: Medium-scale data collection
- **1,000+**: Large-scale database building

### Output Structure

#### Complete Field Reference

| Field | Type | Description | Always Present |
|-------|------|-------------|----------------|
| `documentNumber` | string | Florida state document number | ✅ |
| `entityName` | string | Official registered business name | ✅ |
| `status` | string | Business status (ACTIVE/INACTIVE) | ✅ |
| `filingDate` | string | Date filed with the state | ✅ |
| `registeredAgent` | object | Registered agent details | ✅ |
| `registeredAgent.name` | string | Agent's name or 'NONE' | ✅ |
| `registeredAgent.address` | string | Agent's address or 'NONE' | ✅ |
| `registeredAgent.nameChanged` | string | Date name was changed | ❌ Optional |
| `registeredAgent.addressChanged` | string | Date address was changed | ❌ Optional |
| `officers` | array | Officers and directors | ✅ |
| `officers[].title` | string | Officer title/position | ✅ |
| `officers[].name` | string | Officer name | ✅ |
| `officers[].address` | string | Officer address | ✅ |
| `authorizedPersons` | array | Authorized persons (mainly LLCs) | ✅ |
| `authorizedPersons[].title` | string | Person's title | ✅ |
| `authorizedPersons[].name` | string | Person's name | ✅ |
| `authorizedPersons[].address` | string | Person's address | ✅ |

### Use Cases & Applications

#### 🔍 Business Intelligence & Research

**Perfect For:**

- Competitive analysis and market research
- Industry trend analysis
- Investment opportunity research
- Business structure analysis

**Example Use:**

> Track all Walmart-related entities in Florida, analyze their structure, leadership, and growth patterns.

#### ✅ Legal Due Diligence & Compliance

**Perfect For:**

- Pre-acquisition due diligence
- Contract verification
- Regulatory compliance checks
- Corporate governance review

**Example Use:**

> Verify registered agent information for all business partners before signing contracts.

#### 📊 Sales & Lead Generation

**Perfect For:**

- Building prospect databases
- Contact information enrichment
- Decision-maker identification
- Territory planning

**Example Use:**

> Identify all active LLCs in specific industries, extract leadership contacts for outreach campaigns.

#### 🏢 Corporate Monitoring & Tracking

**Perfect For:**

- Competitor monitoring
- Partner/vendor monitoring
- Status change alerts
- Leadership change tracking

**Example Use:**

> Monitor registered agent changes across portfolio companies to stay informed of corporate actions.

#### 📈 Market Analysis & Research

**Perfect For:**

- Economic research
- Industry analysis
- Geographic business patterns
- Corporate structure studies

**Example Use:**

> Analyze business formation trends by entity type and location over time.

#### 🔐 Risk Assessment & Verification

**Perfect For:**

- Vendor vetting
- Background verification
- Ownership validation
- Status confirmation

**Example Use:**

> Verify business is active and properly registered before processing high-value transactions.

### Performance & Pricing

#### Speed

- **Small Batches (1-10 records):** ~30 seconds
- **Medium Batches (11-100 records):** 1-3 minutes
- **Large Batches (101-1000 records):** 10-30 minutes

#### Reliability

- **Success Rate:** 99%+ with automatic retry logic
- **Retries:** Up to 5 attempts per request
- **Proxy:** Premium proxies for consistent access

#### Cost Estimates

| Records | Estimated Cost | Use Case |
|---------|---------------|----------|
| 1-10 | ~$0.01 | Quick lookup |
| 11-100 | ~$0.02-0.05 | Research project |
| 101-500 | ~$0.10-0.25 | Lead generation |
| 501-1,000 | ~$0.25-0.50 | Database building |

*Costs are approximate and depend on Apify platform pricing and compute usage.*

### Export Formats

#### JSON

```json
{
  "documentNumber": "849374",
  "entityName": "WALMART INC.",
  "status": "ACTIVE"
}
```

Perfect for: API integrations, data pipelines, programming

#### CSV

```csv
documentNumber,entityName,status,filingDate
849374,WALMART INC.,ACTIVE,06/08/1981
```

Perfect for: Excel, Google Sheets, database imports

#### Excel (.xlsx)

Formatted spreadsheet with headers and proper data types.
Perfect for: Business analysis, reporting, presentations

#### XML

```xml
<record>
  <documentNumber>849374</documentNumber>
  <entityName>WALMART INC.</entityName>
</record>
```

Perfect for: Enterprise systems, legacy integrations

### Best Practices & Tips

#### 1. Optimize Your Searches

✅ **DO:** Use exact business names when known
✅ **DO:** Use document numbers for fastest results
✅ **DO:** Batch multiple lookups in one run
❌ **DON'T:** Use overly broad search terms
❌ **DON'T:** Set maxResults higher than needed

#### 2. Handle Results Effectively

- Check `status` field to filter active vs inactive businesses
- Validate `registeredAgent` is not "NONE" before using contact info
- Handle empty `officers` or `authorizedPersons` arrays appropriately
- Note that older records may have less detailed information

#### 3. Cost Optimization

- Start with small test runs (10-50 records) to validate your use case
- Use `maxResults` to control costs on large searches
- Process results in batches rather than individual runs
- Cache results to avoid duplicate lookups

#### 4. Scheduling & Automation

- Schedule daily/weekly runs for monitoring purposes
- Use webhooks to trigger downstream processes
- Store results in datasets for historical tracking
- Set up alerts for status changes or updates

### Common Search Patterns

#### Pattern 1: Research Specific Companies

```json
{
  "searchMode": "entityName",
  "searchTerms": ["WALMART", "TARGET CORPORATION", "COSTCO"],
  "maxResults": 50
}
```

**Use When:** Researching known companies and their Florida entities

#### Pattern 2: Direct Document Lookup

```json
{
  "searchMode": "documentNumber",
  "documentNumbers": ["L05000090555", "L23000246268", "F96000005067"],
  "maxResults": 10
}
```

**Use When:** You have specific document numbers from other sources

#### Pattern 3: Industry Discovery

```json
{
  "searchMode": "entityName",
  "searchTerms": ["MEDICAL", "PHARMACY", "HEALTHCARE"],
  "maxResults": 500
}
```

**Use When:** Building databases of businesses in specific industries

#### Pattern 4: Entity Type Analysis

```json
{
  "searchMode": "entityName",
  "searchTerms": ["LLC", "INC", "CORP"],
  "maxResults": 1000
}
```

**Use When:** Analyzing business structures and entity types

### Data Freshness & Accuracy

#### Source Reliability

All data is extracted in real-time from Florida's official Department of State SunBiz database at **search.sunbiz.org**. This is the same source used by legal professionals, government agencies, and the public.

#### Update Frequency

- Data is scraped on-demand during each actor run
- No caching - always get the latest available information
- Changes reflect within hours of state database updates

#### Data Completeness

- **Modern Records (2000+):** Typically complete with all fields
- **Older Records (Pre-2000):** May have limited detail
- **Some entity types:** May not have officers (e.g., certain trusts)

### Technical Specifications

#### Infrastructure

- **Runtime Environment:** Node.js 20.x
- **Framework:** Apify SDK 3.x
- **HTTP Client:** got-scraping 4.x with custom headers
- **HTML Parser:** Cheerio 1.x
- **Proxy:** Premium residential/datacenter proxies

#### Reliability Features

- Automatic retry on failures (5 attempts)
- Exponential backoff between retries
- Non-breaking space handling
- Character encoding normalization
- Request rate optimization

#### Data Processing

- Real-time HTML parsing
- Field normalization and cleaning
- Change history extraction
- Duplicate prevention
- Error logging and reporting

### Frequently Asked Questions

**Q: How current is the data?**
A: Data is scraped in real-time from the official database, so it's always current as of the moment you run the actor.

**Q: Can I export the results?**
A: Yes! Export to JSON, CSV, Excel, or XML directly from the Apify platform.

**Q: What if a business name returns multiple results?**
A: The actor will process all matches up to your `maxResults` limit. Use document numbers for exact matches.

**Q: Do I need special permissions to use this?**
A: No. All data is publicly available from the State of Florida. No special licenses or permissions required.

**Q: Can I schedule regular runs?**
A: Yes! Use Apify's scheduling feature to run the actor daily, weekly, monthly, or at any custom interval.

**Q: What happens if a business isn't found?**
A: The actor will skip unfound businesses and continue processing your list. No errors are thrown for missing records.

**Q: How do I handle large datasets (10,000+ records)?**
A: Break into multiple runs with `maxResults` set to 1000 per run, or use different search terms to segment your data collection.

**Q: Are there rate limits?**
A: No explicit rate limits. The actor uses smart request pacing and premium proxies to avoid blocks.

**Q: Can I get historical data?**
A: The current database state is available. For change tracking, you'd need to run the actor periodically and compare results over time.

**Q: What about inactive or dissolved businesses?**
A: These are included in results with `status: "INACTIVE"`. Filter by status field as needed.

### Troubleshooting

#### No Results Returned

- **Check search terms:** Ensure exact spelling of business names
- **Try document numbers:** More reliable than name searches
- **Verify entity exists:** Search manually on search.sunbiz.org first

#### Missing Officer Data

- **Older entities:** Pre-2000 records may have limited information
- **Certain entity types:** Some trusts/partnerships may not list officers
- **Check authorizedPersons:** LLCs often use this field instead

#### Slow Performance

- **Reduce maxResults:** Start with smaller batches
- **Use document numbers:** Faster than name searches
- **Check proxy status:** Contact support if consistently slow

### Support & Resources

#### Official Documentation

- [Apify Documentation](https://docs.apify.com/)
- [Florida SunBiz Official Site](https://search.sunbiz.org/)

#### Getting Help

For questions, issues, or feature requests, contact support through the Apify platform or visit the actor's discussion page.

#### Updates & Maintenance

This actor is actively maintained. Check the changelog for recent updates and improvements.

***

**Last Updated:** November 2024 | **Version:** 1.0

*This actor extracts publicly available information from Florida's Department of State SunBiz database. Data is provided as-is from official state records. Please use responsibly and in accordance with applicable laws and regulations.*

# Actor input Schema

## `searchMode` (type: `string`):

Choose how you want to search for businesses

## `searchTerms` (type: `array`):

List of business entity names to search for (used when Search Mode is 'entityName')

## `documentNumbers` (type: `array`):

List of specific document numbers to fetch (used when Search Mode is 'documentNumber')

## `maxResults` (type: `integer`):

Maximum number of results to process

## Actor input object example

```json
{
  "searchMode": "documentNumber",
  "searchTerms": [
    "WALMART",
    "PUBLIX"
  ],
  "documentNumbers": [
    "L05000090555",
    "L23000246268"
  ],
  "maxResults": 50
}
```

# 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 = {
    "searchMode": "documentNumber",
    "searchTerms": [
        "WALMART",
        "PUBLIX"
    ],
    "documentNumbers": [
        "L05000090555",
        "L23000246268"
    ],
    "maxResults": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("agenscrape/florida-sunbiz-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 = {
    "searchMode": "documentNumber",
    "searchTerms": [
        "WALMART",
        "PUBLIX",
    ],
    "documentNumbers": [
        "L05000090555",
        "L23000246268",
    ],
    "maxResults": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("agenscrape/florida-sunbiz-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 '{
  "searchMode": "documentNumber",
  "searchTerms": [
    "WALMART",
    "PUBLIX"
  ],
  "documentNumbers": [
    "L05000090555",
    "L23000246268"
  ],
  "maxResults": 50
}' |
apify call agenscrape/florida-sunbiz-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,agenscrape/florida-sunbiz-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/rKHKYWNfCUkdkzUs6/builds/V4SVGNTy2AILijQVt/openapi.json
