Blog · October 17, 2026

F-1 to H-1B: cap-gap details, the 60-day grace period after an H-1B job ends, and the documents to keep

Summarized from official sources, checked October 17, 2026. Official pages change; follow the linked source if it differs from this summary.

This post is for two readers:

The cap-gap basics are already on EADly's H-1B lottery guide and H-1B tracker page. Cap-gap travel is on Travel on OPT. This post covers what those pages don't: status vs. work permission, your proof, what happens if the petition fails, the H-1B grace period in detail, a date calculator, and which F-1 records to keep for a future green card.

Not legal advice. This summarizes official U.S. government sources. It is not legal or immigration advice. Cap-gap eligibility depends on your petition, and the H-1B grace period is discretionary. Talk to your DSO, your employer's immigration counsel or your own attorney. EADly is not a law firm and is not affiliated with USCIS or DHS. Last checked October 17, 2026 (PT).

Part 1: cap-gap

The rule, briefly

If you're the beneficiary of a timely filed, nonfrivolous, cap-subject H-1B petition that requests a change of status, your F-1 status and any current OPT or STEM OPT work permission are "automatically extended until April 1 of the fiscal year for which such H-1B status is being requested or until the validity start date of the approved petition, whichever is earlier" (8 CFR 214.2(f)(5)(vi)(A)). The USCIS cap-gap page says the same.

Sources differ on the end date. The regulation and the USCIS cap-gap page say April 1 or the approved start date, whichever is earlier. The USCIS Policy Manual, Vol. 2, Pt. F, Ch. 5 (current as of October 2, 2026) still says the cap-gap period "ends on October 1, the start date of the H-1B cap-subject petition." Use the date your DSO puts on your I-20, and ask your DSO if the two conflict for you.

Why the regulation link is dated. A DHS rule published July 17, 2026 (91 FR 44976) changes 8 CFR 214.2, and the "current" eCFR shows the new text. USCIS says a federal court postponed that rule on Sept 14, 2026, and that it "will proceed under the previous regulatory provisions" (USCIS, Form I-765). So we link the eCFR as of Sept 14, 2026.

Timely filed means filed "during the applicable H-1B filing period, which begins April 1 and while the student's authorized F-1 duration of status (D/S) admission was still in effect." That includes your studies, OPT and the 60-day grace period after them. The petition must also be "based on a valid, selected registration" (USCIS cap-gap page).

Not covered: cap-exempt petitions, and "a petition asking for consular processing is not eligible for a cap gap extension" (Study in the States, SEVIS Help Hub: F-1 Cap-Gap Extension). You must not have violated your F-1 status (8 CFR 214.2(f)(5)(vi)(C)). F-2 dependents are covered too ((f)(5)(vi)(D)).

Status vs. work permission: the timing that matters

Cap-gap extends your status if the petition was filed while your F-1 status was in effect. It extends your work permission only if you still had OPT or STEM OPT work authorization when the petition was filed.

If the petition was filed during your 60-day grace period, you "will receive the automatic extension of [your] F-1 status, but will not be authorized to work" (USCIS cap-gap page).

The cap_gap_eligibility function below checks this from your dates.

Your proof is an updated I-20, not a new EAD

A student "does not file an application for the extension or receive a new employment authorization document (EAD)." The "only proof of continued employment authorization currently available to an affected student is an updated Form I-20 showing an extension of OPT, issued to the student by their designated school official (DSO)." To get one, you give your DSO evidence of the timely filed petition, such as the receipt notice (USCIS cap-gap page). Keep every version of the I-20 your DSO issues.

Unemployment still counts during cap-gap

Unemployment during the cap-gap extension counts toward your 90-day or 150-day limit (USCIS Policy Manual, Ch. 5). See our unemployment days post and the calculator.

If the petition is rejected, denied, revoked or withdrawn

Cap-gap ends automatically "upon the rejection, denial, revocation, or withdrawal of the H-1B petition," or upon the denial or withdrawal of the change of status request, "even if" the petition is approved for consular processing (8 CFR 214.2(f)(5)(vi)(B)).

