Filing Full-Text Search API
The SEC Filing Full-Text Search API enables searches across the full text of all EDGAR filings submitted since 2001. Each search scans the entire filing content, including all attachments, such as exhibits. Filing searches by keyword, ticker, company name, CIK, CUSIP number, and more - either individually or in combination - are fully supported. Boolean operators such as AND, OR, and NOT allow flexible search criteria, including requiring all words to appear, matching exact phrases, excluding terms, and using wildcards — all of which can be combined within a single search query. The API returns the metadata, such as the accession number, CIK, form type, URL of the source, and more, of filings and exhibits matching the search criteria.
API Endpoint
Full-text search queries are performed by sending a POST HTTP request with the search parameters as the payload to the following endpoint:
Supported HTTP methods: POST
Request and response content type: JSON
Authentication
To authenticate requests to the Full-Text Search API, use the API key shown in your user profile. Utilize the API key in one of two ways. Choose the method that best fits your implementation:
- Authorization Header: Include the API key as an
Authorizationheader in POST requests. For instance, before sending a POST request tohttps://api.sec-api.io/full-text-search, ensure the header is set as follows:Authorization: YOUR_API_KEY - Query Parameter: Alternatively, append the API key directly to the URL as a query parameter. For example, when making POST requests, use the URL
https://api.sec-api.io/full-text-search?token=YOUR_API_KEYinstead of the base API endpoint.
Request Parameters
To search the content of SEC filings and exhibits, send a HTTP POST request with a JSON-formatted payload to the API endpoint https://api.sec-api.io/full-text-search. The request body includes the search query, and optional parameters such as date range, CIK and form type filters, as well as a pagination parameter, for example:
Supported parameters:
query(string, required) - Defines the case-insensitive search term or phrase used to search the content of filings and their attachments. This can be a single word, phrase, or combination of words and phrases. Supported search features include wildcards (*), Boolean operators (OR,NOT), and exact phrase matching by enclosing phrases in quotation marks ("exact phrase"). By default, all terms are joined by an implicitANDoperator.- Single term matching:
applereturns all filings and attachments mentioning "apple". - Exact phrase matching: Enclose a phrase in quotation marks to search for it in the specified order.
Example:"Fiduciary Product"will retrieve documents containing the exact phrase "Fiduciary Product" in that order. - Wildcard searches: Append a
*to a keyword to search for variations of that word (e.g., stem words). Wildcards cannot be used at the beginning or middle of a word, nor within exact phrase matches.
Example:gas*finds documents containing terms like gas or gasoline. - Boolean OR: Use
OR(capitalized) between terms or phrases to specify that at least one of the terms must appear in the document. By default, all search words and phrases are required unless separated byOR.
Example:Gasoline "Sacramento CA" OR "San Francisco CA"retrieves documents containing gasoline and either Sacramento CA or San Francisco CA. - Exclusions: Use a hyphen (
-) or the capitalizedNOTkeyword immediately before a term to exclude it from search results.
Example:software -hardwarefinds documents containing software but excludes any that also contain hardware.
- Single term matching:
startDate(string, optional) - Specifies the start date of a date range search with thestartDatedenoting the beginning of the range. Used in combination withendDateto find filings and exhibits filed between the two dates. The format isyyyy-mm-dd. Example:2021-02-19. Default: 30 days ago.endDate(string, optional) - Specifies the end date of the date range search. Uses the same format asstartDate:yyyy-mm-dd. Default: today.ciks(array of strings, optional) - Restricts search to filings from specific CIKs. Leading zeros are optional but may be included. Example:[ "0001811414", "1318605" ]. Default: all CIKs.formTypes(array of strings, optional) - Search specific EDGAR form types. If defined, only filings of the specified form types are considered. All other filing types are ignored. Example:[ "8-K", "10-Q", "10-K" ]. Default: all form types.page(string, optional) - Used for pagination. Each request returns 100 matching filings. Increase the page number to retrieve the next set of 100 filings. Example:3retrieves the third page. Default:1.
Full-Text Search Query Examples
The following examples demonstrate how to construct full-text search queries to search EDGAR filings and exhibits containing specific terms or phrases. The search examples are case-insensitive and can be used as values of the query parameter of the Full-Text Search API.
SpaceXSpaceX Elon"substantial doubt""substantial doubt" "except for""substantial doubt" -opinion"qualified opinion" OR "In our opinion, except for""identified material weakness" OR "identified a material weakness"gas* "Sacramento CA" OR "San Francisco CA"Request Examples
Request Example 1
Search for filings and attachments containing the term "SpaceX" filed between January 1, 2020, and December 31, 2023, only considering the EDGAR form types 8-K and 10-Q. The request returns the first page of results, which includes 100 filings.
Request Example 2
Search for filings and attachments containing the term "gas" or any word that starts with "gas" (e.g., "gasoline", "gases") and the exact phrase "Sacramento CA" or "San Francisco CA" between December 31, 2018, and February 10, 2020, with form types 8-K and 10-Q. The request returns the second page of results, which includes filings 101-200.
Request Example 3
Search for filings and attachments containing the exact phrase "model x" filed between October 15, 2020, and October 15, 2021, by the CIKs 0001811414 and 1318605. The request returns the first page of results, which includes 100 filings.
Response Format
The Full-Text Search API returns a JSON object with two keys: total and filings. Per response, filings contains up to 100 filings that match the search criteria. The maximum number of filings retrievable per search query is limited to 10,000 documents. Filings are sorted by an internal score based on the frequency of the search term in the document. The more frequently a term appears, the higher the score, with the highest-scoring filings returned first.
The response object has the following structure:
total(object) - Contains two properties:valueandrelation. Ifrelationis "gte" (greater than or equal),valueis set to 10,000, indicating that over 10,000 filings match the search query. The API returns a maximum of 100 filings per request. To retrieve filings beyond the first 100 matches, increase thepageparameter in subsequent API calls. Ifrelationis "eq" (equal),valuereflects the exact number of filings matching the query, which will be fewer than 10,000. Exact counts are not calculated for results exceeding 10,000.filings(array) - An array of filing and exhibit metadata objects that meet the search criteria, with each object formatted as follows:accessionNo(string) - Accession number of the filing. Example:0000065011-21-000020cik(string) - CIK of the filer, with leading zeros removed. Example:65011companyNameLong(string) - Full name of the filing company. Example:MEREDITH CORP (MDP) (CIK 0000065011)ticker(string) - Ticker symbol of the filer, if available.description(string) - Description of the document. Example:EXHIBIT 99 FY21 Q2 EARNINGS PRESS RELEASEformType(string) - EDGAR filing type. Example:8-Ktype(string) - Document type. Example:EX-99filingUrl(string) - URL to the filing or attachment. Example:https://www.sec.gov/Archives/edgar/data/65011/000006501121000020/fy21q2exh99earnings.htmfiledAt(string) - Filing date in the formatyyyy-mm-dd. Example:2021-02-04
Response Examples
Response Example 1
1
{
2
"total": {
3
"value": 86,
4
"relation": "eq"
5
},
6
"filings": [
7
{
8
"accessionNo": "0000320193-20-000008",
9
"cik": "320193",
10
"companyNameLong": "Apple Inc. (AAPL) (CIK 0000320193)",
11
"ticker": "AAPL",
12
"description": "EXHIBIT 99.1",
13
"formType": "8-K",
14
"type": "EX-99.1",
15
"filingUrl": "https://www.sec.gov/Archives/edgar/data/320193/000032019320000008/a8-kexhibit991q1202012.htm",
16
"filedAt": "2020-01-28"
17
},
18
{
19
"accessionNo": "0000320193-20-000010",
20
"cik": "320193",
21
"companyNameLong": "Apple Inc. (AAPL) (CIK 0000320193)",
22
"ticker": "AAPL",
23
"description": "10-Q",
24
"formType": "10-Q",
25
"type": "10-Q",
26
"filingUrl": "https://www.sec.gov/Archives/edgar/data/320193/000032019320000010/a10-qq1202012282019.htm",
27
"filedAt": "2020-01-29"
28
},
29
{
30
"accessionNo": "0000320193-20-000008",
31
"cik": "320193",
32
"companyNameLong": "Apple Inc. (AAPL) (CIK 0000320193)",
33
"ticker": "AAPL",
34
"description": "8-K",
35
"formType": "8-K",
36
"type": "8-K",
37
"filingUrl": "https://www.sec.gov/Archives/edgar/data/320193/000032019320000008/a8-kq1202012282019.htm",
38
"filedAt": "2020-01-28"
39
},
40
{
41
"accessionNo": "0000320193-20-000010",
42
"cik": "320193",
43
"companyNameLong": "Apple Inc. (AAPL) (CIK 0000320193)",
44
"ticker": "AAPL",
45
"description": "EXHIBIT 32.1",
46
"formType": "10-Q",
47
"type": "EX-32.1",
48
"filingUrl": "https://www.sec.gov/Archives/edgar/data/320193/000032019320000010/a10-qexhibit32112282019.htm",
49
"filedAt": "2020-01-29"
50
},
51
{
52
"accessionNo": "0001193125-20-013100",
53
"cik": "1730168",
54
"companyNameLong": "Broadcom Inc. (AVGO, AVGOP) (CIK 0001730168)",
55
"ticker": "AVGO",
56
"description": "8-K",
57
"formType": "8-K",
58
"type": "8-K",
59
"filingUrl": "https://www.sec.gov/Archives/edgar/data/1730168/000119312520013100/d873855d8k.htm",
60
"filedAt": "2020-01-23"
61
}
62
]
63
}
Response Example 2
1
{
2
"total": {
3
"value": 21,
4
"relation": "eq"
5
},
6
"filings": [
7
{
8
"accessionNo": "0001615774-19-006819",
9
"cik": "778164",
10
"companyNameLong": "Pacific Ethanol, Inc. (PEIX) (CIK 0000778164)",
11
"ticker": "ALTO",
12
"description": "EXHIBIT 99.1",
13
"formType": "8-K",
14
"type": "EX-99.1",
15
"filingUrl": "https://www.sec.gov/Archives/edgar/data/778164/000161577419006819/s117892_ex99-1.htm",
16
"filedAt": "2019-05-01"
17
},
18
{
19
"accessionNo": "0001213900-19-022368",
20
"cik": "778164",
21
"companyNameLong": "Pacific Ethanol, Inc. (PEIX) (CIK 0000778164)",
22
"ticker": "ALTO",
23
"description": "PRESS RELEASE DATED NOVEMBER 7, 2019",
24
"formType": "8-K",
25
"type": "EX-99.1",
26
"filingUrl": "https://www.sec.gov/Archives/edgar/data/778164/000121390019022368/f8k1119ex99-1_pacific.htm",
27
"filedAt": "2019-11-07"
28
},
29
{
30
"accessionNo": "0001564590-19-016638",
31
"cik": "1492422",
32
"companyNameLong": "Apellis Pharmaceuticals, Inc. (APLS) (CIK 0001492422)",
33
"ticker": "APLS",
34
"description": "EX-10.2",
35
"formType": "10-Q",
36
"type": "EX-10.2",
37
"filingUrl": "https://www.sec.gov/Archives/edgar/data/1492422/000156459019016638/apls-ex102_113.htm",
38
"filedAt": "2019-05-07"
39
},
40
{
41
"accessionNo": "0001162194-19-000033",
42
"cik": "1162194",
43
"companyNameLong": "FLUIDIGM CORP (FLDM) (CIK 0001162194)",
44
"ticker": "FLDM",
45
"description": "EXHIBIT 10.1",
46
"formType": "10-Q",
47
"type": "EX-10.1",
48
"filingUrl": "https://www.sec.gov/Archives/edgar/data/1162194/000116219419000033/ex101.htm",
49
"filedAt": "2019-05-07"
50
}
51
]
52
}
FAQ
Common questions about querying the Filing Full-Text Search API, the response shape, and the bulk archives.
How do I find every SEC filing that mentions a specific company name or product across all filings since 2001?
Searches across the full text of EDGAR filings and their attachments are served by the /full-text-search endpoint. To find every filing that mentions a particular company name or product, put the term (or its exact phrase enclosed in double quotes) into the query field and set the date range to start at the beginning of coverage. The dataset covers all EDGAR filings and exhibits filed since 2001, so the value of startDate should be 2001-01-01 and endDate should be today's date.
Leave formTypes and ciks unset so that no form-type or filer filter is applied — that way every form type and every filer, active or delisted, is considered. Each response returns up to 100 matching filings in the filings array along with a hit count in total.value and total.relation, and you walk through results by incrementing page until you have collected everything you need.
How do I search for the exact phrase "substantial doubt" in annual and quarterly reports to flag potential going-concern issues?
To flag potential going-concern language in periodic reports, search the full text of filings on the /full-text-search endpoint and look for the exact phrase wherever it appears. The value of query should be the phrase substantial doubt enclosed in double quotes, which requires both words to appear in that order anywhere in the filing or its exhibits.
To restrict the match to annual and quarterly reports, the value of formTypes should be the list ["10-K", "10-Q"], which causes the search to ignore every other EDGAR form type. The response lists matching documents in the filings array along with the filer's CIK (cik), ticker (ticker), the form (formType), the document type (type) — useful for separating the main report from its exhibits — and the source URL on SEC.gov (filingUrl).
How can I find filings where a company discloses a material weakness in internal controls?
Material-weakness disclosures appear as small variations of a common phrase inside the filing text, so the /full-text-search endpoint is the right tool. Build the query value as the alternative phrasings joined together — for example the phrase identified material weakness and the phrase identified a material weakness, each enclosed in double quotes, combined as alternatives so that a document matches when any one of them is present. The capitalized boolean OR keyword is what expresses that alternative relationship inside the query string.
Leave formTypes open if you want every disclosure (including 8-Ks announcing the finding and amendments) or narrow it to ["10-K", "10-Q"] if you only care about periodic reports. The matched documents are returned in the filings array, each with its accession number (accessionNo), filing date (filedAt), and source URL (filingUrl) so you can read the surrounding context on SEC.gov.
How do I limit a full-text search to a specific company by its identifier?
To restrict a full-text search to one filer, hit the /full-text-search endpoint and pass the company's CIK in the filter list. The value of ciks should be an array containing that single CIK as a string, for example ["0001318605"] for Tesla — leading zeros are optional, so ["1318605"] works as well. Only filings and exhibits whose filer matches that CIK are then scored against the query term.
If you only have a ticker or a company name rather than a CIK, resolve it first through the Mapping API at /mapping/ticker/<TICKER> or /mapping/name/<NAME>, take the cik from the response, and use that value in the ciks array of the full-text search request.
How do I restrict a keyword search to only current reports and annual reports?
Form-type filtering on the /full-text-search endpoint is controlled by the formTypes parameter, which takes an array of EDGAR form-type strings. To keep only current reports and annual reports, the value of formTypes should be ["8-K", "10-K"] — every other form type (10-Qs, S-1s, proxy statements, registration statements, and so on) is then dropped from the result set.
The filter is exact-match on the form-type string, so amendments like 10-K/A or 8-K/A are not included unless you list them explicitly. To include amendments as well, expand the array to ["8-K", "8-K/A", "10-K", "10-K/A"].
How do I search for filings that mention multiple terms where all of them must be present in the document?
The query parameter on the /full-text-search endpoint joins space-separated terms with an implicit AND, so listing several words next to each other in the value already requires all of them to be present somewhere in the filing or its exhibits. For example, the value of query should be SpaceX Elon to retrieve filings that contain both SpaceX and Elon in any order, anywhere in the document.
The same rule applies when mixing single words and quoted phrases — for example the value of query can be Tesla followed by the quoted phrase model x to require both the word Tesla and the exact phrase model x to appear together. Matching is case-insensitive, so capitalization in the query does not affect what is matched.
How do I search for filings that mention any one of several alternative phrases?
To match documents that contain at least one phrase out of a list of alternatives, build the query value on the /full-text-search endpoint as those phrases joined with the capitalized boolean OR keyword. Each phrase is enclosed in double quotes so its words must appear in that order; for example a query made up of the phrase qualified opinion and the phrase In our opinion, except for, joined as alternatives, retrieves filings that contain either phrase.
The OR keyword must be uppercase — lowercase or is treated as a literal word to search for. You can chain more than two alternatives the same way, and you can mix alternatives with required terms by leaving non-alternative terms space-separated, since space-separated terms are still joined by an implicit AND.
How do I exclude filings that contain a particular word from my keyword search results?
To drop documents that contain an unwanted term, prefix that term with a hyphen (or use the capitalized NOT keyword immediately before it) inside the query value on the /full-text-search endpoint. For example, a query that requires software while excluding hardware is written as software followed by hardware prefixed with a hyphen — the result is filings that mention software but not hardware.
The exclusion applies to whichever term immediately follows the hyphen or the NOT keyword, and you can use it together with quoted phrases — for instance keeping the going-concern phrase substantial doubt (in double quotes) while filtering out filings that also mention opinion is expressed the same way.
How do I search for variations or stems of a keyword like "gas", "gasoline", and "gases" in one query?
Wildcard expansion on the /full-text-search endpoint is done by appending an asterisk to the stem inside the query value. For example, the value of query should be gas* to match documents that contain gas, gasoline, gases, and any other term that starts with gas.
The asterisk only works at the end of a term — it cannot be placed at the beginning or in the middle of a word, and it cannot appear inside a quoted exact phrase. To combine a wildcard with other constraints, mix it with normal terms or quoted phrases in the same query, for example gas* together with the quoted phrase Sacramento CA to require both a gas-stemmed term and that exact phrase.
How do I narrow a filing search to a specific date range?
Date filtering on the /full-text-search endpoint is controlled by the startDate and endDate parameters, both formatted as yyyy-mm-dd. The value of startDate should be the first day of the window (for example 2024-01-01) and the value of endDate should be the last day (for example 2024-03-31); both bounds are inclusive and apply to the filing's publication date on EDGAR.
If you omit one or both, the endpoint defaults to the last 30 days — startDate defaults to 30 days ago and endDate defaults to today. The filing date that comes back in each result (filedAt) uses the same yyyy-mm-dd format, which lets you sanity-check that the matches fall inside the window you requested.
How do I retrieve more than the first 100 matching filings for a popular search term?
Each call to the /full-text-search endpoint returns at most 100 matching documents inside the filings array, and additional pages are fetched with the page parameter. The value of page should be a string-encoded number — 1 returns documents 1 through 100 (the default), 2 returns 101 through 200, 3 returns 201 through 300, and so on.
The number of pages available is bounded by total.value: when total.relation is eq, divide that value by 100 (rounding up) to get the last meaningful page; when total.relation is gte, the total is capped at 10,000 and so is the highest page you can usefully request (page 100). Beyond that the endpoint will not return more results for the same query.
What is the maximum number of filings I can retrieve for a single search query, and how do I work around that cap?
The /full-text-search endpoint returns at most 10,000 documents per search query — when more filings match, total.relation comes back as gte and total.value is 10000, and the endpoint will not paginate past those 10,000 hits. To collect every match for a broad query, split it into smaller searches whose result sets each fall under the cap.
The most natural split axes are the date range and the filer list. Narrow the startDate/endDate window — for example one month or one quarter at a time — and run the same query for each window, advancing the window until the entire period of interest is covered. Alternatively, partition by filer by issuing separate requests with one or a few CIKs each in the ciks array. After each request, check that total.relation is eq and total.value is below 10,000 — if it is still gte, narrow the window further before paginating.
How can I tell from the response whether my search matched more filings than the API will return?
The /full-text-search response carries the hit count in a total object with two fields: total.value and total.relation. When total.relation is eq, the value of total.value is the exact number of matching documents and is less than 10000, so you know exactly how many filings exist for the query.
When total.relation is gte, the value of total.value is 10000 and the true match count is at or above that number — the endpoint will not enumerate documents beyond the first 10,000. Treat that as a signal that the query is too broad and split it into smaller searches, for example by narrowing the date window in startDate/endDate or by listing specific filers in ciks.
How do I authenticate my full-text search requests without putting the API key in the URL?
The /full-text-search endpoint supports two authentication styles: the API key can be appended to the URL as a token query parameter, or it can be carried in an Authorization HTTP header. To keep the key out of the URL, use the header-based style and omit the token parameter entirely.
The API key itself is the one shown in your sec-api.io user profile, and it is the same value regardless of which of the two authentication styles is used.
How do I search the text of exhibits (like press releases and material contracts) in addition to the main filing body?
Searches on the /full-text-search endpoint already scan the entire filing content including all attachments, so any term placed in query is matched against the body of the primary document and the full text of every exhibit at the same time. You do not need any extra parameter to enable this — by default a press release filed as EX-99.1 or a material contract filed as EX-10.1 is indexed alongside the parent 8-K or 10-Q.
Each hit in the filings array represents one matched document. The form type of the parent filing is in formType (for example 10-Q), and the document type of the matched piece is in type (for example EX-10.1 for an exhibit or 10-Q for the main report), which lets you tell whether the search matched the body of the filing or one of its attachments.
How do I find filings that mention a specific city or geographic location?
To match a city or location name on the /full-text-search endpoint, put the location in double quotes inside the query value so that the words are required to appear together in the right order. For example, the value of query should be the phrase Sacramento CA in double quotes to find filings that contain that exact phrase, and the phrase San Francisco CA in double quotes for San Francisco.
Locations often appear in more than one common form, so you can broaden the search by listing alternative phrasings — for example the exact phrase Sacramento CA and the exact phrase Sacramento, California joined with the capitalized boolean OR keyword inside the query value. The match is case-insensitive, but the words inside each quoted phrase must appear adjacent and in that order.
How do I find recent earnings press releases that contain a particular product name or financial term?
Earnings press releases are typically filed as exhibits to 8-K current reports, and the /full-text-search endpoint indexes both the 8-K body and its exhibits together. Put the product name or financial term — for example the quoted phrase iPhone revenue — into the query value, and set the value of formTypes to ["8-K"] so that only 8-Ks and their attached press releases are considered.
To focus on recent filings, narrow the window with startDate and endDate in yyyy-mm-dd form, or leave both unset to fall back on the default last-30-days window. In the filings array, look at type to separate the main 8-K (8-K) from the press-release exhibit (EX-99.1), and follow filingUrl to read the exhibit on SEC.gov.
How do I identify filings where a company discusses a lawsuit or litigation involving a specific party?
Litigation discussions show up in periodic reports (10-Ks, 10-Qs), in 8-Ks announcing new actions, and in exhibits, so the /full-text-search endpoint can cover all of them in a single query. Build the query value to combine the party's name as a quoted phrase with litigation vocabulary — for example the quoted phrase Acme Corporation joined with the words lawsuit, complaint, or litigation as alternatives (using the capitalized boolean OR keyword between them), which requires the party name and at least one of the litigation terms to appear together.
If you want to focus on the filer that is discussing the lawsuit (as opposed to filings by the party itself), set ciks to that filer's CIK. To survey only periodic reports, set formTypes to ["10-K", "10-Q"]; to surface litigation announcements as they happen, use ["8-K"] instead. Each match in the filings array carries the filer's CIK (cik), the form (formType), and the SEC.gov URL (filingUrl) for review.
How can I track mentions of an emerging technology or trend (e.g., "generative AI") across all filings over time?
To build a time series of mentions on the /full-text-search endpoint, hold the search term constant and slide the date window across the period of interest. Put the phrase in query (for example the quoted phrase generative AI, in double quotes so the words stay adjacent), and run a series of requests where startDate and endDate each cover one window — for example one month or one quarter — advancing both forward in yyyy-mm-dd steps until you reach today.
For each window, the response gives a count of matching documents in total.value (with total.relation set to eq when the count is exact). Aggregating those counts across windows gives the trend over time. If a window's total.relation comes back as gte, the window is too broad and should be split further; if you also want the underlying documents, paginate each window with page and collect the filings array.
How do I find filings from a small set of peer companies that all reference the same topic?
To restrict a topic search to a peer set on the /full-text-search endpoint, list every peer's CIK in the ciks array and put the topic in query. For example, the value of ciks should be an array such as ["0000320193", "0000789019", "0001652044"] for Apple, Microsoft, and Alphabet, and the value of query should be the topic itself — a single word, a quoted exact phrase, or a list of alternative phrases joined with the capitalized boolean OR keyword.
Leading zeros in the CIK strings are optional, and formTypes can be set alongside to narrow further to periodic reports or current reports. Each hit in the filings array carries the filer's CIK (cik), name (companyNameLong), and ticker (ticker), which lets you group the matches by peer once the results come back.
How do I search by ticker symbol or company name when I don't know the CIK?
The /full-text-search endpoint only accepts CIKs in its ciks filter, so when you have a ticker or a company name, resolve it to a CIK first using the Mapping API. Hit /mapping/ticker/<TICKER> to map a ticker (for example TSLA) to company details, or /mapping/name/<NAME> to look up by company name; both return an array of companies with the matching cik for each.
Take the cik value from the Mapping API response and pass it in the ciks array of the /full-text-search request. If a ticker has belonged to multiple entities over time (one currently listed and one delisted), the Mapping API returns each separately, and you can include every relevant CIK in ciks to cover the full history.
How do I get the direct URL to the source document on SEC.gov for each matching filing or exhibit?
Each hit in the filings array returned by the /full-text-search endpoint includes the source-document URL on SEC.gov in the filingUrl field. For the main filing body the URL points to the primary document (for example a 10-Q HTML file), and for an exhibit it points directly to that exhibit's file (for example an EX-99.1 press release).
The URL is the same one EDGAR serves, so you can open it in a browser or fetch it directly. Alongside it, accessionNo identifies the full submission on EDGAR and filedAt gives the filing date, both of which can be used to reconstruct or cross-reference the source if needed.
How do I distinguish in the response between a main filing document and an attached exhibit?
Each entry in the filings array returned by the /full-text-search endpoint carries two type fields: formType identifies the EDGAR form of the parent filing (for example 10-Q or 8-K), and type identifies the specific document inside the filing that matched. When the two are equal — for example formType is 10-Q and type is 10-Q — the hit is the main filing body; when type starts with EX- (such as EX-99.1 or EX-10.1) the hit is an attached exhibit of the parent filing whose form is in formType.
Multiple entries with the same accessionNo can therefore appear in the same response, one for the main document and one for each matched exhibit, allowing you to count the parent filing once and treat its exhibits as separate matches.
How do I find filings that mention either of two competing company names but not a third?
On the /full-text-search endpoint, build the query value so that the two competing names are listed as alternatives (joined with the capitalized boolean OR keyword between the two quoted names) and the third name is excluded by prefixing it with a hyphen — or equivalently by placing the capitalized NOT keyword immediately before the third quoted name. The combined effect is that a document must contain at least one of the first two names and must not contain the third.
Both OR and NOT must be uppercase to be treated as operators rather than literal words. The same compositional pattern extends to more than two alternatives or to multiple exclusions placed inside the same query value.
How can I search filings from a specific filer over the past 30 days without specifying any dates?
The /full-text-search endpoint defaults startDate to 30 days ago and endDate to today when both are omitted, so a last-30-days search for a specific filer needs only the query and the CIK filter. Set the value of ciks to an array containing that filer's CIK — for example ["0001318605"] for Tesla — and put the term you care about in query, leaving startDate and endDate unset.
The response returns every matching filing or exhibit from that filer over the trailing 30 days inside the filings array, with filedAt confirming each document's filing date.
How quickly after a filing is published on EDGAR can I find it via full-text search?
New EDGAR filings become searchable on the /full-text-search endpoint in less than 60 seconds after they are published on EDGAR. Both the filing body and its exhibits are indexed as part of the same submission, so once the submission is searchable every attachment is matched against query the same way the main document is.
Are filings from companies that no longer exist or have been delisted included in full-text search results?
Yes — the /full-text-search endpoint is survivorship-bias free. The index covers every EDGAR filing and exhibit filed since 2001 from both active filers and filers that are no longer active (for example companies that have been delisted, merged away, or otherwise ceased to file). Search results therefore include matching filings from those entities, and each hit carries the filer's CIK (cik) and company name (companyNameLong) so you can identify them regardless of current listing status.
How do I page through all results for a broad keyword query to build a complete dataset?
Pagination on the /full-text-search endpoint is driven by the page parameter — each request returns up to 100 hits in filings, and incrementing page by one moves to the next 100. Start with page set to 1, collect the filings array, then issue the same request with page set to 2, 3, and so on, accumulating results as you go.
Stop when either the filings array comes back empty or when you have collected total.value documents — whichever happens first. Note that total.value is capped at 10000 (when total.relation is gte), so for a very broad query you also need to split the search into smaller windows by narrowing startDate/endDate or by filtering on ciks to get past that cap.
How do I find filings that contain an exact phrase including punctuation, such as "In our opinion, except for"?
To require an exact phrase — including any punctuation it contains — on the /full-text-search endpoint, wrap the whole phrase in double quotes inside query. For example, the value of query should be the phrase In our opinion, except for enclosed in double quotes, which matches documents that contain those words in that order, with the comma in place between opinion and except.
Matching is case-insensitive, and the quoted phrase is treated as a single token sequence, so wildcard asterisks and boolean operators inside the quotes are not interpreted — they are matched literally.
How do I combine a wildcard term, multiple exact phrases, and a form-type filter in one query to narrow results?
All of these features compose inside a single /full-text-search request. Build the query value as a wildcard stem (for example gas*) followed by two quoted city phrases (Sacramento CA and San Francisco CA) listed as alternatives using the capitalized boolean OR keyword. The wildcard term is required by the implicit AND of space-separated terms, and at least one of the two city phrases must also be present.
Add the form-type filter alongside by setting formTypes to the list of forms you care about, for example ["8-K", "10-Q"]. Date and filer filters compose the same way through startDate/endDate and ciks, and pagination through page works regardless of how complex the query value gets.