FCC APIapps.fcc.gov ↗
Search FCC EAS granted filings by grantee code, product code, or date range. Retrieve public exhibits and photo attachments for any FCC ID.
What is the FCC API?
This API exposes 2 endpoints covering the FCC Equipment Authorization System (EAS), letting you search granted filings and retrieve their public exhibit documents. The search_filings endpoint accepts grantee code, product code, and grant date range filters, returning rows with FCC ID, applicant name, frequency range, and exhibit list URLs. The get_exhibits endpoint resolves those URLs into a full list of titled documents, attachment URLs, and equipment metadata for any specific filing.
curl -X GET 'https://api.parse.bot/scraper/2dbf5a8e-9975-447e-95eb-3c4d76cb3139/search_filings?grantee_code=BKE&product_code=HAC013' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace apps-fcc-gov-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: FCC EAS Equipment Authorization API — bounded, re-runnable."""
from parse_apis.apps_fcc_gov_api import FccEas, InputFormatInvalid
client = FccEas()
# Search filings for a known grantee (Nintendo) and product code.
for filing in client.filings.search(grantee_code="BKE", product_code="HAC013", limit=5):
print(filing.fcc_id, filing.applicant_name, filing.application_purpose)
print(f" freq: {filing.lower_frequency_mhz}–{filing.upper_frequency_mhz} MHz")
# Drill into the first filing's full exhibit report.
filing = client.filings.search(grantee_code="BKE", product_code="HAC013", limit=1).first()
if filing is not None:
try:
report = filing.get_exhibits()
except InputFormatInvalid:
print("Could not retrieve exhibits — invalid filing URL")
else:
print(f"\n{report.fcc_id}: {report.total_public_exhibits} public exhibits")
print(f" equipment: {report.equipment.equipment_description} ({report.equipment.equipment_class})")
print(f" grantee: {report.equipment.grantee_name}, granted {report.equipment.grant_date}")
# List all exhibits with their attachment URLs.
for exhibit in report.exhibits:
print(f" [{exhibit.display_type}] {exhibit.exhibit_type}: {exhibit.title}")
print(f" url: {exhibit.attachment_url} available: {exhibit.date_available}")
# Photo-specific exhibits are pre-filtered.
for photo in report.photo_exhibits:
print(f" photo: {photo.title} -> {photo.attachment_url}")
print("exercised: filings.search / filing.get_exhibits")
Searches the FCC Equipment Authorization System for granted filings. At least one of grantee_code, product_code, grant_date_from or grant_date_to must be supplied. Each returned row is one frequency-range line of the FCC results table, so a single application can appear as several rows sharing the same application_id and fcc_id but with different lower/upper frequencies. Every row carries the exact exhibit list, exhibit summary, grant form, application form and correspondence page URLs for that filing; exhibit_list_url is the input for get_exhibits. Paginated as a true offset over the FCC result stream: limit rows per call (1-100, default 20), offset is the zero-based start row (default 0), and page (1-based) is an alternative that overrides offset with (page-1)*limit. total_results is the FCC's own match count; has_more/next_offset describe the continuation. A search the FCC reports as having no matching applications returns an empty filings list with total_results 0. One round trip per call.
| Param | Type | Description |
|---|---|---|
| page | integer | 1-based page number; when given it overrides offset with (page-1)*limit. |
| limit | integer | Rows per call, 1 to 100. |
| offset | integer | Zero-based index of the first row to return. |
| grantee_code | string | FCC grantee code: the first 3 characters of the FCC ID (or first 5 when the FCC ID begins with a digit). Case-insensitive. |
| product_code | string | Product code: the remaining characters of the FCC ID after the grantee code (1-14 alphanumeric characters or hyphens). Case-insensitive. |
| grant_date_to | string | Latest final action (grant) date to include, ISO date YYYY-MM-DD. |
| grant_date_from | string | Earliest final action (grant) date to include, ISO date YYYY-MM-DD. |
{
"type": "object",
"fields": {
"limit": "integer, rows requested",
"offset": "integer, zero-based start row of this call",
"filings": "array of filing rows (one per frequency-range line): application_id, fcc_id, grantee_code, applicant_name, address/city/state/country/zip_code, application_purpose, final_action_date (ISO), lower_frequency_mhz/upper_frequency_mhz (numbers), and the exact exhibit_list_url, exhibit_summary_url, grant_form_url, application_form_url, correspondence_url",
"criteria": "object echoing the normalized search filters (null when not supplied)",
"has_more": "boolean, whether rows exist beyond this call",
"returned": "integer, rows in filings",
"next_offset": "integer offset for the next call, or null when exhausted",
"total_results": "integer, FCC's total count of matching rows"
},
"sample": {
"data": {
"limit": 20,
"offset": 0,
"filings": [
{
"city": "Minami-Ku, Kyoto",
"state": "N/A",
"fcc_id": "BKEHAC013",
"address": null,
"country": "Japan",
"zip_code": "601-8501",
"grantee_code": "BKE",
"applicant_name": "Nintendo Co., Ltd.",
"application_id": "sXEhueLBsxG27nCL+bnkBg==",
"grant_form_url": "https://apps.fcc.gov/oetcf/tcb/reports/Tcb731GrantForm.cfm?mode=COPY&RequestTimeout=500&tcb_code=&application_id=sXEhueLBsxG27nCL%2BbnkBg%3D%3D&fcc_id=BKEHAC013",
"exhibit_list_url": "https://apps.fcc.gov/oetcf/eas/reports/ViewExhibitReport.cfm?mode=Exhibits&RequestTimeout=500&calledFromFrame=N&application_id=sXEhueLBsxG27nCL%2BbnkBg%3D%3D&fcc_id=BKEHAC013",
"final_action_date": "2017-01-19",
"correspondence_url": "https://apps.fcc.gov/oetcf/eas/reports/ViewCorrespondenceReport.cfm?calledFromFrame=N&RequestTimeout=500&application_id=sXEhueLBsxG27nCL%2BbnkBg%3D%3D&fcc_id=BKEHAC013",
"application_purpose": "Original Equipment",
"exhibit_summary_url": "https://apps.fcc.gov/oetcf/eas/reports/ViewExhibitReport.cfm?mode=Sum&calledFromFrame=N&RequestTimeout=500&application_id=sXEhueLBsxG27nCL%2BbnkBg%3D%3D&fcc_id=BKEHAC013",
"lower_frequency_mhz": 2402,
"upper_frequency_mhz": 2480,
"application_form_url": "https://apps.fcc.gov/tcb/GetTcb731Report.do?applicationId=sXEhueLBsxG27nCL%2BbnkBg%3D%3D&fcc_id=BKEHAC013"
}
],
"criteria": {
"grantee_code": "BKE",
"product_code": "HAC013",
"grant_date_to": null,
"grant_date_from": null
},
"has_more": false,
"returned": 2,
"next_offset": null,
"total_results": 2
},
"status": "success"
}
}About the FCC API
Searching Granted Filings
The search_filings endpoint requires at least one of grantee_code, product_code, grant_date_from, or grant_date_to. The grantee code is the first 3 characters of an FCC ID (or first 5 when the ID begins with a digit); the product code is everything after that. Results are paginated via limit, offset, or a 1-based page parameter. Each row in the filings array represents one frequency-range line from the FCC results table, meaning a single application can appear multiple times — once per frequency band. Each row includes application_id, fcc_id, grantee_code, applicant_name, address fields, and an exhibit_list_url for downstream use.
Retrieving Exhibits
Pass the exhibit_list_url from any search_filings row to get_exhibits to get all public exhibits for that filing. Each exhibit item carries title, exhibit_type, attachment_url, date_submitted, display_type (file format), and date_available. The response also surfaces a photo_exhibits array that pre-filters rows where exhibit_type is Internal Photos or External Photos, making device image retrieval straightforward without client-side filtering. The equipment object adds equipment_description, equipment_class, grantee_name, grant_date, and a grant_form_url.
Pagination and Result Counts
The search_filings response includes total_results (FCC's total matching row count), returned (rows in this response), has_more (boolean), and next_offset to support sequential pagination. The criteria field echoes back the normalized filter values actually applied, which is useful for confirming case normalization of grantee or product codes. get_exhibits returns total_public_exhibits as FCC's stated count of public exhibits, alongside the source_filing_url confirming the exact filing page used.
The FCC API is a managed, monitored endpoint for apps.fcc.gov — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when apps.fcc.gov changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official apps.fcc.gov API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Look up all FCC-granted filings for a manufacturer by grantee code to audit authorized device models.
- Retrieve internal and external photo exhibits for a device via photo_exhibits to inspect hardware before procurement.
- Monitor new equipment authorizations within a date window using grant_date_from and grant_date_to.
- Resolve FCC IDs found on physical devices back to full applicant name, address, and grant metadata.
- Download test reports and compliance documents by following attachment_url links from get_exhibits.
- Build a searchable index of RF equipment authorizations filtered by product_code patterns.
- Cross-reference grant_date and equipment_class fields to track authorization trends across device categories.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.