SEC Enforcement Actions Database

The Enforcement Actions Database provides access to all SEC enforcement actions from 1997 to present, including administrative proceedings, orders, complaints, civil actions and more. The database includes structured data in JSON format extracted from SEC enforcement actions, providing the following information:

  • Publication date of the action
  • Name and roles of parties being charged, including their tickers and CIKs
  • Nature of the charges and complaints
  • Penalty amounts and whether settlements were reached
  • Parallel actions taken by other agencies, such as criminal charges by the Department of Justice
  • Requested reliefs, such as injunctions and civil penalties
  • Violated securities laws
  • Persons conducting the investigation and litigating the case
  • Other agencies involved in the investigation

Users can search the Enforcement Actions Database by all of the above fields via an API. The database also includes links to related documents, such as court filings, original SEC press releases, litigation releases, and more.

Examples of enforcement actions include charges related to insider trading, bribery, market manipulation, misleading investors, and other violations of securities laws. The database is updated in real-time as new enforcement actions are published by the SEC.

Dataset size:
Over 10,000 SEC enforcement actions from 1997 to present.
Data update frequency:
New charges and actions are added to the database as they are published by the SEC in real-time.
Survivorship bias free:
Yes. The database includes all SEC enforcement actions from 1997 to present.

API Endpoint

To search the Enforcement Actions Database, send a HTTP POST request with the search criteria as JSON payload to the following API endpoint:

https://api.sec-api.io/sec-enforcement-actions

Supported HTTP methods: POST

Request and response content type: JSON

Authentication

To authenticate your API requests, use the API key displayed in your user profile. You can utilize your API key in one of two ways. Choose the method that best fits your use case:

  • Authorization Header: Include your API key as an Authorization header in your requests. For instance, before sending a POST request to https://api.sec-api.io/sec-enforcement-actions, ensure the header is set as follows: Authorization: YOUR_API_KEY.
  • Query Parameter: Alternatively, append your API key directly to the URL as a query parameter. For example, when making POST requests, use the URL https://api.sec-api.io/sec-enforcement-actions?token=YOUR_API_KEY instead of the base endpoint.

Search API

To search the Enforcement Actions Database, make a POST request to https://api.sec-api.io/sec-enforcement-actions, providing your search criteria as a JSON payload.

Request Structure

The Search API recognizes the following JSON payload parameters:

  • query (string, required) - The search criteria in the format field:value defining the structured data field to search in and the value to search for in this field. The search expression is formatted with the Lucene syntax and supports AND and OR operators. Examples: entities.ticker:IEP or tags:bribery AND filedAt:[2019-01-01 TO 2022-12-31].
  • from (string, optional) - Pagination control to specify the starting position of the results. Max: 10000. Default: 0.
  • size (string, optional) - Determines the number of results to be returned per request. Max: 50. Default: 50.
  • sort (array, optional) - Specifies the field by which results should be sorted. By default, results are sorted by releasedAt in descending order.

Query Examples

Loading All Data
In order to download structured data of all enforcement actions published between 2004 and 2022, you can use a date range query as follows. This query will return the first 50 results. In order to retrieve all results, you can paginate through the results by increasing the from parameter by 50 on each subsequent request.

Open in Data Browser

Monitoring Most Recent Enforcement Actions
To monitor the most recent enforcement actions published by the SEC, you can use the following query. This query will return the 50 most recent enforcement actions. You can then periodically query the API to retrieve the latest enforcement actions, for example, every 60 seconds.

Open in Data Browser

Searching for Specific Companies
If you are interested in enforcement actions involving specific companies, you can use the ticker or cik filters. The example will return actions involving Archer-Daniels-Midland (ticker: ADM, CIK: 7084).

Open in Data Browser

Response Structure

