Headless VFS Global Schengen Visa Status Tracker + EU EES calculator
Project description
vfs-tracker ๐
VFS Global Schengen Visa Status Tracker + EU EES calculator
VFS uses a Chrome-free HTTP mode by default; EES uses Selenium for the slider CAPTCHA.
What is this?
Automatically query your Schengen visa status through VFS Global and check your allowed stay duration through the EU EES system โ all headless, no browser window, no manual CAPTCHA input.
| Tool | What it does | Automated |
|---|---|---|
| VFS Tracker | Query visa application status via VFS Global | โ |
| EES Calculator | Check allowed stay duration via EU EES | โ |
Supported Environments
| Platform | Status | Notes |
|---|---|---|
| macOS (Intel / Apple Silicon) | โ | VFS works without Chrome; EES needs Chrome |
| Linux (Ubuntu / Debian / CentOS) | โ | Use --mode http for VFS in no-desktop sandboxes |
| Windows 10 / 11 | โ | VFS works without Chrome; EES needs Chrome |
| WSL2 / containers / Claude CLI sandboxes | โ | VFS HTTP mode recommended; EES may need a real Chrome runtime |
Mobile: Not directly supported (Python runtime required), but works through any AI coding agent that has Python access โ see below.
Install in AI Coding Agents
Claude Code (macOS / Linux / Windows)
# 1. Install the package
pip install vfs-tracker
# 2. Link the skill
mkdir -p ~/.claude/skills/vfs-tracker
# Create SKILL.md from the repo's SKILL.md in that directory
Codex (OpenAI)
pip install vfs-tracker
# Add to your Codex workspace skills
Cursor / Windsurf / Other VS Code-based agents
pip install vfs-tracker
# The CLI entry point will be available:
vfs-tracker isl -r "REF_NUMBER" -l "LAST_NAME"
If the official PyPI file host has SSL/network issues in a sandbox, install from a mirror instead:
pip install -U vfs-tracker -i https://mirrors.cloud.tencent.com/pypi/simple
GitHub Copilot Chat
pip install vfs-tracker
# Ask Copilot: "Query my Iceland visa status using vfs-tracker"
# It will run: python3 -m vfs_tracker isl -r "..." -l "..."
Terminal / CLI (anywhere Python 3.10+ is available)
pip install vfs-tracker
vfs-tracker isl -r "ABCD/123456/01" -l "SMITH"
# or:
python3 -m vfs_tracker isl -r "ABCD/123456/01" -l "SMITH"
Quick Start
# 1. Install
pip install vfs-tracker
# 2. Track your visa (Iceland is pre-cached)
vfs-tracker isl -r "ISL/PVG/010101/0001/01" -l "DOE"
# Track VFS and also check EES in the same run
vfs-tracker isl -r "ISL/PVG/010101/0001/01" -l "DOE" \
--ees-passport "E12345678" --ees-entry "23-09-2026" --ees-exit "04-10-2026"
# 3. Check EU EES stay duration
python3 -c "
from vfs_tracker import ees_check
r = ees_check(passport_number='E12345678', issuing_country='CHN',
destination_code='isl', entry_date='23-09-2026', exit_date='04-10-2026')
print(r['message'])
"
# 4. List all countries
vfs-tracker list
# 5. Pre-cache a new country
vfs-tracker deu --fetch-q
# 6. Diagnose local runtime/network only when something fails
vfs-tracker doctor
Usage
vfs-tracker <country_code> -r <REF> -l <NAME>
| Option | Description |
|---|---|
-r, --reference |
Application Reference Number (from VFS receipt) |
-l, --last-name |
Last Name / Surname (as on passport) |
--mode |
VFS backend: auto, http, or selenium (default: auto; force only for debugging) |
--ees-passport |
Also run EES check with this passport number |
--ees-entry |
Intended EES entry date (DD-MM-YYYY) |
--ees-exit |
Intended EES exit date (DD-MM-YYYY) |
--ees-issuing |
EES issuing country code (default: CHN) |
--no-ees |
Disable automatic EES check from environment variables |
--fetch-q |
Fetch & cache tracking endpoint for a country |
list |
Show all 29 supported Schengen countries |
How It Works
VFS status
โโ HTTP mode first: requests + certifi, no Chrome required
โโ Synchronized form tokens: __RequestVerificationToken + CaptchaDeText
โโ ddddocr with color-aware CAPTCHA preprocessing
โโ Selenium fallback when HTTP mode cannot parse a standard result
EES calculator
โโ Headless Chrome for the EU slider CAPTCHA
โโ ddddocr reads the CAPTCHA numbers
โโ Human-like slider selection
โโ Parses official Authorised stay + remaining-days result
EES CAPTCHA Solver
The EU EES calculator uses a 2-digit number selection CAPTCHA (two tiny images showing digits, slider to select the target number). Our solver:
- Extracts both images from the page
- Uses ddddocr to read the number (digit image or word image like "thirty-seven")
- Reads whether the widget asks for the highest or lowest number
- Drags the slider with human-like mouse movement (variable speed, Y-axis jitter, random pauses)
- Submits the form โ fully automated
VFS โ EES Relationship
| VFS Status | Expected EES | What it means |
|---|---|---|
| ๐จ Application Received | NOT OK | Visa not yet in EES โ normal |
| ๐ค Application Forwarded | NOT OK | Embassy hasn't entered data |
| โณ Under Process | Varies | Not reliable at this stage |
| ๐ Decision Made | OK (likely) | Visa likely approved |
| ๐ฆ Passport Dispatched | OK | Should be in the system |
Output Example
๐ vfs-tracker โ VFS Global ็ญพ่ฏ็ถๆๆฅ่ฏข
็ฎๆ ๅฝๅฎถ: ๅฐๅฒ (Iceland) (ISL)
็ณ่ฏท็ผๅท: ISL/PVG/010101/0001/01
ๅงๆฐ: DOE
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐ ๆญฃๅจๅ ่ฝฝ่ฟฝ่ธช้กต้ข...
โ
้กต้ขๅทฒๅ ่ฝฝ (17305 bytes)
โ
่กจๅๅทฒๅกซๅ
๐ ้ช่ฏ็ ่ฏๅซ: [PFKRG]
โโ Query Result โโ
๐จ ็ณ่ฏทๅทฒ้่พพ
่ฟๅบฆ: โ โ โ โ โ โ โ โ โ โ โ
Recv Fwd Review Decide Ship Done
๐ ๅๅงๆๆก๏ผ
Your visa application reference no. ISL/PVG/010101/0001/01 has been
received by Iceland Embassy in Beijing.
ๆๆๅทฒ็ป็จณ็จณไบคๅฐไฝฟ้ฆๆ้ไบ๏ผ็ฌฌไธๆญฅ่ตฐๅฎใๆฅไธๆฅๅฐฑๆฏ็ญโโ็ญพ่ฏๅฎๅฎกๆๆๆฅไธๆฅ๏ผ
ไฝ ่ฝๅ็้ฝๅๅฎไบ๏ผๆพๅฃๆฐ๏ผ่ฟๅ ๅคฉๅๅๆฅ็ไธ็ผๅฐฑๅฅฝใ
Language auto-follows your system locale (
LANG). Force Chinese withLANG=zh_CN.UTF-8 vfs-tracker isl -r ... -l ....
What's New
- 1.0.5 โ Adds Chrome-free VFS HTTP mode for Claude CLI / containers,
synchronized token handling, improved VFS CAPTCHA preprocessing,
--mode, andvfs-tracker doctor. - 1.0.4 โ Fixes EES parsing to trust only the official
Authorised stay: OK/NOT OKresult section, extractsRemaining days at the moment of entry, and can run EES after VFS when passport/travel dates are supplied. - 1.0.3 โ Surfaces the full original VFS message verbatim, plus warm, per-status encouragement (and a reapply/appeal plan once a decision is made).
- 1.0.2 โ Reliable CAPTCHA handling: uppercase normalization, fresh captcha on every retry (no more "stuck on the same captcha"), more retries.
Requirements
- Python โฅ 3.10
- Google Chrome (or Chromium) only for EES / Selenium fallback
- Internet connection
pip install vfs-tracker # installs all deps automatically
If PyPI SSL fails in a restricted network:
pip install -U vfs-tracker -i https://mirrors.cloud.tencent.com/pypi/simple
Manual dependencies if installing from source:
pip install requests certifi selenium selenium-stealth ddddocr Pillow
Linux no-desktop notes:
- Use
--mode httpfor VFS status checks to avoid Chrome/X11/d-bus issues. - If you force Selenium on Ubuntu, install Chrome/Chromium and common runtime
libraries such as
libxdamage1,libnss3,libatk-bridge2.0-0,libxkbcommon0,libgbm1, andlibasound2. - EES currently still needs a working Chrome runtime because the official EU page uses an interactive slider CAPTCHA.
Project Structure
vfs-tracker/
โโโ pyproject.toml # Package metadata + build config
โโโ README.md
โโโ SKILL.md # Claude Code / agent skill definition
โโโ src/
โ โโโ vfs_tracker/
โ โโโ __init__.py # Main tracker (VFS + EES)
โ โโโ countries.json # 29 Schengen countries
โ โโโ q_params.json # Cached tracking endpoints
โโโ references/
โโโ troubleshooting.md
License
MIT
Acknowledgments
- VFS-Helper-Bot โ inspired the Selenium approach
- ddddocr โ CAPTCHA OCR engine
- EU EES โ official short-stay calculator
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file vfs_tracker-1.0.5.tar.gz.
File metadata
- Download URL: vfs_tracker-1.0.5.tar.gz
- Upload date:
- Size: 27.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
04ec09a6c3d41ee2084eb233764ffbac2c1eca4076feb383bc326ad6b8e5756a
|
|
| MD5 |
b1db98245fb113410992ef57500eae4e
|
|
| BLAKE2b-256 |
162a5fc9d13fb171352e68c04df208d2bbd5c5656567f4a656f87ead9e4d02ce
|
File details
Details for the file vfs_tracker-1.0.5-py3-none-any.whl.
File metadata
- Download URL: vfs_tracker-1.0.5-py3-none-any.whl
- Upload date:
- Size: 24.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3b89acc3cae24eaee9173b9822a609d8ff007ee7d11a5a00a294090f833cfb00
|
|
| MD5 |
3d1e4823a329920cdf3562a5d1a2d5c0
|
|
| BLAKE2b-256 |
abfbab1fc046ac9c12a45cd4a137cdab154d9f95f9613643c7c12429c2a1e2ef
|