KYB Company Data Enrichment avatar

KYB Company Data Enrichment

Pricing

from $1.00 / 1,000 company resolveds

Go to Apify Store
KYB Company Data Enrichment

KYB Company Data Enrichment

Company name in, the public record out: registry identity, UCC liens and stacking, tax warrants, WARN layoffs, FMCSA fleet/phone and NPI — joined by a precision-gated entity resolver. Every field carries its source and confidence. No login, no API key. Billed only for sources that return data.

Pricing

from $1.00 / 1,000 company resolveds

Rating

0.0

(0)

Developer

K O

K O

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

a day ago

Last modified

Share

Company Intel Enrichment — KYB Lookup on the US Public Record

Give it a list of company names. It returns what the public record says about each one — who they legally are, what they owe, who they owe it to, whether they are in distress, and (for carriers and providers) a phone number filed with a federal agency.

Every field carries its source, its match confidence and the time it was retrieved. Nothing is asserted bare.

Everyone else enriches with contact data bought from a broker. This enriches with the public record, from the agencies that publish it.


What makes this different

Most enrichment tools tell you an email address. This one answers the question an underwriter, a lender, a KYB analyst or a B2B seller is actually asking:

Is this a real, current entity? How old? Who is the registered agent? How many UCC liens are against it, from how many different lenders, and is the debt stacked? Any state tax warrants? Any WARN layoff notice? If it's a carrier, how many trucks and what's the phone number on file with FMCSA?

A false join is worse than no answer. A wrong lien attached to the wrong company cannot be detected downstream. So matching runs through a precision-gated entity resolver — hand-tested against 100 labelled companies at 100% precision on auto-accepted matches — and only a match at 0.85 confidence or better is ever merged. Anything from 0.60 to 0.85 comes back in possibleMatches[] for a human to decide, and is never folded into the record.


Sources

SignalSourceCoverage
IdentityCO Secretary of State, OR Secretary of State, NY Department of State, TX Comptroller franchise rollCO, OR, NY, TX
LiensCT UCC filings, CO UCC filings, OR UCC filings, NYC Register (ACRIS) personal-property recordsCT, CO, OR, NY
DistressNYS Department of Taxation and Finance tax warrants; Texas Workforce Commission WARN noticesNY, TX — queried for every company
TruckingFMCSA motor-carrier censusNational
HealthcareCMS NPI RegistryNational
AwardsUSAspending federal contract awardsNational — opt-in
EnvironmentalEPA ECHO facility compliance, inspections and enforcementNational — opt-in
SecuritiesSEC EDGAR filingsNational — opt-in
LitigationCourtListener federal dockets (RECAP)National — opt-in

All of it is official, published, keyless government open data. No login, no captcha, no scraping of a site that does not want to be read.

The last four are opt-in: pass them in signals to widen the search. They are off by default because billing is per source that returns data, and turning them on by default would change the cost of a run you had already priced. They were chosen over state licence boards for one reason — a federal award, a lawsuit, an EPA facility or an SEC filing can attach to a company in any industry and any state, where a vertical census only answers for its own vertical.

Coverage is US-only and state-patchy, and the Actor says so per record. Connecticut publishes UCC filings but no joinable business registry; Texas publishes a business registry but no UCC data at all. When you search a state a source does not cover, the record carries a coverageGaps note — "no source covers TX" — instead of a silent zero. "We looked and found nothing" and "there was nothing to look in" are different answers and this Actor never prints them the same way.


Input

FieldTypeDefaultDescription
companiesarrayRequired. Up to 25 company names, one per line. Add a state to narrow it: "ACME LOGISTICS LLC, CO". Suffixes and punctuation are handled — Acme Logistics, LLC finds ACME LOGISTICS LLC.
signalsarraythe five aboveWhich sources to join: identity, liens, distress, trucking, healthcare, plus the opt-in awards, environmental, securities, litigation.
statesarrayall fiveWhich state registries to search for identity and liens. National sources are not limited by this.
routingstringautoauto runs the vertical sources only when the name suggests them. all tries everything for every company.
matchModestringstartsWithControls which candidates are fetched. What gets merged is decided by the scorer either way.
maxItemsinteger25Cap on companies returned.
{
"companies": [
"STEM CIDER LLC, CO",
"BUTCHY'S TRUCKING LLC",
"FIVE STARS CHEF CONSULTING LLC, NY"
],
"signals": ["identity", "liens", "distress", "trucking"],
"routing": "auto"
}

Why auto routing is the default

Five sources per company could mean five times the latency. It does not, because a detector decides which vertical sources are worth a request: a trucking-sounding name goes to FMCSA, a medical-sounding one goes to NPI, and the universal sources always run. Measured on 50 real companies: auto averages 0.5 s per company and returns 73 of the 75 source hits that all finds at 0.6 s. Use all when your list is a single known vertical.


Output

One record per company.

