{"slug":"fcc","domain":"research","title":"FCC: who registered to ship a radio, and what they shipped","summary":"The equipment grantee register and the authorisations themselves — devices, dates and frequency bands.","help":"fcc: radio equipment authorisation, as JSON.\n\nRETURNS\n  One JSON object on stdout. `fcc` with no arguments prints both studies.\n\nTWO STUDIES, THREE ORDERS OF MAGNITUDE APART\n  `search` is the grantee register — a keyless query against an open dataset,\n  answering in about a second. Anything sold in the US that transmits needs an\n  authorisation, and its maker needs a grantee code first, so a company here has\n  committed to hardware and has not shipped it yet.\n\n  `ids` is the authorisations: which devices exist, when they were granted, and\n  on what frequencies. Those two numbers say more about what a device IS than\n  any label — 2400-2483 MHz is Wi-Fi or Bluetooth, 902-928 is industrial\n  telemetry.\n\n  `ids` IS PREVIEW AND DOES NOT CURRENTLY RETURN — use `search`. The\n  Equipment Authorization System refuses every plain client, so `ids` drives a\n  real browser, and the register's own page defeats that too: the submit\n  button's handler calls `setDDLBDescriptions()`, which throws on the\n  `modular_type` dropdown because nothing is selected in it, and the throw\n  aborts the handler before it submits. Working around that does put a request\n  in flight, but the result page has not come back inside five minutes in any\n  test. `search` is unaffected: a keyless dataset query, about a second.\n\n  `ids` DRIVES A BROWSER, about twenty seconds a lookup, because the\n  authorisation system refuses every plain client. Ask `search` first and hand\n  its grantee code to `ids`: a code identifies one company, where a name matches\n  whatever it matches.\n\nCOST\n  `search` is a dataset query kept for a week. `ids` is a browser run kept for\n  thirty days — an authorisation never changes once granted, and every miss\n  costs a run.\n\nStudies:\n  search \u003ccompany\u003e\n      grantee registrations — a company committing to ship a radio, before it has one\n  ids    \u003cgrantee_code\u003e\n      the devices this company had authorised, with dates and frequency bands; DRIVES A BROWSER, ~20s\n\nJSON to stdout, so it composes: pipe to `jq` to pick a field, or `\u003e /tmp/…` to keep it.\nRun a study with no arguments — `fcc search` — to see what it takes.\n","example_command":"fcc search acme","example_output":"","cost_class":"upstream-fetch","tier":"metered","billing_items":["signals_fcc_grantees","signals_fcc_grantees_cached","signals_fcc_ids","signals_fcc_ids_cached"],"price_per_1k_calls":0.6,"price_is_from":true,"status":"preview","commands":["fcc"],"studies":[{"call":"search","about":"grantee registrations — a company committing to ship a radio, before it has one","args":[{"name":"company","positional":true,"list":false,"hint":"partial names match"},{"name":"since","positional":false,"list":false,"hint":"registered on or after, YYYY-MM-DD"},{"name":"limit","positional":false,"list":false,"hint":"how many registrations"},{"name":"refresh","positional":false,"list":false,"hint":"true | false — ask the FCC again"}]},{"call":"ids","about":"the devices this company had authorised, with dates and frequency bands; DRIVES A BROWSER, ~20s","args":[{"name":"grantee_code","positional":true,"list":false,"hint":"3-5 characters, from `fcc search`; the exact way to ask"},{"name":"company","positional":false,"list":false,"hint":"an applicant name instead, if you have no code"},{"name":"since","positional":false,"list":false,"hint":"authorised on or after, YYYY-MM-DD"},{"name":"limit","positional":false,"list":false,"hint":"how many authorisations"},{"name":"refresh","positional":false,"list":false,"hint":"true | false — drives the browser again"}]}],"default_enabled":false,"first_seen":"2026-09-28T05:09:33.097255Z","enabled":false}