The Search API returns a JSON object with two main fields: total and data. The total field indicates the total number of results matching the search criteria, while the data field contains an array of enforcement actions that match the query. Each object in the data array represents an enforcement action and includes the following fields:

  • id (string) - A system internal unique identifier of the enforcement action.
  • releaseNo (string) - The SEC release number of the enforcement action, e.g., 2011-279.
  • releasedAt (string) - The publication date and time of the enforcement action, e.g.2024-08-27T13:30:00-04:00. Format: yyyy-MM-ddTHH:mm:ssXXX. Records prior to 2012 only have the date part, e.g., 2011-12-29.
  • url (string) - The URL to the original SEC press release.
  • resources (array of objects) - An array of objects with label and url fields, providing links to related documents, such as litigation releases and complaints.
  • title (string) - The title of the enforcement action.
  • summary (string) - A brief summary of the enforcement action.
  • tags (array of strings) - Tags associated with the enforcement action, such as bribery, insider trading, etc.
  • entities (array of objects) - An array of objects representing the parties involved in the enforcement action.The ticker and cik fields are optional and are only present if the name was successfully matched to a known publicly traded company.
    • name (string) - The name of the party involved.
    • type (string) - The type of the party, such as individual, company, or other.
    • role (string) - The role of the party, such as respondent, defendant, or other.
    • ticker (string) - The ticker symbol of the party, if available.
    • cik (string) - The Central Index Key (CIK) of the party, if available.
  • complaints (array of strings) - An array of complaints or charges filed in the enforcement action, such as "Magyar Telekom paid approximately $9 million through four sham contracts to funnel money to government officials in Montenegro."
  • parallelActionsTakenBy (array of strings) - An array of other agencies that took parallel actions related to the enforcement action, such as U.S. Department of Justice in case of criminal charges.
  • hasAgreedToSettlement (boolean) - Indicates whether the defendant has agreed to a settlement.
  • hasAgreedToPayPenalty (boolean) - Indicates whether the defendant has agreed to pay a penalty.
  • penaltyAmounts (array of objects) - An array of penalty objects with penaltyAmount, penaltyAmountText and imposedOn fields. Each object represents a penalty imposed on a party involved in the enforcement action. A charge can have multiple penalties, for example, if multiple defendants are involved.
    • penaltyAmount (number) - The cleaned penalty amount in USD.
    • penaltyAmountText (string) - The original penalty amount as stated in the enforcement action.
    • imposedOn (string) - The party on which the penalty was imposed.
  • requestedRelief (array of strings) - An array of requested reliefs in the enforcement action, such as disgorgement of profits, injunction, civil penalty, etc.
  • violatedSections (array of strings) - An array of securities laws violated by the defendants, such as Section 10(b) of the Securities Exchange Act of 1934 or Foreign Corrupt Practices Act (FCPA).
  • investigationConductedBy (array of strings) - An array of persons or entities that conducted the investigation leading to the enforcement action.
  • litigationLedBy (array of strings) - An array of persons or entities that litigated the case.
  • otherAgenciesInvolved (array of objects) - An array of other agency objects (name, country) involved in the investigation or enforcement action, such as the Swiss Office of the Attorney General (Switzerland) in case of international cooperation.

Response Example

