A Python tool that automatically tracks the online availability of IEEE VIS conference papers on arXiv (Semantic Scholar optional). The tool scrapes paper information directly from the VIS 2026 website, maintains an incremental index showing when papers become available online with timestamps and abstracts, and can download the PDFs it finds.
New user? Follow these 4 simple steps:
- Install dependencies:
uv venv && uv pip install -r requirements.txt - Get papers:
python3 vis_paper_tracker.py --scrape - Start tracking:
python3 vis_paper_tracker.py --add-papers vis2026_papers.json - Search & see results:
python3 vis_paper_tracker.py --update --report
Daily updates: Just run python3 vis_paper_tracker.py --update --report
Current status (VIS 2026, last run 2026-09-01): 172 of 287 papers found online (59.9%), 161 PDFs downloaded.
- Automatic Web Scraping: Fetches papers directly from IEEE VIS 2026 website with proper encoding handling
- Multi-Source Search: Searches arXiv by default, with Semantic Scholar available via
--sources - Paper Classification: Detects Full Papers and Short Papers (posters are excluded)
- Session Tracking: Captures conference session information
- Progress Logging: Optional detailed logging with statistics
- PDF Downloads: Optional fetching of arXiv PDFs into a single folder
- Data Export: JSON index and CSV files for analysis
- Analysis Tools: Built-in author analysis with statistics and visualizations
- Incremental Updates: Tracks discovery dates and maintains search history
- Robust Progress Saving: Saves progress every 10 papers to prevent data loss
- Data Cleaning: Built-in author name formatting and encoding issue fixes
- Python 3.7 or higher
- Internet connection
- Download or clone this repository
- Create the environment and install dependencies with uv:
uv venv
uv pip install -r requirements.txt
source .venv/bin/activate # or prefix commands with: uv runFollow these steps in order:
# Step 1: Scrape papers from IEEE VIS 2026 website
python3 vis_paper_tracker.py --scrape
# Step 2: Add papers to tracking system (use the file created in step 1)
python3 vis_paper_tracker.py --add-papers vis2026_papers.json
# Step 3: Search for papers online (paced at one arXiv request per 5 seconds)
python3 vis_paper_tracker.py --update
# Step 4: See results
python3 vis_paper_tracker.py --reportOnce you've done the initial setup, just run:
# Check for newly available papers
python3 vis_paper_tracker.py --update --reportThe tool uses a two-stage data system:
vis2026_papers.json- Static list of papers from VIS 2026 website- Created by:
--scrapecommand - Contains: titles, authors, sessions, paper types
- Used once to populate the tracking system
paper_tracking_data_2026/paper_index.json- Live database with search resultspaper_tracking_data_2026/paper_availability.csv- Spreadsheet export for analysis- Updated by:
--updatecommand - Contains: search status, URLs, abstracts, discovery dates
- Log files - Detailed activity logs (if you use
--log-file)
--scrape → vis2026_papers.json → --add-papers → paper_tracking_data_2026/ → --update → results
↑ ↑ ↑ ↑ ↑ ↑
One-time Seed data Populate Live tracking Search Reports
# Get papers from VIS website and start tracking
python3 vis_paper_tracker.py --scrape
python3 vis_paper_tracker.py --add-papers vis2026_papers.json# Search for papers and see results
python3 vis_paper_tracker.py --update --report
# With detailed logging
python3 vis_paper_tracker.py --update --report --log-file daily_check.log# Default: arXiv only - fast, and the source of nearly all hits
python3 vis_paper_tracker.py --update
# Add Semantic Scholar, queried only for papers arXiv did not have
python3 vis_paper_tracker.py --update --sources arxiv,semantic_scholarSemantic Scholar is opt-in because its unauthenticated API is shared across all callers and rate-limits heavily. In the VIS 2026 run it contributed 11 of 172 finds (6%) while increasing the runtime from minutes to hours, and its hits are landing pages with no downloadable PDF. Worth enabling for an occasional thorough sweep, not for routine updates.
# Fetch the PDFs of papers that were found on arXiv into paper_pdfs_2026/
python3 vis_paper_tracker.py --download-pdfs
# Choose a different destination
python3 vis_paper_tracker.py --download-pdfs --pdf-dir ~/Papers/vis2026Files are named Paper_Title_arXivID.pdf, and papers already on disk are skipped, so it is
safe to re-run after each --update. Papers found only on Semantic Scholar are counted as
"without an arXiv link" and not downloaded: those links are publisher landing pages with no
predictable (or freely accessible) PDF.
# Fix formatting issues in author names
python3 vis_paper_tracker.py --clean-authors
# Re-scrape if new papers are added to VIS website
python3 vis_paper_tracker.py --scrape
# Note: This overwrites vis2026_papers.json with fresh data# The tracker defaults to VIS 2026; any year with a papers list page works
python3 vis_paper_tracker.py --year 2027 --scrape
python3 vis_paper_tracker.py --year 2027 --add-papers vis2027_papers.json --update --report
# Each year keeps its own database: paper_tracking_data_<year>/
# (VIS 2025 data stays in the original paper_tracking_data/ directory)
python3 vis_paper_tracker.py --year 2025 --report
python3 analyze_authors.py --year 2025 --report-only# Use custom data directory
python3 vis_paper_tracker.py --data-dir my_tracking_data --update
# Enable debug logging
python3 vis_paper_tracker.py --update --debug
# Just generate a report (no searching)
python3 vis_paper_tracker.py --report{
"title": "Paper Title",
"authors": "Author1, Author2, Author3",
"session": "Session Name",
"award": "Award Type",
"paper_type": "full",
"venue": "TVCG",
"location": "Boston"
}- full: Main conference papers (including TVCG and CG&A papers presented at VIS)
- short: Shorter research contributions
- unknown: When type cannot be determined
The venue field records the journal tag shown next to a title (TVCG, CG&A, empty for
conference-only papers), and location records the presentation site listed by the conference
(e.g. Boston, Tianjin, Paris, Pre-recorded talk).
Note: Posters are automatically excluded from tracking as they are typically not published as citable papers.
vis2026_papers.json: Scraped paper list from VIS 2026 websitepaper_pdfs_2026/: Downloaded PDFs (only with--download-pdfs; git-ignored)paper_tracking_data_2026/paper_index.json: Persistent tracking databasepaper_tracking_data_2026/paper_availability.csv: Export for data analysis- Log files (optional): Detailed status reports and statistics
The paper lists and tracking databases are version controlled - they are small, and keeping
them makes each year's results a historical record even after the conference website changes.
Downloaded PDFs and analysis outputs are git-ignored: re-fetchable with --download-pdfs
and analyze_authors.py respectively.
After setup, your project directory will look like this:
vis-paper-tracker/
├── vis_paper_tracker.py # Main script
├── analyze_authors.py # Author analysis and visualization script
├── vis2026_papers.json # Seed data (created by --scrape)
├── paper_pdfs_2026/ # Downloaded PDFs (optional, git-ignored)
├── paper_tracking_data_2026/ # Live tracking database for VIS 2026
├── paper_tracking_data/ # Live tracking database for VIS 2025 (legacy name)
│ ├── paper_index.json # Detailed search results
│ └── paper_availability.csv # Spreadsheet export
├── README.md # This documentation
├── requirements.txt # Python dependencies
├── LICENSE # MIT license
└── .gitignore # Git ignore rules
- Web Scraping: Fetches papers from IEEE VIS 2026 website with session names and paper types (excludes posters)
- Author Cleaning: Removes double commas and normalizes author lists
- Multi-Source Search: Searches arXiv first, falling back to Semantic Scholar only when enabled with
--sources - Fuzzy Matching: Uses 70% threshold word overlap for title matching
- Discovery Tracking: Records first discovery dates and maintains search history
- Progress Saving: Automatically saves progress every 10 papers to prevent data loss
- Abstract Storage: Keeps the longest abstract found across sources
- Progress Logging: Optional detailed logging with paper type and session statistics
The tracker includes analysis scripts to explore patterns in the collected data:
Analyze authorship patterns with the included analyze_authors.py script:
# Basic author analysis
python3 analyze_authors.py
# Show distribution statistics
python3 analyze_authors.py --stats-only
# Generate histogram (requires matplotlib)
uv pip install matplotlib numpy
python3 analyze_authors.py --histogram
# Top 10 authors with interactive plot
python3 analyze_authors.py --top-n 10 --histogram --show-plotSample Output:
TOP AUTHORS BY PAPER COUNT
- Kwan-Liu Ma: 8 papers (7 full, 1 short) - 24 collaborators
- Huamin Qu: 8 papers (7 full, 1 short) - 35 collaborators
- Cindy Xiong Bearfield: 8 papers (5 full, 3 short) - 31 collaborators
PAPER COUNT DISTRIBUTION
- 1 paper: 886 authors (82.1%)
- 2 papers: 131 authors (12.1%)
- 3+ papers: 62 authors (5.8%)
Outputs:
- Console report with top authors and collaboration statistics
author_analysis.csv- Detailed spreadsheet with all authorsauthor_histogram.png- Visual distribution chart
# Analysis script options
python3 analyze_authors.py --help
# Key parameters:
--top-n 20 # Number of top authors to show
--histogram # Generate visual histogram
--stats-only # Show statistics without full report
--csv filename.csv # Custom CSV output filename
--hist-file plot.png # Custom histogram filename
--show-plot # Display plot interactivelyThe tracking data is stored in standard JSON/CSV formats, making it easy to:
- Import into R, Python pandas, or Excel for custom analysis
- Create visualizations with your preferred tools
- Analyze collaboration networks, temporal patterns, or subject areas
- Compare productivity across institutions or research groups
Error: "No such file or directory"
# Make sure you use the correct filename
ls *.json # See what files exist
python3 vis_paper_tracker.py --add-papers vis2026_papers.json # Use existing fileError: "ModuleNotFoundError"
# Install missing dependencies into the project environment
uv pip install -r requirements.txtSlow performance during updates
- This is normal! The tool waits 5 seconds between arXiv requests to respect their rate limits
- A full update of 287 papers takes ~25-30 minutes with the default arXiv-only search
- Adding
--sources arxiv,semantic_scholarcan stretch that to several hours - Progress is saved every 10 papers, so interruptions won't lose much work
- You'll see progress counters like "Checking (45/287): ..." showing current status
Lots of "429" errors in the log
- arXiv is rate limiting; the tool backs off and retries automatically, and papers whose
searches could not be completed are marked
errorrather thannot_found - Re-running
--updateretries botherrorandnot_foundpapers, so nothing is lost - Sustained 429s mean an IP-level cooldown: wait ~15 minutes before retrying
No papers found
- Check your internet connection
- Try running with debug logging:
--debug - Some papers may not be available on arXiv or Semantic Scholar yet
Double commas in author names
# Clean up existing data
python3 vis_paper_tracker.py --clean-authorsGarbled characters in paper titles (like âThey Arenât Built For Meâ)
- This is from encoding issues in older scraped data
- Re-scrape to get clean data:
python3 vis_paper_tracker.py --scrape
rm -rf paper_tracking_data_2026/
python3 vis_paper_tracker.py --add-papers vis2026_papers.jsonPapers show "Added" but report shows 0 papers
- This was a bug that has been fixed
- If you encounter this, update to the latest version of the code
If you encounter issues:
- Run with debug logging:
python3 vis_paper_tracker.py --debug --update - Check the log file for detailed error messages
- Verify your Python version:
python3 --version(needs 3.7+)
- arXiv API: No authentication required, 15-second timeout
- Semantic Scholar: No API key needed, returns top 5 results (opt-in; heavily rate limited)
- IEEE VIS 2026: Direct HTML scraping, no authentication needed
- Rate Limiting: Per-host spacing (5 s for arXiv, 3 s for Semantic Scholar) with exponential
backoff and up to 4 retries on HTTP 429/5xx, honouring
Retry-After
Contributions are welcome! Please feel free to submit issues and pull requests.
This project is licensed under the MIT License - see the LICENSE file for details.
Claudio Silva & Claude
- IEEE VIS 2026 conference organizers
- arXiv and Semantic Scholar for their open APIs