Skip to main content

Headless VFS Global Schengen Visa Status Tracker + EU EES calculator

Project description

vfs-tracker ๐Ÿ›‚

Headless VFS Global Schengen Visa Status Tracker + EU EES calculator
Fully automated โ€” Selenium + ddddocr + number-slider CAPTCHA solver

PyPI Python License


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) โœ… Chrome required
Linux (Ubuntu / Debian / CentOS) โœ… Chrome or Chromium required
Windows 10 / 11 โœ… Chrome required
WSL2 โœ… Needs Chrome installed in WSL

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"

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

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)
--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

Headless Chrome (no window)
  โ””โ”€ stealth.js anti-detection
  โ””โ”€ ddddocr: CAPTCHA OCR (VFS text-based)
  โ””โ”€ Custom number-slider solver (EU EES 2-digit puzzle)
  โ””โ”€ Human-like mouse drag simulation
  โ””โ”€ POST form โ†’ parse result โ†’ status card

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:

  1. Extracts both images from the page
  2. Uses ddddocr to read the number (digit image or word image like "thirty-seven")
  3. Reads whether the widget asks for the highest or lowest number
  4. Drags the slider with human-like mouse movement (variable speed, Y-axis jitter, random pauses)
  5. 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 with LANG=zh_CN.UTF-8 vfs-tracker isl -r ... -l ....


What's New

  • 1.0.4 โ€” Fixes EES parsing to trust only the official Authorised stay: OK/NOT OK result section, extracts Remaining 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)
  • Internet connection
pip install vfs-tracker  # installs all deps automatically

Manual dependencies if installing from source:

pip install selenium selenium-stealth ddddocr Pillow

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

vfs_tracker-1.0.4.tar.gz (22.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

vfs_tracker-1.0.4-py3-none-any.whl (20.3 kB view details)

Uploaded Python 3

File details

Details for the file vfs_tracker-1.0.4.tar.gz.

File metadata

  • Download URL: vfs_tracker-1.0.4.tar.gz
  • Upload date:
  • Size: 22.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for vfs_tracker-1.0.4.tar.gz
Algorithm Hash digest
SHA256 8268240ef858a8cae40233ecebd742954aa0744b6713849114e4956526a72746
MD5 bafa6a9cec1ed6f09975a6988ca7d2bd
BLAKE2b-256 e5de17e72326c1c9366cd79ee2c2a86576ce99a2d2ef3ee7345cc529ee6f8c2a

See more details on using hashes here.

File details

Details for the file vfs_tracker-1.0.4-py3-none-any.whl.

File metadata

  • Download URL: vfs_tracker-1.0.4-py3-none-any.whl
  • Upload date:
  • Size: 20.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for vfs_tracker-1.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 1fe8d0027a4f8ff32f23a47891c31164d415c838e6b12de91c0b257ee0de024b
MD5 cab3795d9dc7a0847a8af1529940fc81
BLAKE2b-256 7619c5c6bdb1f921a0495d6172c813af8c699eaad8edc90923e0b8d717ec3e1c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page