Every month the US Department of State publishes the Visa Bulletin — the official chart that tells employment- and family-based immigrant applicants whether their priority date is current. For years, the practical workflow for a lot of people (including me) looked like this: open a PDF, squint at a table, paste a number into a spreadsheet, argue with friends about whether “C” means what they think it means.
I got tired of that. So I built a small data site and an open dataset that re-publishes the bulletin in a form you can actually query.
Site: yiminshuju.com
Full bulletin tables: yiminshuju.com/paiqi
Open data: github.com/xjokerabab/visa-bulletin-cn
What the site is (and isn’t)
yiminshuju.com aggregates:
- US green card Visa Bulletin dates (employment EB-1–EB-5 and family F1–F4)
- USCIS processing times by form and service center
- Canada Express Entry draw scores (where published)
- A light multi-country policy index of public numbers
It is data only — not a law firm, not a consultancy, not “we’ll get you a green card.” Every figure is tied back to an official source and stamped with an update date. If the government didn’t publish a field, the cell stays empty. No interpolated “estimates” dressed up as facts.
The part that usually confuses people: Table A vs Table B
The bulletin has two charts that look almost identical and mean very different things:
| Chart | Official name | Practical meaning |
|---|---|---|
| Table A | Final Action Dates | When a visa number can actually be used (final adjudication rhythm) |
| Table B | Dates for Filing | When USCIS may allow you to file adjustment of status early — only if USCIS says it is using Chart B that month |
A priority date that is “current” on Table B is not the same as being ready for final action on Table A. Mixing them up is one of the most common ways people misread the bulletin. The paiqi page keeps A and B side by side for China / Worldwide / India so you can compare without flipping PDFs.
"C" generally means Current (no backlog for that category that month). Treat it as a status code, not a calendar date.
Why open data instead of another blog post
Screenshots rot. PDFs get replaced. Chat threads lose the source link.
The companion repo visa-bulletin-cn stores structured bulletin snapshots so you can:
- Diff month-over-month movement by category and chargeability
- Build your own alerts (“EB-2 China Table A moved”)
- Cite a stable URL instead of “see the screenshot I sent last Tuesday”
Sync happens after each new DOS bulletin drop; the site and the repo are meant to stay in step. Always treat the Department of State / USCIS originals as authoritative if anything disagrees.
A 30-second read of your own case
- Confirm category and country of chargeability (e.g. China-mainland birth, EB-2).
- Look at Table A — is your priority date earlier than the final action cutoff?
- Look at Table B — only relevant if USCIS is accepting Chart B filings that month.
- Separately check USCIS processing times for the form you actually filed (I-140, I-485, etc.). Processing time ≠ visa availability.
That’s it. No score, no “approval probability.”
Stack notes (for the curious)
Nothing exotic: scrape/parse official bulletin text into structured rows, render on a static-ish front end, keep the historical series in git. The interesting product decision wasn’t the framework — it was refusing to invent missing numbers. Empty beats estimated when you’re dealing with immigration cutoffs.
If you maintain your own pipeline, the repo is the cleaner input than OCR on a PDF.
Links
- Home / overview: https://yiminshuju.com
- Full Visa Bulletin tables: https://yiminshuju.com/paiqi/
- Open bulletin data: https://github.com/xjokerabab/visa-bulletin-cn
Caveats
This is a convenience layer over public government data. It is not legal advice, not a prediction of your case, and not a substitute for the official Visa Bulletin or USCIS notices. If you need a strategy call, talk to a licensed attorney — not a chart.
Questions, corrections, or “this category looks wrong” issues are welcome on the GitHub repo.
Top comments (0)