Includes: API (Express/TypeScript), Astro site, Python workers, document generators, FCC compliance tools, Canada CRTC formation, Ansible infrastructure, and deployment scripts. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
239 lines
13 KiB
HTML
239 lines
13 KiB
HTML
<!DOCTYPE html><html lang="en"><head>
|
|
<meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<meta name="description" content="Check if your LLC or corporation is in good standing. Instantly see annual report status, years behind, and cost to reinstate.">
|
|
<link rel="canonical" href="https://performancewest.net/tools/corporation-check/">
|
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
|
|
<meta property="og:type" content="website">
|
|
<meta property="og:title" content="Corporation Status Check — Free Good Standing Lookup | Performance West">
|
|
<meta property="og:description" content="Check if your LLC or corporation is in good standing. See annual report status and cost to reinstate.">
|
|
<script>
|
|
window.__PW_API = (function() {
|
|
var h = window.location.hostname;
|
|
if (h === "localhost" || h === "127.0.0.1") return "http://" + h + ":3001";
|
|
if (h === "dev.performancewest.net") return "https://api.dev.performancewest.net";
|
|
return "https://api.performancewest.net";
|
|
})();
|
|
</script>
|
|
<link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
|
|
<title>Corporation Status Check — Free Good Standing Lookup | Performance West</title>
|
|
<script defer src="https://analytics.performancewest.net/script.js" data-website-id="55250014-ee15-44ac-a1f6-81dabad3fe0f"></script>
|
|
<link rel="stylesheet" href="/_astro/about.DhmoKVOS.css">
|
|
</head>
|
|
<body class="min-h-screen flex flex-col bg-gray-50">
|
|
<nav class="border-b border-gray-200 bg-white sticky top-0 z-50">
|
|
<div class="max-w-6xl mx-auto px-4 sm:px-6 lg:px-8">
|
|
<div class="flex justify-between h-16 items-center">
|
|
<a href="/" class="flex items-center"><img src="/images/logo.png" alt="Performance West" class="h-12 w-auto"></a>
|
|
<div class="hidden md:flex items-center gap-6">
|
|
<a href="/services" class="text-sm text-gray-600 hover:text-gray-900">Services</a>
|
|
<a href="/tools/fcc-compliance-check" class="text-sm text-gray-600 hover:text-gray-900">FCC Check</a>
|
|
<a href="/pricing" class="text-sm text-gray-600 hover:text-gray-900">Pricing</a>
|
|
<a href="/contact" class="text-sm text-gray-600 hover:text-gray-900">Contact</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
|
|
<main class="flex-1">
|
|
<section class="py-12">
|
|
<div class="max-w-2xl mx-auto px-4">
|
|
<nav class="text-sm text-gray-500 mb-6">
|
|
<a href="/" class="hover:text-gray-700">Home</a> /
|
|
<a href="/tools" class="hover:text-gray-700">Free Tools</a> /
|
|
<span class="text-gray-900">Corporation Status Check</span>
|
|
</nav>
|
|
|
|
<h1 class="text-3xl font-bold text-gray-900 mb-3">Corporation Status Check</h1>
|
|
<p class="text-lg text-gray-600 mb-8">Check if your LLC or corporation is in good standing with the Secretary of State. See if annual reports are overdue and what it costs to fix.</p>
|
|
|
|
<!-- Search form -->
|
|
<div class="bg-white border border-gray-200 rounded-xl p-6 shadow-sm mb-8">
|
|
<div class="grid grid-cols-3 gap-4 mb-4" style="grid-template-columns: 1fr auto auto">
|
|
<div>
|
|
<label class="block text-sm font-semibold text-gray-900 mb-2">Entity Name</label>
|
|
<input type="text" id="corp-name" placeholder="e.g. Acme Holdings LLC" class="w-full border border-gray-300 rounded-lg px-4 py-2.5 text-sm text-gray-900 placeholder:text-gray-400 focus:outline-none focus:ring-2 focus:ring-pw-500">
|
|
</div>
|
|
<div>
|
|
<label class="block text-sm font-semibold text-gray-900 mb-2">State</label>
|
|
<select id="corp-state" class="border border-gray-300 rounded-lg px-3 py-2.5 text-sm text-gray-900 focus:outline-none focus:ring-2 focus:ring-pw-500 bg-white">
|
|
<option value="">Select...</option>
|
|
</select>
|
|
</div>
|
|
<div class="flex items-end">
|
|
<button type="button" id="btn-check" class="px-5 py-2.5 bg-pw-600 text-white font-semibold rounded-lg hover:bg-pw-700 transition-colors whitespace-nowrap text-sm">Check Status</button>
|
|
</div>
|
|
</div>
|
|
<p class="text-xs text-gray-500">We search public Secretary of State records. Results depend on data availability for your state.</p>
|
|
</div>
|
|
|
|
<!-- Loading -->
|
|
<div id="loading" class="hidden text-center py-8">
|
|
<div class="inline-flex items-center gap-3 text-gray-600">
|
|
<svg class="animate-spin h-5 w-5" viewBox="0 0 24 24"><circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4" fill="none"></circle><path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path></svg>
|
|
Searching state records...
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Results -->
|
|
<div id="results" class="hidden space-y-4">
|
|
<div id="result-card"></div>
|
|
</div>
|
|
|
|
<!-- Not found -->
|
|
<div id="not-found" class="hidden bg-amber-50 border border-amber-200 rounded-xl p-6">
|
|
<h3 class="text-lg font-bold text-amber-900 mb-2">Entity Not Found</h3>
|
|
<p class="text-sm text-amber-800" id="not-found-msg"></p>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
</main>
|
|
|
|
<footer class="border-t border-gray-200 bg-white mt-auto py-8">
|
|
<div class="max-w-6xl mx-auto px-4 text-center">
|
|
<img src="/images/logo.png" alt="Performance West" class="h-10 w-auto mx-auto mb-3 opacity-50">
|
|
<p class="text-xs text-gray-500">© 2026 Performance West Inc. — Professional compliance consulting.</p>
|
|
</div>
|
|
</footer>
|
|
|
|
<script>
|
|
(function() {
|
|
var API = window.__PW_API;
|
|
var nameInput = document.getElementById("corp-name");
|
|
var stateSelect = document.getElementById("corp-state");
|
|
var btn = document.getElementById("btn-check");
|
|
var loading = document.getElementById("loading");
|
|
var results = document.getElementById("results");
|
|
var notFound = document.getElementById("not-found");
|
|
var resultCard = document.getElementById("result-card");
|
|
|
|
// Populate state dropdown
|
|
var states = [
|
|
"AL","AK","AZ","AR","CA","CO","CT","DE","DC","FL","GA","HI","ID","IL","IN",
|
|
"IA","KS","KY","LA","ME","MD","MA","MI","MN","MS","MO","MT","NE","NV","NH",
|
|
"NJ","NM","NY","NC","ND","OH","OK","OR","PA","RI","SC","SD","TN","TX","UT",
|
|
"VT","VA","WA","WV","WI","WY"
|
|
];
|
|
var stateNames = {
|
|
AL:"Alabama",AK:"Alaska",AZ:"Arizona",AR:"Arkansas",CA:"California",CO:"Colorado",
|
|
CT:"Connecticut",DE:"Delaware",DC:"District of Columbia",FL:"Florida",GA:"Georgia",
|
|
HI:"Hawaii",ID:"Idaho",IL:"Illinois",IN:"Indiana",IA:"Iowa",KS:"Kansas",KY:"Kentucky",
|
|
LA:"Louisiana",ME:"Maine",MD:"Maryland",MA:"Massachusetts",MI:"Michigan",MN:"Minnesota",
|
|
MS:"Mississippi",MO:"Missouri",MT:"Montana",NE:"Nebraska",NV:"Nevada",NH:"New Hampshire",
|
|
NJ:"New Jersey",NM:"New Mexico",NY:"New York",NC:"North Carolina",ND:"North Dakota",
|
|
OH:"Ohio",OK:"Oklahoma",OR:"Oregon",PA:"Pennsylvania",RI:"Rhode Island",SC:"South Carolina",
|
|
SD:"South Dakota",TN:"Tennessee",TX:"Texas",UT:"Utah",VT:"Vermont",VA:"Virginia",
|
|
WA:"Washington",WV:"West Virginia",WI:"Wisconsin",WY:"Wyoming"
|
|
};
|
|
states.forEach(function(s) {
|
|
var opt = document.createElement("option");
|
|
opt.value = s;
|
|
opt.textContent = stateNames[s] + " (" + s + ")";
|
|
stateSelect.appendChild(opt);
|
|
});
|
|
|
|
function usd(cents) { return "$" + (cents / 100).toLocaleString("en-US", {minimumFractionDigits: 0, maximumFractionDigits: 0}); }
|
|
|
|
btn.addEventListener("click", doCheck);
|
|
nameInput.addEventListener("keydown", function(e) { if (e.key === "Enter") doCheck(); });
|
|
|
|
function doCheck() {
|
|
var name = nameInput.value.trim();
|
|
var state = stateSelect.value;
|
|
if (!name || !state) { alert("Please enter an entity name and select a state."); return; }
|
|
|
|
loading.classList.remove("hidden");
|
|
results.classList.add("hidden");
|
|
notFound.classList.add("hidden");
|
|
btn.disabled = true;
|
|
|
|
fetch(API + "/api/v1/corp/status?name=" + encodeURIComponent(name) + "&state=" + state)
|
|
.then(function(r) { return r.json(); })
|
|
.then(function(data) {
|
|
loading.classList.add("hidden");
|
|
btn.disabled = false;
|
|
|
|
if (!data.found) {
|
|
notFound.classList.remove("hidden");
|
|
document.getElementById("not-found-msg").textContent =
|
|
"We couldn't find \"" + name + "\" in " + (stateNames[state] || state) + " records. " +
|
|
"Try the exact legal name (including LLC, Inc., etc.) or check directly with the Secretary of State.";
|
|
return;
|
|
}
|
|
|
|
results.classList.remove("hidden");
|
|
renderResult(data, state);
|
|
})
|
|
.catch(function(err) {
|
|
loading.classList.add("hidden");
|
|
btn.disabled = false;
|
|
notFound.classList.remove("hidden");
|
|
document.getElementById("not-found-msg").textContent = "Search failed: " + (err.message || "Unknown error");
|
|
});
|
|
}
|
|
|
|
function renderResult(data, state) {
|
|
var status = (data.status || "UNKNOWN").toUpperCase();
|
|
var isGood = status === "ACTIVE";
|
|
var isBad = status === "DELINQUENT" || status === "SUSPENDED" || status === "DISSOLVED" || status === "INACTIVE";
|
|
|
|
var borderColor = isGood ? "border-green-200" : isBad ? "border-red-200" : "border-gray-200";
|
|
var bgColor = isGood ? "bg-green-50" : isBad ? "bg-red-50" : "bg-gray-50";
|
|
var statusColor = isGood ? "text-green-700 bg-green-100" : isBad ? "text-red-700 bg-red-100" : "text-gray-700 bg-gray-100";
|
|
|
|
var html = '<div class="' + bgColor + ' border-2 ' + borderColor + ' rounded-xl p-6">';
|
|
html += '<div class="flex items-start justify-between mb-4">';
|
|
html += '<div>';
|
|
html += '<h2 class="text-lg font-bold text-gray-900">' + (data.entity_name || "Unknown") + '</h2>';
|
|
html += '<p class="text-sm text-gray-500">' + (data.entity_type || "Entity") + ' — ' + (stateNames[state] || state) + '</p>';
|
|
if (data.entity_number) html += '<p class="text-xs text-gray-400 font-mono mt-1">Filing #: ' + data.entity_number + '</p>';
|
|
if (data.formation_date) html += '<p class="text-xs text-gray-400 mt-0.5">Formed: ' + data.formation_date + '</p>';
|
|
html += '</div>';
|
|
html += '<span class="px-3 py-1 rounded-full text-sm font-bold ' + statusColor + '">' + status + '</span>';
|
|
html += '</div>';
|
|
|
|
if (isGood) {
|
|
html += '<p class="text-sm text-green-800">This entity is in good standing. No action required.</p>';
|
|
// RA offer for active entities
|
|
html += '<div class="mt-4 p-4 bg-white border border-green-200 rounded-lg">';
|
|
html += '<p class="text-sm font-semibold text-gray-900 mb-1">Need a registered agent?</p>';
|
|
html += '<p class="text-xs text-gray-600 mb-3">We provide registered agent service in all 50 states at competitive rates.</p>';
|
|
html += '<a href="/order/registered-agent?state=' + state + '" class="inline-block px-4 py-2 bg-pw-700 text-white text-xs font-semibold rounded-lg hover:bg-pw-800">Registered Agent — ' + usd(data.ra_price_cents) + '/yr</a>';
|
|
html += '</div>';
|
|
} else if (isBad) {
|
|
html += '<div class="space-y-3">';
|
|
if (data.years_behind > 0) {
|
|
html += '<p class="text-sm text-red-800 font-medium">You are ' + data.years_behind + ' year' + (data.years_behind > 1 ? 's' : '') + ' behind on annual reports.</p>';
|
|
}
|
|
if (status === "DISSOLVED") {
|
|
html += '<p class="text-sm text-red-800">This entity has been administratively dissolved. Reinstatement is required to restore good standing.</p>';
|
|
} else {
|
|
html += '<p class="text-sm text-red-800">File your overdue annual report(s) to return to good standing before the state administratively dissolves your entity.</p>';
|
|
}
|
|
|
|
// Cost breakdown
|
|
html += '<div class="mt-3 p-4 bg-white border border-red-200 rounded-lg">';
|
|
html += '<p class="text-sm font-bold text-gray-900 mb-2">Cost to fix:</p>';
|
|
html += '<table class="w-full text-sm">';
|
|
if (data.years_behind > 0) {
|
|
var perYear = data.cost_per_year_cents;
|
|
html += '<tr><td class="py-1 text-gray-700">Annual report' + (data.years_behind > 1 ? 's (' + data.years_behind + ' years)' : '') + '</td>';
|
|
html += '<td class="py-1 text-right font-medium">' + (data.years_behind > 1 ? data.years_behind + ' × ' + usd(perYear) + ' = ' : '') + usd(data.total_catchup_cents) + '</td></tr>';
|
|
}
|
|
html += '<tr><td class="py-1 text-gray-700">Registered agent (1 year)</td><td class="py-1 text-right font-medium">' + usd(data.ra_price_cents) + '</td></tr>';
|
|
html += '<tr class="border-t border-gray-200"><td class="py-2 font-bold text-gray-900">Total</td><td class="py-2 text-right font-bold text-gray-900">' + usd(data.total_with_ra_cents) + '</td></tr>';
|
|
html += '</table>';
|
|
html += '<a href="/contact?subject=Annual+Report+' + state + '&entity=' + encodeURIComponent(data.entity_name || "") + '" class="mt-3 inline-block w-full text-center px-4 py-2.5 bg-red-600 text-white text-sm font-bold rounded-lg hover:bg-red-700 transition-colors">Get Back in Good Standing →</a>';
|
|
html += '<p class="text-xs text-gray-500 mt-2 text-center">State fees are passthrough at cost. No hidden markup.</p>';
|
|
html += '</div>';
|
|
html += '</div>';
|
|
} else {
|
|
html += '<p class="text-sm text-gray-700">Status: ' + status + '. Contact us if you need help understanding your filing obligations.</p>';
|
|
}
|
|
|
|
html += '</div>';
|
|
resultCard.innerHTML = html;
|
|
}
|
|
})();
|
|
</script>
|
|
</body></html>
|