You then get the standard 60-day grace period to depart, but official sources describe its start differently:

SourceWhen the 60 days start
USCIS cap-gap page, one section"from the date the extension of status terminated or their program end date, whichever is later"
Same page, another section"from the date of the notification of the denial, rejection, revocation, or withdrawal of the petition"
USCIS Policy Manual, Ch. 5"from the date of the rejection, denial, withdrawal, revocation notice, or the student's program or OPT end date, whichever is later"

Ask your DSO which date applies to you. There is one exception everyone agrees on: if the change of status is denied for a status violation, misrepresentation or fraud, the grace period doesn't apply, and USCIS says such students "are required to immediately leave" (USCIS cap-gap page). Students in the grace period are not authorized to work (same page).

STEM OPT as a backup: eligible students "may apply for a STEM OPT extension during the cap-gap extension period," but not "once the cap-gap extension period is terminated ... and the student has entered the 60-day grace period" (same page). If your petition is at risk and you have a STEM degree, talk to your DSO early. See the STEM OPT extension guide.

Laid off after approval but before H-1B starts

If your change of status was approved but your H-1B employer lets you go before H-1B status starts, USCIS says "the student can retrieve any unused OPT if they have an unexpired EAD issued for post-completion OPT." For that, USCIS must receive the employer's withdrawal before the change of status takes effect. You then give your DSO a copy of the USCIS acknowledgement of withdrawal. If USCIS doesn't receive the withdrawal in time, you must stop working, file Form I-539 to request F-1 status, and wait for approval before resuming OPT (USCIS cap-gap page).

Steps while a cap-subject petition is pending

  1. Confirm the filing type with your employer or its attorney: change of status (not consular processing), cap-subject, with a start date in the next fiscal year.
  2. Compare the filing date with your dates. Before your EAD ends means status and work. Before your F-1 grace period ends means status only. The calculator below does this.
  3. Send the receipt notice to your DSO and ask for the updated I-20. Keep every version.
  4. Keep reporting employment and address changes. You are still F-1. See the SEVP Portal guide.
  5. Check your case on USCIS Case Status Online with the receipt number, and save each status change.
  6. Before you travel, read cap-gap travel. USCIS says travel while the change of status is pending abandons it.
  7. If the petition fails, note the date on the notice and contact your DSO right away (see the table above).

[SCREENSHOT NEEDED: in-app screen, Home → "Your timeline at a glance" showing a saved cap-gap review date, with fictional sample data]

[SCREENSHOT NEEDED: in-app screen, H-1B record with cap-gap information next to the saved F-1 and petition facts, fictional sample data. Caption: "EADly shows cap-gap information next to your saved facts. It does not decide whether cap-gap applies to you; confirm with your DSO."]

Part 2: after an H-1B job ends

What the regulation says

Under 8 CFR 214.1(l)(2), H-1B workers (and E-1, E-2, E-3, H-1B1, L-1, O-1 and TN workers) "and his or her dependents shall not be considered to have failed to maintain nonimmigrant status solely on the basis of a cessation of the employment on which the alien's classification was based, for up to 60 consecutive days or until the end of the authorized validity period, whichever is shorter, once during each authorized validity period." It adds: "DHS may eliminate or shorten this 60-day period as a matter of discretion," and, unless otherwise authorized, "the alien may not work during such a period." (The text is the same in the eCFR versions of Sept 14 and Oct 14, 2026.)

What that means in practice:

  • It's discretionary. USCIS's archived guidance says USCIS decides whether it applies "during the adjudication of a subsequent" filing, and that filers should ask for it in a cover letter (see below).
  • You can't work during it unless something else authorizes you.
  • Once per authorized validity period.
  • The shorter of the two dates wins: 60 days, or the end of your validity period.

What USCIS has said (on an archived page)

USCIS's page "Options for Nonimmigrant Workers Following Termination of Employment" has the most detail, but USCIS has archived it (last reviewed 01/24/2025). Treat the regulation as the primary source and this page as background. It says:

  • The period "starts the day after termination of employment, which is typically determined based on the last day for which a salary or wage is paid."
  • It applies whether the job ends "either voluntarily or involuntarily."
  • It "ends upon any departure from the United States."
  • A dependent spouse's EAD "will remain valid during the maximum 60-day grace period."

