Home / Tutorials / Setup
Setup

Lucene query syntax for SEC filing search

Every field and operator the SecFeed filing search supports: ticker, cik, formType, filedAt ranges, sic, lists, AND, OR and NOT, with real results.

/v1/filings takes a query string in Lucene style syntax. This page lists the fields and operators, then runs five real queries against the live index.

Fields

FieldExampleMatches
tickerticker:NVDAFilings by the company with that ticker
cikcik:789019Filings by a CIK (no leading zeros needed)
formTypeformType:"10-K"Exact form type; quote values with dashes or spaces
filedAtfiledAt:[2026-01-01 TO 2026-03-31]Filing date range, inclusive; * leaves a side open
companyNamecompanyName:TeslaSubstring of the filer name
accessionNoaccessionNo:"0000320193-25-000079"One filing
sicsic:3674Industry code of the filer
statestate:DEFiler state
itemsitems:"1.05"8-K item numbers (for item feeds with text, /v1/form-8k is faster)
periodOfReportperiodOfReport:[2026-06-30 TO 2026-06-30]8-K period of report

Operators

  • AND, OR and NOT combine terms; use parentheses to group, for example (formType:"10-K" OR formType:"10-Q") AND filedAt:[2026-10-01 TO 2026-10-09].
  • Lists use commas inside parentheses: formType:("10-K", "10-Q") or ticker:(AAPL, MSFT).
  • Ranges use [from TO to].
  • A trailing is a prefix wildcard: formType:10-K also matches 10-K/A and 10-KT.

Five real queries

import os
import requests

BASE = "https://secfeedapi.com"
HEADERS = {"Authorization": f"Bearer {os.environ['SECFEED_KEY']}"}

def search(query, size=3):
    r = requests.get(f"{BASE}/v1/filings", params={"query": query, "size": size}, headers=HEADERS, timeout=120)
    r.raise_for_status()
    return r.json()

queries = [
    'cik:789019',
    'formType:"S-1" AND filedAt:[2026-09-01 TO 2026-09-30]',
    'formType:("10-K", "10-Q") AND filedAt:[2026-10-01 TO 2026-10-09]',
    'sic:3674 AND filedAt:[2026-10-08 TO 2026-10-09]',
    'formType:"8-K" AND filedAt:[2026-10-09 TO 2026-10-09] AND NOT ticker:AAPL',
]
for q in queries:
    res = search(q)
    print(q, "->", res["total"]["value"], "filings")
    for f in res["filings"]:
        print("  ", f["filedAt"], f["formType"], f["ticker"] or "-", f["companyName"])

Output:

cik:789019 -> 4525 filings
   2026-09-17 4 MSFT MICROSOFT CORP
   2026-09-17 4 MSFT MICROSOFT CORP
   2026-09-17 4 MSFT MICROSOFT CORP
formType:"S-1" AND filedAt:[2026-09-01 TO 2026-09-30] -> 72 filings
   2026-09-30 S-1 BHAI BHAV Acquisition Corp II
   2026-09-30 S-1 GENK GEN Restaurant Group, Inc.
   2026-09-29 S-1 MNBS MNBS Acquisition Corp.
formType:("10-K", "10-Q") AND filedAt:[2026-10-01 TO 2026-10-09] -> 68 filings
   2026-10-09 10-Q GSMT Global-Smart.Tech Inc.
   2026-10-09 10-Q QSEA Quartzsea Acquisition Corp
   2026-10-09 10-K - alpha-En Corp
sic:3674 AND filedAt:[2026-10-08 TO 2026-10-09] -> 65 filings
   2026-10-09 4 SMTC SEMTECH CORP
   2026-10-09 4 MRVL Marvell Technology, Inc.
   2026-10-09 4 GFS GLOBALFOUNDRIES Inc.
formType:"8-K" AND filedAt:[2026-10-09 TO 2026-10-09] AND NOT ticker:AAPL -> 156 filings
   2026-10-09 8-K GLIBA Liberty Capital Corp/NV
   2026-10-09 8-K - Sculptor Diversified Real Estate Income Trust, Inc.
   2026-10-09 8-K - METROSPACES, INC.

Tips

  • Add a filedAt range whenever you can. A date range narrows the search the most and keeps responses fast.
  • Amendments have their own form types (10-K/A, 8-K/A). Add them to a list or use a prefix wildcard when you want both.
  • Ownership filings are filed under both the company and the insider. A ticker or cik query returns them for the company.
  • Want the results in a spreadsheet? The same query works on /v1/filings/csv, see Export filing search results to CSV.

Next steps

More setup tutorials

Run this tutorial with your own key

500 free API calls a month. Every example on this page works on the free plan.

Get free API key →