JSON
1 {
2 "total": {
3 "value": 235,
4 "relation": "eq"
5 },
6 "data": [
7 {
8 "releaseNo": "2011-279",
9 "releasedAt": "2011-12-29",
10 "url": "https://www.sec.gov/news/press/2011/2011-279.htm",
11 "resources": [
12 {
13 "label": "SEC complaint v. the companies",
14 "url": "https://www.sec.gov/litigation/complaints/2011/comp22213-co.pdf"
15 },
16 {
17 "label": "SEC Complaint v. the executives",
18 "url": "https://www.sec.gov/litigation/complaints/2011/comp22213-ex.pdf"
19 },
20 {
21 "label": "Litigation Release No. LR-22213",
22 "url": "https://www.sec.gov/litigation/litreleases/2011/lr22213.htm"
23 }
24 ],
25 "title": "SEC Charges Magyar Telekom and Former Executives with Bribing Officials in Macedonia and Montenegro",
26 "summary": "The SEC charged Magyar Telekom and three former executives with bribing officials in Macedonia and Montenegro, resulting in a $95 million settlement involving both civil and criminal charges.",
27 "tags": ["bribery", "foreign corrupt practices", "telecommunications"],
28 "entities": [
29 {
30 "name": "Magyar Telekom",
31 "type": "company",
32 "role": "defendant",
33 "ticker": "MYTAY",
34 "cik": "1047564"
35 },
36 {
37 "name": "Deutsche Telekom AG",
38 "type": "company",
39 "role": "defendant",
40 "ticker": "DTEGY",
41 "cik": "946770"
42 },
43 {
44 "name": "Elek Straub",
45 "type": "individual",
46 "role": "defendant"
47 },
48 {
49 "name": "Andras Balogh",
50 "type": "individual",
51 "role": "defendant"
52 },
53 {
54 "name": "Tamas Morvai",
55 "type": "individual",
56 "role": "defendant"
57 }
58 ],
59 "complaints": [
60 "Magyar Telekom and its executives bribed government and political party officials in Macedonia and Montenegro to win business and shut out competition.",
61 "Magyar Telekom's subsidiaries in Macedonia made illegal payments of approximately $6 million under bogus consulting and marketing contracts.",
62 "Magyar Telekom paid approximately $9 million through four sham contracts to funnel money to government officials in Montenegro.",
63 "Deutsche Telekom AG violated books and records and internal controls provisions of the FCPA."
64 ],
65 "parallelActionsTakenBy": ["U.S. Department of Justice"],
66 "hasAgreedToSettlement": true,
67 "hasAgreedToPayPenalty": true,
68 "penaltyAmounts": [
69 {
70 "penaltyAmount": 31200000,
71 "penaltyAmountText": "$31.2 million",
72 "imposedOn": "Magyar Telekom"
73 },
74 {
75 "penaltyAmount": 59600000,
76 "penaltyAmountText": "$59.6 million",
77 "imposedOn": "Magyar Telekom"
78 },
79 {
80 "penaltyAmount": 4360000,
81 "penaltyAmountText": "$4.36 million",
82 "imposedOn": "Deutsche Telekom AG"
83 }
84 ],
85 "requestedRelief": [
86 "disgorgement of profits",
87 "civil penalties",
88 "permanent injunctions"
89 ],
90 "violatedSections": ["Foreign Corrupt Practices Act (FCPA)"],
91 "investigationConductedBy": ["Adam Eisner", "Charles Cain"],
92 "litigationLedBy": ["Robert Dodge"],
93 "otherAgenciesInvolved": [
94 {
95 "name": "Fraud Section of the Department of Justice's Criminal Division",
96 "country": "United States"
97 },
98 {
99 "name": "Federal Bureau of Investigation",
100 "country": "United States"
101 },
102 {
103 "name": "Hungarian Financial Supervisory Authority",
104 "country": "Hungary"
105 },
106 {
107 "name": "German Federal Financial Supervisory Authority (BaFin)",
108 "country": "Germany"
109 },
110 {
111 "name": "Swiss Office of the Attorney General",
112 "country": "Switzerland"
113 }
114 ]
115 }
116 ]
117 }

FAQ

Common questions about querying the SEC Enforcement Actions Database, the response shape, and the bulk archives.

How do I look up an SEC enforcement action by its release number?

To look up an enforcement action by its SEC release number, query the /sec-enforcement-actions endpoint and filter on the release number field (releaseNo). The value of releaseNo should equal the exact identifier the SEC assigned to the action, for example 2011-279 or 2017-133.

The response object echoes back the same releaseNo along with the publication date (releasedAt), the title (title), the original press release link (url), and any related court filings or orders attached to the action (resources). Because release numbers are unique, a successful lookup returns a single record.

