SEC EDGAR Scraper — Filings, Financials, Insider & Form D avatar

SEC EDGAR Scraper — Filings, Financials, Insider & Form D

Pricing

Pay per event

Go to Apify Store
SEC EDGAR Scraper — Filings, Financials, Insider & Form D

SEC EDGAR Scraper — Filings, Financials, Insider & Form D

SEC EDGAR via the official free SEC APIs (no login/key): company filings, full-text search, XBRL financials & raw XBRL facts, insider Form 4, 13F institutional holdings, 13D/13G activist stakes, Form D funding leads, and 8-K material events.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Yuliia Kulakova

Yuliia Kulakova

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

SEC EDGAR Scraper

SEC EDGAR Scraper

SEC EDGAR Scraper — filings, financials, insider (Form 4), 13F holdings, 13D/G activist, Form D funding leads (official API).

Pull U.S. Securities and Exchange Commission data straight from the official, free EDGAR APIs — no API key, no login, no scraping tricks. One actor, 10 modes, covering company filings, full-text search, XBRL financials, insider trades, institutional 13F holdings, activist stakes, private-placement funding leads, and 8-K material events.

Built for finance and investment research, funding-lead generation, compliance, and quant workflows that need clean, structured SEC data on demand or on a schedule.

The actor only does two things the SEC asks of every API consumer: it sends a descriptive User-Agent with contact info, and it stays under the SEC's 10-requests/second fair-access limit (throttled to ~8 req/s).


Key features

  • 10 modes, one actor — switch behavior with the mode field:

    ModeRecord typeWhat you get
    company-filingsfilingA company's full filing history by ticker / CIK / name, filtered by form type and date.
    searchsearchHitEDGAR full-text search across every filer (document text, 2001→), with relevance scores.
    financialsfinancialsNormalized XBRL statements per fiscal period (revenue, net income, assets, EPS, cash flow, …), in the company's reporting currency.
    xbrl-factsxbrlFactRaw XBRL — one record per reported datapoint, exactly as tagged (the un-normalized companion to financials).
    form-4-insiderinsiderInsider (director / officer / 10% owner) Form 3/4/5 transactions: who, role, code, shares, price, holdings after.
    form-13fholding13FInstitutional-manager 13F-HR holdings — one record per position (CUSIP, shares, value, portfolio %).
    activistactivistStakeSchedule 13D/13G beneficial-ownership stakes — subject vs. filer, % owned, shares, event date, 13D purpose.
    form-d-funding-leadsfundingLeadReg D private-placement offerings — issuer, contacts, amount raised/remaining, industry, related persons.
    eight-k-eventseightKEvent8-K material events with parsed item codes/labels, per-item body text, exhibits, press-release text, event flags. Deep-parse on by default.
    latest-filings-feedfilingNewest filings across all of EDGAR, by form type.
  • Ticker / CIK / name resolutioncompanies accepts stock tickers (AAPL), CIKs (320193 or CIK0000320193), or company names (Apple), resolved both directions via the official company_tickers.json map.

  • Incremental & scheduled runssinceAccessionNumber skips everything at or older than a given accession, so a scheduled run only emits what's new. Date presets (last7Days, last30Days, yearToDate, …) and startDate/endDate bounds are supported everywhere.

  • 8-K deep parsing — item codes → human labels, per-item body text (itemBodies), the full exhibit list, extracted press-release text (EX-99.x), plus boolean event flags (earningsFlag, officerDepartureFlag, mAndAFlag, cyberIncidentFlag, …).

  • Market-wide or company-scopedform-d-funding-leads, eight-k-events, and activist run either for specific companies or across all of EDGAR over a date range.

  • Nothing to set up — no API key, no login, no proxy, no account anywhere. Pick a mode, press start. The SEC's endpoints are public and this actor talks to them directly, staying under the SEC's 10 requests/second fair-access limit with automatic retry and backoff.


Input

Set mode and the fields relevant to it. All other fields have sensible defaults.

