Home / APIs / Auditors
Auditor opinions

Audit Reports API: auditor opinions, going concern, CAMs and ICFR as JSON

Independent auditor's reports as JSON: opinion type, going concern, critical audit matters, ICFR opinion, material weaknesses, auditor and full text.

Newfilling from 2020 onward
curl -H "Authorization: Bearer $SECFEED_KEY" \
  "https://secfeedapi.com/v1/audit-reports/financial-statements?ticker=AAPL"
import os, requests

r = requests.get(
    "https://secfeedapi.com/v1/audit-reports/financial-statements",
    params={'ticker': 'AAPL'},
    headers={"Authorization": f"Bearer {os.environ['SECFEED_KEY']}"},
)
print(r.json())

Overview

Every annual report includes the independent auditor's report: the opinion on the financial statements, any going concern doubt or explanatory paragraph, the critical audit matters, and for larger filers a separate opinion on internal control over financial reporting. Each is a few pages of text in a different layout per firm.

The Audit Reports API returns one record per report. The financial statements endpoint gives the opinion, frameworks, going concern flag and reason, explanatory paragraphs and each CAM with the procedures performed. The ICFR endpoint gives the control framework, the opinion and each material weakness. Pass a record's id to the content endpoint for the report's full text.

What you get

Built for developers who would rather not parse EDGAR.

Opinion and frameworks

Unqualified, qualified, adverse or disclaimer, with reporting and auditing frameworks.

Going concern

goingConcernFlag with the stated reason, plus every explanatory paragraph by type.

Critical audit matters

Each CAM with topic, accounts affected, why it was critical and the procedures.

ICFR opinions

Control framework, effective or not, and each material weakness with remediation status.

Full text

The complete report text for any record from /v1/audit-reports/content?id=.

Endpoints

Authenticate with Authorization: Bearer YOUR_KEY. Responses are JSON.

GET|POST/v1/audit-reports/financial-statementsReference →

Structured facts from an independent auditor's opinion on financial statements: opinion, frameworks, going concern, explanatory paragraphs, CAMs and auditor details.

Parameters: ticker | cik, accessionNo, startDate, endDate, data.<path>=value, from, size (max 50)

GET|POST/v1/audit-reports/icfrReference →

Structured facts from an independent auditor's opinion on internal control over financial reporting: framework, opinion, material weaknesses and auditor details.

Parameters: ticker | cik, accessionNo, startDate, endDate, data.<path>=value, from, size (max 50)

GET/v1/audit-reports/contentReference →

Full text of one auditor's report.

Parameters: id (from the audit reports APIs)

Response fields

The main fields in every result. The raw filing data is always one level down.

FieldMeaning
id, accessionNo, formType, filedAt, auditTypeThe report, the filing it came from, financialStatements or icfr.
entities, seriesAndClassesContractsInformationThe company or fund that filed.
report.opinionType, reportingFramework, auditingFrameworkThe opinion and the standards used.
report.goingConcernFlag, goingConcernReasonGoing concern doubt.
report.explanatoryParagraphs[].type, descriptionRestatements, accounting changes and other paragraphs.
report.cams[].topic, accountsOrDisclosures, proceduresCritical audit matters.
report.icfrOpinionType, icfrEffective, materialWeaknesses[].titleThe ICFR opinion and weaknesses.
report.auditorFirmName, auditorPcaobId, auditorTenureStartYearThe audit firm and how long it has served.
report.auditorLocation.city, reportSignedAtWhere the report was signed.

Use cases

Datasets behind this API

The SEC forms this API reads, with live filing counts.

FAQ

How far back does it go?

These datasets launched in October 2026 and are being filled newest first, starting with filings from 2020 onward. The live counter on this page shows what is loaded today. Older years are added after that.

How is the data produced?

Each record is extracted from the filing text by an AI model and validated against a fixed schema before it is published; see our AI Disclosure. A value the filing does not state is returned as null, never guessed.

Why can one filing return several records?

A filing can contain more than one auditor's report, for example a financial statements opinion and an ICFR opinion, or reports from two firms. Each report is its own record with its own id.

Try the Audit Reports API free

125 free API calls to start. No sales call.

Get free API key →