If your last day worked and your last day paid are different (for example, paid leave after your last working day), ask an immigration attorney which date applies to you. The calculator shows both dates and doesn't pick one.

Options before the grace period ends

The archived page lists these options:

  1. A new employer files a nonfrivolous H-1B petition for you. Under portability you may start work "as soon as" the petition is "properly filed," without waiting for approval. A certified Labor Condition Application is required initial evidence.
  2. Change to another status (examples include H-4, F-1 and B-2) with a timely, nonfrivolous filing. The page says this "toll[s]" unlawful presence while pending, if you didn't work without authorization and you maintained status before filing.
  3. Apply for adjustment of status, if eligible.
  4. Apply for a compelling circumstances EAD, if eligible.
  5. Otherwise, leave by the end of the grace period.

How this differs from the F-1 grace period

The F-1 period gives students "an additional 60-day period to prepare for departure from the United States or to transfer" (8 CFR 214.2(f)(5)(iv)). ICE says you can't re-enter in F-1 status during it (ICE, Travel). The H-1B period is a separate, discretionary rule that ends if you leave the U.S.

Steps if your H-1B job ends

  1. Get your separation date in writing. Ask HR for a letter with your last day worked and last day paid. Keep the final pay stub.
  2. Find your validity end date on your I-797A and your most recent I-94 (how to get it: I-94 guide). If the two differ, ask your attorney which one controls.
  3. Work out the outer date: the earlier of day 60 and your validity end. The calculator below does this.
  4. Choose a path and make sure USCIS receives the filing before that date. USCIS records the receipt date as the date the filing actually arrives at the filing location (8 CFR 103.2(a)(7)(i)).
  5. Don't work unless authorized, and don't leave the U.S. if you're relying on the grace period.
  6. Talk to an immigration attorney.

[SCREENSHOT NEEDED: in-app screen, H-1B employment record with an end date and the employment-end flag EADly shows, fictional sample data. Caption: "EADly records the date and flags it. It can't tell you which option applies; ask an attorney."]

[SCREENSHOT NEEDED: in-app screen, Quick Actions → "Something changed?"]

A small date calculator

Three functions do the date math in this post:

  • grace_period_end(last_day, validity_end) returns the earlier of last day + 60 days and the validity end. Day 1 is the day after your last day, so a last day of March 15, 2026 gives May 14, 2026, unless your validity ends first.
  • cap_gap_end(fiscal_year, approved_start) returns the earlier of April 1 of the fiscal year and the approved start date. FY2027's outer limit is 2027-04-01.
  • cap_gap_eligibility(...) roughly checks whether status and work would be extended, from the filing date, EAD end and program end. Pass none as the EAD end if you never had OPT.

Every result is labeled: "Estimate from the dates you entered. Not legal advice. USCIS decides; the grace period is discretionary."

What it doesn't check: whether the petition was nonfrivolous, based on a selected registration or filed in the filing period; whether you maintained status; and which 60-day start date applies if a petition fails. Your DSO and attorney check those.

Files (MIT license, standard library only): transition_dates.py, test_transition_dates.py, transition_dates.js, transition_dates.test.js. Download: transition_dates.py · test_transition_dates.py · transition_dates.js · transition_dates.test.js.

Python (3.9+)

"""F-1 to H-1B transition date estimates: cap-gap end, cap-gap eligibility,
and the H-1B up-to-60-day grace period end.

Estimates only. USCIS decides; the grace period is discretionary.
Sources: 8 CFR 214.1(l)(2), 8 CFR 214.2(f)(5)(vi), USCIS cap-gap page.
"""
import argparse
from datetime import date, timedelta

LABEL = ("Estimate from the dates you entered. Not legal advice. "
         "USCIS decides; the grace period is discretionary.")
FLAG = ("FLAG: your last day paid differs from your last day worked. "
        "USCIS's archived page says the period starts the day after "
        "termination of employment, typically determined by the last day "
        "for which a salary or wage is paid. Ask an immigration attorney "
        "which date applies to you.")