FieldTypeDefaultApplies toDescription
modeselect (enum)company-filingsallWhich of the 10 modes to run.
companiesstring[]["AAPL"]company-filings, financials, xbrl-facts, form-4, form-13f, activist, form-d, 8-KTickers, CIKs, or company names. For form-13f this is the institutional manager (e.g. 0001067983 = Berkshire Hathaway); for activist it's the subject issuer. In form-d-funding-leads, eight-k-events and activist you can sweep all of EDGAR instead — switch on marketWide and this list is ignored.
marketWidebooleanfalseform-d, 8-K, activistSweep every filer in the date range instead of the companies above. Turn it on and the companies list is ignored — no need to empty it.
formTypesstring[][]company-filings, search, feedFilter to these EDGAR form types (10-K, 8-K, 4, D, 13F-HR, …). Empty = all. Prefix match, so 10-K also matches 10-K/A when amendments are on.
querystring""searchFull-text query. Wrap in double quotes for an exact phrase.
queryModeselectasTypedsearchasTyped / exactPhrase / allTerms.
entityFilterstring""searchRestrict full-text search to a single entity (name / ticker / CIK).
datePresetselect""allConvenience range (last7Days, last30Days, last90Days, lastQuarter, lastYear, yearToDate) — overrides start/end when set.
startDate / endDatestring""allFiled-on/after and filed-on/before bounds, YYYY-MM-DD.
transactionCodesstring[][]form-4Keep only these SEC codes (P purchase, S sale, A award, M exercise, F tax, G gift, …).
minTransactionValueinteger0form-4Drop insider transactions whose shares × price is below this USD value.
eightKItemCodesstring[][]8-KKeep only 8-Ks reporting at least one of these item codes (2.02, 5.02, 1.01, …).
eventCategoriesselect[][]8-KKeep only these mapped categories (earnings, exec_change, m_and_a, bankruptcy, cyber_incident, …).
eightKDeepParsebooleantrue8-KFetch primary doc + exhibits for itemBodies, exhibit list, press-release text. Off = faster, headline-only.
statementTypesselect[][]financialsincome_statement / balance_sheet / cash_flow. Empty = all.
financialsFrequencyselectbothfinancialsannual (FY) / quarterly (Qn) / both.
financialsConceptsstring[][]financials, xbrl-factsExtra XBRL tags to include (e.g. InventoryNet, LongTermDebtNoncurrent).
minOfferingAmountinteger0form-dDrop offerings whose total offering amount is below this USD value.
formDIndustrystring""form-dKeep one SEC industry group (e.g. Technology, Biotechnology).
formDKeywordstring""form-dKeep only issuers whose legal name contains this keyword.
sinceAccessionNumberstring""company-filings, form-4, 8-KSkip filings at or older than this accession (e.g. 0000320193-25-000079). For incremental scheduled runs.
includeAmendmentsbooleantrueallInclude amended forms (10-K/A, 4/A, D/A, …).
includeDocumentTextbooleanfalsecompany-filings, searchFetch the primary doc and attach a plain-text excerpt (documentExcerpt). Slower.
maxFilingsPerCompanyinteger1000company-filings, form-4, form-13fCap filings pulled per company.
maxItemsinteger50allMax records output across the whole run (1–100000).
contactEmailstring""allYour email — the SEC requires a descriptive contact in the User-Agent. See below.
proxyConfigurationobjectoffallLeave it alone — the actor needs no proxy. Present only as an escape hatch if you ever hit a collective rate limit.

About contactEmail (SEC User-Agent policy)

The SEC's fair-access policy requires every automated API consumer to identify itself with a descriptive User-Agent containing contact information. Set contactEmail to a real address you monitor. If you leave it blank, the actor falls back to a generic identifier, which the SEC may rate-limit more aggressively or block. This is the only "credential-like" input — it is not a login and grants no access; it simply identifies you as a good citizen of a free public API.

Input examples

1. Company filings — Apple & Microsoft 10-K / 10-Q / 8-K since 2023

{
"mode": "company-filings",
"companies": ["AAPL", "MSFT"],
"formTypes": ["10-K", "10-Q", "8-K"],
"startDate": "2023-01-01",
"maxItems": 100,
"contactEmail": "you@example.com"
}

2. Financials — Apple annual income statement + balance sheet

{
"mode": "financials",
"companies": ["AAPL"],
"financialsFrequency": "annual",
"statementTypes": ["income_statement", "balance_sheet"],
"contactEmail": "you@example.com"
}

3. Form D funding leads — market-wide technology offerings ≥ $1M in a month

