AI agents are good at reasoning and terrible at facts. Ask Claude whether "Publix Super Markets" is a real, active company in Florida and who its officers are, and it will give you a confident answer from its training data that may be months or years stale, or simply wrong. For anything compliance-related, "probably correct" is not good enough.
In this guide we fix that. We connect Claude to the official Apify MCP server, expose a single Actor that reads the Florida Division of Corporations (Sunbiz) registry, and turn "is this company real?" from a guess into a live lookup against the source of record. By the end you will have a working KYB (know-your-business) tool that Claude, Cursor, or any MCP client can call during a conversation, and you will understand exactly where in the run the tool fires and what it returns.
Everything below is a real setup with real output. No mocked responses.
What is the Apify MCP server?
Model Context Protocol (MCP) is an open standard that lets AI clients call external tools. The Apify MCP server (https://mcp.apify.com) implements that standard on top of the Apify platform, which means every one of the thousands of Actors in the Apify Store becomes a tool an agent can invoke.
Why route an Actor through MCP instead of hard-coding an API call?
- The agent decides when to fetch. Claude reads the conversation, notices it needs a fact it does not have, and calls the tool on its own. You do not write glue code for every question.
- Structured input and output. The MCP server hands Claude the Actor's input schema, so the model fills in the parameters correctly, and returns a clean dataset it can reason over.
-
One connection, many tools. The same MCP endpoint exposes
search-actors,fetch-actor-details, andcall-actor, so an agent can discover and run any Actor without new configuration. - No infrastructure. The server is hosted. You add a few lines to a config file and you are done.
The Actor we will use
We will expose the Sunbiz Florida Business Registry & Officers Scraper. It searches the Florida Division of Corporations and returns the full registry record for a company: legal name, entity type, status (active/inactive), document number, FEI/EIN, registered agent, officers and directors, principal and mailing address, and annual-report history.
That field set is exactly what a KYB or vendor-onboarding check needs. Florida is a useful first jurisdiction because Sunbiz is public, authoritative, and has no login wall.
Step 1: Get your Apify API token
Sign in to the Apify Console, open Settings → Integrations, and copy your personal API token. The MCP server uses it to authenticate and to bill Actor runs to your account.
📌 Note: the token is a secret. Keep it in the client config only, never in a prompt or a committed file.
Step 2: Point Claude Desktop at the Apify MCP server
Open Claude Desktop's config file (Settings → Developer → Edit Config, or ~/Library/Application Support/Claude/claude_desktop_config.json on macOS) and add the Apify server. The tools query parameter is the important part: it tells the server which Actor to expose, so Claude gets one focused tool instead of the entire Store.
{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=scrapers_lat/sunbiz-florida-scraper",
"headers": {
"Authorization": "Bearer YOUR_APIFY_TOKEN"
}
}
}
}
Cursor uses the same JSON in .cursor/mcp.json. If you prefer to run it locally over stdio instead of the hosted endpoint:
{
"mcpServers": {
"apify": {
"command": "npx",
"args": ["-y", "@apify/actors-mcp-server", "--tools", "scrapers_lat/sunbiz-florida-scraper"],
"env": { "APIFY_TOKEN": "YOUR_APIFY_TOKEN" }
}
}
}
Restart Claude Desktop so it picks up the new server.
Step 3: Confirm the tool is loaded
After the restart, the Actor shows up as a callable tool. If you list the tools the Apify server exposes, you will see the storage helpers plus the Actor itself, named after its Store handle:
get-actor-run, get-dataset-items, get-key-value-store-record,
abort-actor-run, scrapers_lat--sunbiz-florida-scraper
That last entry, scrapers_lat--sunbiz-florida-scraper, is our KYB tool. Claude now knows it exists, what it does (from the Actor's README), and what inputs it takes (from the input schema the server passes along).
Step 4: Ask Claude to verify a company
Now the payoff. In a normal chat, ask a question that requires ground truth:
"Is Publix Super Markets a registered company in Florida? What is its status and who are its officers?"
Claude recognizes it cannot answer this reliably from memory, selects the Sunbiz tool, and fills in the input from your question. Under the hood the client sends a tools/call with the Actor's parameters:
{
"name": "scrapers_lat--sunbiz-florida-scraper",
"arguments": {
"searchQuery": "Publix Super Markets",
"withDetails": true,
"maxItems": 3
}
}
The Apify MCP server starts the Actor, waits for it to finish, and returns the dataset. Here is the real run metadata it produced:
{
"runId": "svhQjQHjLnBP1En2a",
"actorName": "scrapers_lat/sunbiz-florida-scraper",
"status": "SUCCEEDED",
"startedAt": "2026-07-30T14:19:10.357Z",
"finishedAt": "2026-07-30T14:19:23.740Z",
"stats": { "runTimeSecs": 13.2 }
}
Thirteen seconds, live against Sunbiz.
Step 5: Read the real output
The dataset the tool returns is structured registry data. This is an actual record from the run (trimmed to the fields that matter for KYB):
{
"entityName": "PUBLIX SUPER MARKETS CHARITIES, INC.",
"entityType": "Florida Not For Profit Corporation",
"status": "ACTIVE",
"documentNumber": "712447",
"feiEin": "59-6194119",
"registeredAgentName": "JOHNSON, TINA P",
"officers": [
{ "title": "President, Chairman", "name": "BARNETT, HOYT R",
"address": "3300 PUBLIX CORP. PKWY, LAKELAND, FL 33811" },
{ "title": "Director", "name": "Williams-Puccio, Kelly",
"address": "3300 PUBLIX CORP. PKWY, LAKELAND, FL 33811" }
],
"principalAddress": "3300 PUBLIX CORP. PKWY, LAKELAND, FL 33811"
}
Claude reads that and answers in plain language: yes, the entity is active, it is a Florida not-for-profit, its FEI/EIN is 59-6194119, its registered agent is Tina P. Johnson, and it lists Hoyt R. Barnett as President and Chairman. Every one of those facts is traceable to an official record, not the model's memory.
The counter-example is just as important. Ask about "Tesla" in Florida and the same tool returns TESLA COMPANY LLC, status INACTIVE, with a lastEvent of VOLUNTARY DISSOLUTION dated 02/10/2005. An agent doing due diligence needs to see that a name match is a dissolved shell, not the company the user meant. The tool surfaces it; the model alone would not.
A real use case: a vendor due-diligence agent
Put this in context. A procurement or compliance analyst is onboarding a new Florida vendor and needs to confirm, before signing, that:
- the legal entity exists and is active,
- the person signing is actually an officer or the registered agent, and
- the company is not a recently dissolved shell.
Without a tool, the analyst opens the Sunbiz website, types the name, clicks into the record, and copies fields into a form, once per vendor. With the tool wired into Claude, the analyst pastes the vendor list into the chat and asks the agent to verify each one. Claude calls the Actor per company, compares the signer's name against the returned officers and registeredAgentName, flags any INACTIVE status, and produces a short go/no-go note with the document number as evidence. The manual lookup step disappears; the judgment stays with the human.
This is the shape of every good agent tool: it removes the mechanical fetch, not the decision.
Going further: chain a second tool
KYB rarely stops at "does it exist." The same MCP connection can expose more Actors by extending the tools parameter:
https://mcp.apify.com?tools=scrapers_lat/sunbiz-florida-scraper,scrapers_lat/ofac-sanctions-scraper
Now the agent can verify the company on Sunbiz and screen its name and officers against the U.S. OFAC sanctions list in the same conversation, then combine both results into one risk summary. Because each Actor is a separate tool, the agent picks the right one for each step on its own.
🏹 Troubleshooting: if the tool does not appear in Claude, the two usual causes are a missing or misspelled Actor handle in the tools parameter (it must be the exact username/actor-name from the Store URL) and a config that was edited while Claude was running. Fix the handle, save, and fully restart the client.
📌 Note: each tool call is a real Actor run billed to your Apify account (this Actor is pay-per-result). For one-off verification the cost is a fraction of a cent; if you plan to check thousands of companies on a schedule, run the Actor directly through the Apify API or a scheduled task instead of one call per chat message.
Wrapping up
You now have an AI agent that can verify a U.S. company against an official state registry, on demand, mid-conversation, with the officer and registered-agent detail a due-diligence check actually needs. The pattern is reusable: pick an Actor that returns authoritative structured data, expose it through the Apify MCP server with the tools parameter, and let the agent decide when to call it.
To take it further:
- Swap in a different jurisdiction or dataset by changing the Actor handle. The setup is identical.
- Add sanctions, licensing, or financial-filing Actors to build a multi-step compliance agent.
- Read the Apify MCP server docs for OAuth setup, resource reads, and the
search-actors/call-actortools that let an agent discover Actors it was not preconfigured with.
The Actor used in this guide: Sunbiz Florida Business Registry & Officers Scraper.


Top comments (0)