Open in Data Browser

How do I find all SEC enforcement actions involving a specific publicly traded company by ticker?

To find all enforcement actions involving a specific publicly traded company by its stock ticker, query the /sec-enforcement-actions endpoint and filter on the ticker field inside the parties array (entities.ticker). The value of entities.ticker should equal the company's trading symbol, for example HAL for Halliburton or MYTAY for Magyar Telekom.

The ticker field is only populated when the party name was successfully matched to a known publicly traded company, so this filter targets corporate respondents and defendants rather than individuals. To page through every matching action, sort by publication date in descending order (releasedAt) and step the from offset forward by the page size (max 50).

Open in Data Browser

How do I retrieve all enforcement actions against a company using its SEC identifier?

To retrieve every enforcement action involving a specific company by its SEC identifier, query the /sec-enforcement-actions endpoint and filter on the CIK field inside the parties array (entities.cik). The value of entities.cik should equal the Central Index Key assigned to the company, for example 45012 for Halliburton or 1493318 for eToro.

Filtering by entities.cik is more reliable than filtering by ticker because the CIK never changes when a company rebrands or delists. The response includes every action where the company appears in any role (entities.role), so the same query catches matters where the company is a defendant, a respondent, or a settling party.

Open in Data Browser

How do I pull every SEC enforcement action published in a given year and paginate through the full result set?

To pull every enforcement action published in a given year, query the /sec-enforcement-actions endpoint and filter on the publication date (releasedAt). The value of releasedAt should be between the first and last day of the target year, for example between 2022-01-01 and 2022-12-31. Sort the results by releasedAt in descending order so the page boundaries are stable.

The endpoint returns up to 50 records per page, controlled by the size parameter. To paginate, start with from at 0, then increase it by 50 on each subsequent call until the total.value count is reached. The from offset is capped at 10000; if a single year contains more than that, split the date range into shorter sub-windows (for example month by month) and paginate each window independently.

Open in Data Browser

How can I monitor the most recently published SEC enforcement actions in near real time?

To monitor the most recently published actions in near real time, query the /sec-enforcement-actions endpoint and sort by the publication date (releasedAt) in descending order. The database is updated as new actions are published by the SEC, so a recurring poll of the top of the sort order surfaces newly added records.

A simple monitoring loop uses a match-all query such as the presence of any release number (the releaseNo field exists), keeps from at 0, and asks for the first page (up to 50 records). On each poll, compare the returned releaseNo values against the ones already seen and treat the unseen ones as new. A polling interval of around 60 seconds is sufficient because actions are published infrequently.

Open in Data Browser

To find actions related to bribery or Foreign Corrupt Practices Act violations, query the /sec-enforcement-actions endpoint and filter on either the topical tags array (tags) or the list of violated laws (violatedSections). Bribery cases commonly carry tags such as bribery, foreign corrupt practices, or FCPA violations, and the value of violatedSections typically contains a phrase such as Foreign Corrupt Practices Act (FCPA) or books and records provisions of the FCPA.

Combining both filters with an OR catches cases that were tagged but not explicitly labeled with a statute, and vice versa. Each returned action also exposes a free-text summary (summary) and the underlying allegations (complaints) for further confirmation.

Open in Data Browser

How do I search for insider-trading enforcement cases?

To search for insider-trading enforcement cases, query the /sec-enforcement-actions endpoint and filter on the topical tags array (tags). The value of tags should contain insider trading. The tag is applied when the SEC's release describes trading on material non-public information, so it captures both individual tipping cases and broader market-manipulation matters with an insider-trading component.

For a fuller view, the narrative complaint text (complaints) and the case title (title) often contain the phrase insider trading even on actions that were not tagged that way, so a free-text search of complaints can be used as a secondary check.

Open in Data Browser

How do I list enforcement actions where the defendant agreed to a settlement?