def grace_period_end(last_day_of_employment, validity_end):
    """Last day of the up-to-60-day grace period.

    Day 1 is the day after last_day_of_employment, so day 60 is
    last_day_of_employment + 60 days. Capped at the I-797/I-94 validity end.
    """
    if validity_end < last_day_of_employment:
        raise ValueError("validity_end is before last_day_of_employment; check your dates")
    return min(last_day_of_employment + timedelta(days=60), validity_end)


def grace_period_report(last_day_of_employment, validity_end, last_day_paid=None):
    """grace_period_end plus the label. If last_day_paid differs from the last
    day worked, both dates are shown side by side with the FLAG. Neither is picked."""
    report = {
        "by_last_day_worked": grace_period_end(last_day_of_employment, validity_end),
        "label": LABEL,
    }
    if last_day_paid and last_day_paid != last_day_of_employment:
        # min(): pay running past the validity end still stops at the validity end.
        report["by_last_day_paid"] = grace_period_end(min(last_day_paid, validity_end), validity_end)
        report["flag"] = FLAG
    return report


def cap_gap_end(fiscal_year, approved_validity_start=None):
    """Outer cap-gap date: April 1 of the fiscal year, or the approved
    petition's validity start date if that is earlier.
    FY N runs Oct 1 (N-1) to Sep 30 N, so FY2027 -> 2027-04-01."""
    april_1 = date(fiscal_year, 4, 1)
    return min(april_1, approved_validity_start) if approved_validity_start else april_1


def cap_gap_eligibility(filed_on, opt_ead_end, program_end, change_of_status, cap_subject):
    """Rough cap-gap check from dates.

    opt_ead_end: the OPT EAD end date, or the STEM EAD end date if on STEM OPT.
    Pass None if you never had OPT. program_end: program end date on the I-20.
    Does not check that the petition was nonfrivolous, based on a selected
    registration, filed in the filing period, or that you maintained status.
    """
    def result(status, work, reason):
        return {"status_extended": status, "work_extended": work, "reason": reason, "label": LABEL}

    if not change_of_status:
        return result(False, False, "consular processing is not cap-gap eligible")
    if not cap_subject:
        return result(False, False, "cap-exempt petitions are not cap-gap eligible")

    f1_grace_end = max(d for d in (opt_ead_end, program_end) if d) + timedelta(days=60)
    if filed_on > f1_grace_end:
        return result(False, False,
                      f"filed after the F-1 60-day grace period ended on {f1_grace_end}")
    if opt_ead_end and filed_on <= opt_ead_end:
        return result(True, True,
                      f"filed on or before the EAD end date {opt_ead_end}: "
                      "F-1 status and work authorization may be extended")
    return result(True, False,
                  f"filed while F-1 status was in effect (grace period runs to {f1_grace_end}) "
                  "but not during a valid EAD: status may be extended, no work authorization")


def iso_or_none(text):
    """CLI helper: 'none' (any case) -> None, otherwise a YYYY-MM-DD date."""
    return None if text.strip().lower() == "none" else date.fromisoformat(text)


def _main():
    iso = date.fromisoformat
    p = argparse.ArgumentParser(description=LABEL)
    sub = p.add_subparsers(dest="cmd", required=True)

    g = sub.add_parser("grace", help="H-1B grace period end")
    g.add_argument("last_day_worked", type=iso)
    g.add_argument("validity_end", type=iso, help="I-797 / I-94 end date")
    g.add_argument("--paid", type=iso, help="last day paid, if different")

    c = sub.add_parser("capgap-end", help="cap-gap outer date")
    c.add_argument("fiscal_year", type=int)
    c.add_argument("validity_start", type=iso, nargs="?", help="approved petition start date")

    e = sub.add_parser("eligibility", help="rough cap-gap eligibility check")
    e.add_argument("filed_on", type=iso)
    e.add_argument("opt_ead_end", type=iso_or_none,
                   help="OPT or STEM EAD end date, or 'none' if you never had OPT")
    e.add_argument("program_end", type=iso)
    e.add_argument("--consular", action="store_true", help="petition requests consular processing")
    e.add_argument("--cap-exempt", action="store_true", help="employer is cap-exempt")

    a = p.parse_args()
    if a.cmd == "grace":
        for k, v in grace_period_report(a.last_day_worked, a.validity_end, a.paid).items():
            print(f"{k}: {v}")
    elif a.cmd == "capgap-end":
        print(f"cap_gap_end: {cap_gap_end(a.fiscal_year, a.validity_start)}")
        print(f"label: {LABEL}")
    else:
        r = cap_gap_eligibility(a.filed_on, a.opt_ead_end, a.program_end,
                                change_of_status=not a.consular, cap_subject=not a.cap_exempt)
        for k, v in r.items():
            print(f"{k}: {v}")


