Vendor due diligence

Check a vendor's filing, officers, and connections — in 3 calls.

3 API calls · $0.015
← All examples
📋 Property managers
🛒 Procurement teams
🛡️ Insurance underwriters
🏠 HOA boards

How can I vet a Florida vendor before onboarding them? You're onboarding a new vendor — adding them to an approved list, issuing a purchase order, or binding an insurance policy. Before committing, you want to know: Is this a real business? Who runs it? Do they have other companies that suggest experience — or a pattern of abandoned entities?

In this example, a landscaping company submits a bid: "Example Landscaping Services LLC."

The lookup

Search by name
GET /api/v1/corporations/search/name?name=EXAMPLE+LANDSCAPING
Entity
EXAMPLE LANDSCAPING SERVICES LLC
Status
Active
Document #
L00000000004
Filed
Mar 15, 2022
Full detail
GET /api/v1/corporations/detail?documentNumber=L00000000004
Principal address
450 Example Blvd, Orlando, FL 33601
FEI / EIN
00-0000002
Manager
Carlos Example (type: Person)
Annual reports
2023, 2024, 2025, 2026 — all current
Search officer's other entities
GET /api/v1/corporations/search/officer?name=CARLOS+EXAMPLE
EXAMPLE LANDSCAPING SERVICES LLCActive
EXAMPLE OUTDOOR LLCActive (2020)
EXAMPLE LAWN CARE LLCDissolved (2021)

What you learn

Established operator. Filed in 2022 with four years of compliant annual reports. Not a new or untested business.
Experienced owner. Carlos Example runs multiple businesses in the same industry — a committed operator with a track record.
ℹ️
One dissolved entity. Example Lawn Care LLC dissolved in 2021 — likely the predecessor to the current business. Normal lifecycle evolution.
Verdict: low risk. Named officer, multi-year history, industry focus, current compliance. Safe to proceed.
Safe to onboard

You have a clear picture — an established business with an accountable, experienced owner:

  • Active filing with four years of compliant history
  • Named officer who is personally accountable
  • Multiple active businesses in the same industry (experience signal)
  • One dissolved entity (normal business lifecycle, not a pattern of abandonment)

Proceed with standard vendor paperwork. Total cost of finding out: $0.015.

How it's built

Three API calls, one API key. Search the name, get the detail, then search the officer to see their full footprint.

Try it — copy, paste, run
terminal
# Step 1: Search by name
# Replace "EXAMPLE+LANDSCAPING" with the vendor's business name
$ curl -s -H "x-api-key: $API_KEY" \
    "https://api.sunbizdata.com/api/v1/corporations/search/name?name=EXAMPLE+LANDSCAPING"

< 200 OK (35ms)
{ "results": [{
    "documentNumber": "L00000000004",
    "corporationName": "EXAMPLE LANDSCAPING SERVICES LLC",
    "status": "Active"
  }], "total": 1 }

# Step 2: Get full detail
# Replace "L00000000004" with the documentNumber from step 1
$ curl -s -H "x-api-key: $API_KEY" \
    "https://api.sunbizdata.com/api/v1/corporations/detail?documentNumber=L00000000004"

< 200 OK (42ms)
{
  "corporationName": "EXAMPLE LANDSCAPING SERVICES LLC",
  "status": "Active",
  "feiNumber": "00-0000002",
  "officers": [{ "name": "CARLOS EXAMPLE", "title": "MGR", "type": "P" }],
  "annualReports": [{ "year": "2026" }, { "year": "2025" }, { "year": "2024" }]
}

# Step 3: Search officer to find their other entities
# Replace "CARLOS+EXAMPLE" with the officer name from step 2
$ curl -s -H "x-api-key: $API_KEY" \
    "https://api.sunbizdata.com/api/v1/corporations/search/officer?name=CARLOS+EXAMPLE"

< 200 OK (39ms)
{ "results": [
    { "corporationName": "EXAMPLE LANDSCAPING SERVICES LLC", "status": "Active" },
    { "corporationName": "EXAMPLE OUTDOOR LLC", "status": "Active" },
    { "corporationName": "EXAMPLE LAWN CARE LLC", "status": "Inactive" }
  ], "total": 3 }
Drop into your app
node.js
// Full vendor due diligence: name → detail → officer connections
async function vendorDueDiligence(vendorName) {
  const headers = { "x-api-key": process.env.SUNBIZDATA_KEY };

  const search = await fetch(
    `https://api.sunbizdata.com/api/v1/corporations/search/name?name=${vendorName}`,
    { headers }
  ).then(r => r.json());

  if (!search.results.length) return { found: false };

  const detail = await fetch(
    `https://api.sunbizdata.com/api/v1/corporations/detail?documentNumber=${search.results[0].documentNumber}`,
    { headers }
  ).then(r => r.json());

  const officerName = detail.officers[0]?.name;
  const connections = officerName
    ? await fetch(
        `https://api.sunbizdata.com/api/v1/corporations/search/officer?name=${officerName}`,
        { headers }
      ).then(r => r.json())
    : { results: [] };

  return {
    found: true,
    name: detail.corporationName,
    status: detail.status,
    officer: officerName,
    otherEntities: connections.results.length - 1,
    activeEntities: connections.results.filter(r => r.status === "Active").length,
  };
}

Start with $5, get 1,000 requests

Pay per request. No subscription. Requests never expire.

Get started