To list actions where the charged party agreed to a settlement, query the /sec-enforcement-actions endpoint and filter on the settlement flag (hasAgreedToSettlement). The value of hasAgreedToSettlement should be true.

This flag captures matters that were resolved without a contested trial, including consent orders and administrative settlements. The related field hasAgreedToPayPenalty indicates whether a monetary penalty was part of the settlement, and the specific dollar amounts and the party each was imposed on are listed under the penalties array (penaltyAmounts).

Open in Data Browser

How do I find cases where the charged party agreed to pay a monetary penalty?

To find cases where the charged party agreed to pay a monetary penalty, query the /sec-enforcement-actions endpoint and filter on the penalty-agreed flag (hasAgreedToPayPenalty). The value of hasAgreedToPayPenalty should be true.

This filter narrows the result set to actions that include at least one financial sanction the defendant accepted. The actual amounts appear in the penalties array (penaltyAmounts), where each entry carries the cleaned numeric amount (penaltyAmounts.penaltyAmount), the original text as the SEC stated it (penaltyAmounts.penaltyAmountText), and the party the penalty was imposed on (penaltyAmounts.imposedOn).

Open in Data Browser

How do I identify the largest enforcement penalties ever imposed and which party they were levied against?

To identify the largest enforcement penalties ever imposed, query the /sec-enforcement-actions endpoint and sort or rank results on the numeric penalty amount inside the penalties array (penaltyAmounts.penaltyAmount). Each action can carry multiple entries in penaltyAmounts, so a single record may contribute several values; the party each amount was levied against is named on the same object under penaltyAmounts.imposedOn.

Because an action can have several penalty entries (one per defendant or one per type of sanction), build the ranking by flattening penaltyAmounts across all returned actions and ordering the flattened list by penaltyAmounts.penaltyAmount in descending order. The corresponding action context, including the title (title), release number (releaseNo), and publication date (releasedAt), comes from the parent record.

Open in Data Browser

How do I total the penalty dollars imposed on a single company across all its SEC actions?

To total the penalty dollars imposed on a single company across all its SEC actions, first pull every action that involves the company by querying the /sec-enforcement-actions endpoint with a filter on the CIK or ticker (entities.cik or entities.ticker). The value of entities.cik should equal the company's CIK, for example 45012 for Halliburton.

Then iterate the penalties array on each returned action (penaltyAmounts) and keep only the entries where the party named on the penalty (penaltyAmounts.imposedOn) matches the company's name. Sum the numeric amounts (penaltyAmounts.penaltyAmount) across all kept entries. Filtering on imposedOn is necessary because the same action can also list penalties imposed on individual officers or co-defendants that should not be counted toward the company total.

Open in Data Browser

How do I find SEC enforcement actions that were brought in parallel with criminal charges by the Department of Justice?

To find actions that were brought in parallel with criminal charges by the Department of Justice, query the /sec-enforcement-actions endpoint and filter on the parallel actions array (parallelActionsTakenBy). The value of parallelActionsTakenBy should contain U.S. Department of Justice.

This field lists the other agencies that took related action on the same underlying conduct, so a match indicates a coordinated civil-and-criminal posture. Related agencies such as the Federal Bureau of Investigation are sometimes added to the same array, and the broader list of cooperating bodies (otherAgenciesInvolved) can be inspected for additional context on the investigation.

Open in Data Browser

How do I locate actions where international regulators cooperated with the SEC?

To locate actions where international regulators cooperated with the SEC, query the /sec-enforcement-actions endpoint and filter on the cooperating agencies array (otherAgenciesInvolved). The value of otherAgenciesInvolved.country should be anything other than United States. Examples of non-US cooperators that appear on the records include Hungarian Financial Supervisory Authority (Hungary), German Federal Financial Supervisory Authority (BaFin) (Germany), and Swiss Office of the Attorney General (Switzerland).

The name of each cooperating body sits alongside the country on the same object (otherAgenciesInvolved.name), so the response identifies both the foreign regulator and the jurisdiction. Pairing this filter with a tag such as foreign corrupt practices narrows the set to cross-border bribery matters specifically.