if __name__ == "__main__":
    _main()
python3 transition_dates.py grace 2026-03-15 2028-09-30
python3 transition_dates.py grace 2026-03-15 2028-09-30 --paid 2026-03-31
python3 transition_dates.py capgap-end 2027 2026-10-01
python3 transition_dates.py eligibility 2026-04-03 2026-03-20 2025-05-15
python3 transition_dates.py eligibility 2026-06-01 none 2026-05-15

The second command prints by_last_day_worked: 2026-05-14 and by_last_day_paid: 2026-05-30, plus a flag. It doesn't choose between them.

JavaScript (Node 18+)

// F-1 to H-1B transition date estimates. Same rules as transition_dates.py.
// Dates are "YYYY-MM-DD" strings, handled in UTC so time zones can't shift a day.
// Estimates only. USCIS decides; the grace period is discretionary.

const LABEL = "Estimate from the dates you entered. Not legal advice. " +
  "USCIS decides; the grace period is discretionary.";
const FLAG = "FLAG: your last day paid differs from your last day worked. " +
  "USCIS's archived page says the period starts the day after " +
  "termination of employment, typically determined by the last day " +
  "for which a salary or wage is paid. Ask an immigration attorney " +
  "which date applies to you.";

function parse(s) {
  if (typeof s !== "string" || !/^\d{4}-\d{2}-\d{2}$/.test(s)) {
    throw new Error(`Expected a YYYY-MM-DD date, got ${s}`);
  }
  const d = new Date(s + "T00:00:00Z");
  if (isNaN(d) || d.toISOString().slice(0, 10) !== s) throw new Error(`Invalid date ${s}`);
  return d;
}

function addDays(s, n) {
  const d = parse(s);
  d.setUTCDate(d.getUTCDate() + n);
  return d.toISOString().slice(0, 10);
}

// YYYY-MM-DD strings sort the same as the dates they name.
const minDate = (a, b) => (parse(a), parse(b), a < b ? a : b);
const maxDate = (a, b) => (parse(a), parse(b), a > b ? a : b);

// Day 1 = the day after lastDayOfEmployment; capped at the I-797/I-94 validity end.
function gracePeriodEnd(lastDayOfEmployment, validityEnd) {
  if (validityEnd < lastDayOfEmployment) {
    throw new Error("validityEnd is before lastDayOfEmployment; check your dates");
  }
  return minDate(addDays(lastDayOfEmployment, 60), validityEnd);
}

function gracePeriodReport(lastDayOfEmployment, validityEnd, lastDayPaid = null) {
  const report = { byLastDayWorked: gracePeriodEnd(lastDayOfEmployment, validityEnd), label: LABEL };
  if (lastDayPaid && lastDayPaid !== lastDayOfEmployment) {
    report.byLastDayPaid = gracePeriodEnd(minDate(lastDayPaid, validityEnd), validityEnd);
    report.flag = FLAG;
  }
  return report;
}

// FY N runs Oct 1 (N-1) to Sep 30 N, so FY2027 -> "2027-04-01".
function capGapEnd(fiscalYear, approvedValidityStart = null) {
  if (!Number.isInteger(fiscalYear)) throw new Error("fiscalYear must be an integer");
  const april1 = `${fiscalYear}-04-01`;
  return approvedValidityStart ? minDate(april1, approvedValidityStart) : april1;
}