{
"mode": "form-d-funding-leads",
"marketWide": true,
"startDate": "2026-08-01",
"endDate": "2026-08-31",
"formDIndustry": "Technology",
"minOfferingAmount": 1000000,
"maxItems": 200,
"contactEmail": "you@example.com"
}

4. 13F holdings — Berkshire Hathaway's latest reported portfolio

{
"mode": "form-13f",
"companies": ["0001067983"],
"maxItems": 500,
"contactEmail": "you@example.com"
}

Output

One record per result is pushed to the dataset. Field names below are exactly what the actor emits. Samples are trimmed for readability — real records carry the full field set.

Filing (company-filings, latest-filings-feed)

{
"recordType": "filing",
"mode": "company-filings",
"cik": "320193",
"cikPadded": "0000320193",
"ticker": "AAPL",
"companyName": "Apple Inc.",
"formType": "10-K",
"baseFormType": "10-K",
"isAmendment": false,
"accessionNo": "0000320193-24-000123",
"filedDate": "2024-11-01",
"reportDate": "2024-09-28",
"period": "2024-09-28",
"acceptanceDateTime": "2024-11-01T06:01:36.000Z",
"act": "34",
"fileNumber": "001-36743",
"items": [],
"itemsDescriptions": [],
"size": 8123456,
"isXBRL": true,
"isInlineXBRL": true,
"primaryDocument": "aapl-20240928.htm",
"primaryDocDescription": "10-K",
"documentUrl": "https://www.sec.gov/Archives/edgar/data/320193/000032019324000123/aapl-20240928.htm",
"filingIndexUrl": "https://www.sec.gov/Archives/edgar/data/320193/000032019324000123/0000320193-24-000123-index.htm",
"sic": "3571",
"sicDescription": "Electronic Computers",
"stateOfIncorporation": "CA",
"exchanges": ["Nasdaq"],
"scrapedAt": "2026-09-03T12:00:00.000Z"
}

Full field list: recordType, mode, cik, cikPadded, ticker, companyName, formType, baseFormType, isAmendment, coreType, accessionNo, filedDate, reportDate, period, acceptanceDateTime, act, fileNumber, filmNumber, items, itemsDescriptions, size, isXBRL, isInlineXBRL, primaryDocument, primaryDocDescription, documentUrl, filingIndexUrl, filingDetailsUrl, sic, sicDescription, stateOfIncorporation, exchanges, scrapedAt. In latest-filings-feed an updated timestamp from the feed entry is added, and the fields that require a company lookup (sic, exchanges, …) may be null. With includeDocumentText, a documentExcerpt field is added.

Financials (financials)

Metrics are grouped per fiscal period. Trimmed to a few metrics here:

{
"recordType": "financials",
"cik": "320193",
"ticker": "AAPL",
"companyName": "Apple Inc.",
"entityName": "Apple Inc.",
"fiscalYear": 2024,
"fiscalPeriod": "FY",
"form": "10-K",
"periodStart": "2023-10-01",
"periodEnd": "2024-09-28",
"filed": "2024-11-01",
"accessionNo": "0000320193-24-000123",
"frame": "CY2024",
"currency": "USD",
"metrics": {
"revenue": 391035000000,
"netIncome": 93736000000,
"operatingIncome": 123216000000,
"epsDiluted": 6.08,
"totalAssets": 364980000000,
"totalLiabilities": 308030000000,
"stockholdersEquity": 56950000000,
"operatingCashFlow": 118254000000,
"sharesOutstanding": 15115823000
},
"metricUnits": {
"revenue": "USD",
"netIncome": "USD",
"epsDiluted": "USD/shares",
"sharesOutstanding": "shares"
},
"metricAsOf": null,
"sic": "3571",
"sicDescription": "Electronic Computers",
"scrapedAt": "2026-09-03T12:00:00.000Z"
}

Available metrics keys: revenue, costOfRevenue, grossProfit, operatingIncome, netIncome, incomeBeforeTax, epsBasic, epsDiluted, researchAndDevelopment, totalAssets, totalLiabilities, stockholdersEquity, cashAndEquivalents, operatingCashFlow, capitalExpenditures, longTermDebt, sharesOutstanding — plus any tags you add via financialsConcepts. A metric absent from a given filing is simply omitted from metrics.