Open in Data Browser

How do I search for cases that violate a specific securities law section?

To search for cases that violate a specific securities law section, query the /sec-enforcement-actions endpoint and filter on the list of violated laws (violatedSections). The value of violatedSections should contain the text of the statute or rule, for example Section 10(b) of the Securities Exchange Act of 1934, Foreign Corrupt Practices Act (FCPA), or books and records provisions of the FCPA.

Because violatedSections is stored as free-text strings extracted from the SEC's release, a partial phrase match (for example Section 10(b)) works well to capture variations in how the SEC cites the same statute. Each returned action also exposes the underlying allegations (complaints) and the requested remedies (requestedRelief) so the legal posture of the case is visible.

Open in Data Browser

How do I find enforcement actions where the SEC requested disgorgement of profits?

To find actions where the SEC requested disgorgement of profits, query the /sec-enforcement-actions endpoint and filter on the requested remedies array (requestedRelief). The value of requestedRelief should contain disgorgement of profits (or the closely related disgorgement of ill-gotten gains, which appears on some older releases).

The requestedRelief array often lists multiple remedies on the same action, such as prejudgment interest, civil penalties, permanent injunctions, or cease and desist order. Combining this filter with the settlement flag (hasAgreedToSettlement) separates contested disgorgement requests from those resolved by consent.

Open in Data Browser

How do I distinguish actions targeted at companies from those targeted at individuals?

To distinguish actions targeted at companies from those targeted at individuals, look at the party-type field inside the parties array (entities.type). The value of entities.type is company for corporate respondents and individual for natural persons; a third value, other, covers parties that fit neither.

Querying the /sec-enforcement-actions endpoint with a filter where entities.type should equal company returns matters with at least one corporate defendant, and the same query with entities.type set to individual returns matters with at least one individual defendant. A single action commonly lists both types together — for example a company and its named executives — so the two queries overlap on mixed matters.

Open in Data Browser

How do I find cases naming a specific individual as a defendant?

To find cases naming a specific individual as a defendant, query the /sec-enforcement-actions endpoint and filter on the entity name combined with the role inside the parties array. The value of entities.name should equal the person's full name, for example Jeannot Lorenz, and the value of entities.role should be defendant.

Both conditions need to apply to the same entry inside entities, so this is a nested filter rather than two independent filters at the document level. The response includes the broader context of the matter — the title (title), summary (summary), and any co-defendants in the same entities array — so it is straightforward to see the company or other individuals named alongside the target person.

Open in Data Browser

To retrieve the original SEC press release link and the related court filings for an action, look at the press release URL on the top-level object (url) and the related-documents array (resources). The url field points to the original SEC press release page; for older matters this is on sec.gov/news/press/... and for newer matters it is on sec.gov/newsroom/press-releases/....

Each entry inside resources carries a human-readable label (resources.label) and a direct link to the document (resources.url). Typical labels include SEC Complaint, SEC Order, Litigation Release No. LR-22213, and amended-rule documents for non-enforcement releases. Querying the /sec-enforcement-actions endpoint for a specific release number (releaseNo) returns a single record whose url and resources together provide the complete document trail.

Open in Data Browser

How do I search the narrative text of charges and complaints filed by the SEC?

To search the narrative text of charges and complaints, query the /sec-enforcement-actions endpoint and filter on the complaints array (complaints). Each element of complaints is a sentence-level description of a specific allegation, such as Magyar Telekom paid approximately $9 million through four sham contracts to funnel money to government officials in Montenegro.

A free-text term match against complaints finds actions whose allegations mention a given concept, party, or scheme. Combining this with a phrase from the case summary (summary) or title (title) tightens the match when the same word appears in many unrelated matters. The complaint sentences are returned in full on the response, so the matching context is visible without dereferencing the original PDF.

