Free, real-time push notifications when Global Entry appointment slots open up at your enrollment center.
Pick your enrollment center once; get a push within ~1 minute when a slot opens (ntfy and/or browser/PWA). Free, open source (MIT), no signup — your ntfy topic and/or this device only. Stops after 30 alerts or 30 days.
- Optional: ntfy on iOS or Android — create a unique topic.
- getglobalentryalerts.com — pick center, ntfy and/or This device, submit.
This device — allow notifications when prompted:
- iPhone / iPad (iOS 16.4+, Safari) — Share → Add to Home Screen, then open from that icon. Required; Safari does not support push in a normal tab.
- Android (Chrome) — allow in the browser tab. Optional: ⋮ → Install app or Add to Home screen.
- Mac (Safari 16+, macOS 13+) — allow in Safari; works in a regular tab.
- Desktop (Chrome, Edge, Firefox) — allow in the browser; works in a regular tab.
We check CBP's public scheduler every minute for your center. If a slot appears before your latest date, you get ntfy and/or web push; then the subscription ends after 30 alerts or 30 days.
For developers
Go · Lambda · MongoDB Atlas · ntfy.sh · Web Push (VAPID) · CDK. Needs AWS CLI, CDK, Docker.
git clone https://github.com/arun0009/global-entry-appointment.git && cd global-entry-appointment
# export AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_REGION, AWS_ACCOUNTenv.json: MONGODB_PASSWORD, RECAPTCHA_SECRET_KEY, optional VAPID keys (npx web-push generate-vapid-keys). VAPID_SUBJECT = bare email, not mailto:… (Apple 403 otherwise).
MongoDB indexes
db.subscriptions.createIndex({ location: 1, ntfyTopic: 1 }, { unique: true, partialFilterExpression: { ntfyTopic: { $gt: "" } } });
db.subscriptions.createIndex({ location: 1, "webPushSubscriptions.endpoint": 1 }, { unique: true, partialFilterExpression: { "webPushSubscriptions.0": { $exists: true } } });
db.subscriptions.createIndex({ lastNotifiedAt: 1, latestDate: 1 });
db.subscriptions.createIndex({ createdAt: 1 });
db.subscriptions.createIndex({ latestDate: 1 });Drop a legacy non-partial unique on (location, ntfyTopic) if present.
make develop · make invoke · make test · make css · make deploy · make destroy
make css after Tailwind/HTML edits (npm install once). reCAPTCHA: register getglobalentryalerts.com and *.github.io.
Free to use. If this saved you a refresh war, a coffee or a star is always welcome.
MIT © 2026 Arun Gopalpuri