FieldDescription
queryName, queryStateWhat you asked for
resolvedWhether the state registry produced a confident identity
legalName, entityId, entityState, entityType, entityStatusRegistry identity
formedDate, ageYearsBusiness age
registeredAgent, sosFileNumberRegistry detail
street, city, state, zipAddress of record
phone, emailContact, when a federal source filed one
lienCount, activeLienCount, lienTotalAmount, lienLenders, lastLienDateUCC exposure
isStackedMore than one distinct lender — the MCA stacking tell
taxWarrantCount, taxWarrantTotal, lastTaxWarrantDateState tax warrants
warnNoticeCount, lastWarnDate, warnEmployeesAffectedWARN layoff notices
dotNumber, powerUnits, driverCountFMCSA carrier profile
npiNumber, npiTaxonomyHealthcare provider identity
federalAwardCount, federalAwardTotal, lastFederalAwardDate, awardingAgenciesFederal contract awards
epaFacilityCount, epaFacilitiesInViolation, epaComplianceStatus, epaLastInspectionDate, epaFormalActionCount, epaRegistryIdEPA facility compliance
secCik, secFilingCount, lastSecFilingDate, secFormsSEC filing history
federalCaseCount, openFederalCaseCount, lastCaseFiledDate, suitNaturesFederal litigation
stackingScore0–100. Grades what isStacked only answers yes/no: distinct lenders, live filings, recency
distressScore0–100. Tax warrants, WARN notices, EPA enforcement, loss of good standing, recent litigation
riskFlagsThe named reasons behind the scores, e.g. stacked-lenders, tax-warrant, epa-noncompliance
matchConfidenceConfidence of the identity resolution, null if it was not resolved
sourcesQueried, sourcesHit, sourcesHitListWhat was asked and what answered
coverageGapsSources with no supply for the states searched
provenancePer field: { source, matchConfidence, retrievedAt }
possibleMatchesScored candidates from 0.60 to 0.85 — surfaced, never merged
acceptThresholdThe line a match must clear to be merged (0.85)

A real record, abridged — one company, three sources, nothing bought from a broker:

{
"queryName": "EL CHAPIN TRUCKING LLC",
"resolved": true,
"legalName": "EL CHAPIN TRUCKING LLC",
"entityState": "CO",
"entityType": "DLLC",
"entityStatus": "Good Standing",
"formedDate": "2025-02-28",
"ageYears": 1.5,
"city": "Montrose",
"state": "CO",
"zip": "81401",
"phone": "(970) 209-1788",
"lienCount": 1,
"lienLenders": "Alpine Bank, A Colorado Banking Corporation",
"isStacked": false,
"dotNumber": "3325232",
"powerUnits": 1,
"driverCount": 2,
"matchConfidence": 1,
"sourcesHit": 3,
"sourcesHitList": "identity | liens | trucking",
"provenance": {
"dotNumber": {
"source": "FMCSA motor-carrier census",
"matchConfidence": 1,
"retrievedAt": "2026-09-01T00:04:24.675Z"
}
},
"possibleMatches": [],
"acceptThreshold": 0.85
}

A company one year old, one bank lien, one truck, two drivers, and a phone number filed with the FMCSA. That is an underwriting decision's worth of context from a company name, and every line of it says where it came from.


How the matching works, and what it refuses to do

The resolver is shared, tested and deliberately conservative. It will refuse an answer rather than risk a wrong one:

  • A differing legal form is never auto-merged. ELITE MOTORCARS LLC and ELITE MOTORCARS, INC. share an address in the Colorado registry and are two entities with two lien sets. Both are surfaced; neither is merged.
  • Digits are identity. ACME 12 LLC is not ACME 2 LLC.
  • Two candidates within 0.05 of each other are a coin flip, and a coin flip is a false positive half the time. Neither is accepted.
  • A shared address is not evidence. Thirty-seven distinct companies sit at one Austin suite — a registered agent's office. The Actor measures how many distinct companies occupy a matched address and withholds the address bonus when it looks like an agent's office.
  • Never guess across states. A Colorado registry hit for a Texas company is capped below the accept line unless the address corroborates.

Sync to your CRM, Notion, HubSpot, Airtable or Supabase (optional)

Turn on Sync records to a connected app, pick the connector you have already authorised under Integrations in Apify Console, and name the tool that creates one record (create_page for Notion, insert for Supabase, and so on). Map fields with syncFieldMap if the destination's names differ.

The Actor never sees your third-party credentials — it authenticates to Apify's MCP proxy with the run's own token and the proxy attaches the rest. Sync never triggers a billable event, and a sync failure never fails the run.


Pricing (Pay-Per-Event)

EventPriceWhen it fires
company-resolved$0.001Once per company record returned
signal-enriched$0.002Once per source that actually returned data

You are only billed for hits. A source that was queried and came back empty costs nothing. A candidate that only reached possibleMatches[] costs nothing — you did not get an enrichment out of it. A typical company resolving against two sources costs $0.005.

There is no per-run query charge.


Notes & compliance

  • Every source is an official government publication, retrieved from its published open-data endpoint. Nothing here is scraped from a site that gates access, and no login or API key is required.
  • This is public-record data about businesses. It is not a consumer report, and it must not be used for any FCRA-regulated purpose (credit, employment, insurance or tenancy decisions about individuals).
  • Registry extracts have publication lag. retrievedAt on every field tells you when this Actor read the source; it does not tell you when the agency last refreshed it.
  • Oregon, New York and the Texas franchise roll publish active-only extracts, so presence is the status signal and absence is not proof of dissolution. The Actor labels those statuses honestly rather than printing a bare "Active".

FAQ

Does it find every company? No. Coverage is five states plus two national registries, and the Actor tells you per record which sources had no supply for the states you searched.

Why did it return nothing for a company I know exists? Most often the state is not covered for that signal, or the registry spells the name differently enough that the match landed below 0.85. Check possibleMatches[] — a near miss is reported there with the reason it was not merged.

Can I lower the confidence threshold? No, deliberately. The threshold is the product. A wrong join is undetectable downstream and is worth less than nothing.

Is this a feed? No. It is a lookup and it answers in full every time — it never suppresses a repeat lookup of the same company. Wire it into an onboarding or underwriting flow and run it per applicant.