// optEadEnd: OPT EAD end, or STEM EAD end if on STEM OPT; null if you never had OPT.
function capGapEligibility({ filedOn, optEadEnd = null, programEnd, changeOfStatus, capSubject }) {
  parse(filedOn);
  const result = (statusExtended, workExtended, reason) =>
    ({ statusExtended, workExtended, reason, label: LABEL });

  if (!changeOfStatus) return result(false, false, "consular processing is not cap-gap eligible");
  if (!capSubject) return result(false, false, "cap-exempt petitions are not cap-gap eligible");

  const f1GraceEnd = addDays(optEadEnd ? maxDate(optEadEnd, programEnd) : programEnd, 60);
  if (filedOn > f1GraceEnd) {
    return result(false, false, `filed after the F-1 60-day grace period ended on ${f1GraceEnd}`);
  }
  if (optEadEnd && filedOn <= optEadEnd) {
    return result(true, true, `filed on or before the EAD end date ${optEadEnd}: ` +
      "F-1 status and work authorization may be extended");
  }
  return result(true, false, `filed while F-1 status was in effect (grace period runs to ${f1GraceEnd}) ` +
    "but not during a valid EAD: status may be extended, no work authorization");
}

module.exports = { LABEL, FLAG, gracePeriodEnd, gracePeriodReport, capGapEnd, capGapEligibility };

Worked examples (these are test cases)

CallResultWhy
grace_period_end(2026-03-15, 2028-09-30)2026-05-14Day 1 is March 16, so day 60 is May 14
grace_period_end(2026-03-15, 2026-04-30)2026-04-30The validity end comes first
grace_period_end(2026-12-20, 2029-01-01)2027-02-18Crosses the year boundary
grace_period_report(2026-03-15, 2028-09-30, last_day_paid=2026-03-31)2026-05-14 / 2026-05-30 + flagBoth shown, neither picked
cap_gap_end(2027, 2026-10-01)2026-10-01Approved, starts Oct 1
cap_gap_end(2027, None)2027-04-01Still pending: the outer limit
cap_gap_end(2027, 2026-11-15)2026-11-15Approved with a later start date
Filed 2026-04-03, EAD ends 2026-06-30, program ended 2025-05-15status yes, work yesFiled while the EAD was valid
Filed 2026-04-03, EAD ended 2026-03-20, program ended 2025-05-15status yes, work noFiled during the F-1 grace period (to 2026-05-19)
Filed 2026-05-20, EAD ended 2026-03-20status no, work noFiled after the F-1 grace period
Filed 2026-06-01, no OPT, program ended 2026-05-15status yes, work noFiled during the F-1 grace period
Any dates, consular processingstatus no, work noNot cap-gap eligible

Run the tests with python3 -m unittest test_transition_dates.py (21 tests) and node --test transition_dates.test.js (18 tests).

Part 3: documents to keep after switching from F-1 to H-1B

The strongest official reason to keep your F-1 papers is the green card application. The Form I-485 instructions (edition 09/18/26, page 10, Item 7, "Evidence of Continuously Maintaining a Lawful Status Since Arrival") apply to family-based and employment-based preference applicants and some others (religious workers, international broadcasters, diversity visa selectees). They list:

  • "Form I-797, Notice of Action, for all extensions of stay and changes of nonimmigrant status";
  • Form I-94, "including printouts of paperless I-94 admissions";
  • Form I-20, "including all pages containing notations by authorized school officials";
  • your passport admission or parole stamp.

They also say: "Include evidence for every time you entered the United States and for the time periods spent in the United States." The same instructions have category-specific exceptions (for example INA 245(k) for some employment-based applicants). Your attorney will tell you what your category needs.

