Methodology

How we collect, store, and display USCIS data

Transparent documentation of every step from USCIS publication to your screen. If you spot an error or want to know more about a specific calculation, the Feedback widget at the bottom-left of any page goes directly to us.

Last updated: June 19, 2026

1. Data sources

Every number you see on Visa Case Times comes from one of two USCIS-published sources:

Current ranges + case inquiry dates

We collect from USCIS's official Processing Times tool at egov.uscis.gov/processing-times. For each combination of form, category, and service center or field office that USCIS publishes a number for, we capture:

  • The published processing-time range (e.g., "9 Months to 14 Months")
  • The case inquiry date (the receipt date below which USCIS will accept service requests)
  • The publication date of that snapshot

USCIS's methodology for the published range is documented on their site. In short: the range represents the time it took to complete 50% (low end) to 80% (high end) of cases of that type at that office over the previous six months. See our processing-times explainer for the full story.

Historic fiscal-year averages

For the long-term trend lines on each case page, we use USCIS's Historic Processing Times page. This source publishes the median processing time for each form and (where applicable) category, for each completed fiscal year (FY2014 onward), plus the current fiscal-year-to-date. We seed our historic table from this source and re-pull it periodically as USCIS updates older records.

2. Collection cadence

We scrape the current Processing Times tool once per weekday at approximately 9:00 AM Pacific Time. Each run captures every form-category-office combination currently published (approximately 500 rows). Snapshots are stored append-only — we never overwrite or delete a historical record.

The USCIS site uses anti-bot protection, so scrapes occasionally fail. When a day is missed, we don't backfill — the snapshot for that day simply doesn't exist. The chart honors gaps as gaps rather than interpolating across missing dates.

3. How we aggregate

Daily snapshots

For each (case, day) pair, we store the published range as a lo / hi pair of months (parsing "9 Months to 14 Months" into lo=9, hi=14). The daily line on the chart plots the midpoint of that range; the shaded band shows the lo-to-hi span.

Weekly averages

For days older than 30, we bucket daily snapshots into ISO calendar weeks (Monday-anchored). Each weekly bar shows the simple mean of all daily lo values and the simple mean of all daily hi values for that week. We use ISO week numbering so weeks are stable across year boundaries.

Fiscal-year markers

Diamond markers on the chart plot USCIS's own published fiscal-year medians (we do not derive these from our daily scrapes). USCIS occasionally restates past years — when they do, our re-pull picks up the new value.

National medians on form pages

On a form page (e.g., /form/n-400), the "National median" shown for each category is the median of the per-office published ranges across all offices that handle that category. This is our calculation, not USCIS's — USCIS publishes per-office numbers, not a national roll-up. We use median (not mean) so a single outlier office doesn't skew the top-line number.

4. Classification matching

USCIS's Historic Processing Times page categorizes some forms by classification (e.g., I-129 by "Premium Filed" vs "Non-Premium Filed"; I-485 by employment vs family vs asylum). On a given case page, we choose the historic classification that best matches the case's current category text via word-overlap scoring, with a known-good bias toward "non-Premium" for I-129 visa types where the regular processing-time history is more representative than premium.

5. Slug structure (URLs)

Each case page URL follows the pattern /case/<form>-<category-slug>-<office-slug>. Slugs are generated by lowercasing, stripping USCIS internal codes, applying common office abbreviations (SCOPS, NBC, CSC, TSC, VSC, NSC), and joining with hyphens. Multiple naming conventions across USCIS data revisions are merged to one slug per real case, so a single case has exactly one URL even if USCIS has renamed it over time.

6. Visa-name search

Users search by visa names (H-1B, E-2, EB-2, B1/B2, etc.) but USCIS publishes by form number. We maintain a translation map (≈150 visa names → relevant USCIS forms) so a search for "EB-2" surfaces I-140 and I-485 results without the user needing to know the form numbers. The map is open-ended — when a search returns zero results, we log the term and add it to the map.

7. Known limitations

  • USCIS doesn't publish everything. Some case types have no public processing-time data — we can only show what USCIS publishes.
  • The published range is statistical, not predictive. Your specific case may resolve faster or slower than the displayed range.
  • USCIS occasionally changes how it categorizes data. A category that was tracked as "Standard" one month may move to a new sub-bucket the next. We pick up the new categorization on the next scrape but historic continuity may break.
  • Scrape failures cause gaps. When a scheduled run fails, we don't backfill. Gaps appear honestly in the chart.
  • Time zones. USCIS publishes in Eastern. Our daily run is anchored to Pacific time. The "date" of a snapshot is the Pacific date when we captured it.
  • National median on form pages is a computed roll-up, not USCIS-published. It's there to make the form page useful when a form has many offices; for the authoritative per-office number, click into the specific office.

8. Storage and reproducibility

All snapshots are stored in a Postgres database (Supabase). Every record carries the run date, the case identifier, the published display string, and parsed lo/hi numbers. Because we store the raw display string alongside the parsed numbers, any future parsing change can be re-applied to historical data without re-scraping USCIS.

9. Updates to this methodology

We document material methodology changes here with the date of change. If we change how a metric is calculated, we'll update the "Last updated" date and add a note explaining what changed. We don't quietly restate past calculations.

Change history

  • 2026-06-19: Initial published methodology page.

See also: About · How USCIS processing times work · Privacy