Open in Data Browser

How do I find enforcement actions led by a specific SEC attorney or investigator?

To find actions led by a specific SEC attorney or investigator, query the /sec-enforcement-actions endpoint and filter on either the investigation team (investigationConductedBy) or the litigation team (litigationLedBy). Each field is an array of names; the value should equal the staffer's full name, for example Charles Cain or Melissa R. Hodgman.

The two arrays serve different roles: investigationConductedBy lists the staff that gathered facts and prepared the case, while litigationLedBy lists the attorneys that argued or settled it. Some matters list multiple people in each role. A union over the two fields catches every action a given staffer touched, regardless of which side of the workflow they were on.

Open in Data Browser

How do I filter for SEC actions in a particular industry sector such as hedge funds or telecommunications?

To filter actions by industry sector, query the /sec-enforcement-actions endpoint and filter on the topical tags array (tags). The value of tags should contain the sector descriptor — for example hedge fund for hedge fund matters, telecommunications for telecom matters, or binary options for retail-fraud schemes built around a particular product.

The tags field captures both the industry and the nature of the misconduct, so a sector tag often appears alongside a charge-type tag such as improper expense allocations or disclosure fraud. Browsing the distinct values that appear on tags across an initial page of results helps identify which sector labels the SEC uses in practice.

Open in Data Browser

How do I find cases involving multiple defendants and list all parties charged in each?

To find cases involving multiple defendants and list every charged party, query the /sec-enforcement-actions endpoint and inspect the parties array on each returned action (entities). Iterate through entities and keep entries where the role (entities.role) is defendant. Each kept entry carries the party's name (entities.name), party type (entities.type, either company or individual), and optionally the ticker (entities.ticker) and CIK (entities.cik) when the party matches a publicly traded company.

To restrict the query to matters with more than one defendant in the first place, target multi-party releases by filtering on a known co-defendant (entities.name) or by checking whether the parallel actions array (parallelActionsTakenBy) is non-empty, since coordinated matters typically name several parties.

Open in Data Browser

How do I separate defendants from settling parties within the same enforcement action?

To separate defendants from settling parties within the same action, look at the role field inside the parties array (entities.role). The value of entities.role is one of defendant, settling party, respondent, or other. A single action can mix these — for example, a release may name some parties as defendant and others as settling party when only a subset agreed to terms.

Querying the /sec-enforcement-actions endpoint returns the full entities array on each action, so the separation is done client-side by filtering entities on the desired role value. The action-level flag for whether any party agreed to settle (hasAgreedToSettlement) tells you whether the action contains settling parties at all before you bother to split the array.

Open in Data Browser

To track trends in SEC enforcement activity over time, query the /sec-enforcement-actions endpoint for one year at a time using the publication date filter (releasedAt). The value of releasedAt should be between January 1 and December 31 of the target year, for example between 2019-01-01 and 2019-12-31. The response object's total count (total.value) reports the number of matching actions, which is the annual volume.

Repeating the query year by year and recording each total.value produces a time series of enforcement activity. To break the trend down further by topic, layer in a tag filter (tags) or a violated-section filter (violatedSections) and re-run the per-year sweep for that subcategory. Sorting the underlying results by releasedAt ascending lets you also reconstruct the within-year cadence.

Open in Data Browser

How do I rank the most common types of charges or themes brought by the SEC?

To rank the most common types of charges or themes, query the /sec-enforcement-actions endpoint over the desired time window (filtering on releasedAt) and tally the values that appear in the topical tags array (tags) across the result set. Each action carries multiple tags such as bribery, insider trading, disclosure fraud, whistleblower awards, or hedge fund, so the tally counts tag occurrences rather than actions.

A companion view comes from tallying the violated-laws array (violatedSections), which reflects the statutory framing — for example Foreign Corrupt Practices Act (FCPA) or Section 10(b) of the Securities Exchange Act of 1934 — rather than the thematic framing. Paginating through the result set with from stepping by 50 ensures the tally covers every action, not just the first page.

