Look up an investment adviser's Form ADV
Search investment advisers by name, then pull a firm's Form ADV registration, state notice filings, brochures and the full ADV PDF by CRD number.
Investment advisers register with the SEC or with their states by filing Form ADV. Part 1 covers the business: ownership, clients, assets under management, disciplinary history. Part 2 is the brochure written for clients. The SEC publishes all of it on the Investment Adviser Public Disclosure (IAPD) site, keyed by the firm's CRD number.
SecFeed's Form ADV API wraps IAPD in two calls: search by name, then fetch the firm by CRD.
Search for a firm
GET /v1/form-adv/firms?query=... returns matching firms with their CRD (firm_source_id), SEC file number and scope.
import os
import requests
BASE = "https://secfeedapi.com"
HEADERS = {"Authorization": f"Bearer {os.environ['SECFEED_KEY']}"}
r = requests.get(f"{BASE}/v1/form-adv/firms", params={"query": "dodge & cox"}, headers=HEADERS, timeout=60)
r.raise_for_status()
for f in r.json()["firms"]:
addr = f.get("firm_ia_address_details", {}).get("officeAddress", {})
print(f["firm_source_id"], f["firm_name"], f.get("firm_ia_full_sec_number"), f.get("firm_ia_scope"), addr.get("city"), addr.get("state"))
Output:
104596 DODGE & COX 801-1895 ACTIVE SAN FRANCISCO CA
firm_ia_scope is ACTIVE for a current registration. Search results include inactive and broker-dealer records too, so check the scope before you pick a CRD.
Fetch the firm by CRD
GET /v1/form-adv/firms?crd=104596 returns the full profile.
import os
import requests
BASE = "https://secfeedapi.com"
HEADERS = {"Authorization": f"Bearer {os.environ['SECFEED_KEY']}"}
r = requests.get(f"{BASE}/v1/form-adv/firms", params={"crd": "104596"}, headers=HEADERS, timeout=60)
r.raise_for_status()
firm = r.json()
info = firm["basicInformation"]
print(info["firmName"], "| CRD", info["firmId"], "| SEC file", f"{info['iaSECNumberType']}-{info['iaSECNumber']}")
print("Status:", info["iaScope"], "| latest Form ADV filed:", info["advFilingDate"])
print("SEC registered:", firm["orgScopeStatusFlags"]["isSECRegistered"], "| state registered:", firm["orgScopeStatusFlags"]["isStateRegistered"])
for reg in firm["registrationStatus"]:
print("Registration:", reg["secJurisdiction"], reg["status"], "since", reg["effectiveDate"])
states = [n["jurisdiction"] for n in firm["noticeFilings"] if n["status"] == "Notice Filed"]
print(f"Notice filings in {len(states)} jurisdictions, e.g. {', '.join(states[:5])}")
for b in firm["brochures"]["brochuredetails"]:
print("Brochure:", b["brochureName"], "submitted", b["dateSubmitted"])
print("Full Form ADV PDF:", firm["advPdf"])
Output:
DODGE & COX | CRD 104596 | SEC file 801-1895
Status: ACTIVE | latest Form ADV filed: 04/17/2026
SEC registered: Y | state registered: N
Registration: SEC Approved since 3/14/1959
Notice filings in 42 jurisdictions, e.g. Arizona, Arkansas, California, Colorado, Connecticut
Brochure: DODGE & COX BROCHURE submitted 4/17/2026
Full Form ADV PDF: https://reports.adviserinfo.sec.gov/reports/ADV/104596/PDF/104596.pdf
What the profile contains
basicInformation: name, CRD, SEC file number (801-), scope and the date of the latest Form ADV filingregistrationStatus: SEC or state registration and its effective datenoticeFilings: the states where an SEC-registered adviser has made a notice filingorgScopeStatusFlags: SEC registered, state registered, exempt reporting adviserbrochures: Part 2A brochures with submission dates;brochurePagelinks to themadvPdf: the complete Form ADV as a PDF
The PDF holds the Part 1 answers, including regulatory assets under management, number of accounts, client types and compensation arrangements. Download it with /v1/download?url=... or open the link directly.
Connect advisers to their filings
The same firm often files on EDGAR too. Dodge & Cox reports its 13F under CIK 200217, and its 13F cover page carries the CRD (crdNumber) and SEC file number (801-1895) shown above. That link lets you join Form ADV registration data to 13F holdings.