Investment Entity Resolver: VC & Fund Profiles from SEC Records
Pricing
from $350.00 / 1,000 resolved profiles
Investment Entity Resolver: VC & Fund Profiles from SEC Records
Resolve a messy investor name to a CRD-anchored, SEC-validated adviser-firm profile: legal name, aliases, CRD, registration status, and address from the filing, plus cited extras. Ambiguous names get ranked candidates; unfiled entities get an honest no-match. US-filed RIA/ERA only.
Pricing
from $350.00 / 1,000 resolved profiles
Rating
0.0
(0)
Developer
Paul Mikulskis
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Share
What does Investment Entity Resolver do?
Investment Entity Resolver turns a messy investor name into a CRD-anchored, SEC-validated adviser-firm profile. You give it a fund or VC-firm name, even a brand or alias like a16z or Homebrew, and it anchors that name to a US-filed investment adviser in the public SEC IAPD record: legal name, filed aliases, CRD number, SEC number, registration scope and status, registration history, and office address, all read straight from the filing. On top of that identity core it layers best-effort, cited synthesized extras (thesis, stage, sectors, check size, partners, portfolio, recent activity) from a named list of public press sources.
It resolves US-filed adviser firms only (RIA or ERA, each carrying a CRD number). When a name legitimately spans several registered advisers, you get a ranked shortlist with a computed confidence instead of one confidently-wrong row. When the public record cannot support an answer, you get an honest no-match. Individual angels, foreign-only funds, and unfiled syndicates are out of scope and return no_match_unsupported for the request fee only.
Running on the Apify platform gives you API access, scheduling, and integrations with the rest of your stack, plus one structured JSON row per lookup that a CRM or an AI agent can consume directly.
Why use Investment Entity Resolver?
- A CRD anchor, not a guess. Every charged profile is tied to exactly one legal entity in a public SEC filing. Raw investor scrapers hand you a name and a row; this hands you the filing the name maps to.
- Honest ambiguity. A shared brand like
Sequoia Capitalreturns a ranked shortlist (Sequoia Capital Operations, the Peak XV entities formerly filed as Sequoia Capital India, and others), so you disambiguate on real filings rather than trusting a single row. - Honest unknowns. Opinion fields such as thesis and check size carry
source_type: synthesized, cite their sources, and never affect billing. Where the public record runs out, the value isnull, not fabricated. - You do not pay for misses. No-matches, empty input, and upstream failures are not charged beyond the request fee.
- Agent-callable. Structured JSON in, structured JSON out, one row per lookup, suitable for fundraising CRMs, deal-sourcing workflows, and AI agents that need investor identity as data rather than a search-results page.
How to use Investment Entity Resolver
- Enter a firm, fund, or brand name in Investor / fund / VC-firm name, for example
Homebrew,a16z, orSequoia Capital. A messy name is fine. - Optionally add hints (
country,stage,sector,website,knownPartner,knownPortfolioCompany). In v1 onlycountryis checked against the filing; the rest sharpen the synthesized enrichment. - Optionally set Max candidates (1 to 10, default 10) and Include recent activity.
- Run it. Read the resolved profile, the ranked shortlist, or the honest no-match in the dataset. You can download the dataset as JSON, CSV, Excel, or HTML.
Try it for free (no charge)
The prefilled Store example is a locked, zero-cost preview. Run it exactly as shown and it resolves the real SEC identity core for Andreessen Horowitz using only the free public IAPD lookup, never the enrichment/Sonar backend, and charges nothing, not even the $0.02 request fee:
{ "name": "Andreessen Horowitz", "hints": {}, "maxCandidates": 10, "includeRecentActivity": true, "dryRun": true }
dryRun is locked to this exact body. Any other name, a populated hint, or any other field alongside dryRun: true is rejected in validation before any lookup runs, so it cannot be turned into a free way to resolve arbitrary firms. The output row is marked dry_run: true, charged_event is always null, and no Sonar/enrichment call is ever made. Leave dryRun at its default (false, or simply omit it) to resolve any name you want, billed per the pricing below. Note that a dry run still runs on your own Apify account, so ordinary Apify platform compute, storage, and Dataset/OUTPUT writes are billed by Apify as usual, independent of this actor's own event pricing.
Input
| Field | Type | Default | Notes |
|---|---|---|---|
name | string (required) | Andreessen Horowitz | The name to resolve. A brand, alias, or full legal name all work. |
hints | object | {} | Optional context. Only country is checked against the filing; the rest sharpen enrichment. |
maxCandidates | integer 1 to 10 | 10 | How many ranked candidates to return. Selection scores a wide internal set regardless; this only caps the returned list. |
includeRecentActivity | boolean | true | Ask for a cited recent_activity note (synthesized, uncharged). |
dryRun | boolean | false | Locked free preview: valid only for the exact sample above. Any other input combined with dryRun: true is rejected before any lookup. Charges nothing; never calls Sonar. |
{ "name": "Sequoia Capital", "hints": { "country": "United States" }, "maxCandidates": 6 }
Output
One row per lookup. Every field carries provenance. The best_match object is entirely sec_filing-sourced from the IAPD search and firm-detail endpoints. The synthesized fields are provenance objects { value, source_type, source_urls, as_of, confidence }, always synthesized, uncharged, and null when no allowlisted source supports them.
outcome is one of resolved, shortlist, sec_core_only, no_match, no_match_unsupported, error_upstream. The charged_event field reports exactly which event billed the run (null means nothing beyond the request fee).
The public demo dataset is at https://api.apify.com/v2/datasets/6IiJN4RJq2wl1flpS/items?clean=true&format=json. It was produced by live runs of this actor and holds the four lookups worked below: a resolved profile (a16z), an SEC identity core (Homebrew), a ranked shortlist (Sequoia Capital), and an honest no-match (Nimbus Peak Ventures). No Apify account is needed to read it.
Example 1: a clean resolve
Input { "name": "a16z" } on a paid run. The brand maps to Andreessen Horowitz through its filed alias A16Z CAPITAL MANAGEMENT, L.L.C., which is an exact match, so it resolves to one firm and leads the runner-up (A16Z Perennial) by more than the tie margin. The best-match core below is exactly what a live lookup returns. The eight synthesized fields are best-effort: they carry a value, source_urls, and confidence: 0.4 when an allowlisted press source supports them, and are null (as they are for a16z here) when none does; they never affect billing.
{"query_name": "a16z","outcome": "resolved","best_match": {"legal_name": "ANDREESSEN HOROWITZ","crd": "160489","sec_number": "114985","registration_scope": "RIA","registration_status": "Approved","registration_history": [{ "kind": "RIA", "jurisdiction": "SEC", "status": "Approved", "effectiveDate": "2019-04-11" },{ "kind": "ERA", "jurisdiction": "SEC", "status": "ERA - Withdrawn", "effectiveDate": "2019-03-11" },{ "kind": "ERA", "jurisdiction": "California", "status": "ERA - Withdrawn", "effectiveDate": "2019-03-11" }],"other_names": ["A16Z CAPITAL MANAGEMENT, L.L.C.", "AH CAPITAL MANAGEMENT, L.L.C.", "ANDREESSEN HOROWITZ"],"address": "2865 SAND HILL ROAD, MENLO PARK, CA 94025-7022, United States","adv_filing_date": "2026-03-30","brochure_url": "https://reports.adviserinfo.sec.gov/reports/ADV/160489/PDF/160489.pdf","iapd_url": "https://adviserinfo.sec.gov/firm/summary/160489"},"investment_thesis": { "value": null, "source_type": "synthesized", "source_urls": [], "as_of": "2026-07-10", "confidence": 0 },"typical_check_size": { "value": null, "source_type": "synthesized", "source_urls": [], "as_of": "2026-07-10", "confidence": 0 },"ranked_candidates": [{ "legal_name": "ANDREESSEN HOROWITZ", "crd": "160489", "confidence": 0.9, "evidence_urls": ["https://adviserinfo.sec.gov/firm/summary/160489"], "reason": "IAPD-validated RIA; deterministic score 0.900 (top); Sonar pick." },{ "legal_name": "A16Z PERENNIAL MANAGEMENT, L.P.", "crd": "324429", "confidence": 0.72, "evidence_urls": ["https://adviserinfo.sec.gov/firm/summary/324429"], "reason": "IAPD-validated RIA; deterministic score 0.720." }],"match_confidence": 0.9,"ambiguity_level": "none","warnings": [],"charged_event": "investment-profile-resolved"}
The other six synthesized fields (stage_focus, sector_focus, geography_focus, named_partners, notable_portfolio, recent_activity) are the same { value, source_type, source_urls, as_of, confidence } shape and are omitted above for length. Enrichment is sparse by design: a synthesized field ships only when the server verifies a verbatim supporting quote on the page it cites, and everything it cannot verify returns an honest null. In the pre-launch census on the shipped build (21 live lookups, 2026-07-10), 2 of 21 lookups carried at least one populated enrichment field, roughly one in ten. A populated field's citation always checks out; most fields are null, and the SEC-validated identity core is the product. Three fields, geography_focus, notable_portfolio, and typical_check_size, are always null in the current version: a firm-level geography, a multi-company list, and a multi-figure check size are shapes quote-verification cannot yet police element by element, so they ship only once that stricter check exists.
Example 2: the SEC identity core (no synthesized layer)
Input { "name": "Homebrew" }. The name maps to one US-filed adviser and returns its full SEC identity core. When the run is on the free tier, has no budget for the synthesized layer, or the enrichment step returns nothing rankable, the resolver bills the lower SEC core price ($0.08) instead of the resolved price and omits the synthesized fields. Note brochure_url is null here (this ERA filed no Part 2 brochure) and sec_number is present.
{"query_name": "Homebrew","outcome": "sec_core_only","best_match": {"legal_name": "HOMEBREW VENTURES","crd": "168123","sec_number": "114972","registration_scope": "ERA","registration_status": "Active","registration_history": [{ "kind": "ERA", "jurisdiction": "SEC", "status": "ERA - Active", "effectiveDate": "2019-03-08" },{ "kind": "ERA", "jurisdiction": "California", "status": "ERA - Active", "effectiveDate": "2013-06-19" }],"other_names": ["HOMEBREW MANAGEMENT, LLC", "HOMEBREW VENTURES"],"address": "409 PRIMROSE ROAD, BURLINGAME, CA 94010, United States","adv_filing_date": "2026-03-24","brochure_url": null,"iapd_url": "https://adviserinfo.sec.gov/firm/summary/168123"},"ranked_candidates": [{ "legal_name": "HOMEBREW VENTURES", "crd": "168123", "confidence": 0.9, "evidence_urls": ["https://adviserinfo.sec.gov/firm/summary/168123"], "reason": "IAPD-validated ERA; deterministic score 0.900 (top)." }],"match_confidence": 0.9,"ambiguity_level": "none","warnings": [],"charged_event": "sec-core-profile"}
The eight synthesized field objects are still present in the row (all null on this SEC-core path); they are omitted above for length.
Example 3: a genuinely ambiguous name
Input { "name": "Sequoia Capital" }. The Sequoia Capital brand is shared across many advisers, so you get a ranked shortlist rather than one confidently-wrong row: Sequoia Capital Operations (the US venture entity, CRD 157373), the two Peak XV entities formerly filed as Sequoia Capital India (305299, 163626), HongShan (formerly Sequoia China), Sequoia Global Equities, and Sequoia Capital IV Israel all tie at the top. Every candidate is IAPD-validated and carries its CRD and a link to the filing, which is what lets you pick the right one. The row below is from a free-tier run, so charged_event is null; a paid run bills candidate-shortlist ($0.18). Lower-scoring generic "Sequoia" advisers (wealth-management firms, etc.) round out the ranked list and are trimmed here.
{"query_name": "Sequoia Capital","outcome": "shortlist","best_match": null,"ranked_candidates": [{ "legal_name": "SEQUOIA CAPITAL IV ISRAEL LTD.", "crd": "161213", "confidence": 0.72, "evidence_urls": ["https://adviserinfo.sec.gov/firm/summary/161213"], "reason": "IAPD-validated ERA; deterministic score 0.720 (top)." },{ "legal_name": "SEQUOIA GLOBAL EQUITIES", "crd": "157402", "confidence": 0.72, "evidence_urls": ["https://adviserinfo.sec.gov/firm/summary/157402"], "reason": "IAPD-validated RIA; deterministic score 0.720." },{ "legal_name": "SEQUOIA CAPITAL OPERATIONS, LLC", "crd": "157373", "confidence": 0.72, "evidence_urls": ["https://adviserinfo.sec.gov/firm/summary/157373"], "reason": "IAPD-validated RIA; deterministic score 0.720." },{ "legal_name": "PEAK XV PARTNERS OPERATIONS LLC", "crd": "305299", "confidence": 0.72, "evidence_urls": ["https://adviserinfo.sec.gov/firm/summary/305299"], "reason": "IAPD-validated RIA; deterministic score 0.720." },{ "legal_name": "PEAK XV PARTNERS I LLC", "crd": "163626", "confidence": 0.72, "evidence_urls": ["https://adviserinfo.sec.gov/firm/summary/163626"], "reason": "IAPD-validated ERA; deterministic score 0.720." },{ "legal_name": "HONGSHAN CAPITAL ADVISORS LIMITED", "crd": "161562", "confidence": 0.72, "evidence_urls": ["https://adviserinfo.sec.gov/firm/summary/161562"], "reason": "IAPD-validated ERA; deterministic score 0.720." }],"match_confidence": 0.72,"ambiguity_level": "high","warnings": ["Multiple IAPD-validated candidates are within the confidence tie band; returned a ranked shortlist rather than a single charged profile."],"charged_event": null}
Example 4: an honest no-match
Input { "name": "Nimbus Peak Ventures" }. No US-filed adviser matches, so the resolver says so plainly and charges nothing beyond the request fee. It never invents a profile to fill the gap.
{"query_name": "Nimbus Peak Ventures","outcome": "no_match","best_match": null,"ranked_candidates": [],"match_confidence": 0,"ambiguity_level": "none","warnings": ["No US-filed adviser (RIA or ERA) matches this name. Individual angels, unfiled syndicates, and funds with no US-filed adviser are out of v1 scope."],"charged_event": null}
Output fields
| Field | Source | Description |
|---|---|---|
query_name | echo | The name you submitted. |
outcome | computed | resolved, shortlist, sec_core_only, no_match, no_match_unsupported, or error_upstream. |
best_match | sec_filing | The CRD-anchored identity core: legal name, CRD, SEC number, registration scope and status, registration history, filed aliases, address, ADV filing date, brochure and IAPD links. Present only on resolved and sec_core_only. |
investment_thesis, stage_focus, sector_focus, geography_focus, typical_check_size, named_partners, notable_portfolio, recent_activity | synthesized | Best-effort cited extras, each a { value, source_type, source_urls, as_of, confidence } object. Always uncharged. null when no allowlisted source supports them. |
ranked_candidates | sec_filing | Every IAPD-validated candidate with its CRD, computed confidence, filing link, and the reason it was ranked. |
match_confidence | computed | The deterministic selection score of the top candidate. See the formula below. |
ambiguity_level | computed | none, low, or high. |
warnings | computed | Budget, policy, and ambiguity notices. |
charged_event | computed | Which event billed the run, or null. |
dry_run | echo | true only on the locked free preview run; false on every normal run. |
Match confidence: the published formula
match_confidence is a deterministic score computed from the filing data, never a model assertion, so you can reproduce it yourself:
match_confidence = 0.6 × name_score + 0.2 × status_score + 0.2 × hint_score(× 0.5 if a supplied hint hard-contradicts the filing)
- name_score is scored against the legal name and every filed alias, best match wins:
1.0for an exact normalized match,0.70when every query token appears in the name, otherwise a token-set (Jaccard) similarity capped at0.60. - status_score is
1.0for active or approved,0.7for pending,0.3for terminated, withdrawn, or inactive. - hint_score is
0.5when no checkable hint is supplied, otherwise the fraction of checkable hints that agree. In v1 onlycountryis checkable against the filing. - The
× 0.5hard-contradiction factor applies when acountryhint disagrees with the filed office address.
A single resolution requires the top score above 0.6 (strictly) and a lead of ≥ 0.15 over the runner-up. A top scoring exactly at 0.6, or a lead inside that 0.15 tie band, does not resolve to a single charged profile; what you get instead depends on the candidate set: two or more validated candidates return a ranked shortlist, and a single validated candidate returns the SEC-core identity (outcome sec_core_only). Candidates scoring below 0.5 against your query are name-irrelevant and are dropped entirely.
How much does it cost?
Pricing is pay-per-event and stated plainly: $0.02 per validated run; result events bill only when produced. The request fee is an honest charge for accepting and validating your input and running the free SEC lookups; it is not a charge-only-after-value promise. Result events below bill only when their deterministic predicate holds.
| Event | Price | Fires when |
|---|---|---|
| Request fee | $0.02 | Every run that passes input validation. |
| Resolved profile | $0.35 | A unique, IAPD-validated, CRD-anchored firm with a fully populated registration core and match_confidence above 0.6. |
| Candidate shortlist | $0.18 | Two or more IAPD-validated candidates, no single resolution. |
| SEC core profile | $0.08 | The filing identity core for a unique match, without the synthesized layer (free-tier or budget-limited path). |
| Authoritative profile | $0.59 | Reserved for a future complete-ADV release. Defined now, never charged by this version. |
So a resolved lookup costs $0.37 in total ($0.02 request fee plus $0.35), a shortlist $0.20, and a SEC-core profile $0.10. Empty input, upstream failures, and honest no-matches are charged the $0.02 request fee at most. To keep costs down, leave maxCandidates at its default and pass a country hint when you know it, which sharpens selection. The one exception is the locked dryRun: true preview above, which charges nothing: no request fee, no result event.
Data sources and provenance
Every output field records where it came from through its source_type.
- Filing-backed fields (
source_type: sec_filing): the entirebest_matchobject and everyranked_candidatesentry come from the public SEC IAPD firm search and firm-detail endpoints (adviserinfo.sec.gov) and nothing else. - Synthesized fields (
source_type: synthesized): the opinion extras are drawn under an allowlist of ten public domains:sec.gov,adviserinfo.sec.gov,techcrunch.com,axios.com,fortune.com,venturebeat.com,businesswire.com,prnewswire.com,globenewswire.com, andwikipedia.org. A fact citable only to an off-allowlist domain does not populate a field; that field returnsnull. - Licensed databases are structurally excluded. Crunchbase, PitchBook, LinkedIn, Harmonic, Tracxn, CB Insights, Dealroom, Preqin, and everything else off the allowlist are never queried and never appear in output. This resolver does not resell licensed-database data.
Limitations
- US-filed advisers only. It resolves RIA and ERA firms that carry a CRD. Individual angels, foreign-only funds, and unfiled syndicates return an honest no-match.
- The registration core must be complete to charge. A resolved or SEC-core profile requires legal name, CRD, registration scope and status, address, and at least one filed alias. An SEC file number is not required: state-registered advisers (and some exempt reporting advisers) file without one, so
sec_numberis returnednullfor them and the row carries a warning saying so. The firm still resolves on its CRD. - No money-shaped fields in v1. Regulatory AUM, custody and disclosure flags, owners, and fund type are not carried by the keyless endpoints and are not in this version. They are reserved for a future complete-ADV release.
- Thesis and check size have no authoritative registry. They are synthesized, cited, uncharged, and marked with a lower confidence. The adviser's own website is not in the fixed allowlist, so fields with no allowlisted source return
nullrather than a guess.
FAQ
Is a resolved profile always available? No. Ambiguous names return a ranked shortlist and unmatched names return an honest no-match. This is by design: the resolver refuses over guessing.
Why did a famous fund return a shortlist? Because its brand is shared across several registered advisers, or it operates more than one registered entity. Use the CRD and filing link on each candidate to pick the right one, or pass a country hint.
Do I pay when there is no match? No. No-matches, empty input, and upstream failures are charged the $0.02 request fee at most.
Are the confidence scores calibrated? The score is a deterministic function of the filing data, published above so you can reproduce it. It is a selection score, not a probability.
Can I call this from an agent or another tool? Yes. Input and output are structured JSON, one row per lookup, and the actor is callable through the Apify API and integrations.
Monitor the firms you resolve
Resolution pairs naturally with monitoring. Every resolved profile and every shortlist candidate carries a CRD, and a CRD is exactly what RIA Change Radar takes as input: it watches the filed Form ADV of the advisers you name, on your own schedule, and returns typed change events such as AUM band crossings, adviser headcount changes, custody changes, new disclosures, registration-scope changes, and office moves. Resolve the messy name here, then enroll the CRD there to hear when the filing changes.
Support
Found a wrong resolution, a missing firm, or a field you expected? Open an issue on the actor's Issues tab with the input name and what you expected. Feedback on coverage and ambiguity handling directly shapes what ships next.