Open in Data Browser

How do I combine multiple filters, for example FCPA cases that ended in a settlement within a date window?

To combine multiple filters, query the /sec-enforcement-actions endpoint with a compound condition. For FCPA cases that ended in a settlement within a date window, the violated-laws array (violatedSections) should contain Foreign Corrupt Practices Act (FCPA), the settlement flag (hasAgreedToSettlement) should be true, and the publication date (releasedAt) should be between the start and end of the target window, for example between 2018-01-01 and 2022-12-31.

All three conditions must hold on the same action. The query syntax supports boolean composition across these fields, so they can be joined in a single request rather than fetched separately and intersected client-side. The response includes the full set of matching records with the dollar penalties (penaltyAmounts), parties (entities), and complaint narrative (complaints) available for downstream analysis.

Open in Data Browser

How do I sort enforcement actions from oldest to newest to reconstruct a historical timeline?

To sort actions from oldest to newest, query the /sec-enforcement-actions endpoint and order results by the publication date (releasedAt) in ascending order. The endpoint sorts by releasedAt descending by default, so overriding the sort direction is required.

Note that records prior to 2012 only carry the date portion of releasedAt (for example 2011-12-29), while later records carry a full timestamp with a timezone offset (for example 2024-08-27T13:30:00-04:00). The ascending sort handles both shapes correctly because they share the same lexicographic prefix. To rebuild a complete historical timeline, paginate by stepping from forward by 50 until every record is retrieved.

Open in Data Browser

How do I retrieve a complete dump of every action published since 1997 within the pagination cap?

To retrieve a complete dump of every action published since 1997, query the /sec-enforcement-actions endpoint repeatedly using narrow date windows on the publication date (releasedAt) and paginating within each window. The from offset is capped at 10000, so any window whose total count would exceed that cap must be split into smaller sub-windows.

A practical approach is to sweep year by year from 1997 forward: for each year, the value of releasedAt should be between January 1 and December 31 of that year, sorted ascending. Step from by 50 until the page is empty or the year's total.value is reached. If a single year's total exceeds the offset cap, split that year into quarters or months and repeat. Together this yields the full historical set without any window hitting the pagination ceiling.

Open in Data Browser

To find whistleblower-related announcements, query the /sec-enforcement-actions endpoint and filter on the topical tags array (tags). The value of tags should contain whistleblower awards. The matching records cover SEC press releases that announce awards to tipsters whose information led to successful enforcement actions.

When present, the dollar figures appear in the penalties array (penaltyAmounts), with the numeric amount on penaltyAmounts.penaltyAmount and the original text on penaltyAmounts.penaltyAmountText. Because award announcements often omit the structured fields used on charging documents, some records carry only the title (title) and summary (summary) with the dollar figure stated in the title text itself (for example SEC Issues Awards Totaling $98 Million to Two Whistleblowers). For those records, parsing the amount from title or summary is the fallback.

Open in Data Browser

How do I compute the total dollars the SEC has ordered in penalties for a given category of misconduct, such as FCPA cases?

To compute the total dollars the SEC has ordered in penalties for a given category of misconduct, first pull every action in that category by querying the /sec-enforcement-actions endpoint with a filter on either the violated-laws array (violatedSections) or the topical tags array (tags). For FCPA cases, the value of violatedSections should contain Foreign Corrupt Practices Act (FCPA), or the value of tags should contain foreign corrupt practices or FCPA violations.

Then paginate through the full result set by stepping from by 50, and on each returned action sum the numeric penalty amounts inside the penalties array (penaltyAmounts.penaltyAmount). The grand total is the sum of penaltyAmounts.penaltyAmount across every entry in every matching action. The party each amount was imposed on sits on the same object (penaltyAmounts.imposedOn), so the total can also be broken down per defendant if needed.

Open in Data Browser

References

Miscellaneous