Apple Latest 10-Q PDF Downloader
Purpose
Download Apple Inc.'s most-recently-filed 10-Q (quarterly report) PDF from investor.apple.com and return:
- the local file path where the PDF was written,
- fiscal period metadata: fiscal year, fiscal quarter (1/2/3 — Apple never files a 10-Q for Q4 because Q4 is the 10-K), period-end date, filing date, and SEC accession number.
Read-only. Never submits forms, never authenticates, never modifies anything on investor.apple.com or SEC EDGAR. One round-trip to investor.apple.com's Q4-Inc feed yields the PDF URL; one round-trip to SEC EDGAR yields the canonical report-period date for fiscal-quarter computation; one round-trip to Cloudfront downloads the PDF.
When to Use
- A research/finance agent needs Apple's latest quarterly numbers as a PDF (e.g., to attach to a report, run table extraction, or hand off to an analyst).
- Periodic monitoring: re-poll daily/weekly to detect when a new 10-Q is filed (filings land roughly four weeks after each fiscal-quarter close — early February, early May, early August).
- Cross-vendor financial pipelines where the PDF (not the SEC-mandated inline-XBRL HTML) is the required artifact — Apple's IR site hosts a clean "as-converted" PDF that EDGAR itself does not provide.
Workflow
The optimal path is two public APIs + one CDN download — no browser, no auth, no proxies, no anti-bot stealth. Apple's IR page (/sec-filings/default.aspx) renders the filings list client-side via a Q4 Inc widget that AJAX-calls /feed/SECFiling.svc/GetEdgarFilingList with an embedded public apiKey. The same endpoint is freely callable from any client. SEC EDGAR's submissions JSON gives the canonical reportDate needed to compute the fiscal quarter.
-
Fetch the latest 10-Q metadata from Apple's Q4 feed. The page's public apiKey is
BF185719B0464B3CB809D23926182246(verified May 2026; rotate by re-reading from a fresh page fetch if a 401 is returned). Apple's exchange/symbol pair on this feed isCIK / 0000320193. The Quarterly-filings dropdown maps toformGroupIdList=2. Request:GET https://investor.apple.com/feed/SECFiling.svc/GetEdgarFilingList ?apiKey=BF185719B0464B3CB809D23926182246 &exchange=CIK &symbol=0000320193 &formGroupIdList=2 &excludeNoDocuments=true &pageSize=1 &pageNumber=0 &tagList= &includeTags=true &year=-1 &excludeSelection=1 &LanguageId=1Returns
{"GetEdgarFilingListResult": [ {...one filing...} ]}. The 10-Q is the only quarterly form Apple files (no10-Q/Aamendments observed in the last 24 quarters), sopageSize=1reliably returns the most-recent 10-Q. From the first (and only) result, extract:FilingDate— e.g."05/01/2026 00:00:00"(USMM/DD/YYYYformat, ignore time).FilingTypeMnemonic— sanity-check it equals"10-Q"; if you ever see"10-Q/A"(amendment) you may want to skip and grab the next item.FilingId— Apple's internal Q4 filing ID, useful to build the human-readable detail-page URLhttps://investor.apple.com/sec-filings/sec-filings-details/default.aspx?FilingId={FilingId}.DocumentList[]— find the entry whereDocumentType === "CONVPDF"and read itsUrl. This is a Cloudfront URL of the formhttps://d18rn0p25nwr6d.cloudfront.net/CIK-0000320193/{guid}.pdf. The GUID is not predictable — always read it from this response, never construct it.
-
Fetch the canonical report-period date from SEC EDGAR. Apple's CIK is
0000320193. SEC EDGAR doesn't supply PDFs but it is the authoritative source forreportDate(the fiscal-period end-date that drives Apple's fiscal-quarter labeling, not the filing date):GET https://data.sec.gov/submissions/CIK0000320193.json User-Agent: <your-app> <your-email>The SEC enforces a "polite"
User-Agentcontaining a contact email (see Gotchas). Inside the JSON,filings.recent.form[i]parallel-indexes withfilings.recent.filingDate[i],filings.recent.reportDate[i],filings.recent.accessionNumber[i], andfilings.recent.primaryDocument[i]. Find the lowestiwhereform[i] === "10-Q"(the array is sorted descending by filing date). Cross-check thatfilingDate[i]matches theFilingDatefrom step 1 (converted fromMM/DD/YYYYtoYYYY-MM-DD); if they disagree, prefer the SEC EDGAR record as authoritative and re-derive the PDF URL by filing-date match. Extract:reportDate[i]— the fiscal-period-end date inYYYY-MM-DD(e.g."2026-03-28").accessionNumber[i]— e.g."0000320193-26-000013".
-
Compute fiscal year and quarter from the report date. Apple's fiscal year ends on the last Saturday of September (verified: FY2026 ended 2026-09-26; FY2025 ended 2025-09-27 in EDGAR records). The pattern is stable and only matters for the month-bucket boundary near Sept/Oct, which has never coincided with a 10-Q period-end (10-Qs only land in Dec/Mar/Jun). The simple algorithm:
let [year, month, day] = reportDate.split('-').map(Number); let fiscal_year, fiscal_quarter; if (month >= 10) { // Oct-Dec period → fiscal Q1 of NEXT calendar year fiscal_quarter = 1; fiscal_year = year + 1; } else if (month <= 3) { // Jan-Mar → fiscal Q2 fiscal_quarter = 2; fiscal_year = year; } else if (month <= 6) { // Apr-Jun → fiscal Q3 fiscal_quarter = 3; fiscal_year = year; } else { // month is 7, 8, or 9 → no 10-Q in this range; this is the 10-K window throw new Error('Unexpected 10-Q reportDate in Q4 window: ' + reportDate); }Example:
reportDate = "2026-03-28"→ fiscal Q2 FY2026 (Apple's FY2026 = Sep 29 2025 → Sep 26 2026). -
Download the PDF. Hit the
CONVPDFURL from step 1 directly:GET https://d18rn0p25nwr6d.cloudfront.net/CIK-0000320193/{guid}.pdfNo auth, no referrer required,
application/pdfreturned. Save to a deterministic local path like/tmp/aapl-10Q-FY{fiscal_year}-Q{fiscal_quarter}.pdf(or any caller-supplied path). When running inside the browse-sh sandbox, usebrowse cloud fetch <url> --output <path>— note that for binary content the--outputflag writes a base64-encoded copy of the body; decode withBuffer.from(fs.readFileSync(path, 'utf8'), 'base64')thenfs.writeFileSync(path, decodedBuffer)to land the raw PDF on disk. The first 8 bytes should be%PDF-1.4(or similar); verify the magic bytes before reporting success. -
Emit the result. Combine fields from steps 1–4 into the JSON shape under "Expected Output" below. The
accession_numberfield comes from SEC EDGAR (step 2), thesource_urlcomes from the Q4 feed (step 1), andfile_pathis wherever you wrote the PDF (step 4).
Browser fallback
Only useful if the Q4 feed endpoint disappears or rotates the public apiKey without a refresh path. Cost: ~3 turns and a full session.
browse cloud sessions create --keep-alive(a bare session — no--verified/--proxiesneeded; the page is on Cloudflare but does not deploy anti-bot).browse open https://investor.apple.com/sec-filings/default.aspx,browse wait load,browse wait timeout 3000(the filings list AJAX-loads afterloadfires).browse get html bodyand parse with a regex for the first row whose<span class="module-sec_filing-link">10-Q</span>. Inside that row's<ul class="module-sec_download-list">, the<li class="module-sec_pdf"><a href="...">href is the Cloudfront PDF URL (a//-relative URL — prependhttps:).- The page renders
May 01, 2026etc. as the filing date in<span class="module-sec_date-text">. SEC EDGAR is still needed for thereportDateand accession number — the IR page does not expose either.
Site-Specific Gotchas
- Apple's IR site is hosted by Q4 Inc —
investor.apple.comis a Q4 platform tenant (CSS/JS ats2.q4cdn.com/470004039/, widget atwidgets.q4app.com/widgets/q4.api.1.12.18.min.js). Almost every Q4-hosted IR site exposes the same/feed/SECFiling.svc/GetEdgarFilingListendpoint with the same query-string shape — only theapiKey,symbol, and (for non-US tickers)exchangediffer. The skill pattern generalizes to any Q4-hosted issuer with minor changes. - The Q4
apiKeyis public and embedded in the page HTML. Reading the IR page once and grepping forvar Q4ApiKey = '...'produces the current key. The valueBF185719B0464B3CB809D23926182246was verified May 21, 2026 and has been stable for at least several quarters. If the API returns 401/403, refresh the key by re-fetching the page. formGroupIdList=2is the Quarterly bucket. Other known IDs from the page's<select id="secGroupings">dropdown:1,4= Annual (10-K/10-K/A),9,40= Current Reports (8-K),11,17= Proxy Filings,41,30= Registration Statements,13= Section 16 (forms 3/4/5). Pass an emptyformGroupIdList=to get every filing type.- The CONVPDF GUID is not derivable. Earlier marketing-PDF URLs on Apple's IR followed a predictable pattern (
/files/doc_earnings/{fiscalYear}/q{n}/filing/_10-Q-Q{n}-{fiscalYear}-As-Filed.pdf— these are the redirect URLs surfaced when the page was first loaded, e.g./files/doc_earnings/2024/q3/filing/_10-Q-Q3-2024-As-Filed.pdfis in the page JS as a hard-coded back-compat redirect). Modern filings (FY2025 onwards) use opaque GUID filenames atd18rn0p25nwr6d.cloudfront.net/CIK-0000320193/{guid}.pdf, and the/files/doc_earnings/...redirect endpoints return 302 to a 404 for new filings — don't trust the predictable pattern, always read the GUID from the Q4 feed. - SEC EDGAR requires a polite
User-Agent. Per SEC's fair-access policy, all programmatic clients must sendUser-Agent: <Sample Company Name> <admin@example.com>. Browser-default UAs work most of the time but the SEC reserves the right to block UAs without a contact email.browse cloud fetchdoes not let you set the UA — if you need a strict-compliance UA, use a real session viabrowse cloud sessions createthenbrowse evalto fetch viafetch(...)with a custom header, or hit the endpoint withnode's built-infetch(). - EDGAR's
reportDateis the fiscal-period END, not the start. Apple's "10-Q for the quarter ended March 28, 2026" hasreportDate = "2026-03-28". Don't confuse withfilingDate(when Apple filed with the SEC, typically 4–5 weeks after period end). - Apple's fiscal year ends on the last Saturday of September — verified from EDGAR
reportDatehistory: FY2026 ended 2026-09-26, FY2025 ended 2025-09-27, FY2024 ended 2024-09-28. This produces the unusual fiscal-Q1-of-FYNNNN spans Oct–Dec of calendar year NNNN-1. The simple month-bucket algorithm in step 3 of the workflow is correct only because Apple never files a 10-Q with areportDatein the Sep/Oct boundary (the period covering early-Oct → late-Dec gets a DecemberreportDate, never a September one). browse cloud fetch --outputwrites base64 for binary, raw text for JSON/HTML. The wrapped JSON response is automatically unwrapped to a raw text file whenContent-Typeisapplication/jsonortext/*, butapplication/pdf(and other binary types) lands as base64 — you must decode before saving as a real PDF. Verify with the%PDFmagic-bytes check.- No
10-Q/A(amendment) filings in Apple's recent history — the most recent amendment in EDGAR is from 2002. SopageSize=1onformGroupIdList=2is reliably the latest 10-Q. If a future amendment does appear, it would be returned first (sorted by filing date) and your sanity check onFilingTypeMnemonic === "10-Q"would catch it. - Apple's fiscal Q4 has no 10-Q. The annual 10-K covers Q4. If a caller asks for "latest 10-Q for fiscal Q4", the right answer is "Apple doesn't file one — see 10-K instead". Don't try to construct one.
- No anti-bot on either endpoint. Verified May 2026: both
investor.apple.com/feed/...andd18rn0p25nwr6d.cloudfront.net/CIK-.../...pdfreturn 200 frombrowse cloud fetchwith no--proxiesflag. Don't waste a residential-proxy budget here. - Beware the SEC EDGAR primary document is HTML, not PDF.
filings.recent.primaryDocument[i]for a 10-Q is the inline-XBRL.htmfile (e.g.aapl-20260328.htm), available athttps://www.sec.gov/Archives/edgar/data/320193/{accession-with-no-dashes}/{primaryDocument}. SEC EDGAR does not host a PDF — that's why Apple's IR site is the only PDF source. Don't try to derive a PDF URL from EDGAR.
Expected Output
{
"file_path": "/tmp/aapl-10Q-FY2026-Q2.pdf",
"size_bytes": 327988,
"fiscal_period": {
"fiscal_year": 2026,
"fiscal_quarter": 2,
"period_end_date": "2026-03-28",
"filing_date": "2026-05-01",
"label": "Q2 FY2026"
},
"filing": {
"form_type": "10-Q",
"accession_number": "0000320193-26-000013",
"cik": "0000320193",
"issuer_name": "Apple Inc.",
"source_url": "https://d18rn0p25nwr6d.cloudfront.net/CIK-0000320193/e0efa2e8-931f-4852-8682-25795da9f3c4.pdf",
"ir_detail_page": "https://investor.apple.com/sec-filings/sec-filings-details/default.aspx?FilingId=19398105",
"edgar_filing_index": "https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=0000320193&type=10-Q"
}
}
Single outcome shape — there is no "not found" or "ambiguous" branch for this skill because Apple files a 10-Q every quarter and the Q4 feed reliably returns the latest one. If the Q4 feed ever returns an empty GetEdgarFilingListResult: [] (never observed), fall back to the SEC EDGAR submissions JSON and surface the inline-XBRL HTML URL with an error indicating no PDF is available.