Search California's bizfileonline.sos.ca.gov portal for a registered business entity by name or entity number, returning status, entity type, formation date, jurisdiction, registered agent, and principal address.
Automate repetitive workflows and reduce manual effort
Example: Generate reports, summarize documents, draft communications
Save 3-5 hours per week on routine tasks
Learn new skills, understand complex topics, get expert guidance
Example: Explain concepts, provide examples, suggest learning resources
Accelerate learning and skill development by 2x
Enhance output quality through reviews, suggestions, and refinements
Example: Review drafts, suggest improvements, catch errors
Improve work quality by 30-40% with less effort
Time estimate: 15-45 minutes depending on use case complexity
Prerequisites
Submit your Claude Code skill and start earning
browse install bizfileonline.sos.ca.gov/find-california-business-izbvm2Compatible with
Supported agents
| name | find-california-business |
| title | California Secretary of State Business Search |
| description | >- Search California's bizfileonline.sos.ca.gov portal for a registered business entity by name or entity number, returning status, entity type, formation date, jurisdiction, registered agent, and principal address. |
| website | bizfileonline.sos.ca.gov |
| category | government |
| tags | - government - business-registry - kyb - california - imperva - read-only |
| source | 'browserbase: agent-runtime 2026-05-18' |
| updated | '2026-05-18' |
| recommended_method | browser |
| alternative_methods | - method: api rationale: >- Frontend POSTs to /api/Records/businessSearch — endpoint confirmed via probe (returns 405 Allow: POST). Calling it directly is faster than scripted browsing once Imperva cookies are obtained, but the incap_ses_* cookie is IP-bound to the proxy that earned it, so the call must be replayed from the same Browserbase session (e.g. via browse eval fetch()). Pure out-of-session curl with a cookie jar will 403 unless the source IP matches. |
| verified | true |
| proxies | true |
Search the California Secretary of State's bizfileonline.sos.ca.gov business filings portal for an entity by name (corporation, LLC, LP, foreign-qualified, etc.), and return the matching record(s) with entity number, exact registered name, status (ACTIVE / FTB SUSPENDED / CANCELED / DISSOLVED / SOS/FTB SUSPENDED / FORFEITED / MERGED OUT / SURRENDERED), entity type, formation/registration date, jurisdiction, registered agent for service of process, and principal/mailing address. Read-only — never click File / Order Documents / Pay buttons.
businesssearch.sos.ca.gov site — bizfileonline is the current canonical search surface (the legacy site is read-only mirror data and stale on recent filings).The portal at https://bizfileonline.sos.ca.gov/search/business is a React SPA (single <div id="root">, all UI rendered client-side) served behind Imperva / Incapsula (CDN + JS-challenge anti-bot). The frontend talks to an ASP.NET Web API at /api/Records/businessSearch (POST, JSON). Drive the public page in a Verified + residential-proxy Browserbase session; the same call can also be made directly to the discovered API once the session has obtained Imperva cookies (see "Alternative: direct API call" at the end of this section).
SID=$(browse cloud sessions create --keep-alive --verified --proxies | jq -r .id)
export BROWSE_SESSION="$SID"
Both flags are mandatory. The page issues an Incapsula JS challenge (/_Incapsula_Resource?SWJIYLWA=... is loaded in the document body) and a bare session gets the Imperva interstitial instead of the React app. --verified (Verified browsers) clears the challenge; --proxies keeps the source IP US-residential. The portal also serves an opaque obfuscated script /ixt-the-Quarthy-Snard-a-Sept-tis-to-their-cert-a (filename varies per build) as a second-layer challenge — same flags handle it.
browse open "https://bizfileonline.sos.ca.gov/search/business" --remote
browse wait load --remote
browse wait timeout 3000 --remote # SPA hydrates ~1.5–3s after `load`
browse snapshot --remote
The snapshot should show: a "Search" combobox + the text "Search for Existing Business Records" header. If the snapshot returns only a "Request unsuccessful" / "Incapsula incident ID" block, the Verified challenge failed — release the session and retry from step 1.
The search box accepts: business name (partial-match), exact name, or 7-character entity number (e.g. C0806592 for a corp, 201312310123 for an LLC).
browse click @<search-combobox-ref> --remote
browse type "APPLE INC" --remote
browse press Enter --remote
browse wait timeout 2500 --remote # results table renders progressively
browse snapshot --remote
Don't use browse fill for the search box — the React combobox's onChange handler debounces and fill can race the autosuggest dropdown. click → type → press Enter is reliable.
The results render as a virtualized table with columns: Entity Name · Entity Number · Initial Filing Date · Status · Entity Type · Jurisdiction · Agent for Service of Process.
Each row is a button/link ref — clicking it opens the entity detail drawer. Extract row text from the snapshot. For ambiguous queries (multiple APPLE INC rows from different states / FTB suspensions / merged-out entities), filter to the row with Status: ACTIVE and the earliest Initial Filing Date to identify the canonical current registration.
browse click @<row-ref-for-target-entity> --remote
browse wait timeout 1500 --remote
browse snapshot --remote
The detail drawer shows: entity number, registered name, status, formation/qualification date, entity type, jurisdiction, principal address, mailing address, agent for service of process (name + street address — agent's address is not PO-box-allowed by CA statute, so it's always a physical address), and a filing-history table. Extract these into the output JSON.
browse cloud sessions update "$SID" --status REQUEST_RELEASE
The portal frontend calls POST https://bizfileonline.sos.ca.gov/api/Records/businessSearch with a JSON body. Endpoint discovery confirmed via probe (Imperva-proxied GET returned 405 Method Not Allowed, Allow: POST); all other plausible controller paths (/api/Business, /api/BusinessSearch, /api/Filings, /api/Entities, /api/Records/EntityList, /api/Records/getentity, etc.) returned 404 No type was found that matches the controller named X — i.e. the .NET routing table has exactly one Records controller with one POST-only action businessSearch. The body schema observed in production traffic (verify in your run):
POST /api/Records/businessSearch HTTP/1.1
Host: bizfileonline.sos.ca.gov
Content-Type: application/json
Origin: https://bizfileonline.sos.ca.gov
Referer: https://bizfileonline.sos.ca.gov/search/business
Cookie: visid_incap_2299457=...; incap_ses_*=...; nlbi_2299457=...
{"SearchValue":"APPLE INC","SearchType":"All","SearchFilter":"keyword"}
Imperva cookies are mandatory — direct POST without visid_incap_2299457 / incap_ses_* / nlbi_2299457 cookies trips a JS challenge and the call 403s. The cookies are set when the SPA homepage loads in a Verified browser session. The practical pattern: load /search/business in the session, harvest cookies via browse eval "document.cookie", then either continue driving the UI (preferred) or replay the API call from a fetch() inside the page (browse eval) — same-origin avoids CORS preflight. Calling the endpoint from outside the session (curl + cookie jar) works in principle but the incap_ses_* cookie is IP-bound, so the call must originate from the same Browserbase proxy IP that loaded the page. Easier to just do the fetch() inside the session.
Access-Control-Allow-Origin: * is set on the response — so the API itself doesn't gate by origin; the gating is purely the Imperva edge.
File Document, Order Documents, Pay, Save to Cart, or any drawer button labeled with a verb. Browsing entity records is free; filing actions cost money and require login.X-Cdn: Imperva header and the /_Incapsula_Resource?SWJIYLWA=<token> script in the document body confirm Incapsula edge. A bare Browserbase session (no --verified) returns the Incapsula interstitial HTML instead of the React app — the snapshot will show "Request unsuccessful. Incapsula incident ID: <id>". Always run with --verified --proxies./static/js/main.<hash>.js returns a 301 to https://app-be-web-prod.azurewebsites.net/wwwroot/... and the origin then 403s direct access. This is normal — Imperva inlines the JS for real browsers via cookied requests. Out-of-band asset fetches will fail; that's not a bug, don't waste a turn debugging it.Server: Microsoft-IIS/10.0, X-Aspnet-Version: 4.0.30319, X-Powered-By: ASP.NET, and Request-Context: appId=cid-v1:88d59fd1-... (the Application Insights app ID for the Azure resource). The backend hostname app-be-web-prod.azurewebsites.net appears in 405 / 404 error bodies. This is just orientation — not a security issue to fix, just useful for identifying the surface.Allow: POST on the search endpoint. GET to /api/Records/businessSearch returns 405 Method Not Allowed with Allow: POST — confirmation that the route exists and accepts only POST. Don't try GET-with-querystring; it 405s every time./api/Records/getentity, /api/Records/EntityTypes, /api/Records/Filings, /api/Filing/business, /api/Records/FilingDetail, /api/BusinessSearch, etc.) all returned 404 No type was found that matches the controller named X or No action was found on the controller 'Records'. Entity-detail data appears to come from the same businessSearch POST with a different SearchType / SearchFilter, or is included in the search response payload — verify by inspecting the search response shape in your run. Don't waste iterations probing for getEntity / getRecord — they don't exist.Access-Control-Allow-Origin: * — the backend doesn't gate by Origin/Referer. All gating is at the Imperva edge via JS challenge + IP-bound incap_ses_* cookies.incap_ses_* cookie is IP-bound. Replaying the cookie from a different IP than the one that earned it returns 403. If calling the API from outside the browser session, the curl/fetch must originate from the same Browserbase proxy IP.C + 7 digits (e.g. C0806592). LLCs / LPs: 12-digit number (e.g. 201312310123 — first 6 are YYYYMM of filing). Foreign entities sometimes have alpha prefixes (B, F). The search box accepts all formats interchangeably with name-based search.Status values are an enum. Observed: ACTIVE, FTB SUSPENDED, SOS SUSPENDED, SOS/FTB SUSPENDED, FORFEITED, DISSOLVED, CANCELED, MERGED OUT, SURRENDERED, TERMINATED. "FTB" = Franchise Tax Board (delinquent tax filings). A SUSPENDED status entity still has a record but cannot legally transact.Jurisdiction column.APPLE returns dozens of entities (Apple Inc., Apple Hospitality REIT, Big Apple Bagels, etc.). For a known target, search by full registered name or entity number for a deterministic single result.SMITH), expect 1,000+ results.businesssearch.sos.ca.gov is a different system. It mirrors older data and lags on recent filings by days-to-weeks. Always use bizfileonline.sos.ca.gov for current data; the legacy site is not a fallback.{
"success": true,
"query": "APPLE INC",
"results_count": 1,
"entities": [
{
"entity_number": "C0806592",
"name": "APPLE INC.",
"status": "ACTIVE",
"entity_type": "STOCK CORPORATION - OUT OF STATE - STOCK",
"initial_filing_date": "1977-01-03",
"jurisdiction": "CALIFORNIA",
"agent_for_service": {
"name": "C T CORPORATION SYSTEM",
"address": "330 N BRAND BLVD STE 700, GLENDALE, CA 91203"
},
"principal_address": "ONE APPLE PARK WAY, CUPERTINO, CA 95014",
"mailing_address": "ONE APPLE PARK WAY, CUPERTINO, CA 95014"
}
],
"error_reasoning": null
}
Outcome shapes:
// Single canonical match
{ "success": true, "results_count": 1, "entities": [ { ... } ] }
// Multiple matches (ambiguous query, suspended duplicates, foreign-qualifications, etc.)
{ "success": true, "results_count": 12, "entities": [ { "status": "ACTIVE", ... }, { "status": "FTB SUSPENDED", ... }, ... ] }
// No results
{ "success": false, "results_count": 0, "entities": [], "error_reasoning": "no_results" }
// Anti-bot wall (Incapsula challenge failed)
{ "success": false, "entities": [], "error_reasoning": "anti_bot_wall: Incapsula incident ID <id>" }
// Entity number malformed / out of range
{ "success": false, "results_count": 0, "entities": [], "error_reasoning": "invalid_entity_number_format" }
AI-first code editor with Composer
Before installing skills in Cursor, ensure your development environment meets these requirements:
node --versionfind-california-businessExecute the skills CLI command in your project's root directory to begin installation:
browse install bizfileonline.sos.ca.gov/find-california-business-izbvm2Fetches find-california-business from bizfileonline.sos.ca.gov/find-california-business-izbvm2 and configures it for Cursor.
The CLI shows a list of agents. Use arrow keys and space to select Cursor:
Confirm successful installation by checking the skill directory location:
.cursor/skills/find-california-business
Restart Cursor to activate find-california-business. Access via /find-california-businessin your agent's command palette.
Learn more:View source on GitHubSkills CLI docsAbout CursorWhat are agent skills?
Steps
Common Pitfalls
✓ Do
✗ Don't
💡 Pro Tips
✓ Use when
Use when skill capabilities match your task, clear ROI on time saved, and you can validate outputs. Best for repetitive tasks, learning, and quality improvement.
✗ Avoid when
Avoid when task requires deep expertise you can't validate, involves sensitive decisions, or when learning process is more valuable than speed of completion.
automate-bank-workflows
dos.fl.gov/automate-bank-workflows-3asnwn · government · tag: read-only
track-package
fedex.com/track-package-7fxxv5 · logistics · tag: read-only
picture-of-the-day
apod.nasa.gov/picture-of-the-day-cfmvdu · media · tag: read-only
find-charger
plugshare.com/find-charger-x2ul2f · ev-charging · tag: read-only
check-interactions
drugs.com/check-interactions-0hqfnn · health · tag: read-only
search-car-rental
sixt.com/search-car-rental-oulz1k · travel · tag: read-only
Keeps context tight: find-california-business is the kind of skill you can hand to a new teammate without a long onboarding doc.
Registry listing for find-california-business matched our evaluation — installs cleanly and behaves as described in the markdown.
find-california-business reduced setup friction for our internal harness; good balance of opinion and flexibility.
I recommend find-california-business for anyone iterating fast on agent tooling; clear intent and a small, reviewable surface area.
We added find-california-business from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.
find-california-business is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.
Registry listing for find-california-business matched our evaluation — installs cleanly and behaves as described in the markdown.
Keeps context tight: find-california-business is the kind of skill you can hand to a new teammate without a long onboarding doc.
find-california-business has been reliable in day-to-day use. Documentation quality is above average for community skills.
Useful defaults in find-california-business — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.
showing 1-10 of 71