Reading the numbers correctly:

  • currency is the company's own reporting currency, not always USD. Foreign private issuers filing 20-F/40-F are covered under both accounting standards, so a European filer comes back in EUR and a Japanese one in JPY, with the same metric names. metricUnits carries the unit of every individual metric (USD, EUR, USD/shares for per-share figures, shares for counts), so a figure is never left to be guessed at.
  • fiscalYear / fiscalPeriod describe the period itself, matched to periodStart/periodEnd, and follow the company's own fiscal calendar — for a retailer whose year closes in January, or a filer whose year closes in March, the quarter numbering starts at the beginning of its year, not in January.
  • A record's figures come from one filing wherever they can. form, filed and accessionNo name that filing — the one reporting this period most completely, the most recent when several are equally complete. It may be an annual report, an amended one, or an earnings release. Keeping a period together matters: figures drawn from different filings would put an EPS restated for a stock split next to a share count that was not.
  • A metric keeps the same accounting concept across every year, so a series stays comparable. Where a company restates a period — adopting a new revenue standard, for instance — the restated figure is used, which can differ from the number printed in that year's original annual report. That is also why a small share of figures (around 2% in our checks) is drawn from a filing other than the one named: it is where the comparable version of that metric lives.
  • Figures are as reported — the SEC's data is reproduced, not corrected. Share counts and per-share figures are only split-adjusted insofar as the filings themselves adjust them, so a long series can cross a split. Where a company mis-tagged a figure in its own filing, that figure is what the SEC publishes and what you get.
  • metricAsOf appears (otherwise null) when a metric is dated differently from the period — a share count taken from a filing's cover page is as of the filing date, a few weeks after the period closed.

13F holding (form-13f)

One record per position in the manager's INFORMATION TABLE:

{
"recordType": "holding13F",
"managerCik": "1067983",
"managerCikPadded": "0001067983",
"managerName": "BERKSHIRE HATHAWAY INC",
"managerTicker": null,
"periodOfReport": "2024-06-30",
"cusip": "037833100",
"issuerName": "APPLE INC",
"titleOfClass": "COM",
"shareCount": 400000000,
"sshPrnamtType": "SH",
"value": 84248000000,
"valueUnit": "dollars",
"valueUsd": 84248000000,
"putCall": null,
"investmentDiscretion": "DFND",
"otherManager": "4,8,11",
"votingAuthoritySole": 400000000,
"votingAuthorityShared": 0,
"votingAuthorityNone": 0,
"portfolioPercent": 30.15,
"portfolioValueTotal": 279969000000,
"portfolioValueTotalUsd": 279969000000,
"holdingsCount": 41,
"formType": "13F-HR",
"accessionNo": "0000950123-24-008740",
"filedDate": "2024-08-14",
"acceptanceDateTime": "2024-08-14T16:20:11.000Z",
"infoTableDocument": "infotable.xml",
"documentUrl": "https://www.sec.gov/Archives/edgar/data/1067983/000095012324008740/infotable.xml",
"scrapedAt": "2026-09-03T12:00:00.000Z"
}

Reading the values: the SEC changed the reporting scale, so value alone is not comparable across years — filings from 2023-01-03 onward report whole dollars, earlier ones report thousands. value is the figure exactly as filed, valueUnit says which scale it is on (dollars, thousands, or unknown when the filing date is missing), and valueUsd is the figure converted to dollars — use that one to compare or rank positions across periods. portfolioValueTotalUsd is the same conversion applied to the portfolio total. When the scale cannot be established, the converted fields are null rather than a guess.

Form D funding lead (form-d-funding-leads)

{
"recordType": "fundingLead",
"cik": "2147185",
"issuerName": "Valhalla Sports Collectibles Fund I, LP",
"entityType": "Limited Partnership",
"jurisdictionOfInc": "DELAWARE",
"yearOfInc": "2026",
"address": {
"street1": "7952 NW 115TH WAY",
"street2": null,
"city": "PARKLAND",
"stateOrCountry": "FLORIDA",
"zipCode": "33076"
},
"phone": "561-300-6534",
"industryGroup": "Pooled Investment Fund",
"revenueRange": "Decline to Disclose",
"isAmendment": true,
"dateOfFirstSale": "2026-07-16",
"minimumInvestment": 100000,
"totalOfferingAmount": 10000000,
"totalOfferingAmountRaw": "10000000",
"totalAmountSold": 550000,
"totalRemaining": 9450000,
"numberOfInvestors": 4,
"relatedPersons": [
{
"name": "Stuart Lieblein",
"firstName": "Stuart",
"lastName": "Lieblein",
"relationships": [
"Executive Officer",
"Promoter"
],
"city": "Parkland",
"state": "FLORIDA"
},
{
"name": "Medon Michaelides",
"firstName": "Medon",
"lastName": "Michaelides",
"relationships": [
"Executive Officer",
"Promoter"
],
"city": "Parkland",
"state": "FLORIDA"
}
],
"formType": "D/A",
"fileNumber": "021-592198",
"filedDate": "2026-09-11",
"accessionNo": "0002147185-26-000002",
"documentUrl": "https://www.sec.gov/Archives/edgar/data/2147185/000214718526000002/primary_doc.xml"
}

