Automating PERM Case Status Monitoring: My EB-3 Green Card Journey
My EB-3 Green Card Journey: Automating PERM Status Checks
The Immigration Process
Going through the U.S. employment-based immigration process is a journey that tests your patience in ways you never imagined. As someone pursuing an EB-3 visa (skilled worker category), I found myself navigating the complex maze of PERM labor certification - the first major step toward permanent residency.
Understanding PERM
PERM (Program Electronic Review Management) is the process where the Department of Labor certifies that there are no qualified U.S. workers available for the position offered to the foreign worker. For most employment-based green cards, including EB-3, this is a mandatory step. The process involves:
- Prevailing Wage Determination - Establishing the appropriate wage for the position
- Recruitment - Advertising the position to test the labor market
- Filing ETA Form 9089 - Submitting the PERM application
- The Wait - Processing times can range from several months to over a year
The Anxiety of Waiting
Once your PERM is filed, you’re assigned a case number (format: X-YYY-DDDDD-AAAAAA). Then comes the hardest part: waiting. The U.S. Department of Labor provides a website where you can check your case status, but manually checking every day quickly becomes tedious and anxiety-inducing.
I found myself obsessively refreshing the Flag DOL case status page, wondering if today would be the day my case moved forward. The process is opaque, timelines are unpredictable, and the stakes couldn’t be higher - your future in the country literally depends on this case.
The Solution: Automated PERM Monitoring
To preserve my sanity and get timely updates without the constant manual checking, I built a Python-based automation tool that checks my PERM status daily and sends notifications directly to my phone.
How It Works
The solution uses a headless browser approach to navigate the PERM status website, automatically handles the invisible reCAPTCHA, extracts the case status, and sends a push notification via Pushover.
Here’s the technical breakdown:
The Challenge: The PERM website uses Google’s invisible reCAPTCHA v3, which traditionally requires paid API services to solve programmatically. However, I discovered that modern headless browsers with proper stealth configurations can often bypass or auto-solve these challenges without additional costs.
The Architecture:
- Playwright - For browser automation and handling the headless Chromium instance
- Route Interception - The script intercepts the API calls made by the website to capture the case status directly
- Pushover Integration - Sends formatted notifications to my phone with all relevant case details
- Docker + Cron - Runs automatically once daily at a configurable time
Technical Implementation
The core script uses Playwright to:
- Launch a stealth-configured Chromium browser with anti-detection measures
- Navigate to the PERM case status page
- Intercept the
caseStatusAPI endpoint to capture the JSON response - Extract key details: case number, status, employer, job title, visa type, and submission date
- Format and send a Pushover notification
# Key approach: Intercept the API response instead of parsing HTML
async def handle_route(route, request):
if "caseStatus" in request.url:
await route.continue_()
response = await request.response()
if response:
api_response = await response.json()
# Process the case status data
The script runs as a Docker container with cron scheduling, making it a “set and forget” solution. It’s configured via environment variables, so no code changes are needed to customize it for different cases or notification preferences.
The Repository
You can find the complete project on GitHub: usa-green-card/perm-check
The repository includes:
- Full Python script with Playwright automation
- Docker and Docker Compose configuration
- Setup instructions for Pushover integration
- Configurable cron scheduling
- Detailed logging for troubleshooting
Quick Setup
If you’re going through the same process and want to automate your status checks:
- Sign up for Pushover (free for 7 days, then $5 one-time per platform)
- Clone the repository
- Configure your
.envfile with your case number and Pushover credentials - Run
docker compose up -d
That’s it. You’ll receive a notification every day with your current PERM status.
Reflections on the Process
Going through the PERM/EB-3 process has been one of the most stressful experiences of my life. The uncertainty, the waiting, the lack of control - it takes a toll. But building this automation tool gave me back a small sense of control. Instead of anxiously checking the website multiple times a day, I now get a single daily update and can focus on actually living my life.
For anyone else going through this process: you’re not alone. The immigration system is complex and often frustrating, but with some technical creativity, you can at least automate away the repetitive parts of the waiting game.
Current status: Still waiting, but at least now I know immediately when something changes.
Note: This tool is for personal use only. Please be respectful of the DOL website and don’t abuse the service with excessive requests. The daily check frequency is sufficient for most cases, as PERM processing doesn’t happen in real-time anyway.