Skip to main content

AboutMethodology

Methodology

Last updated

This page explains how each data product on CalGunHub is built: where the data comes from, how often it is updated, and what its limits are. Every product is built from public records. None of it is legal advice.

Handgun roster

Source: the California Department of Justice Roster of Certified Handguns.

  • Search results. The roster check and the gun library search a copy of the DOJ list captured on a stated date (currently Nov 1, 2026). That copy is refreshed by hand, so it is updated as the source changes, not on a fixed schedule. The roster page shows its as-of date.
  • Change tracking. A scheduled job reads the live DOJ page once a day (14:00 UTC), saves a snapshot, and compares it with the previous snapshot. The differences appear on the roster changes page.
  • "Added" means a model is in the newest snapshot and was not in the one before it. "Removed" means a model was in the previous snapshot and is not in the newest one. Additions and removals publish automatically, labelled as detected automatically. A change to one of the marker symbols DOJ prints next to a model is held for a person to review first.
  • Safeguard. A day's snapshot is accepted only when the number of rows we read equals the count DOJ prints on its own page. If they differ, that run records nothing.

Known limits

  • A change is dated the day we detected it, which can be later than the day DOJ made it.
  • The first snapshot is a baseline. Changes from before tracking began are not in the change log.
  • The search copy can be older than the daily snapshots. Check the as-of date on the page.
  • Counts differ by definition: DOJ's page listed 1,004 handguns at the last capture and we count 1,003 unique models, because DOJ lists one model twice.
  • The DOJ roster is the official record. Confirm a model there before you rely on it.

Roster history

Source: archived copies of the DOJ roster page (Internet Archive snapshots) and DOJ's own removal lists. Each data point records the snapshot it came from.

  • Roster history is a reconstruction, and it is labelled Draft. A snapshot can only show that a model was listed, or not listed, on that snapshot's date.
  • Listing and removal dates are therefore shown as ranges between two snapshots. A single exact date appears only where an official DOJ document states it.
  • Update cadence: updated as sources change.

Bill tracker

Source: Open States legislative data for the California Legislature. The official record of every bill is on California Legislative Information.

  • A scheduled job runs once a day (13:00 UTC). It searches the current session for firearm keywords (firearms, ammunition, handgun, assault weapon, concealed carry, gun) and updates each bill's status and last action date on the bills page.
  • Known limits: a keyword search can miss a relevant bill or include an unrelated one, and a status can trail the Legislature's own site by a day or more. The official record governs.

Court case pages

Source: court dockets and filings. Case pages cite the courts' own sites (for example the U.S. Supreme Court and the Ninth Circuit) and docket copies hosted by CourtListener.

  • The case library is compiled from docket research and is labelled Draft. Its records are marked unverified in our data.
  • A case shows a status only when a docket source supports it. Otherwise the page says the status is under verification, or that sources disagree.
  • Update cadence: updated as sources change. Each case page shows when its research was retrieved.

CCW county data

Source: information published by each county's issuing authority (a sheriff or police department), compiled by research with sources recorded per field.

  • The county carry-permit pages cover all 58 counties. The underlying research is a draft and has not been fully verified. Confirm fees and steps with the issuing authority.
  • Wait times are estimates. A county's figure on the wait-time tracker starts as a research estimate from published information. Where a county has approved timelines submitted by applicants, the figure is the average of those reports instead.
  • Self-reported caveat. Applicant timelines are self-reported. We cannot check them against county records, a small number of reports can move an average a lot, and people who choose to report may not be typical. Each figure states which kind it is and how many reports it rests on.
  • Update cadence: updated as sources change.

State fee table

Source: the California Department of Justice, Bureau of Firearms: dealer FAQs, the fee schedule, the Firearm Safety Certificate FAQs and the DROS fee regulation, plus the Penal Code.

  • The state fee schedule lists each fee with the source for each value. The values were checked against those sources in an audit dated Oct 4, 2026, and a value is marked verified only where that audit confirmed it.
  • These are state fees. A dealer's own fees are separate and vary.
  • Update cadence: updated as sources change.

Open datasets

Four datasets are also published as JSON files under /data/open/. Each file holds the same rows the page shows, with a name, a description, its source and the date the file was generated. The files are regenerated every time the site is built.

A dataset marked draft carries the same Draft status as the page it comes from. No separate license has been chosen for these files yet, so the Terms apply.

Errors and questions

If a number or a status here looks wrong, see the corrections page for how to report it. Our editorial standards explain the Draft and Last verified labels.

Responsible for this page: CalGunHub editorial desk. Reach the desk through the contact page. Informational content on this site is not legal advice.