Full field list also includes: investmentFundType, isAmendment, isMoreThanOneYear, isBusinessCombination, salesCommissions, findersFees, grossProceedsUsed, acceptanceDateTime, filingIndexUrl. When the offering amount is "Indefinite", totalOfferingAmount is null and the literal value is preserved in totalOfferingAmountRaw.

Other record shapes (field lists)

  • insider (form-4-insider): recordType, cik, ticker, issuerName, insiderName, insiderCik, insiderTitle, isDirector, isOfficer, isTenPercentOwner, isOther, insiderCity, insiderState, formType, accessionNo, filedDate, acceptanceDateTime, periodOfReport, transactionCount, transactions[], documentUrl, filingIndexUrl, scrapedAt. Each entry in transactions[]: derivative, securityTitle, transactionDate, code, codeLabel, formType, acquiredDisposed, shares, pricePerShare, value, sharesOwnedAfter, directOrIndirect (+ conversionOrExercisePrice, exerciseDate, expirationDate, underlyingSecurity, underlyingShares for derivative rows).

  • activistStake (activist): recordType, schedule (13D/13G), formType, isAmendment, isPassive, filingType, subjectCompany, subjectCik, subjectTicker, filer, filerCik, allFilers[], cusip, percentOwned, sharesOwned, purpose (13D only), eventDate, accessionNo, filedDate, acceptanceDateTime, fileNumber, documentUrl, filingIndexUrl, scrapedAt.

  • xbrlFact (xbrl-facts): recordType, cik, cikPadded, ticker, companyName, entityName, taxonomy, concept, label, description, unit, value, periodStart, periodEnd, instant, fiscalYear, fiscalPeriod, form, accn, filed, frame, scrapedAt.

    In this mode fiscalYear/fiscalPeriod are passed through exactly as the SEC tags them — they identify the filing a datapoint was printed in, not the period it covers, so an annual report's comparative figures all carry that report's year. Use periodStart/periodEnd for the period itself, or use financials mode, which resolves this for you.

  • searchHit (search): recordType, mode, cik, ticker, companyName, allFilers[], formType, rootForms[], accessionNo, fileNumber, filedDate, period, fileType, fileDescription, items[], sic, businessLocation, businessState, incState, relevanceScore, documentUrl, filingIndexUrl, scrapedAt.

  • eightKEvent (eight-k-events): the filing fields plus itemCodes[], itemLabels[], eventCategories[], boolean flags (cyberIncidentFlag, auditorChangeFlag, restatementFlag, bankruptcyFlag, delistingFlag, officerDepartureFlag, materialAgreementFlag, earningsFlag, mAndAFlag, hasFinancialStatements), and — when eightKDeepParse is on — itemBodies{}, exhibits[], pressReleaseText, bodyTextLength.


Pricing

This actor is pay-per-event: you are charged for each record it writes to the dataset, priced by what that record costs to produce. Bulk index rows are cheap; records that required fetching and parsing a separate document cost more.

You getPrice eachPer 1,000
Filing row (company-filings, latest-filings-feed)$0.008$8
Full-text search hit (search)$0.008$8
Financial period (financials)$0.05$50
Raw XBRL fact (xbrl-facts)$0.0008$0.80
Insider transaction (form-4-insider)$0.02$20
13F holding (form-13f)$0.015$15
Activist stake (activist)$0.08$80
Form D funding lead (form-d-funding-leads)$0.08$80
8-K event (eight-k-events)$0.04$40
Actor start$0.01 per run