DocumentWhy keep itOfficial basis
Every Form I-20, every page, including the cap-gap updateEach F-1 period and DSO notation. The cap-gap I-20 is your proof of extended work permissionI-485 instructions; USCIS cap-gap page
I-797 notices: OPT/STEM receipts and approvals, the H-1B receipt, and the I-797A or I-797BStatus changes and extensionsI-485 instructions; USCIS: Form I-797 types
Every I-94: CBP printouts and the I-94 on an I-797AEach admission and status period. USCIS describes the I-797A as "Issued to an applicant as a replacement Form I-94"I-485 instructions; USCIS: Form I-797 types
Passport pages with visas and admission stamps, including expired passportsEach entryI-485 instructions
OPT and STEM OPT EAD cardsWork authorization datesPractical record (not on the I-485 list)
Form I-983 and every evaluationYour STEM training record. The final evaluation is due within 10 days after the training endsStudy in the States, Form I-983 Overview
Offer letters, pay stubs, W-2s, SEVP Portal confirmationsShow you worked as reportedPractical record, not a stated requirement
After an H-1B job ends: a separation letter with last day worked and last day paidThe grace period start may depend on these datesArchived USCIS page

Getting missing records

  • I-94s and travel history: see our I-94 travel history post and the I-94 guide.
  • I-20s: ask the DSO at the school that issued them.
  • I-797 notices: ask the employer or attorney who filed the petition for a copy.
  • Case history: look up each receipt number on USCIS Case Status Online and save the page.

Keep it in one place with EADly

EADly is a private, local-first app for iPhone and Android, built to keep this history together:

  • I-797A and I-797B are kept as separate record types. EADly never treats an I-797B as an I-94.
  • Cap registrations are saved by season, with petitions and cap-gap information next to your saved F-1 facts.
  • An employment-end flag marks the date an H-1B job ends.
  • Saved USCIS receipt numbers open the official USCIS Case Status page. EADly does not check or monitor case status.
  • Encrypted Document Vault. Free holds 1 Vault document.
  • Readiness packets (including H-1B and attorney hand-off), and with EADly Plus, an immigration history summary PDF.

EADly doesn't decide whether cap-gap applies to you or which option fits after a job ends. It isn't a law firm.

[SCREENSHOT NEEDED: in-app screen, H-1B petition list with cap registrations saved by season, fictional sample data]

[SCREENSHOT NEEDED: in-app screen, an I-797A record and an I-797B record shown separately, fictional sample data]

[SCREENSHOT NEEDED: in-app screen, Document Vault with sample files only. Caption: "Free holds 1 Vault document."]

[SCREENSHOT NEEDED: in-app screen, Quick Actions → Readiness packets → H-1B]

[SCREENSHOT NEEDED: in-app screen, a saved USCIS receipt number with the button that opens the official USCIS Case Status page. Caption: "EADly does not monitor case status."]

Get EADly on the App Store or Google Play.

Common questions

Can I work during cap-gap?

Only if you still had OPT or STEM OPT work authorization when the petition was filed. If it was filed during your 60-day F-1 grace period, you get the status extension but not work permission (USCIS).

What proves my cap-gap work permission?

An updated Form I-20 from your DSO showing the extension. You don't get a new EAD (USCIS).

What happens if my H-1B petition is denied during cap-gap?

Cap-gap ends, and you have a 60-day grace period to depart (none after a denial for a status violation, misrepresentation or fraud). USCIS sources describe the start of those 60 days differently, so ask your DSO. You can't apply for STEM OPT once you're in that grace period.

How long can I stay after my H-1B job ends?

Up to 60 consecutive days or until your validity period ends, whichever is shorter, once per validity period, at DHS's discretion. You can't work during it unless otherwise authorized (8 CFR 214.1(l)(2)).

When does the H-1B 60-day period start?

USCIS's archived page says the day after termination of employment, "typically determined based on the last day for which a salary or wage is paid." If your last day worked and last day paid differ, ask an attorney.

What should I keep for a future green card?

Every I-20 (all pages), I-797, I-94 and passport admission stamp. The I-485 instructions ask many applicants for evidence of every entry and of lawful status since arrival (I-485 instructions).

Sources

Checked October 17, 2026 (PT). The date in brackets is the date each page showed.

Not legal advice. EADly is not a law firm and is not affiliated with USCIS or DHS.

More guides