What that means in practice: a company's full annual financial history is about $0.96, Berkshire's complete 13F portfolio about $1.82, a 50-filing default run $0.41.

Use maxItems and the date/form/value filters to cap spend precisely — maxItems is a hard stop, so the most a run can cost is your item limit times the price above, plus the start fee.

The underlying data comes from the SEC's free public APIs — there are no third-party data fees, no subscription, and no key to buy. You pay only for the compute and the results you actually pull through Apify.


Use cases

  • Fundamental research — build a normalized time series of revenue, margins, EPS, and balance-sheet items across companies (financials), or pull the raw XBRL facts for your own modeling (xbrl-facts).
  • Insider & institutional tracking — monitor Form 4 buys/sells by executives and 10% owners (form-4-insider) and reconstruct any institutional manager's quarterly portfolio and position changes (form-13f).
  • VC / funding-lead generation — enumerate fresh Reg D private placements market-wide by industry, geography, and offering size, with issuer contacts and named executives/directors (form-d-funding-leads).
  • Activist monitoring — track new 13D (active) and 13G (passive) beneficial-ownership stakes in a target issuer, including the 13D Item 4 purpose narrative (activist).
  • Compliance & disclosure surveillance — watch a watchlist of companies for new filings and material 8-K events (restatements, auditor changes, delistings, cyber incidents, exec departures) on a schedule using sinceAccessionNumber for clean incrementals.

Honest limitations

We'd rather set expectations correctly than oversell.

  • All data is the SEC's official public data. Every field is derived from the SEC's free, keyless dissemination APIs (submissions, XBRL companyfacts, full-text search, the Atom feed, and the filing archives). It's reliable and authoritative, but it's exactly what the SEC publishes — no more, no less.
  • No AI "summaries" or "scores." Some competing actors advertise AI-generated filing summaries, sentiment, or risk scores. Those are derived UX layers that require you to bring your own LLM API key, and they are not raw SEC data — they are out of scope here by design. This actor returns the underlying structured facts you'd feed such a layer, not a synthesized opinion about them.
  • Some fields are legitimately absent on specific filings, and we surface that as null rather than guessing. Examples: a Form D offering marked "Indefinite" yields totalOfferingAmount: null (the raw string is kept in totalOfferingAmountRaw, and minOfferingAmount then judges it by totalAmountSold instead, so an indefinite raise still has to clear your threshold); an older 13D/13G whose cover page isn't cleanly machine-readable may return percentOwned/sharesOwned/cusip as null (structured primary_doc.xml on post-2024 filings is preferred when present); a company that doesn't file XBRL has no financials/xbrl-facts output.
  • Full-text search covers filings from 2001 onward (an EDGAR limitation) and is hard-capped by EDGAR at 10,000 results per query — narrow with form types and date ranges for complete coverage. Company filing history via company-filings goes back to a company's earliest EDGAR submission.
  • Throughput is bounded by the SEC's fair-access policy (~8 req/s here, under the 10 req/s limit). Very large pulls take proportionally longer — this is intentional and keeps you in good standing with the SEC.

FAQ

Do I need an API key? No. SEC EDGAR's APIs are free and keyless. The SEC does require a descriptive User-Agent with contact information — provide your address in contactEmail. That's not a login and grants no special access; it just identifies you.

Which companies and regions are covered? U.S. SEC registrants — any entity that files with EDGAR (domestic and foreign private issuers that report to the SEC).

How fresh is the data? As fresh as EDGAR itself. Filings appear through the same real-time dissemination endpoints the SEC publishes to; the latest-filings-feed mode reflects the newest accepted filings.

Do I need a proxy? No. The SEC APIs are public and work fine over a direct connection — the SEC actually wants you identified, not hidden. An optional Apify datacenter proxy is available only if you hit collective rate limits.

How do I run this on a schedule and only get new filings? Set a schedule in Apify, and pass the last accession number you processed as sinceAccessionNumber (supported in company-filings, form-4-insider, and eight-k-events). The run will skip everything at or older than that accession. Date presets like last7Days are also handy for recurring runs.

Can I get several companies at once? Yes — put multiple tickers/CIKs/names in companies. For full-text search, use companies to scope to several filers, or entityFilter for a single one.

Why is a metric or field missing? Because the SEC filing didn't contain it. Absent values are returned as null (or omitted from metrics) rather than invented — see Honest limitations.